如何在 Pandoc lua 过滤器中将 CodeBlock 转换为 LineBlock
How to convert CodeBlock into LineBlock in Pandoc lua filter
我想在 Pandoc Lua 过滤器中将 CodeBlock
转换为 LineBlock
。该转换的问题是 CodeBlock
元素有一个 text
属性(一个字符串),但是 LineBlock
需要内联内容元素(每个单词,space,换行符等。它自己的元素)。如何将 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
,而 return 是 Pandoc
对象,它的 blocks
字段中有一个 Block
值的列表。
此块列表是 CodeBlock 函数可接受的 return 值。
要将文本转换为LineBlock,我们可以修改它,使其成为Markdown语法中的行块。然后我们可以使用 pandoc.read
.
将生成的文本阅读为 Markdown
pandoc Markdown(和 reStructuredText)中的行块在每行的开头都有一个竖线字符。所以我们必须在每个换行符之后添加 |
并将其添加到第一行。
我们可以将结果传递给 pandoc.read
,然后 return 结果块,在我们的例子中它实际上应该只是一个 LineBlock。
这是完整的过滤器:
function CodeBlock (el)
return pandoc.read('| ' .. el.text:gsub('\n', '\n| '), 'markdown').blocks
end
我想在 Pandoc Lua 过滤器中将 CodeBlock
转换为 LineBlock
。该转换的问题是 CodeBlock
元素有一个 text
属性(一个字符串),但是 LineBlock
需要内联内容元素(每个单词,space,换行符等。它自己的元素)。如何将 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
,而 return 是 Pandoc
对象,它的 blocks
字段中有一个 Block
值的列表。
此块列表是 CodeBlock 函数可接受的 return 值。
要将文本转换为LineBlock,我们可以修改它,使其成为Markdown语法中的行块。然后我们可以使用 pandoc.read
.
pandoc Markdown(和 reStructuredText)中的行块在每行的开头都有一个竖线字符。所以我们必须在每个换行符之后添加 |
并将其添加到第一行。
我们可以将结果传递给 pandoc.read
,然后 return 结果块,在我们的例子中它实际上应该只是一个 LineBlock。
这是完整的过滤器:
function CodeBlock (el)
return pandoc.read('| ' .. el.text:gsub('\n', '\n| '), 'markdown').blocks
end