Python sphinx 如何在Sphinx的html输出中处处包含源行号?

Python sphinx 如何在Sphinx的html输出中处处包含源行号?,python-sphinx,Python Sphinx,假设我正在为我的StructuredText/Sphinx东西编写一个自定义编辑器,带有“实时”html输出预览。输出是使用Sphinx构建的 源文件是纯重构文本。没有密码 一个可取的特性是,右键单击预览的某个部分会在源文件的正确行打开编辑器 要实现这一点,一种方法是将该行号放在html文件的每个标记中,例如使用类(例如,class=“…lineno-124”)。或者使用html注释 请注意,我不想在源文件中添加更多内容,只想在输出中的任何地方都包含行号 大概的行号就足够了 有人知道如何用Sph

假设我正在为我的StructuredText/Sphinx东西编写一个自定义编辑器,带有“实时”html输出预览。输出是使用Sphinx构建的

源文件是纯重构文本。没有密码

一个可取的特性是,右键单击预览的某个部分会在源文件的正确行打开编辑器

要实现这一点,一种方法是将该行号放在html文件的每个标记中,例如使用类(例如,
class=“…lineno-124”
)。或者使用html注释

请注意,我不想在源文件中添加更多内容,只想在输出中的任何地方都包含行号

大概的行号就足够了

有人知道如何用Sphinx、我的方式或其他方式来实现这一点吗?

我决定添加带有特定类的
标记“lineno lineno nnn”,其中nnn是重构文本源中的行号

指令
。。linenocomment::nnn
插入到源代码中每个新的未插入文本块之前,在实际解析之前(使用
'source-read'
事件挂钩)

linenocomment
是一个自定义指令,它在生成时推送
标记

半个解决方案仍然是一个解决方案

将docutils.nodes作为dn导入
来自docutils.parsers.rst导入指令
类linenocomment(dn.General,dn.Element):
通过
def visit_LINENNOCOMMENT_html(自我,节点):
self.body.append(self.starttag(node,'a',CLASS=“lineno-lineno-{}”.format(node['lineno']))
def depart_linenocomment_html(self,node):
self.body.append(“”)
类LineNoComment(指令):
必需的参数=1
可选参数=0
has_content=False
add_index=False
def运行(自):
node=linenocomment()
节点['lineno']=self.arguments[0]
返回[节点]
def插入行注释(应用程序、文档名、来源):
打印(来源)
新的_源=[]
最后一行为空=真
lineno=0
对于源[0]中的行。拆分('\n'):
如果line.strip()='':
最后一行为空=真
新的_source.append(行)
elif行[0]。isspace():
新的_source.append(行)
最后一行为空=假
如果不是最后一行,则为空:
新的_source.append(行)
其他:
最后一行为空=假
new_source.append(“…linenocomment::{}.”格式(lineno))
新的_source.append(“”)
新的_source.append(行)
lineno+=1
源[0]='\n'。加入(新源)
打印(来源)
def设置(应用程序):
app.add_节点(linenocomment,html=(访问linenocomment_html,离开linenocomment_html))
附录.添加指令('linenocomment',linenocomment)
app.connect('source-read',insert\u line\u comments)
返回{
“版本”:0.1
}