十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docset文件结构揭秘:doc2dash如何用SQLite索引和Info.plist让Dash毫秒级响应搜索

Docset文件结构揭秘:doc2dash如何用SQLite索引和Info.plist让Dash毫秒级响应搜索 Docset文件结构揭秘doc2dash如何用SQLite索引和Info.plist让Dash毫秒级响应搜索【免费下载链接】doc2dashCreate docsets for Dash.app-compatible API browsers.项目地址: https://gitcode.com/gh_mirrors/do/doc2dashdoc2dash是一个开源的Docset 生成器它把 Sphinx、MkDocs 等工具构建好的文档转换成 API 浏览器如 Dash、Zeal可搜索的 Docset 文件包。你只需一条命令指向文档目录它就能产出带SQLite 索引和Info.plist 元数据的标准 Docset让 Dash 实现毫秒级的离线搜索。本文带你完整拆解这个「黑色文件夹」的内部构造。Docset 到底长什么样一个文件夹里藏了 3 个关键角色双击一个.docset文件它本质是个压缩包你会看到固定的骨架路径角色作用Contents/Info.plist 身份证告诉 Dash 这个 Docset 叫什么、打开哪页、支持什么功能Contents/Resources/docSet.dsidx️ 索引数据库一个 SQLite 文件存着所有可搜索条目Contents/Resources/Documents/ 文档本体完整复制过来的 HTML 离线文档icon.png/icon2x.png️ 图标Dash 列表里显示的图标可选这三个角色由 src/doc2dash/docsets.py 中的prepare_docset()一次性搭建完成是理解整个项目的钥匙。Info.plistDash 认识你的 Docset 全靠它Info.plist 是一个 XML 格式的键值文件。prepare_docset()会写入这些关键配置见 src/doc2dash/docsets.py 第 83–101 行CFBundleName/DocSetPlatformFamilyDocset 的显示名称与平台族直接决定 Dash 里它叫什么dashIndexFilePath打开 Docset 时默认跳到的首页DashDocSetFallbackURL搜索不到时回退的在线文档地址由--online-redirect-url参数写入DashDocSetPlayURLPlayground 链接--playground-url参数写入isJavaScriptEnabled是否允许文档内运行 JSDashDocSetDefaultFTSEnabled/DashDocSetFTSNotSupported控制全文搜索的开关由--full-text-search参数on / off / forbidden映射而来这些字段的正确性都有测试保障比如 tests/test_docsets.py 中test_with_index_page会校验 plist 内容与参数完全对应。SQLite 索引 docSet.dsidx毫秒级搜索的真正引擎Dash 的搜索速度不取决于文档本身而取决于Contents/Resources/docSet.dsidx这个 SQLite 数据库。它在创建时只有一张极简的表CREATE TABLE searchIndex( id INTEGER PRIMARY KEY, name TEXT, -- 如 print type TEXT, -- 如 Function path TEXT -- 如 api.rst#print )索引条目的数据结构定义在 src/doc2dash/parsers/types.py 的ParserEntry中名称、类型、带锚点的路径。类型则来自EntryType枚举——Class、Function、Method、Module 等 20 余种正好对应 Dash 的搜索结果分类图标。填充过程见 src/doc2dash/convert.pyconvert_docs()一边从解析器读取条目、一边INSERT进searchIndex表最后统计并打印「Added N index entries」。这就是为什么文档越大生成越慢而搜索却永远飞快——Dash 查的是 SQLite 索引不是翻 HTML。隐藏的第四个角色为目录树埋下锚点除了索引convert_docs()还在做一件不显眼但重要的事调用 src/doc2dash/parsers/patcher.py 的patch_anchors()给每个 HTML 条目注入//apple_ref/cpp/类型/名称形式的隐藏标记。这正是 Dash 左侧「文档大纲」目录树能点击跳转的原理条目先入索引表再通过发送器toc.send(entry)按文件批量回写锚点。一个文件里的所有条目一次打开、一次打完补丁效率很高。新手快速上手3 步生成自己的 Docset构建文档先用 Sphinx / MkDocs 等工具产出静态 HTML且需支持 intersphinx 格式生成 Docset执行doc2dash directory/to/documentation可在当前目录得到xxx.docset拖进 Dash在 Dash 偏好设置中添加该文件即可离线搜索参数细节、支持的文档格式与扩展方式可参考项目自带的 docs/cli.md、docs/formats.md 和 docs/extending.md。总结组件一句话总结Info.plistDocset 的身份证决定 Dash 如何展示与跳转docSet.dsidxSQLite 索引库searchIndex表撑起毫秒级搜索Documents/完整离线 HTML点击结果时的落地页patcher 锚点隐藏标记让左侧目录树可点击跳转下次当你在 Dash 里敲下几个字母就命中 API 时可以回想一下背后是doc2dash用一张 SQLite 表和一份 Info.plist 完成的静默协作 【免费下载链接】doc2dashCreate docsets for Dash.app-compatible API browsers.项目地址: https://gitcode.com/gh_mirrors/do/doc2dash创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表