Pando c: Lua -фильтр для замены {{helloworld}} на <div>ab c</div> - PullRequest
2 голосов
/ 04 марта 2020

В руководстве я нашел этот пример фильтра pando c lua:

return {
  {
    Str = function (elem)
      if elem.text == "{{helloworld}}" then
        return pandoc.Emph {pandoc.Str "Hello, World"}
      else
        return elem
      end
    end,
  }
}

Я хочу заменить {{helloworld}} на <div>abc</div>. Моя попытка:

return {
  {
    Str = function (elem)
      if elem.text == "{{helloworld}}" then
        return pandoc.RawInline('html','<div>abc</div>')
      else
        return elem
      end
    end,
  }
}

... но это дает мне следующий вывод:

<p></p>
<div>abc</div>
<p></p>

Как мне избавиться от пустых p -tags?

Дополнительная информация

Я конвертирую из уценки в html, и мой файл уценки выглядит так:

enter image description here

1 Ответ

4 голосов
/ 05 марта 2020

В руководстве указано:

В результате вывода функции должен быть элемент того же типа, что и вход. Это означает, что функция фильтра, действующая на элемент inline, должна возвращать либо nil, либо inline, либо список inline, а функция, фильтрующая элемент block, должна возвращать nil, block или список элементов block. Pando c выдаст ошибку, если это условие будет нарушено.

Вы хотите, чтобы ваш вывод отображался как блок (<div>abc</div>), но ваш ввод (Str) был встроенным. Вот почему это не работает. Измените Str (Встроенный) на Para (Блок), elem.text на element.content[1].text и RawInline на RawBlock, и это будет работать:

return {
  {
    Para = function (elem)
      if elem.content[1].text == "{{helloworld}}" then
        return pandoc.RawBlock('html','<div>abc</div>')
      else
        return elem
      end
    end,
  }
}
...