CP2K离线文档制作

CP2K离线api documentation 制作

最近在学pyrosetta,跟随谷雨老师的教程时,发现老师自己制作了pyrosetta的离线api查询文档,通过dash程序可以很方便的查找关键字。
举一反三,cp2k的关键词很多,而且日常访问网页查询时可能会出现网络波动。那么是否可以自行构建docset文档结合dash使用呢?
在查询资料之后,Dash程序只适用于Macos,Zeal支持windows和linux(Zeal是借鉴了Dash编写的)。软件安装很简单查看官网即可(提供的网盘文件中提供了解压即用的Zeal程序包)
目前,Zeal内置了很多官方api文档。但是很多程序的离线api文档需要自己制作。在此,提供制作流程,于此同时网盘文件中提供了对应的已经制作好的cp2k.docset文件,只需将其放入zeal程序文件夹中的docset文件夹即可。

链接:https://pan.baidu.com/s/1EYiVDrFrGxEHovN_-k5DLg
提取码:afwm

效果图:

制作流程: 使用centos8系统生成,仅供参考,可以直接使用网盘的资料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1. mkdir docset
2. cd docset
3. wget -m https://manual.cp2k.org/cp2k-2022_1-branch/index.html
4. mkdir -p cp2k.docset
5. mkdir -p cp2k.docset/Contents/Resources/Documents
6. mv manual.cp2k.org/cp2k-2022_1-branch/* cp2k.docset/Contents/Resources/Documents/
7. vi cp2k.docset/Contents/Info.plist
8. > sqlite3 cp2k.docset/Contents/Resources/docSet.dsidx
> CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);
> .exit
9. python docset.py
10. cp cp2k.docset/Contents/Resources/Documents/favicon.png cp2k.docset/icon@2x.png
11. 在修改favicon.png的像素尺寸为16x16,并保存为icon.png
12. 将生成的cp2k.docset复制到zeal程序文件夹中得docset文件夹下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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>CP2K</string>
<key>CFBundleName</key>
<string>CP2K</string>
<key>DocSetPlatformFamily</key>
<string>CP2K</string>
<key>isDashDocset</key>
<true/>
</dict>
</plist>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# docset.py
#!/usr/local/bin/python

import os, re, sqlite3
from bs4 import BeautifulSoup, NavigableString, Tag

conn = sqlite3.connect('/home/casea/CASEADATA/docset/cp2k.docset/Contents/Resources/docSet.dsidx')
cur = conn.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 = '/home/casea/CASEADATA/docset/cp2k.docset/Contents/Resources/Documents'

page = open(os.path.join(docpath,'index.html')).read()
soup = BeautifulSoup(page)

any = re.compile('.*')
for tag in soup.find_all('a', {'href':any}):
name = tag.text.strip()
if len(name) > 1:
path = tag.attrs['href'].strip()
if path != 'index.html':
cur.execute('INSERT OR IGNORE INTO searchIndex(name, type, path) VALUES (?,?,?)', (name, 'func', path))
print('name: %s, path: %s' % (name, path))

conn.commit()
conn.close()