gpt4 book ai didi

python - 如何在 reStructuredText 的代码块中强制使用空格

转载 作者:太空狗 更新时间:2023-10-29 21:59:00 27 4
gpt4 key购买 nike

在 RST 中,我们在 block 前面使用一些空格来表示这是一个代码块。因为 Python 也使用空格来缩进代码块,所以如果我正在编写 Python 代码,我希望我的 RST 代码块保留这些空格。我该怎么做?

假设我们有一个类:

class Test(object):

我们想写一个名为 __init__ 的方法,它是这个类的一个成员。此方法属于另一个代码块,但我们希望有一些视觉线索,以便读者知道第二个代码块是前一个代码块的延续。目前,我使用 # 标记代码块的垂直引导线,如下所示:

    def __init__(self):
pass
#

如果没有 #def __init__(self) 将以与 class Test(object) 相同的缩进级别打印。必须有更优雅的方式。

最佳答案

您需要定义自己的指令(标准 .. code:: 指令确实会吞噬空格,但您可以创建自己的指令而不是空格):

import re
from docutils.parsers.rst import directives

INDENTATION_RE = re.compile("^ *")

def measure_indentation(line):
return INDENTATION_RE.match(line).end()

class MyCodeBlock(directives.body.CodeBlock):
EXPECTED_INDENTATION = 3

def run(self):
block_lines = self.block_text.splitlines()
block_header_len = self.content_offset - self.lineno + 1
block_indentation = measure_indentation(self.block_text)
code_indentation = block_indentation + MyCodeBlock.EXPECTED_INDENTATION
self.content = [ln[code_indentation:] for ln in block_lines[block_header_len:]]
return super(MyCodeBlock, self).run()

directives.register_directive("my-code", MyCodeBlock)

当然你也可以用这个覆盖标准的 .. code:: 指令。

关于python - 如何在 reStructuredText 的代码块中强制使用空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7034745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com