前言

什么是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.

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

制作教程

前提

Mac系统;需要安装 python 环境,第三方库 bs4

原始的文档在网站上(官网上所谓的 7. Any HTML Documentation),例如本例http://phantomjs.org/

生成站点镜像

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

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

文本处理

经过上一步建立到本地的镜像文件里面很可能使用的是绝对路径(例如

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

例如我根据不同的目录层级关系,对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"?> CFBundleIdentifierPhantomjsCFBundleNamePhantomjsDocSetPlatformFamilyPhantomjsisDashDocset

生成索引

先创建一个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)

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

参考

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

java中文文档docset_Docset文档制作教程相关推荐

  1. Java中如何使用帮助文档(API)

    Java中如何使用帮助文档(API) 1:打开帮助文档 2:点击 显示,找到 索引,看到 输入框 3:知道你要找谁?以Scanner举例 4:在输入框里面输入Scanner,然后回车 5:第一步:看包 ...

  2. aspose java_在Java中使用Aspose对文档操作示例

    Aspose简介 Aspose是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose可以支持Doc,Docx,PDF,Excel 等格式的文件处理.我们可以通过使用Aspose生成. ...

  3. java中两个xml文件内容拼接_比较Java中2个XML文档的最佳方法

    慕丝7291255 听起来像是XMLUnit的工作http://www.xmlunit.org/https://github.com/xmlunit例子:public class SomeTest e ...

  4. java填充wordxml格式,java xml转成word文档格式

    xml格式如何转换成doc格式文件 通过jodconveter来实现转化(http://www.artofsolving.com/opensource/jodconverter). 这种方式实现起来比 ...

  5. 关于JAVA POI解析WPS docx文档中的table(复杂表格包含单元格横向,纵向的合并)

    关于JAVA POI解析WPS docx文档中的table(复杂表格包含单元格横向,纵向的合并) 首先,关于poi解析表格先阅读一篇他人的博客 使用poi读取word2007(.docx)中的复杂表格 ...

  6. java利用POI替换word文档中的标签

    java利用POI替换word文档中的标签 <dependency><groupId>org.apache.poi</groupId><artifactId& ...

  7. [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)

    [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...

  8. java对office、pdf文档在线预览解析(融合进项目中)

    最近在项目中要做一个文档的预览,在网上搜了好多demo,都可以实现其功能,但是放在自己的项目中有点复杂. 先说明本人的开发环境(win7+tomcat7+maven+svn+myeclipse),接下 ...

  9. java word设置纸张a3,Word中进行设置A3文档纸张大小的操作技巧

    在工作中最常用的纸质文档是A4的,但是我们有时候也需要用一些A3甚至其他纸张的文档,那么,在做文档的时候该如何设置呢?今天,学习啦小编就教大家在Word中进行设置A3文档纸张大小的操作技巧. Word ...

最新文章

  1. 计算机英语考试试题一附答案,计算机英语考试试题一附答案
  2. 数据库备份定期删除程序的开发。
  3. 老雷socket编程之PHP利用socket扩展实现聊天服务
  4. DateTimeToUnix/UnixToDateTime 对接时间转换
  5. json转成类对象转成xml全过程
  6. Python脚本做接口测试,抛弃接口测试工具是否可行?(二)
  7. 数仓如何设置大小写不敏感函数
  8. php写cms,浅谈thinkPHP,国内写CMS利用率最高的框架
  9. 霍夫曼编码及解码实验c语言,Huffman编码与解码_C语言实现
  10. JAVA加密C++解密简单方法
  11. MATLAB显示中文乱码问题 MATLAB2016
  12. 矩阵论比较好的书 和 相关资源
  13. 2017大数据与分析创新峰会9月6-7日在上海宝华万豪酒店拉开帷幕
  14. Inno setup 常用修改技巧
  15. 3D游戏建模制作流程介绍,这么复杂繁琐,小白劝退警告
  16. 单位: Baud,bits/s,波特率
  17. python高级数据分析_Python数据分析-pandas高级操作
  18. bouc wen matlab,基于Matlab磁流变阻尼器Bouc-Wen模型的参数识别
  19. 谈谈目前工作的收获和不足
  20. windows下OpenCV安装教程以及vs2019配置opencv教程

热门文章

  1. c盘怎么清理到最干净?有什么好的清理方法
  2. python截图代码_Python为PPT文件进行截图操作的代码
  3. Flutter优化之将小部件拆分为方法将影响渲染性能
  4. 微信壁纸小程序源码 自动采集小米壁纸
  5. GTA5赚钱最快方法
  6. 【Java学习笔记】API:线程
  7. location对象常见属性
  8. itunes 升级到8.2后出现无法连接91手机助手解决方法
  9. 【Android 逆向】x86 汇编 ( 参考资料 | Intel 官方的文档 | x86 汇编中文文档 | 汇编指令查询器 )
  10. Dede后台验证码不显示解决方法详解