Docset文档制作教程

前言

什么是Dash

  • 面向程序员的文档库(Mac)
  • 代码片段管理工具

这是强烈推荐给每天在各种API文档中摸爬滚打的程序员们的神器。

为什么要自己制作文档

  • 官方的源中没有相关文档
  • 文档在离线下体验更好

最近在研究 Phantomjs ,相关的文档比较缺乏,主要是看官网的教程及API等,遇到一个问题就是家里的网络访问国外的站点太慢,体验太差。可能是因为技术较新的原因,发现Dash中并没有相关文档,给Dash作者反馈后,得到了如下的答复:

I‘ve recorded your vote towards a PhantomJS docset. Currently, this docset has 11 votes. Please note that I don‘t generate docsets unless more users ask for them.

You can, however, generate your own docsets by following the instructions at http://kapeli.com/docsets.

呵呵,看来只有自己动手,丰衣足食了。


制作教程

前提

  1. Mac系统;需要安装 python 环境,第三方库 bs4
  2. 原始的文档在网站上(官网上所谓的 7. Any HTML Documentation),例如本例http://phantomjs.org/

生成站点镜像

cd ~ && wget -m http://phantomjs.org/

本例中使用 wget 的 --mirror(-m) 选项建立一个镜像站点,会把站点的各层目录、文件(图片、样式、html等)保存到本地,这些文件就是要导入到Dash的最原始的文件。

文本处理

经过上一步建立到本地的镜像文件里面很可能使用的是绝对路径(例如<a href="http://phantomjs.org/release-names.html"),想要离线索引,就必须先转换成相对路径(注意不同的层级关系),建议先进行简单的分析,然后用脚本进行批处理。

这一步是比较重要的一步,会影响到文档的质量,如果处理不好很可能某些链接由于路径不对而看不了。

例如我根据不同的目录层级关系,对html里面的域名进行不同层级的替换:

for dir in `ls -d ~/phantomjs.org/api/*/`; do sed -i ‘s/http:..phantomjs.org/..\/..\//g‘ $dir/*.html; for sub in `ls -d $dir*/`; do sed -i ‘s/http:..phantomjs.org/..\/..\/..\//g‘ $sub*.html; done done

拷贝文档

Dash要求相求文档文件要放在 *.docset 目录下,可以按照默认的目录层级:

mkdir -p Phantomjs.docset/Contents/Resources/Documents/ mv ~/phantomjs.org/* Phantomjs.docset/Contents/Resources/Documents/

创建Info.plist文件

里面可以定义一些配置信息,例如是否允许Js等

touch Phantomjs.docset/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleIdentifier</key> <string>Phantomjs</string> <key>CFBundleName</key> <string>Phantomjs</string> <key>DocSetPlatformFamily</key> <string>Phantomjs</string> <key>isDashDocset</key> <true/> </dict> </plist>

生成索引

  • 先创建一个SQLite数据库文件,并生成一张表。
sqlite3 Phantomjs.docset/Contents/Resources/docSet.dsidx CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT); .exit
  • 用 python 脚本填充索引

这一步也是比较重要的一步,也是最复杂的一步。数据库文件的索引对应Dash文档的目录(或者索引),质量高的索引可以表达出很丰富层级关系以及分类,例如函数、类、熟悉、模块、分类、条目、命令等。

简单起见,这里只填充了官网首页的4个‘分类’(Category),使用 python 实现,具体如何填充需要根据文档实际情况调整脚本:

#!/usr/local/bin/python import os, re, sqlite3 from bs4 import BeautifulSoup, NavigableString, Tag

db = sqlite3.connect(‘Phantomjs.docset/Contents/Resources/docSet.dsidx‘)
cur = db.cursor() try:
	cur.execute(‘DROP TABLE searchIndex;‘)
except:
	pass

cur.execute(‘CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);‘)
cur.execute(‘CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);‘)

docpath = ‘Phantomjs.docset/Contents/Resources/Documents‘ page = open(os.path.join(docpath,‘index.html‘)).read()
soup = BeautifulSoup(page) any = re.compile(‘^[a-z]{3,20}$|documentation.html|faq.html‘) for tag in soup.find_all(‘a‘, {‘href‘:any}):
    name = tag.text.strip() if len(name) > 0:
        path = tag.attrs[‘href‘].strip() if path.split(‘#‘)[0] not in (‘index.html‘, ‘index.htm‘, ‘bookindex.html‘):
            cur.execute(‘INSERT OR IGNORE INTO searchIndex(name, type, path) VALUES (?,?,?)‘, (name, ‘Category‘, path))
            print ‘name: %s, path: %s‘ % (name, path)

db.commit()
db.close()

添加icon及其他注释说明等

制作一个 logo 后(从官网logo截一张大图),导出两种尺寸,16x16、 32x32

touch Phantomjs.docset/icon.png touch Phantomjs.docset/icon@2x.png

此时,双击Phantomjs.docset即可导入到 Dash 中了,还可以在偏好设置里面刷新文档内容,如果有修改 logo 需要先删除文档再添加进来。


共享到社区(github)

通过互联网贡献一点自己的努力吧。


参考

该文只是记录了自己在制作文档过程中的基本思路,请大家一定仔细参考官网的教程:

时间: 2024-10-01 18:28:38

Docset文档制作教程的相关文章

在Mac电脑上为Dash制作docSet文档

Dash是mac上的一款查看API的工具,里面可以直接下载大部分的API文档,但是有时候我们如果想把自己手里已有的文档也集成到Dash中,就需要我们自己动手了,其实Dash官方也有教程如何制作docSet的,地址是:http://kapeli.com/docsets  (7. Any HTML Documentation) , 本文是我照着官方的教程,把流程步骤一步一步的记录下来的,大家可以参考一下. Dash所需的文档都是docSet文件,其实docSet文件就是一个文件夹而已,这个文件夹里面

强大的矢量图形库:Raphael JS 中文帮助文档及教程

Raphael 是一个用于在网页中绘制矢量图形的 Javascript 库.它使用 SVG W3C 推荐标准和 VML 作为创建图形的基础,你可以通过 JavaScript 操作 DOM 来轻松创建出各种复杂的柱状图.饼图.曲线图等各种图表,还可以绘制任意形状的图形,可以进行图表或图像的裁剪和旋转等复杂操作 Rapha?l 是跨浏览器的矢量图形库,目前支持的浏览器包括: Firefox 3.0+,Safari 3.0+,Chrome 5.0+,Opera 9.5+ 以及 Internet Exp

.Net程序帮助文档制作

一,准备工作 1,首先介绍一款VS的代码注释插件GhostDoc 你也许认为我们在代码中敲入///就能自动生成xml注释,但这种注释是没有说明文字的.而GhostDoc可以生成一些简单的说明文字,如果你的函数命名很规范的话,它生成的函数描述会很准确.并且它还能生成一些参数类型的附加说明.在你想生成代码注释的地方按下Ctrl+Shift+D,它就会自动帮你生成xml注释,非常方便.下载地址:http://submain.com/products/ghostdoc.aspx GhostDoc毕竟是个

Django文档制作(Windows XP)

大家好,我是成都ld,最近学习了下python和Django.我使用的是pydev+eclipse的组合进行的开发,当然,刚开始学习,由于python的方法返回值是没有标明的,所以开发变得有些蛋疼,不得不去查看方法的源码,不知道其他朋友是如何干的~~ 言归正传,今天主要介绍Django文档制作,网上说了很多方法,其实我也只是摸着石头过河,完全自己琢磨,走一步看一步,也不知道对不对,文档做出来了,暂时就这样吧~~. 第一步:首先我下载的是django的1.6.5的版本,django的目录里面有个d

传智播客C/C++各种开发环境搭建视频工具文档免费教程

传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范.火速前来下载吧 所谓"工欲善其事,必先利其器". 欲学C/C++,必先搭建好开发环境,欲成为C/C++高手,必先跑起来helloworld! C/C++ IDE仅仅是工具--剑,C/C++语言就是剑法.欲雄霸天下,必须精通各种剑,精通各路剑法.请大家认真关注http://c.itcast.cn最新技术视频. (有图有

最专业逻辑图和最专业项目文档制作实战讲解

1个小时彻底学会改变运维人员不被待见的本领 提高运维人员逼格和软实力-专业逻辑图和项目文档制作实战 逻辑图和项目文档制作是运维人员最核心的软实力! 逻辑图和项目文档制作老男孩教育对学员的硬性能力要求(一出手就要专业规范). 购买后请给力评价,评价后,联系飞雪帮你拉入,有讲课作者为你答疑解惑! linux运维画图文档排版专业交流群 手把手带你快速做[最专业]的项目文档实战 http://edu.51cto.com/course/course_id-4992.html 手把手带你快速画[最专业]的逻

help文档制作 chm

程序中的help文档制作 所用工具:HTML Help Workshop 文件包括:各个html文档,帮助页面的具体内容 hhc文档:help的目录文件 hhk文档:help的索引文件 MAP文件夹中放 图片文件 hhp文件打开可以进行编辑

pdf转换成word文档转换器教程

pdf转换成word文档转换器教程 如何将PDF转换成word?这是很多人都会碰到的一个问题,有的人找不到对的方法, 曾经花费了大量的时间去把PDF转换成word,要知道PDF上可能还有图片内容,转换需要将图片一同转换,有的方式转换不彻底,有的出现错误信息等等. 根据经验总结,也为了大家少走弯路,小编推荐一个快速有效的好方法,那就是迅捷pdf转换成word转换器.真的可以大大节省时间,真正提高你的工作效率,不 用再为PDF转换成word这种问题也烦恼,在这里与大家分享一下! PDF格式转换器是我

chm开源文档制作

作为开发人员,API文档是非常关键的^_^,但是很多时候官方提供的文档是html的docs,不方便于携带查询,本章主要介绍chm文档的制作方法. 使用jd2chm制作chm文档 安装之前必须先安装 htmlhelp.exe,将jd2chm.exe复制到docs文档下的index.html入口文件同级目录下,然后进入cmd命令行到该目录下运行jd2chm.exe即可(也可以直接双击运行java2chm.exe,但是这样的话如果中途出错将会闪退,不好排查错误),成功后,即在当前目录下生成*.chm.