Pandoc Lua Filter:有“恒等函数”示例吗?

问题描述 投票:0回答:1

是否有相当于 identitytransformLua Filters for Pandoc 可以在任何地方使用?

这将是一个有用的实验起点,假设这样的恒等变换明确定义了所有可能的函数“槽”。

对于上下文:我的用例是提取 Markdown 文档的特定部分 - 主要是代码块 - 我想忽略其他所有内容。

lua abstract-syntax-tree pandoc
1个回答
0
投票

Strong
元素的恒等变换:

function Strong(elem)
  return elem
end

您可以针对要过滤掉的元素返回

nil
。例如,删除所有
Strong
元素将是:

function Strong(elem)
  return nil
end

但是,要删除代码块之外的所有元素,您必须将它们全部列出。 Pandoc lua 过滤器实际上不是为这种情况设计的,而是针对您想保留大部分内容而只修改或删除一两种元素的情况。

因此,也许您应该做的是

pandoc -t json
并将其通过管道传输到您最喜欢的编程语言中的程序并提取所有代码块。有关某些包,请参阅 pandoc 过滤工具,但如果您只对顶层的代码块感兴趣(并且不需要递归地遍历树),则不需要任何包。

但确实如此,你也可以使用 lua 过滤器实现同样的效果。沿着以下路线:

local codeBlocks = {}

function CodeBlock(text)
  -- append to codeBlocks like it's an array
  table.insert(codeBlocks, text)
  return text
end

-- finally return a new pandoc document containing
-- the `codeBlocks` somehow formatted or
-- write it to a file or whatever you wanna do
© www.soinside.com 2019 - 2024. All rights reserved.