Return pandoc过滤器中el.content的文本字符串

Return the text string of el.content in pandoc filter

使用pandoc过滤器时,我只想获取el.content的文本,但是return一个Table!

.md如下(仅供调试):

[It's so easy!]{color="red"}. Today is Monday.

我想要打印字符串 It's so easy!。所以,我写代码:

function Span(el)
  color  = el.attributes['color']
  strTxt = el.content
  print(strTxt)
end

但是这不是真的!通过使用el.text也是一样的!

所以我以前从未使用过 Pandoc,所以如果我在这里做错了什么,请谅解。

我安装了 Pandoc,我创建了一个像你一样的 filter.lua

function Span(el)
  print(el.content)
end

我用你的内容创建了一个test.md

[It's so easy!]{color="red"}. Today is Monday.

我运行 pandoc --lua-filter=filter.lua -f markdown test.md

它打印了

table: 00000000078ba480
<p><span color="red">ItÔÇÖs so easy!</span>. Today is Monday.</p>

不管那个发生了什么'...

所以我看了一下里面 table

function Span(el)
  for k,v in pairs(el.content) do print(k,v) end
end

哪个打印出来

1       table: 0000000007874e90
2       table: 0000000007875010
3       table: 0000000007875050
4       table: 0000000007875090
5       table: 0000000007876190
<p><span color="red">ItÔÇÖs so easy!</span>. Today is Monday.</p>

所以这一定是手册中提到的内联列表

让我们看看里面!

function Span(el)
  for i, tbl in ipairs(el.content) do
    print(string.format("Table #%d contains: ", i))
    for k, v in pairs(tbl) do
      print(k,v)
    end
  end
end

打印

Table #1 contains:
text    Itâ?Ts
Table #2 contains:
Table #3 contains:
text    so
Table #4 contains:
Table #5 contains:
text    easy!
<p><span color="red">ItÔÇÖs so easy!</span>. Today is Monday.</p>

因此 table 中的那些 table 很可能是一些内联对象,它们具有包含您要查找的词的文本属性。

你看,使用一些循环和打印来检查神秘的 table 是非常简单的。

模块 pandoc.utils 包含一个函数 stringify,它将一个元素转换为列表:

function Span(el)
  print(pandoc.utils.stringify(el))
end

这将打印 It’s so easy!(请注意 pandoc 对撇号的智能处理的效果:右引号已替换直撇号 ')。

有关如何使用它们的更多信息,请参阅 Lua filters docs