2022-04-12
テキストファイルとイメージファイルが一つになっていると扱いが楽。
リッチテキストでは
macのテキストエディットで画像を貼り付けて保存すると、RTF (Rich Text Format) からRTFD (Rich Text Format Directory) に保存形式が変わる。
Markdownでは
Markdownにも似たようなものがあり、TextBundleと呼ぶらしい。
Markdownテキストと参照されているすべての画像を1つのファイルにバンドルすることで、利便性を取り戻します。
(機械翻訳)
また、それの圧縮版の方はTextPackと呼ぶらしい。
仕様を見ると、パッケージの中に
text.*
: 実際のプレーンテキストの内容。(*は任意のファイル拡張子。text.mdとかtext.markdownとか)info.json
: バンドルに関するすべてのメタデータ。assets/
: プレーンテキストファイルから参照されるすべてのアセットファイルが格納されたフォルダ。
というファイルとフォルダが含まれている。
text.markdown
例
# Textbundle Example This is a simple example of a textbundle package. The following paragraph contains an example of a referenced image using the embedding code `![](assets/textbundle.png)`. ![](assets/textbundle.png)
info.json
例
{ "version": 2, "type": "net.daringfireball.markdown", "transient": true, "creatorURL": "file:///Applications/MyApp", "creatorIdentifier": "com.example.myapp", "sourceURL": "file:///Users/johndoe/Documents/mytext.markdown", "com.example.myapp": { "version": 9, "customKey": "aCustomValue" } }
assetsフォルダ
例
textbundle.pngファイル
iOS/iPadOSショートカット
TaioやUlysses、MindNode、Highlightsが出力する拡張子が.textbundleや.textpackのファイルからテキストファイルやイメージファイルを取り出し、指摘したフォルダに保存するiOS/iPadOSショートカット。
TextBundlePack2OBSD: https://www.icloud.com/shortcuts/bdf8cd35e9c646d5a6e5f342a0ad98da
やっていること
ファイル取得
- 選択したファイルがTextPackだったら解凍し、その中にTextBundleが入っていたり、そもそも選択したファイルがTextBundleファイルだったら、そこから
text.*
ファイルやinfo.json
ファイル、assets
フォルダを取り出す。
- 選択したファイルがTextPackだったら解凍し、その中にTextBundleが入っていたり、そもそも選択したファイルがTextBundleファイルだったら、そこから
タイトル候補を探す
info.json
ファイルの中にsourceURLというキー(必須ではない)があったら、その値からテキストファイルのファイル名を取り出し拡張子を".md"に変更する。info.json
ファイルにsourceURLというキーが無かったら、text.*
ファイルの1行目から順に探して、ファイル名に使えない文字は削除してタイトル候補として取り出す。- それでも見つからなかった場合は取り合えず
foobar.md
というファイル名にしておく。
添付ファイルの処理
assets
フォルダから中のファイルの名前を取り出し、その先頭にyyyyMMddHHmmss形式の日時とミリ秒3桁を追加する。text.*
ファイルに書かれているそのファイルへの画像リンクもそれに合わせて書き換える。(保存先assets
フォルダの同名画像ファイルを上書き保存しないため。メモ削除時も、画像ファイルを名前順にソートすれば不要になった添付ファイルも削除しやすい)- Highlightsアプリで文字列だけハイライトして画像は出力しなかった場合は、"assets"フォルダ自体が存在しない。
出力先フォルダの選択させる
- Obsidianのvaultフォルダ内のどこかを選ばせる。
text.*の保存
- ファイル名を入力させる。初期値は、探し出したタイトル候補名を念のためにURLデコードしたもの。そして出力先フォルダに保存する。(念のために同名ファイル既存の場合は末尾に連番を付けて保存)
assetsフォルダ内のファイルの保存
- 2つ上で選ばせたフォルダ内にassetsフォルダを作る(既に存在する場合は結果的に何もしない)。その中にTextBundle/TextPackのassetsフォルダ内のファイルをリネームしたものを保存する。