ReST strikethrough

后端 未结 7 1203
悲&欢浪女
悲&欢浪女 2020-12-02 09:50

Is it possible to strike text through in Restructured Text?

Something that for example renders as a tag when converted to HTML, like:

7条回答
  •  伪装坚强ぢ
    2020-12-02 10:38

    Here's a Python definition of a del role, which works better than the accepted answer if you want to use the role in multiple pages of a Pelican blog or a Sphinx documentation project:

    from docutils import nodes
    from docutils.parsers.rst import roles
    
    def deleted_role(_role, rawtext, text, _lineno, _inliner, options={}, _content=[]):
        roles.set_classes(options)
        options.setdefault('classes', []).append("del")
        return [nodes.inline(rawtext, text, **options)], []
    
    roles.register_canonical_role('del', deleted_role)
    

    Even better would be to extend the HTML writer to produce a proper tag, like this:

    from docutils import nodes
    from docutils.parsers.rst import roles
    from docutils.writers._html_base import HTMLTranslator
    
    class delnode(nodes.inline):
        pass
    
    def visit_delnode(self, node):
        self.body.append(self.starttag(node, 'del', ''))
    def depart_delnode(self, node):
        self.body.append('')
    
    HTMLTranslator.visit_delnode = visit_delnode
    HTMLTranslator.depart_delnode = depart_delnode
    
    def deleted_role(_role, rawtext, text, _lineno, _inliner, options={}, _content=[]):
        roles.set_classes(options)
        return [delnode(rawtext, text, **options)], []
    
    roles.register_canonical_role('del', deleted_role)
    

    You can trivially adjust it to produce an , of course.

提交回复
热议问题