У меня есть файл уценки, который содержит несколько тегов HTML и, в частности, тег <br>, который я хотел бы заменить при преобразовании в HTML с помощью pandoc. Проблема в том, что я хотел бы заменить его на <br /> из-за некоторых проблем совместимости с некоторыми старыми модулями визуализации, которые жалуются на <br>. Я пробовал использовать следующий фильтр Lua при выполнении преобразования, но он ничего не сделал:

filter.lua:

function LineBreak (elem)
    return {
        pandoc.RawInline('html', '<br />')
    }
end

Я использую версию Pandoc 2.13, выполняю следующую команду со следующим тестовым файлом:

Test.md:

## Testing

Hello <br> World!

pandoc --lua-filter filter.lua --to html5 Test.md

Я также попытался указать --to html4, но результат остался прежним. Есть ли способ сделать это с помощью фильтров Lua?

2
SignalRichard 19 Май 2021 в 16:13

1 ответ

Лучший ответ

Чтобы отладить это, мы можем сначала запустить pandoc --to=native Test.md, чтобы увидеть, как ввод анализируется во внутреннем представлении документа pandoc. Это дает

[Header 2 ("testing",[],[]) [Str "Testing"]
,Para [Str "Hello",Space,RawInline (Format "html") "<br>",Space,Str "World!"]]

Интересно то, что <br> разбирается как RawInline (Format "html") "<br>", а не как перенос строки. Таким образом, мы можем изменить фильтр, чтобы он соответствовал этому:

function RawInline (raw)
  if raw.format == 'html' and raw.text == '<br>' then
    return pandoc.RawInline('html', '<br />')
  end
end

Это дает желаемый результат:

$ pandoc --lua-filter filter.lua --to html5 Test.md
<h2 id="testing">Testing</h2>
<p>Hello <br /> World!</p>
1
tarleb 19 Май 2021 в 18:32