niszetの日記

細かい情報を載せていくブログ

(Pandoc) CodeをSpanに置き換えてスタイルをあてるLua filter

ただし、custom-styleがない場合はそのまま出力する。

Codeに対してもattributeをあてられるので、idとかclassとかattributesをつけられるので、こんな感じで、標準入力からpandocに送ってみる。今回使うのはcustom-styleのみだけども、idとかで処理を追加することも当然できる。

echo `r hoge`{.hoge .fuga #piyo poke=1.234 custom-style="ErrorTok"} `fuga` | pandoc  -f markdown -t docx --lua-filter code2span.lua -o test.docx

ここで、Luaフィルタはこんな感じで書けばよい。custom-styleを持つ場合のみSpanに置き換える。それ以外は何もせずに返す。

function Code (s)
  for k, v in pairs(s.attr.attributes) do
    if k == "custom-style" then
      x = pandoc.Span(s.text, s.attr)
      return x
    end
  end
  return s
end

出力はこんな感じ。

f:id:niszet:20191019221608p:plain

ErrorTokはコードハイライト時のエラー部分のテキストにあてられるスタイル。

自分以外に使い道ある人いなそうですが、備忘録として。

Enjoy!!