本文介绍了转义索引指令中的特殊字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用Sphinx为Prolog系统实现生成文档。PROLOG语言包括分别由复合术语(',')/2
和(;)/2
表示的合取和析取控制结构。
但由于逗号和分号的存在,以下索引指令不会生成正确的条目:
.. index:: (',')/2
.. index:: (;)/2
到目前为止,我一直无法找到字符转义的解决方案。我在Prolog!/0
控制构造中也遇到了同样的问题,但我通过编写以下代码找到了解决方法:
.. index:: !!/0
试图使用反斜杠,但无济于事。在我遗漏的指令中是否支持对特殊字符进行转义?是否有其他解决方案可以使用(',')/2
、(;)/2
和!/0
索引项?
推荐答案
<;(;)/2
>;
(;)/2
取决于IndexEntry类使用的Split_into函数。
- 我猜:
value.split(';', n - 1)
->;value.split('; ', n - 1)
- 我在#8904上发表了评论。
- 重写此代码似乎很容易。
Sphinx/util/init.py(Sphinx 4.2.0)
365
366 def split_into(n: int, type: str, value: str) -> List[str]:
367 """Split an index entry into a given number of parts at semicolons."""
368 parts = [x.strip() for x in value.split(';', n - 1)]
369 if sum(1 for part in parts if part) < n:
370 raise ValueError('invalid %s index entry %r' % (type, value))
371 return parts
372
<;!!/0
>;
!!/0
取决于索引指令/角色使用的PROCESS_INDEX_ENTRY函数和其他函数。
- 解决方法是使用
!!!/0
sphinx/util/nodes.py(Sphinx 4.2.0)
363
364 def process_index_entry(entry: str, targetid: str
365 ) -> List[Tuple[str, str, str, str, Optional[str]]]:
366 from sphinx.domains.python import pairindextypes
367
368 indexentries: List[Tuple[str, str, str, str, Optional[str]]] = []
369 entry = entry.strip()
370 oentry = entry
371 main = ''
372 if entry.startswith('!'):
373 main = 'main'
374 entry = entry[1:].lstrip()
375 for type in pairindextypes:
376 if entry.startswith(type + ':'):
377 value = entry[len(type) + 1:].strip()
378 value = pairindextypes[type] + '; ' + value
379 indexentries.append(('pair', value, targetid, main, None))
380 break
381 else:
Sphinx/Domones/index.py(Sphinx 4.2.0)
62
63 class IndexDirective(SphinxDirective):
64 """
65 Directive to add entries to the index.
66 """
...
90 for entry in arguments:
91 indexnode['entries'].extend(process_index_entry(entry, targetnode['ids'][0]))
92 return [indexnode, targetnode]
...
94
95 class IndexRole(ReferenceRole):
96 def run(self) -> Tuple[List[Node], List[system_message]]:
...
102 else:
103 # otherwise we just create a single entry
104 if self.target.startswith('!'):
105 title = self.title[1:]
106 entries = [('single', self.target[1:], target_id, 'main', None)]
107 else:
其他
理想但困难的解决方案是开发sphinx/domains/prolog.py
。
这篇关于转义索引指令中的特殊字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!