【问题标题】:How to assemble a tool that parses reStructuredText with additional directives如何组装使用附加指令解析 reStructuredText 的工具
【发布时间】:2018-12-31 21:44:37
【问题描述】:

假设我想在 reStructuredText 标准指令中添加一个新指令。

有一个how-to for creating reStructuredText directives 概述了每个指令本质上是如何从 Directive 类或其子类派生的。它还建议感兴趣的读者应该检查标准指令是如何实现的,并将其作为起点。

到目前为止,一切都很好,但教程实际上到那时就停止了。如何将新指令合并到新工具中;我应该如何实际使用它?

Hacker's Guide”概述了前端工具是如何由 Reader、Parser、Transformer 和 Writer 组装而成的,看起来不完整,并且绝对不包含任何代码。

那么,我应该如何从标准阅读器 + 识别新指令的扩展解析器 + 可能是一个新的编写器来组装一个新工具,以适当地处理它产生的输出中的新指令?

我非常感谢您朝着正确的方向轻推。

【问题讨论】:

    标签: python-3.x restructuredtext docutils


    【解决方案1】:

    docutils.core.Publisher 类是“封装 Docutils 系统的高级逻辑的外观。” 根据其文档:

    调用publish_* 便利函数(或实例化一个 Publisher object) 与组件名称将导致默认 行为。对于自定义行为(设置组件选项),创建 首先自定义组件对象,然后将 them 传递给 publish_*/Publisher.

    因此,为了构建一个工具,例如,解析 .rst 文件并将 html5 输出到标准输出,使用标准组件,可以编写:

    import sys
    import docutils.core
    import docutils.parsers.rst
    import docutils.writers.html5_polyglot
    
    public = docutils.core.publish_file(
                source=open("filename.rst", 'r'),
                parser=docutils.parsers.rst.Parser(),
                writer=docutils.writers.html5_polyglot.Writer())
    

    用您自己的扩展类替换解析器或编写器的标准组件,您就完成了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 2012-02-21
      • 2011-02-14
      • 1970-01-01
      • 2011-10-03
      • 2019-04-11
      • 2015-08-13
      相关资源
      最近更新 更多