Pandoc Lua 过滤器重构 JSON 输出

我有一系列建立在同一模板上的文档,我想使用 pandoc 过滤器通过标题提取内容结构,首选是 lua 过滤器。为了使事情更清晰,是否可以从此 markdown 内容中发出以下 json:

# 标题 1

## 主题 1.1

abc

## 主题 1.1

def

# 标题 2

ghi

对于这种 json 进行进一步处理:

[
  {
    "h1": "标题 1",
    "content": [
      "## 主题 1.1",
      "abc",
      "## 主题 1.1",
      "def"
    ]
  },
  {
    "h1": "标题 2",
    "content": [
      "ghi"
    ]
  }
]

我不知道如何积累标题和内容以在解析结束时返回它。我可能会被 Pandoc API 弄糊涂。Pandoc 可能不是用于这种解析的正确工具,但它是可行的吗?对于这个例子,我不想深入H1,但实际文档可以这样做。

后续

我修改了这个 SOF pandoc-filter-in-lua-and-walk-block 代码。代码片段对我的学习目的来说还不错,但如何使“Pandoc(doc)”返回预期的 JSON?

json = require("json")

-- 获取键值表长度
function tablelength(tbl)
    local count = 0
    for _ in pairs(tbl) do
        count = count + 1
    end
    return count
end

-- 此函数的作用和返回值不清楚
function Pandoc(doc)
    -- 在函数末尾需要(1),但找不到如何使用它
    blocks = {}

    -- 结果表
    local res = {}
    -- 临时表
    local tbl = {}

    for _, block in pairs(doc.blocks) do
        if block.t == "Header" then
            if block.level == 1 then
                if tablelength(tbl) > 1 then
                    table.insert(res, tbl)
                end
                tbl = { content = {} }
                tbl["h1"] = pandoc.utils.stringify(block)
            else
                table.insert(tbl.content, pandoc.utils.stringify(block))
            end
        else
            table.insert(tbl.content, pandoc.utils.stringify(block))
        end
    end

    -- 最后一个块之后
    table.insert(res, tbl)

    -- 打印到 stdout。 如果
    print(json.encode(res))
    -- 如果需要作为副作用可以保存到文件中
    -- file = io.open("result.json", "w")
    -- file:write(json.encode(res))
    -- file:close()

    -- 用于返回 JSON 对象数组的是什么?
    return pandoc.Pandoc(blocks, doc.meta) --(1)
end

原文链接 https://stackoverflow.com/questions/70834828

点赞