Pandoc 使用 Lua 过滤器将字符串替换为 table
Pandoc replace string with table using Lua filter
在我的文档中,我有一个占位符字符串,例如:
{{changelog}}
并且想使用 Lua 过滤器将其替换为格式为 table 的 Markdown,如果我使用 HTML,则以下 Lua 过滤器有效:
local string = [[
| some | table |
|------|-------|
| val1 | val2 |
]]
string = [[
<table>
<tr>
<td>some</td>
<td>table</td>
</tr>
<tr>
<td>val1</td>
<td>val2</td>
</tr>
</table>
]]
function Para(elem)
if elem.content[1].text == "{{changelog}}" then
return pandoc.RawBlock('html', string)
else
return elem
end
end
return {{ Para = Para }}
现在这可以使用变量 string
的 HTML 内容,但是我如何让它与变量 string
.
中的 Markdown 格式内容一起使用
为了return一个任意格式而不是HTML,我们必须指示pandoc解析字符串为pandoc.read
:
function Para(elem)
if elem.content[1].text == "{{changelog}}" then
return pandoc.read(tblstring, 'html').blocks
end
end
pandoc.read
函数接受一个字符串并将其解析为pandoc文档,其中第二个参数是格式;我们需要使用访问文档 blocks
因为我们对元数据不感兴趣。
我省略了 return elem
,因为如果函数没有 return 值,pandoc 会保留原始元素。
另一种方法是使用 pandoc.Table
或 pandoc.utils.from_simple_table
等函数构造 table,但这通常需要更多工作。
另请注意,string
是用于 Lua 的字符串库的全局名称,因此最好为 table HTML 选择一个不同的名称。
在我的文档中,我有一个占位符字符串,例如:
{{changelog}}
并且想使用 Lua 过滤器将其替换为格式为 table 的 Markdown,如果我使用 HTML,则以下 Lua 过滤器有效:
local string = [[
| some | table |
|------|-------|
| val1 | val2 |
]]
string = [[
<table>
<tr>
<td>some</td>
<td>table</td>
</tr>
<tr>
<td>val1</td>
<td>val2</td>
</tr>
</table>
]]
function Para(elem)
if elem.content[1].text == "{{changelog}}" then
return pandoc.RawBlock('html', string)
else
return elem
end
end
return {{ Para = Para }}
现在这可以使用变量 string
的 HTML 内容,但是我如何让它与变量 string
.
为了return一个任意格式而不是HTML,我们必须指示pandoc解析字符串为pandoc.read
:
function Para(elem)
if elem.content[1].text == "{{changelog}}" then
return pandoc.read(tblstring, 'html').blocks
end
end
pandoc.read
函数接受一个字符串并将其解析为pandoc文档,其中第二个参数是格式;我们需要使用访问文档 blocks
因为我们对元数据不感兴趣。
我省略了 return elem
,因为如果函数没有 return 值,pandoc 会保留原始元素。
另一种方法是使用 pandoc.Table
或 pandoc.utils.from_simple_table
等函数构造 table,但这通常需要更多工作。
另请注意,string
是用于 Lua 的字符串库的全局名称,因此最好为 table HTML 选择一个不同的名称。