python 使用nested_parse解析原始rst字符串

qxsslcnc  于 2023-01-11  发布在  Python
关注(0)|答案(1)|浏览(131)

我正在编写一个将自定义指令转换为flat-table的sphinx扩展。
.run(self)方法内部,我用纯.rst构建了一个完整的flat-table声明,我希望将该字符串提供给内部解析器,以便将其转换为Node,我将从.run(self)返回该字符串。
我相信nested_parse是正确的方法,它通常用于解析指令中嵌套的内容,但我认为它可以用于任何有效的字符串数组。RST

def run(self):
        decl = '''
.. flat-table:: Characteristics of the BLE badge
    :header-rows: 1

    * - Service
      - Characteristic
      - Properties
    * - :rspan:`2` 0xfee7
      - 0xfec7
      - WRITE
    * - 0xfec8
      - INDICATE
    * - 0xfec9
      - READ
    * - 0xfee0
      - 0xfee1

        '''

        table_node = nodes.paragraph()
        self.state.nested_parse(decl.split('\n'), 0, table_node)
        
        return [table_node]

但是,这失败了:

Exception occurred:
  File "C:\Users\200207121\AppData\Roaming\Python\Python38\site-packages\docutils\parsers\rst\states.py", line 287, in nested_parse
    if block.parent and (len(block) - block_length) != 0:
AttributeError: 'list' object has no attribute 'parent'

要使用nested_parse解析原始的.rst文本,我应该做些什么?

s8vozzvw

s8vozzvw1#

nested_parse期望内容是StringList

from docutils.statemachine import StringList
self.state.nested_parse(StringList(decl.split('\n')), 0, table_node)

相关问题