在Mac电脑上为Dash制作docSet文档
Dash是mac上的一款查看API的工具,里面能够直接下载大部分的API文档,可是有时候我们假设想把自己手里已有的文档也集成到Dash中,就须要我们自己动手了,事实上Dash官方也有教程怎样制作docSet的,地址是:http://kapeli.com/docsets (7. Any HTML Documentation)
, 本文是我照着官方的教程,把流程步骤一步一步的记录下来的,大家能够參考一下。
Dash所需的文档都是docSet文件,事实上docSet文件就是一个目录而已,这个目录里面放了终于的html文档,以及依据这些html建好的索引(索引是放在sqlite数据库中),非常easy。
下文我以mysql5.1官方的中文文档(html)为例,来说明怎样依据html文档一步步创建docSet
1. 从mysql的官网上下载5.1的html中文文档,下载地址为: http://downloads.mysql.com/docs/refman-5.1-zh.html-chapter.zip , 下载后解压缩,会发现里面全都是一些html文件,当中有2个须要关注,一个index.html,一个是ix01.html,第一个是首页的文件夹,第二个是全部的索引列表,这2个文件中基本上包含了全部的mysql索引,我们后面就要把这2个文件中的内容按dash要求的格式来建立索引。
2. 建立文件夹。本例中我们创建的文档就叫mysql51吧,所以按下列结构创建文件夹:
mkdir -p mysql51.docset/Contents/Resources/Documents/
3. 把全部的html文档复制到Documents目录中。
4. 在mysql51.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>dashIndexFilePath</key>
<string>index.html</string>
<key>CFBundleIdentifier</key>
<string>mysql51</string>
<key>CFBundleName</key>
<string>mysql51</string>
<key>DocSetPlatformFamily</key>
<string>mysql51</string>
<key>isDashDocset</key>
<true/>
</dict>
</plist>
能够看到这个文件就是一个xml文件,里面都是一对一对的key-string配置项,当中:dashIndexFilePath这个key相应的string是index.html,表示在Dash中点击你的文档后,默认的主页是什么,其它的key表示你创建的文档名字和keyword之类的,我这里都写成了mysql51.
5. 创建sqlite索引。索引文件的位置是:mysql51.docset/Contents/Resources/docSet.dsidx
,Mac电脑已经预装了sqlite,所以直接从命令行进入Resources目录,在命令行中敲:
sqlite3 docSet.dsidx
这样就进入了sqlite数据库,接下来,创建数据表:
CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);
完毕以后敲:.exit 就能够退出sqlite了,这时候你会看到在Resources文件夹下已经有了一个docSet.dsidx文件,兴许我们的索引都会放到刚才创建的searchIndex表中。(在sqlite中输入".exit"就能够退出了,其它命令能够输入".help"查看)
官方教程中事实上在创建表以后还创建了一个unique index,我们这里不能这么搞,后面会讲到,我们的文档一个key有多个索引,所以不能是unique。
6. 接下来就是往searchIndex表中插数据了,SQL模板是:
INSERT OR IGNORE INTO searchIndex(name, type, path) VALUES ('name', 'type', 'path');
当中name就是我们的keyword,比方你想在dash中输入一个select就能够查询,那这个select就是keyword;type是keyword的类型,官方支持的有非常多,什么Class,Function,Keyword等,我这里偷了个懒,所实用Keyword了;path就是我们的详细文件名了,能够是带锚点的形式,如:client-side-scripts.html#mysqladmin。
7. 把全部的索引数据都插入到searchIndex以后,docSet文档就制作好了,直接双击mysql51.docSet就能够导入Dash了。
以下说说怎么通过html文件制作索引并插入到sqlite数据库,Dash的官方教程中提供了非常多脚本,有python,ruby,php,oc,nodejs等,事实上你用什么语言都能够,仅仅要能生成一份sql文件,在sqlite中通过.read 命令导入即可。 让我们用php来尝试一次吧,由于mysql有2个索引文件,一个index.html,一个是ix01.html,我写了2个php的脚本,就是输出一大堆sql:
<?php header('Content-type: text/html; charset=utf-8');
echo "<meta charset='utf-8'/>";
$dom = new DomDocument;
@$dom->loadHTMLFile("/Users/xxx/Desktop/docSet/mysql51.docset/Contents/Resources/Documents/index.html"); foreach ($dom->getElementsByTagName("a") as $a) {
$href = $a->getAttribute("href");
if (substr($href, 0, 1) == ".") continue;
if (substr($href, 0, 5) == "http:") continue; $name = trim($a->nodeValue);
$name = trim(preg_replace("#\s+#", "", preg_replace("#^([A-Z0-9–]+\.)+#", "", $name)));
if (empty($name)) continue;
$class = "Keyword";
$links[$name] = true;
echo "INSERT INTO searchIndex(name, type, path) VALUES ('". $name . "','". $class ."','". $href ."');<br/>";
}
?>
<?php header('Content-type: text/html; charset=utf-8');
echo "<meta charset='utf-8'/>";
$dom = new DomDocument;
@$dom->loadHTMLFile("/Users/bokix/Desktop/docSet/mysql51.docset/Contents/Resources/Documents/ix01.html"); foreach ($dom->getElementsByTagName("dt") as $a) {
$name = $a->nodeValue;
//echo "$name";
//echo "<br/>";
//echo "===================$name <br/>";
$children = $a->childNodes;
if($children->length == 1){
//echo $name . "has no child <br/>";
continue;
}
for($i = 0; $i < $children->length; $i++)
{
$child = $children->item($i);
if($i==0){
$name = trim($child->nodeValue);
if(substr($name,-3) == ","){
$name = substr($name,0,$name->length-3);
}
//$name = mysql_real_escape_string($name);
}
if($child->nodeName !="a"){
//echo "[".$child->nodeValue . "]not a anchor <br/>";
continue;
} $href = $child->getAttribute("href");
$hrefName=trim($child->nodeValue);
$class = "Keyword"; //$hrefName = mysql_real_escape_string($hrefName); echo "INSERT INTO searchIndex(name, type, path) VALUES ('". $name . "','". $class ."','". $href ."');<br/>";
echo "INSERT INTO searchIndex(name, type, path) VALUES ('". $hrefName . "','". $class ."','". $href ."');<br/>"; } } ?>
执行以后屏幕上会输出一堆堆sql语句,分别保存到2个文件中,比方说1.sql和2.sql,这里须要注意下,sqlite对于单引號的转义是在单引號前面再加一个单引號,和其它sql不同,而我们的索引html里面,有些name本身就是带有"\'"(斜杠加单引號)的,所以你要手工改一下,还好就2个地方,在sql文件中搜索:\' , 在单引號前再加一个单引號。
sql文件生成以后,把2个sql文件复制到docSet.dsidx的文件夹,開始导入sqlite吧:
sqlite3 docSet.dsidx
.read 1.sql
.read 2.sql
假设sql正确运行,屏幕上不会输出什么,假设输出一大堆sql语句,那说明sql有问题,翻到第一条,看看什么错误,然后改动下又一次导入,假设你怕导反复了,也能够把searchIndex表清空然后又一次导入。
这是我生成的几个sql样例:
INSERT INTO searchIndex(name, type, path) VALUES ('OCT()','Keyword','functions.html#string-functions');
INSERT INTO searchIndex(name, type, path) VALUES ('字符串函数','Keyword','functions.html#string-functions');
INSERT INTO searchIndex(name, type, path) VALUES ('OCTET_LENGTH()','Keyword','functions.html#string-functions');
INSERT INTO searchIndex(name, type, path) VALUES ('字符串函数','Keyword','functions.html#string-functions');
INSERT INTO searchIndex(name, type, path) VALUES ('ODBC','Keyword','connectors.html#odbc-connector');
INSERT INTO searchIndex(name, type, path) VALUES ('MySQL Connector/ODBC','Keyword','connectors.html#odbc-connector');
INSERT INTO searchIndex(name, type, path) VALUES ('partitioning types','Keyword','partitioning.html#partitioning-types');
INSERT INTO searchIndex(name, type, path) VALUES ('分区类型','Keyword','partitioning.html#partitioning-types');
在Mac电脑上为Dash制作docSet文档的更多相关文章
- 在Mac电脑上为iPhone或iPad录屏的方法
在以前的Mac和iOS版本下,录制iPhone或者iPad屏幕操作是一件稍微复杂的事情.但是随着Yosemite的出现,在Mac电脑上为iPhone或iPad录屏的方法就变得简单了.下面就介绍一下具体 ...
- Mac电脑上一款非常时尚高清的动态壁纸Living Wallpaper HD
很多朋友Mac电脑上都喜欢用动态壁纸,Living Wallpaper HD是本人尝试的一款非常不错的高清动态壁纸.有时钟.天气等各种组建,非常时尚美观. Living Wallpaper HD下载地 ...
- mac电脑上从终端命令行进入电脑里U盘目录下
一般Mac电脑上u盘都在 Volumes 目录下,所以进入u盘可按如下命令: cd /Volumes/u盘名称
- [工具推荐]制作基于Dash的本地文档方便搜索文档api和内容
[版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 最近在看es的文档,发现查起api来真的很麻烦,很多现在开源的文档都没有查询 ...
- OpenCV训练分类器制作xml文档
OpenCV训练分类器制作xml文档 (2011-08-25 15:50:06) 转载▼ 标签: 杂谈 分类: 学习 我的问题:有了opencv自带的那些xml人脸检测文档,我们就可以用cvLoad( ...
- PHP制作pdf文档方法
原文:PHP制作pdf文档方法 本篇博客是在看完 php+mysql web书以后自己的测试代码,虽然是测试代码,但不是简单的粘贴复制,为了学习thinkPHP框架,自己就用这个来做的,而且这本书已经 ...
- python_docx制作word文档
一.docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...
- Core Web API上使用Swagger提供API文档
在ASP.NET Core Web API上使用Swagger提供API文档 我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的AP ...
- Plupload上传插件中文帮助文档
Plupload上传插件中文帮助文档 配置参数 实例化一个plupload对象时,也就是 new plupload.Uploader(),需要传入一个对象作为配置参数.后面内容中出现的plupload ...
随机推荐
- iOS_18_开关控制器_NavigationController_push道路_数据传输
最后效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill ...
- leetcode第一刷_Minimum Path Sum
能够用递归简洁的写出,可是会超时. dp嘛.这个问题须要从后往前算,最右下角的小规模是已知的,边界也非常明显,是最后一行和最后一列,行走方向的限制决定了这些位置的走法是唯一的,能够先算出来.然后不断的 ...
- HDU 4864Task(更多的联合培训学校1)(贪婪)
职务地址:pid=4864">HDU4864 这题又是一上来觉得是最小费用流,可是边太多.果然,敲完交上去后不断TLE.. 小优化了两次也没过. . . sad.. 后来看了题解才发现 ...
- Tomcat通过配置一个虚拟路径管理web工程
关于虚拟路径.学问javaweb训练课程,如今,鉴于这种情况下老师. 当我们的项目,当在不同的文件夹项目.我们如何使用tomcat去管理web工程. 教师提出的解决方案是 使用虚拟路径方式,并按照实施 ...
- JavaScript 比量 Chrome 核心 360 浏览器(关闭和技巧)
(原因:我相信你会找到360浏览器非常多web会有上述项目的一些问题,不管是"兼容模式"依然是"快速模式".问题也可能存在.非常多用户都装了360杀毒软件,基本 ...
- Java使用串行编程操作继电器
首先,我们必须建立一个良好的环境,那是,jdk并且tomcat.如果它不必须是web装了! 还有就是配置,也就是默认的comm.jar ,javax.comm.properties , win32co ...
- 有关windows在调试ODOO8.0有些问题
继Ubuntu建筑物8.0调试环境后,,尝试windows设置开发环境. 最后的调试和开发,或将返回Linux环境,由于前一段时间手贱,改变分区表,该grub搞哈.哎!后来重建mbr,手动检索分区表( ...
- 具体解释首页被K后SEOer必做的三大排除方法!
近段时间.有非常多朋友向新辰抱怨说出大问题了,为神马site不到首页了,并且收录变成了0?唉,新辰不得不非常同情的告诉你:你的首页真的被K了!好了.作为一个职业SEOer.面对被K宛如已经看破红尘般没 ...
- 工厂模式IDAL具体解释
IDAL 一. IDAL主要功能: 1.这全然是"工厂模式"的一部分实现而已 2.这是一组接口类,当中包含了每一个要公开的数据訪问方法.为每一个数据库产品单独编写的DAL(数据訪问 ...
- SVD在推荐系统中的应用
一.奇异值分解SVD 1.SVD原理 SVD将矩阵分为三个矩阵的乘积,公式: 中间矩阵∑为对角阵,对角元素值为Data矩阵特征值λi,且已经从大到小排序,即使去掉特征值小的那些特征,依然可以很好地重构 ...