Markdown post processing における位置情報の取り扱い
...

以下、ctxMarkdownPostProcessorContext を表すものとする。

Reading view
...

この場合、ctx.getSectionInfoMarkdownPreviewRenderergetSectionInfo メソッドを内部で呼ぶ実装になるので、ちゃんと信頼できる line numbers を返してくれる。よってめちゃくちゃ簡単。

Embeds & Hover page preview
...

ctx.getSectionInfo は一応ちゃんと非自明な情報を返してくれるのだが、 heading link or block link の場合、line numbers は信用できない。なぜなら埋め込み対象の範囲内での相対的な line numbers を返すため。

よって、位置情報が必要なときはたとえば MetadataCache から適切にオフセットを読み取ったりする必要がある。

  • Embeds の場合は、setTimeout すると親要素に src 属性として linktext が格納されるので、これを読めばブロック ID なり heading なりがわかる。
  • Hover page preview の場合は曲者で、.hover-popover に linktext は格納されない。LaTeX-like Theorem & Equation Referencer では、こんなふうに 最後にトリガーされた link-hover イベントの linktext を盗聴してプラグインインスタンスに保存してしまうという汚い技でなんとか linktext を取得した。もっといい方法があれば知りたい。

PDF export
...

曲者。ctx.getSectionInfo は常に null を返す実装になる。このせいで、 LaTeX-like Theorem & Equation Referencer version 1 では数式番号を PDF に表示するのに失敗していた。Version 2 では、以下のような前処理でこの問題を回避している。

Live Preview における CodeMirror decorations
...

Obsidian built-in のものだと、たとえば callouts がこれにあたる。この場合も ctx.getSectionInfo は常に null を返すので、位置情報が必要なときはひと工夫いる。