`
izuoyan
  • 浏览: 9221765 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

deplate(Viki) 全面定制

阅读更多

最近拿 deplate 重新制作了个人主页(www.chenshuo.com),其间对 deplate 0.7.3 做了不少改动,记录在这里,备查。头一次用 ruby,可能方法比较笨拙,见笑。

1. 禁用符号替换。根据 deplate 手册第 9.10 节,它会自动把 ->、<=、!= 等等符号替换为单个字符,而这些符号在程序代码中经常出现,不能替换。这个工作由 fmt/hrml.rb 的 format_symbol(invoker, text) 函数负责,修改办法是:

class Deplate::Formatter::HTML < Deplate::Formatter
def format_symbol(invoker, text)
case text
# 已拿掉这里一截代码
when "+++", "###", "???", "!!!"
m = plain_text(text)
return %{<span class="marker"><em class="marker">#{m}</em></span>}
# when "<~"
# return ""
# when "~>"
# return ""
# when "<~>"
# return ""
else
return plain_text(text)
end
end
...

2. 禁用引号替换,在默认情况下,deplate 会把 "string" 替换为 “string”,这是我不想要的,修改办法是:

class Deplate::Formatter::HTML < Deplate::Formatter
def doublequote_open(invoker)
'"'
end

def doublequote_close(invoker)
'"'
end

def singlequote_open(invoker)
"'"
end

def singlequote_close(invoker)
"'"
end
...

3. 允许给标题设置超链接。修改办法是:

class Deplate::Formatter::HTML < Deplate::Formatter
def format_heading(invoker)
l = format_label(invoker, nil, nil, false)
level = invoker.level
args = invoker.args
elt = invoker.elt
html_args = invoker.html_args || ''
id = invoker.get_id
if consume_label(id)
html_args += %{ id="#{id}"}
end
if level > 0 and level <= 6
hd = "h#{level}"
if invoker.plain_caption?
ls = ""
else
ls = invoker.level_as_string + "&nbsp;"
end
url = invoker.args["url"]
if url
%{\n<#{hd}#{html_args}>#{l}#{ls}<a href="#{url}">#{elt}</a></#{hd}>\n}
else
%{\n<#{hd}#{html_args}>#{l}#{ls}#{elt}</#{hd}>\n}
end
else
l += format_label(invoker, :string, [id]) if id
"\n#{l}#{elt}"
end
end

使用办法:

** 《C# Primer 中文版》
#OPT: caption="C# Primer" id=csprimer url=http://jjhou.csdn.net/jjtbooks-csprimer.htm

4. 左侧 SideBar 中区分章与节,用不同的 class,在css中修改格式。修改办法:

class Deplate::Core
def tabbar_auto_entries(tabbar, idx, style, depth, inactivedepth, tags, tabsize)
if @variables["tabBarHomeName"]
s = idx == 0 ? "#{style}Active" : "#{style}Inactive"
title = @variables["tabBarHomeName"]
file = @formatter.navbar_guess_file_name(0, idx, :navbar)
tabbar << tabbar_entry(%{<a class="tabBarEntry" href="#{file}">#{title}</a>}, tags, s, tabsize)
end

each_heading(depth) do |hd, title|
lstr = hd.level_as_string
lnr = hd.top_heading_idx
file = hd.output_file_name(:basename => true)
if hd.level > 1
anchor = hd.args[:id] || hd.label.first
if anchor
file = [file, "#", anchor].join
end
end

if top_heading_by_idx(idx) == hd.top_heading
s = "#{style}" # Active
else
s = "#{style}" # Inactive
if hd.level > inactivedepth
next
end
end

if hd.level == 1
tabbar << tabbar_entry(%{<a href="#{file}">#{title}</a>}, tags, s, tabsize)
else
s = [s, "Sec"].join
tabbar << tabbar_entry(%{<a href="#{file}">#{title}</a>}, tags, s, tabsize)
end
end
end
...

5. 允许按节(section)分割文件。修改办法:

class Deplate::Core
# Set the current top heading.
# heading:: Heading object
# text:: The output filename base
def set_top_heading(heading, text)
if heading.level == 1|| heading.level == 2
fname = nil
下同

class Deplate::Element::Heading < Deplate::Element
def is_top_heading?
@level == 1 || @level == 2
end
...

6. 自动根据输入文件名设置输出文件名。修改办法:

class Deplate::Element::Heading < Deplate::Element
def register_heading
sc = @args['id'] || @args['shortcaption'] || File.basename(@deplate.current_source, ".*")
log(['Register heading', level_as_string, sc], :debug)
@deplate.set_top_heading(self, sc)
end
end

例如输入文件是 articles.txt,输出文件自动为 articles.html,要求每个章为一个文件:以下是 articles.txt 示例

* 文章

- 部分文章为 PDF 格式,需要 Acrobat Reader,这些文章通常更正式一些。
[[http://www.adobe.com/products/acrobat/readstep2.html][{img w=88 h=31:get_adobe_reader.png}]*]

*** 2006 年

** zlib 在 Visual Studio 2005 下编译失败的解决办法
#OPT: noList! url=zlib_vs2005.html

** 向 Word 和 PowerPoint 插入 LaTeX 公式的小工具
#OPT: id=eqLaTeX url=http://blog.csdn.net/Solstice/archive/2006/01/28/589643.aspx
- 通过拖拽方式向 Word 和 PowerPoint 插入 LaTeX 公式图片。(2006 年 1 月)

分享到:
评论

相关推荐

    scaling viki

    根据给定文件的信息,本文将详细阐述知识点,重点围绕“Scaling Viki”主题,即开放团队在Web开发中如何应对高并发请求的问题。 首先,“Scaling Viki”标题暗示了该文是关于扩展或扩展(scaling)技术的文章,而...

    VIKI-TTS-Voice_tts_

    【VIKI-TTS-Voice_tts_】是一个C#语音合成功能的示例项目,主要利用了微软的Text-to-Speech(TTS)库。这个库为开发者提供了将文本转化为自然语音的能力,使得应用程序能够“朗读”出屏幕上的文字,增强了人机交互...

    viki:Viki - 可视化维基平台

    Viki是一个可视化维基平台,它提供了一个便捷的方式来创建、编辑和分享知识内容。作为一个基于JavaScript的技术实现,Viki利用了Web技术的强大力量,为用户提供了丰富的交互性和灵活性。在JavaScript的世界里,这样...

    Viki视频播放器

    源码VKVideoPlayer,VKVideoPlayer是一个经过严格测试的Viki视频播放器,是一个可以处理视频播放的所有技术细节的简单插件。默认情况下,该库使用AVPlayer和AVPlayerItem类在VKVideoPlayerView上播放视频。它是通过...

    deplate:deplate是用于将类似Wiki的标记转换为乳胶,docbook,html或“ html-slides”的工具。 它支持嵌入式LaTeX代码,脚注,引文,参考书目,自动生成索引等

    对于熟悉Ruby的开发者来说,定制和扩展Deplate的功能是一项相对轻松的任务。 7. **DocBook和Rdoc**: DocBook是一种XML格式,广泛用于技术文档的编写,而Rdoc则是Ruby项目的标准文档生成工具。Deplate能够将Wiki...

    most:Viki.com的更多字幕(非官方)

    非官方的chrome扩展名,用于在viki.com上显示更多字幕。 该代码主要受chrome字幕和subber的启发,但更小巧,旨在在viki.com上使用。 它也被评论并且是开源的。 更像。 在“工具”-&gt;“扩展”(启用开发人员模式)下...

    viki_vim:Vim的个人Wiki

    1. **自定义配置**:修改`~/.viki.vimrc`文件,定制Viki_vim的行为,如设置默认主题、编辑器选项等。 2. **使用Git**:将笔记目录添加到Git仓库,利用Git进行版本控制和备份。 3. **与其他Vim插件结合**:结合其他...

    viki-downloader:用于批量下载字幕和视频文件的PythonSelenium脚本

    viki-下载器用于批量下载字幕和视频文件的PythonSelenium脚本需要安装python 3才能运行文件。 还需要将ffmpeg安装在系统范围内或与脚本放置在同一文件夹中。 可以使用-&gt; python -m pip install -r requirements.txt...

    开源wiki系统 open-forum-server

    **开源wiki系统 open-forum-server详解** 开源wiki系统open-forum-server是一款基于Java技术构建的高效、易用的在线知识管理平台。它借鉴了维基百科和百度百科的成功模式,致力于提供一个协作编辑、分享和存储知识...

    SCP Wiki Tools-crx插件

    语言:English 将各种usercripts链接在一起为scp foundation网站 一组用户脚本,以改变并希望提高浏览SCP Wiki的体验。所有由Crayne撰写的代码。默许可以打开或关闭所有功能,但在任何更改都需要页面重新加载以生效。...

    火星研究的近期进展 (1998年)

    本文简短回顾了 Mariner 4宇宙飞船(1965),Mariner 6和7(1969),Mariner 9(1971)和Viki眼一和2(1976)等的探测成果。火星探路者飞船是海盗2号以后的第一个火星着陆器,它于1996年下半年发射升空,于1997年,月14日在火星...

    wiki:Kobol官​​方Wiki

    Kobol官​​方Wiki ...模板 素材: : 扩大 Lightgallery: : 如何在本地运行此Wiki 安装mkdocs $ pip3 install mkdocs 安装材料模板 $ pip3 install mkdocs-material 安装git-revision插件 pip3 install mkdocs-...

    经典美文-早晨的美文经典美文.docx

    - **良好清晨习惯的重要性**:无论是Viki的匆忙、Amy的家庭重心、Jack的高度计划性还是Mel的全面成长,不同的清晨习惯反映了不同的人生观和价值观。 - **个人发展与清晨习惯之间的联系**:良好的清晨习惯不仅能够...

    MoST Subtitles-crx插件

    非官方的chrome扩展名,用于在viki.com上显示更多字幕。 该代码主要受chrome字幕和subber的启发,… 非官方的chrome扩展名,用于在viki.com上显示更多字幕。 该代码主要受chrome字幕和subber的启发,但更小巧,旨在...

    MoST字幕「MoST Subtitles」-crx插件

    非官方的Chrome扩展在viki.com上显示更多的字幕。 代码很大程度上是由铬字幕和黑客启发的,... 非官方的chrome扩展名,用于在viki.com上显示更多字幕。 该代码主要受chrome字幕和subber的启发,但更小巧,旨在在viki...

    埃勒小镇的人间美梦

    6. 人际关系:主角与民宿主人、当地少年苏伊以及Viki(金毛犬)的互动体现了人与人之间的简单快乐和相互关怀,展现了旅行中的友谊和文化交流。 7. 动物与人类关系:苏伊每天早上带Viki去山上跑步,并喂食其他流浪狗...

    维基百科:来自VNote笔记本的Markdown中的简单Wiki页面

    使用Viki,我们只需将几个简单文件与Markdown文件放在一起即可生成一个精美的网站。 无需其他软件或服务器端处理。 与VNote结合使用,Viki可以将您的笔记本无缝显示为博客网站。 有关更多信息,请访问 ,它也是由...

    miniDLNA 实现流媒体播放

    media_dir=P,/home/viki/DLNA/Picture media_dir=V,/home/viki/DLNA/Video friendly_name=DLNA_Ubuntu ``` 这里的`A`代表音频(Audio)、`P`代表图片(Picture)、`V`代表视频(Video)。`friendly_name`用于定义...

    USB转HDMI 驱动 win7

    USB转HDMI 驱动 win7

    CheapCast虚拟Chromecast v0.4.6-ALPHA

    * Improved compatability with Chromecast-enabled apps (RedBull TV, Viki, Revision3 etc.) 【编辑点评】 这货其实就是将你的Android设备虚拟成Chromecast,虽然看上去和Chromecast没什么太大关系,不过对于有...

Global site tag (gtag.js) - Google Analytics