Docset は以下のようなディレクトリ構造になってます。
.docset/
├── Contents
│ ├── Resources
│ │ ├── Documents
│ │ └── docSet.dsidx
│ └── info.plist
├── icon.png
└── icon@2x.png
この中で重要なのが
Documents
docSet.dsidx
info.plist
です。
Documents
この中にはHTMLファイルを格納します。Dash ではドキュメント(HTML)を開くと時に単にDocuments/
からのパスで開こうとします。
HTMLファイルであれば何でもいいので静的サイトジェネレーターの選定は自由です。
docSet.dsidx
索引する為のデータです。例えば「typescript: interfaces
」と検索した時に「Interfaces」が出てくるのは、このファイルに「Interfaces の時はこのタイプでこの HTML ファイルね」と登録されている為です。これは Sqlite3 ファイルで作ります。
Sqlite3 へはsqlite3 docSet.dsidx
のように入り、
CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);
CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);
でテーブルを作った後、
INSERT OR IGNORE INTO searchIndex(name, type, path) VALUES ('Interfaces', 'Guide', '/interfaces.html');
のような感じでデータを入れていきます。基本的はここはスクリプトを組んで実行する部分だと思います。
info.plist
Dash でのメタ情報を設定します。例えばtypescript:
入力した時に、TypeScript Docset だけの検索モードになるのは、このファイルに「typescript
をキーワードとして使ってね」のように記述されてる為です。
基本的にこれは以下の[nN]ame
を自分の環境に合わせて書き換えるだけでいいと思います。
<?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>name</string>
<key>CFBundleName</key>
<string>Name</string>
<key>DocSetPlatformFamily</key>
<string>name</string>
<key>isDashDocset</key>
<true/>
<key>isJavaScriptEnabled</key>
<true/>
</dict>
</plist>
アイコン
オプショナルですが<name>.docset
直下にicon.png
とicon@2x.png
を置くとキーワードを入力した時にアイコンが付いて分かりやすくなります。
icon.png
は16x16
、icon@2x.png
は32x32
のサイズでそれぞれ作成します。
作った Docset を登録
Preferences > Docsets > +
> Add Local Docset をクリックするとファインダーが開きます。ここで先程の<name>.docset
を開けば登録されるはずです!
例も参照してください。