重组文本:使用元数据指令

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

我正在编写一个基于重组文本的简单网页生成器,我想将标签放入文档中,就像这样。

=====
Title
=====

:author: Me
:tags: foo, bar

Here we go ...

我现在想要的:

  • 拥有某种文档树
  • 找到
    tags
    条目,读取它,处理它(就像在命令行上打印标签),删除它并渲染剩余的树。

所以我想编写兼容的重组文本,以防它使用与我的程序不同的东西进行编译。

有人可以给我提示吗?我在这里找到了这个 http://svn.python.org/projects/external/docutils-0.6/docutils/examples.py

internals
方法中显示了如何获取文档(以及 dom 树),但这是最好的方法还是基于正则表达式的方法(查找行,删除它们)会容易得多?使用树还涉及转换树→文档等等。

python restructuredtext
3个回答
1
投票

有一些工具可以为您做到这一点。请参阅 http://docutils.sourceforge.net/docs/user/links.html


1
投票

我想我对这两个问题都有一个很好的解决方案。首先,

core.py
发行版中的
docutils
文件显示了如何获取文档树以及如何编写它(例如使用html编写器),请参阅
publish_from_doctree
publish_doctree
。然后,还有
docutils.nodes.SparseNodeVisitor
,可以子类化并覆盖像
visit_field
这样的方法,以各种方式操作文档树。


0
投票

在不太古老的 Docutils 中,自定义 docinfo 字段将键作为类值获取:

    <docinfo>
        <author>
            Me
        <field classes="tags">
            <field_name>
                tags
            <field_body>
                <paragraph>
                    foo, bar

如果类值是唯一的,您可以使用 strip-elements-with-classes 配置设置将其删除。 (警告:所有包含相同类值的元素也将被删除,剩余的文档树可能无效......)

或者,您可以使用 CSS 规则(或 LaTeX 前导码)来防止显示“标签”字段。

提取(以及更可靠的抑制)可以通过 Docutils 转换 来实现。 https://docutils.sourceforge.io/docs/peps/pep-0258.html#transformer https://docutils.sourceforge.io/docs/api/transforms.html

不幸的是,Docutils 文档没有创建和使用自定义转换的指南。但是,

docutils/transforms/*.py
源提供了从文档树中提取信息以及移动/删除/修改节点的示例。

© www.soinside.com 2019 - 2024. All rights reserved.