Lua filter特有かもしれないが…
Lua filterでBulletListの処理順序を確認するために、下記のようなコードを書いた。
function BulletList(el) print(pandoc.utils.stringify(el)) end
子要素が全部潰されて1つの文字列になってしまうが、そこは目をつぶるとして、これでどの順に処理されているか確認できる。
調査対象はこんな感じとした。
- para1 - para1.1 - para1.1.1 - para1.2 - para1.2.1 - para1.2.1.1 - para2 - para2.2 - para2.2.1 - para2.2.1.1
実行結果は下記のとおり
para1.1.1 para1.2.1.1 para1.2.1para1.2.1.1 para1.1para1.1.1para1.2para1.2.1para1.2.1.1 para2.2.1.1 para2.2.1para2.2.1.1 para2.2para2.2.1para2.2.1.1 para1para1.1para1.1.1para1.2para1.2.1para1.2.1.1para2para2.2para2.2.1para2.2.1.1
ASTはこんな感じ。
[BulletList [[Plain [Str "para1"] ,BulletList [[Plain [Str "para1.1"] ,BulletList [[Plain [Str "para1.1.1"]]]] ,[Plain [Str "para1.2"] ,BulletList [[Plain [Str "para1.2.1"] ,BulletList [[Plain [Str "para1.2.1.1"]]]]]]]] ,[Plain [Str "para2"] ,BulletList [[Plain [Str "para2.2"] ,BulletList [[Plain [Str "para2.2.1"] ,BulletList [[Plain [Str "para2.2.1.1"]]]]]]]]]]
とりあえず一番手前の要素の一番下まで潜っていって、横方向に順次見ていくような挙動ですね。この探索順序は一般的になんて呼ばれているのだろう(不勉強)
BulletListのタグはリストの最初の要素の手前にあるので、同階層で複数要素があっても対応するprintは1回だけです(para1.1とpara1.2は同階層だが、para1.1が先頭の表示が対応するBulletList)
フィルタを書くときは処理順に気をつけないといけないので、参考程度にメモです。
なお、バージョン依存があるかもしれません。今回は 2.10.1 を使用しています。