[英]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.