繁体   English   中英

如何在 Pandoc lua 过滤器中将 CodeBlock 转换为 LineBlock

[英]How to convert CodeBlock into LineBlock in Pandoc lua filter

我想在 Pandoc Lua 过滤器CodeBlock转换为LineBlock 这种转换的问题在于CodeBlock元素有一个text属性(一个字符串),但LineBlock需要内联内容元素(每个单词、空格、换行符等,它自己的元素)。 如何将text属性转换为适合LineBlock内容?

这是我的代码在 ATM 上的样子:

function CodeBlock(el)
    -- test for manually generating content
    -- return pandoc.LineBlock {{pandoc.Str("Some")}, {pandoc.Space()}, {pandoc.Str("content")}}

    -- using read does not work, how can I convert the string el.text?
    local contentElements = pandoc.read(el.text)
    return pandoc.LineBlock(contentElements)
end

我假设代码块中的文本采用 Markdown 格式,因为这是 pandoc 最常用的输入格式。

您的方法很好,只是似乎对不同类型缺乏明确性: pandoc.read接受一个字符串,如el.text ,并返回一个Pandoc对象,该对象在其blocks字段中有一个Block值列表。 此块列表是 CodeBlock 函数可接受的返回值。

要将文本转换为 LineBlock,我们可以修改它,使其成为 Markdown 语法中的行块。 然后我们可以使用pandoc.read将结果文本读取为 Markdown。

pandoc Markdown(和 reStructuredText)中的行块在每行的开头都有一个管道字符。 所以我们必须加上| 在每个换行符之后,并将其添加到第一行。

我们可以将结果传递给pandoc.read ,然后返回结果块​​,在我们的例子中它应该只是一个 LineBlock。

这是完整的过滤器:

function CodeBlock (el)
  return pandoc.read('| ' .. el.text:gsub('\n', '\n| '), 'markdown').blocks
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM