|
6 | 6 |
|
7 | 7 |
|
8 | 8 | class Directive:
|
9 |
| - def __init__(self, pattern: str, replacement: str, name: Union[str, None] = None): |
| 9 | + def __init__( |
| 10 | + self, pattern: str, replacement: str, |
| 11 | + name: Union[str, None] = None, |
| 12 | + flags: int = 0 |
| 13 | + ): |
10 | 14 | self.pattern = pattern
|
11 | 15 | self.replacement = replacement
|
12 | 16 | self.name = name
|
13 |
| - |
| 17 | + self.flags = flags |
| 18 | + |
| 19 | + |
| 20 | +# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-python-objects |
| 21 | +SPHINX_CROSS_REF_PYTHON = ( |
| 22 | + 'mod', |
| 23 | + 'func', |
| 24 | + 'data', |
| 25 | + 'const', |
| 26 | + 'class', |
| 27 | + 'meth', |
| 28 | + 'attr', |
| 29 | + 'exc', |
| 30 | + 'obj' |
| 31 | +) |
| 32 | + |
| 33 | +# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-c-constructs |
| 34 | +SPHINX_CROSS_REF_C = ( |
| 35 | + 'member', |
| 36 | + 'data', |
| 37 | + 'func', |
| 38 | + 'macro', |
| 39 | + 'struct', |
| 40 | + 'union', |
| 41 | + 'enum', |
| 42 | + 'enumerator', |
| 43 | + 'type' |
| 44 | +) |
| 45 | + |
| 46 | +# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing |
| 47 | +SPHINX_CROSS_REF_CPP = ( |
| 48 | + 'any', |
| 49 | + 'class', |
| 50 | + 'struct', |
| 51 | + 'func', |
| 52 | + 'member', |
| 53 | + 'var', |
| 54 | + 'type', |
| 55 | + 'concept', |
| 56 | + 'enum', |
| 57 | + 'enumerator' |
| 58 | +) |
| 59 | + |
| 60 | +# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#the-javascript-domain |
| 61 | +SPHINX_CROSS_REF_JS = ( |
| 62 | + 'mod', |
| 63 | + 'func', |
| 64 | + 'meth', |
| 65 | + 'class', |
| 66 | + 'data', |
| 67 | + 'attr' |
| 68 | +) |
| 69 | + |
| 70 | +# https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#the-restructuredtext-domain |
| 71 | +SPHINX_CROSS_REF_RST = ( |
| 72 | + 'dir', |
| 73 | + 'role' |
| 74 | +) |
| 75 | + |
| 76 | +# https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html |
| 77 | +SPHINX_CROSS_REF_OTHER = ( |
| 78 | + 'any', |
| 79 | + # https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#cross-referencing-other-items-of-interest |
| 80 | + 'envvar', |
| 81 | + 'token', |
| 82 | + 'keyword', |
| 83 | + 'option', |
| 84 | + 'term', |
| 85 | +) |
| 86 | + |
| 87 | +SPHINX_PARAM = ( |
| 88 | + 'param', |
| 89 | + 'parameter', |
| 90 | + 'arg', |
| 91 | + 'argument', |
| 92 | + 'key', |
| 93 | + 'keyword' |
| 94 | +) |
14 | 95 |
|
15 | 96 | SPHINX_RULES: List[Directive] = [
|
16 | 97 | Directive(
|
17 |
| - pattern=r':(func|meth|class|obj|term):`\.?(?P<name>[^`]+?)`', |
| 98 | + pattern=r':c:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_C)), |
18 | 99 | replacement=r'`\g<name>`'
|
19 | 100 | ),
|
20 | 101 | Directive(
|
21 |
| - pattern=r'^:param (?P<param>\S+):', |
22 |
| - replacement=r'- `\g<param>`:' |
| 102 | + pattern=r':cpp:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_CPP)), |
| 103 | + replacement=r'`\g<name>`' |
23 | 104 | ),
|
24 | 105 | Directive(
|
25 |
| - pattern=r'^:return:', |
26 |
| - replacement=r'Returns:' |
27 |
| - ) |
| 106 | + pattern=r':js:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_JS)), |
| 107 | + replacement=r'`\g<name>`' |
| 108 | + ), |
| 109 | + Directive( |
| 110 | + pattern=r'(:py)?:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_PYTHON)), |
| 111 | + replacement=r'`\g<name>`' |
| 112 | + ), |
| 113 | + Directive( |
| 114 | + pattern=r'(:rst)?:({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_RST)), |
| 115 | + replacement=r'`\g<name>`' |
| 116 | + ), |
| 117 | + Directive( |
| 118 | + pattern=r':({}):`\.?(?P<name>[^`]+?)`'.format('|'.join(SPHINX_CROSS_REF_OTHER)), |
| 119 | + replacement=r'`\g<name>`' |
| 120 | + ), |
| 121 | + Directive( |
| 122 | + pattern=r'^\s*:({}) (?P<type>\S+) (?P<param>\S+):'.format('|'.join(SPHINX_PARAM)), |
| 123 | + replacement=r'- `\g<param>` (`\g<type>`):', |
| 124 | + flags=re.MULTILINE |
| 125 | + ), |
| 126 | + Directive( |
| 127 | + pattern=r'^\s*:({}) (?P<param>\S+): (?P<desc>.*)(\n|\r\n?):type \2: (?P<type>.*)$'.format('|'.join(SPHINX_PARAM)), |
| 128 | + replacement=r'- `\g<param>` (\g<type>): \g<desc>', |
| 129 | + flags=re.MULTILINE |
| 130 | + ), |
| 131 | + Directive( |
| 132 | + pattern=r'^\s*:({}) (?P<param>\S+):'.format('|'.join(SPHINX_PARAM)), |
| 133 | + replacement=r'- `\g<param>`:', |
| 134 | + flags=re.MULTILINE |
| 135 | + ), |
| 136 | + Directive( |
| 137 | + pattern=r'^\s*:type (?P<param>\S+):', |
| 138 | + replacement=r' . Type: `\g<param>`:', |
| 139 | + flags=re.MULTILINE |
| 140 | + ), |
| 141 | + Directive( |
| 142 | + pattern=r'^\s*:(return|returns):', |
| 143 | + replacement=r'- returns:', |
| 144 | + flags=re.MULTILINE |
| 145 | + ), |
| 146 | + Directive( |
| 147 | + pattern=r'^\s*:rtype: (?P<type>\S+)', |
| 148 | + replacement=r'- return type: `\g<type>`', |
| 149 | + flags=re.MULTILINE |
| 150 | + ), |
| 151 | + Directive( |
| 152 | + pattern=r'^\s*:(raises|raise|except|exception) (?P<exception>\S+):', |
| 153 | + replacement=r'- raises `\g<exception>`:', |
| 154 | + flags=re.MULTILINE |
| 155 | + ), |
28 | 156 | ]
|
29 | 157 |
|
30 | 158 |
|
@@ -555,7 +683,7 @@ def flush_buffer():
|
555 | 683 | lines = '\n'.join(lines_buffer)
|
556 | 684 | # rst markup handling
|
557 | 685 | for directive in DIRECTIVES:
|
558 |
| - lines = re.sub(directive.pattern, directive.replacement, lines) |
| 686 | + lines = re.sub(directive.pattern, directive.replacement, lines, flags=directive.flags) |
559 | 687 |
|
560 | 688 | for (section, header) in RST_SECTIONS.items():
|
561 | 689 | lines = lines.replace(header, '\n#### ' + section + '\n')
|
|
0 commit comments