我目前正在从事一个个人写作项目,由于我要支持的相关平台和输出格式的差异无法轻松解决,最终我维护了几个不同的版本。在经过几次实例浏览后,我得出结论说仅仅是模板无法满足我的需要,更糟糕的是,我似乎需要自定义过滤器和编写器的组合……足以满足我的要求。说:搞混AST是我感到无法解决的地方。这样就足够了,它不是在这里问“我如何做X”的特定问题,而是“是否X是正确的解决方法,或者正确的方法是什么,您能给出一个如何联系在一起的示例?'...因此,如果这个问题相当冗长:我很抱歉。
我当前的目标是要像下面这样自定义标记,该标记可以“跟踪”哪个字符说了些什么:
<paul|"Hi there">
如果我转换为HTML,我会想要类似的东西:
<span class="speech paul">"Hi there"</span>
弹出(可能还有
标签),但是如果它只是纯markdown /纯文本,我希望它默默消失:
"Hi there"
看看我研究过的JSON AST结构,我想要一个类似于'Emph'标签的新结构类型,称为'Speech',可以将整个文本块放入其中并附有一些额外的信息(说话的人)。像这样:
{"t":"Speech","speaker":"paul","c":[ ... ] }
问题1 :在lua过滤器看到文档的那一点上,它显然已经被提炼为AST。这意味着以与大多数宏扩展器示例相似的方式替换项目实际上无法正常工作,因为这需要先读。使用这种方法,我只需要替换零碎的部分(
使事情变得更加复杂的是,我的某些角色最终在整个故事中学习了第二语言,为此我采用了一种不同的格式,该格式包含对口语文本的简化理解以及对角色的理解。示例:
<paul|"Heb je goed geslapen?"|"Did you ?????">
我可能会在过滤器中添加第三个“ UndertoodSpeech”组,但是(问题2 )在这一点上,说话者,原始语音和理解的翻译之间的关系已经完全不见了只要最终文档按这些顺序(仅按这些顺序)需要这些值,就可以了……但是,如果我希望我的HTML版本看起来像
"Did you?????"
具有包含原始语音的工具提示/悬停效果?因为AST不包含这种关系细节,所以几乎不可能实现。
我在过滤器中创建的AST都是我需要在自定义编写器中理解的。理想情况下,我想为编写者重用pandoc的更多库存功能,但是我什至不知道这是否可行。
所以现在我的问题是:一位对Pandoc很有理解的人可以举一个例子,说明如何将相关的数据位保持在一起并以正确的方式应用它们吗?我的意思是显示一个基本示例,说明需要在以下工具链的lua-filter和lua-writer脚本中放入什么
[CUSTOMIZED MARKDOWN INPUT] -> lua-filter -> lua-writer -> [CUSTOMIZED HTML5 OUTPUT]