mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Decl styling, convert C
This commit is contained in:
parent
a1ac0fd1ec
commit
9cd9e124ff
@ -9,8 +9,7 @@
|
||||
"""
|
||||
|
||||
import re
|
||||
from typing import (Any, Callable, Dict, Generator, Iterator, List, Tuple, Type, TypeVar,
|
||||
Union, cast)
|
||||
from typing import Any, Callable, Dict, Generator, Iterator, List, Tuple, TypeVar, Union, cast
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.nodes import Element, Node, TextElement, system_message
|
||||
@ -132,6 +131,10 @@ class ASTIdentifier(ASTBaseBase):
|
||||
prefix: str, symbol: "Symbol") -> None:
|
||||
# note: slightly different signature of describe_signature due to the prefix
|
||||
verify_description_mode(mode)
|
||||
if self.is_anon():
|
||||
node = addnodes.desc_sig_name(text="[anonymous]")
|
||||
else:
|
||||
node = addnodes.desc_sig_name(self.identifier, self.identifier)
|
||||
if mode == 'markType':
|
||||
targetText = prefix + self.identifier
|
||||
pnode = addnodes.pending_xref('', refdomain='c',
|
||||
@ -139,21 +142,14 @@ class ASTIdentifier(ASTBaseBase):
|
||||
reftarget=targetText, modname=None,
|
||||
classname=None)
|
||||
pnode['c:parent_key'] = symbol.get_lookup_key()
|
||||
if self.is_anon():
|
||||
pnode += nodes.strong(text="[anonymous]")
|
||||
else:
|
||||
pnode += nodes.Text(self.identifier)
|
||||
pnode += node
|
||||
signode += pnode
|
||||
elif mode == 'lastIsName':
|
||||
if self.is_anon():
|
||||
signode += nodes.strong(text="[anonymous]")
|
||||
else:
|
||||
signode += addnodes.desc_name(self.identifier, self.identifier)
|
||||
nameNode = addnodes.desc_name()
|
||||
nameNode += node
|
||||
signode += nameNode
|
||||
elif mode == 'noneIsName':
|
||||
if self.is_anon():
|
||||
signode += nodes.strong(text="[anonymous]")
|
||||
else:
|
||||
signode += nodes.Text(self.identifier)
|
||||
signode += node
|
||||
else:
|
||||
raise Exception('Unknown description mode: %s' % mode)
|
||||
|
||||
@ -184,18 +180,18 @@ class ASTNestedName(ASTBase):
|
||||
# just print the name part, with template args, not template params
|
||||
if mode == 'noneIsName':
|
||||
if self.rooted:
|
||||
assert False, "Can this happen?" # TODO
|
||||
signode += nodes.Text('.')
|
||||
for i in range(len(self.names)):
|
||||
if i != 0:
|
||||
assert False, "Can this happen?" # TODO
|
||||
signode += nodes.Text('.')
|
||||
n = self.names[i]
|
||||
n.describe_signature(signode, mode, env, '', symbol)
|
||||
elif mode == 'param':
|
||||
assert not self.rooted, str(self)
|
||||
assert len(self.names) == 1
|
||||
node = nodes.emphasis()
|
||||
self.names[0].describe_signature(node, 'noneIsName', env, '', symbol)
|
||||
signode += node
|
||||
self.names[0].describe_signature(signode, 'noneIsName', env, '', symbol)
|
||||
elif mode == 'markType' or mode == 'lastIsName' or mode == 'markName':
|
||||
# Each element should be a pending xref targeting the complete
|
||||
# prefix.
|
||||
@ -213,13 +209,13 @@ class ASTNestedName(ASTBase):
|
||||
if self.rooted:
|
||||
prefix += '.'
|
||||
if mode == 'lastIsName' and len(names) == 0:
|
||||
signode += nodes.Text('.')
|
||||
signode += addnodes.desc_sig_punctuation('.', '.')
|
||||
else:
|
||||
dest += nodes.Text('.')
|
||||
dest += addnodes.desc_sig_punctuation('.', '.')
|
||||
for i in range(len(names)):
|
||||
ident = names[i]
|
||||
if not first:
|
||||
dest += nodes.Text('.')
|
||||
dest += addnodes.desc_sig_punctuation('.', '.')
|
||||
prefix += '.'
|
||||
first = False
|
||||
txt_ident = str(ident)
|
||||
@ -228,7 +224,7 @@ class ASTNestedName(ASTBase):
|
||||
prefix += txt_ident
|
||||
if mode == 'lastIsName':
|
||||
if len(self.names) > 1:
|
||||
dest += addnodes.desc_addname('.', '.')
|
||||
dest += addnodes.desc_sig_punctuation('.', '.')
|
||||
signode += dest
|
||||
self.names[-1].describe_signature(signode, mode, env, '', symbol)
|
||||
else:
|
||||
@ -262,7 +258,8 @@ class ASTBooleanLiteral(ASTLiteral):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text(str(self)))
|
||||
txt = str(self)
|
||||
signode += addnodes.desc_sig_keyword(txt, txt)
|
||||
|
||||
|
||||
class ASTNumberLiteral(ASTLiteral):
|
||||
@ -275,7 +272,7 @@ class ASTNumberLiteral(ASTLiteral):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
txt = str(self)
|
||||
signode.append(nodes.Text(txt, txt))
|
||||
signode += addnodes.desc_sig_literal_number(txt, txt)
|
||||
|
||||
|
||||
class ASTCharLiteral(ASTLiteral):
|
||||
@ -297,7 +294,7 @@ class ASTCharLiteral(ASTLiteral):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
txt = str(self)
|
||||
signode.append(nodes.Text(txt, txt))
|
||||
signode += addnodes.desc_sig_literal_char(txt, txt)
|
||||
|
||||
|
||||
class ASTStringLiteral(ASTLiteral):
|
||||
@ -310,7 +307,7 @@ class ASTStringLiteral(ASTLiteral):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
txt = str(self)
|
||||
signode.append(nodes.Text(txt, txt))
|
||||
signode += addnodes.desc_sig_literal_string(txt, txt)
|
||||
|
||||
|
||||
class ASTIdExpression(ASTExpression):
|
||||
@ -341,9 +338,9 @@ class ASTParenExpr(ASTExpression):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('(', '('))
|
||||
signode += addnodes.desc_sig_punctuation('(', '(')
|
||||
self.expr.describe_signature(signode, mode, env, symbol)
|
||||
signode.append(nodes.Text(')', ')'))
|
||||
signode += addnodes.desc_sig_punctuation(')', ')')
|
||||
|
||||
|
||||
# Postfix expressions
|
||||
@ -374,9 +371,9 @@ class ASTPostfixArray(ASTPostfixOp):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('['))
|
||||
signode += addnodes.desc_sig_punctuation('[', '[')
|
||||
self.expr.describe_signature(signode, mode, env, symbol)
|
||||
signode.append(nodes.Text(']'))
|
||||
signode += addnodes.desc_sig_punctuation(']', ']')
|
||||
|
||||
|
||||
class ASTPostfixInc(ASTPostfixOp):
|
||||
@ -385,7 +382,7 @@ class ASTPostfixInc(ASTPostfixOp):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('++'))
|
||||
signode += addnodes.desc_sig_operator('++', '++')
|
||||
|
||||
|
||||
class ASTPostfixDec(ASTPostfixOp):
|
||||
@ -394,7 +391,7 @@ class ASTPostfixDec(ASTPostfixOp):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('--'))
|
||||
signode += addnodes.desc_sig_operator('--', '--')
|
||||
|
||||
|
||||
class ASTPostfixMemberOfPointer(ASTPostfixOp):
|
||||
@ -406,7 +403,7 @@ class ASTPostfixMemberOfPointer(ASTPostfixOp):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('->'))
|
||||
signode += addnodes.desc_sig_operator('->', '->')
|
||||
self.name.describe_signature(signode, 'noneIsName', env, symbol)
|
||||
|
||||
|
||||
@ -444,10 +441,12 @@ class ASTUnaryOpExpr(ASTExpression):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text(self.op))
|
||||
if self.op[0] in 'cn':
|
||||
signode.append(nodes.Text(" "))
|
||||
self.expr.describe_signature(signode, mode, env, symbol)
|
||||
signode += addnodes.desc_sig_keyword(self.op, self.op)
|
||||
signode += addnodes.desc_sig_space()
|
||||
else:
|
||||
signode += addnodes.desc_sig_operator(self.op, self.op)
|
||||
self.expr.describe_signature(signode, mode, env, symbol)
|
||||
|
||||
|
||||
class ASTSizeofType(ASTExpression):
|
||||
@ -459,9 +458,10 @@ class ASTSizeofType(ASTExpression):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('sizeof('))
|
||||
signode += addnodes.desc_sig_keyword('sizeof', 'sizeof')
|
||||
signode += addnodes.desc_sig_punctuation('(', '(')
|
||||
self.typ.describe_signature(signode, mode, env, symbol)
|
||||
signode.append(nodes.Text(')'))
|
||||
signode += addnodes.desc_sig_punctuation(')', ')')
|
||||
|
||||
|
||||
class ASTSizeofExpr(ASTExpression):
|
||||
@ -473,7 +473,8 @@ class ASTSizeofExpr(ASTExpression):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('sizeof '))
|
||||
signode += addnodes.desc_sig_keyword('sizeof', 'sizeof')
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.expr.describe_signature(signode, mode, env, symbol)
|
||||
|
||||
|
||||
@ -486,9 +487,10 @@ class ASTAlignofExpr(ASTExpression):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('alignof('))
|
||||
signode += addnodes.desc_sig_keyword('alignof', 'alignof')
|
||||
signode += addnodes.desc_sig_punctuation('(', '(')
|
||||
self.typ.describe_signature(signode, mode, env, symbol)
|
||||
signode.append(nodes.Text(')'))
|
||||
signode += addnodes.desc_sig_punctuation(')', ')')
|
||||
|
||||
|
||||
# Other expressions
|
||||
@ -508,9 +510,9 @@ class ASTCastExpr(ASTExpression):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode.append(nodes.Text('('))
|
||||
signode += addnodes.desc_sig_punctuation('(', '(')
|
||||
self.typ.describe_signature(signode, mode, env, symbol)
|
||||
signode.append(nodes.Text(')'))
|
||||
signode += addnodes.desc_sig_punctuation(')', ')')
|
||||
self.expr.describe_signature(signode, mode, env, symbol)
|
||||
|
||||
|
||||
@ -535,9 +537,13 @@ class ASTBinOpExpr(ASTBase):
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
self.exprs[0].describe_signature(signode, mode, env, symbol)
|
||||
for i in range(1, len(self.exprs)):
|
||||
signode.append(nodes.Text(' '))
|
||||
signode.append(nodes.Text(self.ops[i - 1]))
|
||||
signode.append(nodes.Text(' '))
|
||||
signode += addnodes.desc_sig_space()
|
||||
op = self.ops[i - 1]
|
||||
if ord(op[0]) >= ord('a') and ord(op[0]) <= ord('z'):
|
||||
signode += addnodes.desc_sig_keyword(op, op)
|
||||
else:
|
||||
signode += addnodes.desc_sig_operator(op, op)
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.exprs[i].describe_signature(signode, mode, env, symbol)
|
||||
|
||||
|
||||
@ -562,9 +568,13 @@ class ASTAssignmentExpr(ASTExpression):
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
self.exprs[0].describe_signature(signode, mode, env, symbol)
|
||||
for i in range(1, len(self.exprs)):
|
||||
signode.append(nodes.Text(' '))
|
||||
signode.append(nodes.Text(self.ops[i - 1]))
|
||||
signode.append(nodes.Text(' '))
|
||||
signode += addnodes.desc_sig_space()
|
||||
op = self.ops[i - 1]
|
||||
if ord(op[0]) >= ord('a') and ord(op[0]) <= ord('z'):
|
||||
signode += addnodes.desc_sig_keyword(op, op)
|
||||
else:
|
||||
signode += addnodes.desc_sig_operator(op, op)
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.exprs[i].describe_signature(signode, mode, env, symbol)
|
||||
|
||||
|
||||
@ -580,7 +590,7 @@ class ASTFallbackExpr(ASTExpression):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode += nodes.Text(self.expr)
|
||||
signode += nodes.literal(self.expr, self.expr)
|
||||
|
||||
|
||||
################################################################################
|
||||
@ -600,7 +610,7 @@ class ASTTrailingTypeSpecFundamental(ASTTrailingTypeSpec):
|
||||
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
signode += nodes.Text(str(self.name))
|
||||
signode += addnodes.desc_sig_keyword_type(self.name, self.name)
|
||||
|
||||
|
||||
class ASTTrailingTypeSpecName(ASTTrailingTypeSpec):
|
||||
@ -623,8 +633,8 @@ class ASTTrailingTypeSpecName(ASTTrailingTypeSpec):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
if self.prefix:
|
||||
signode += addnodes.desc_annotation(self.prefix, self.prefix)
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_keyword(self.prefix, self.prefix)
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.nestedName.describe_signature(signode, mode, env, symbol=symbol)
|
||||
|
||||
|
||||
@ -647,7 +657,7 @@ class ASTFunctionParameter(ASTBase):
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
if self.ellipsis:
|
||||
signode += nodes.Text('...')
|
||||
signode += addnodes.desc_sig_punctuation('...', '...')
|
||||
else:
|
||||
self.arg.describe_signature(signode, mode, env, symbol=symbol)
|
||||
|
||||
@ -688,17 +698,18 @@ class ASTParameters(ASTBase):
|
||||
paramlist += param
|
||||
signode += paramlist
|
||||
else:
|
||||
signode += nodes.Text('(', '(')
|
||||
signode += addnodes.desc_sig_punctuation('(', '(')
|
||||
first = True
|
||||
for arg in self.args:
|
||||
if not first:
|
||||
signode += nodes.Text(', ', ', ')
|
||||
signode += addnodes.desc_sig_punctuation(',', ',')
|
||||
signode += addnodes.desc_sig_space()
|
||||
first = False
|
||||
arg.describe_signature(signode, 'markType', env, symbol=symbol)
|
||||
signode += nodes.Text(')', ')')
|
||||
signode += addnodes.desc_sig_punctuation(')', ')')
|
||||
|
||||
for attr in self.attrs:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
attr.describe_signature(signode)
|
||||
|
||||
|
||||
@ -744,12 +755,12 @@ class ASTDeclSpecsSimple(ASTBaseBase):
|
||||
def describe_signature(self, modifiers: List[Node]) -> None:
|
||||
def _add(modifiers: List[Node], text: str) -> None:
|
||||
if len(modifiers) > 0:
|
||||
modifiers.append(nodes.Text(' '))
|
||||
modifiers.append(addnodes.desc_annotation(text, text))
|
||||
modifiers.append(addnodes.desc_sig_space())
|
||||
modifiers.append(addnodes.desc_sig_keyword(text, text))
|
||||
|
||||
for attr in self.attrs:
|
||||
if len(modifiers) > 0:
|
||||
modifiers.append(nodes.Text(' '))
|
||||
modifiers.append(addnodes.desc_sig_space())
|
||||
modifiers.append(attr.describe_signature(modifiers))
|
||||
if self.storage:
|
||||
_add(modifiers, self.storage)
|
||||
@ -799,24 +810,19 @@ class ASTDeclSpecs(ASTBase):
|
||||
verify_description_mode(mode)
|
||||
modifiers: List[Node] = []
|
||||
|
||||
def _add(modifiers: List[Node], text: str) -> None:
|
||||
if len(modifiers) > 0:
|
||||
modifiers.append(nodes.Text(' '))
|
||||
modifiers.append(addnodes.desc_annotation(text, text))
|
||||
|
||||
self.leftSpecs.describe_signature(modifiers)
|
||||
|
||||
for m in modifiers:
|
||||
signode += m
|
||||
if self.trailingTypeSpec:
|
||||
if len(modifiers) > 0:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.trailingTypeSpec.describe_signature(signode, mode, env,
|
||||
symbol=symbol)
|
||||
modifiers = []
|
||||
self.rightSpecs.describe_signature(modifiers)
|
||||
if len(modifiers) > 0:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
for m in modifiers:
|
||||
signode += m
|
||||
|
||||
@ -857,13 +863,13 @@ class ASTArray(ASTBase):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
signode.append(nodes.Text("["))
|
||||
signode += addnodes.desc_sig_punctuation('[', '[')
|
||||
addSpace = False
|
||||
|
||||
def _add(signode: TextElement, text: str) -> bool:
|
||||
if addSpace:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_annotation(text, text)
|
||||
signode += addnodes.desc_sig_space()
|
||||
signode += addnodes.desc_sig_keyword(text, text)
|
||||
return True
|
||||
|
||||
if self.static:
|
||||
@ -875,12 +881,12 @@ class ASTArray(ASTBase):
|
||||
if self.const:
|
||||
addSpace = _add(signode, 'const')
|
||||
if self.vla:
|
||||
signode.append(nodes.Text('*'))
|
||||
signode += addnodes.desc_sig_punctuation('*', '*')
|
||||
elif self.size:
|
||||
if addSpace:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.size.describe_signature(signode, 'markType', env, symbol)
|
||||
signode.append(nodes.Text("]"))
|
||||
signode += addnodes.desc_sig_punctuation(']', ']')
|
||||
|
||||
|
||||
class ASTDeclarator(ASTBase):
|
||||
@ -964,7 +970,9 @@ class ASTDeclaratorNameBitField(ASTDeclarator):
|
||||
verify_description_mode(mode)
|
||||
if self.declId:
|
||||
self.declId.describe_signature(signode, mode, env, symbol)
|
||||
signode += nodes.Text(' : ', ' : ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
signode += addnodes.desc_sig_punctuation(':', ':')
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.size.describe_signature(signode, mode, env, symbol)
|
||||
|
||||
|
||||
@ -1016,28 +1024,28 @@ class ASTDeclaratorPtr(ASTDeclarator):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
signode += nodes.Text("*")
|
||||
signode += addnodes.desc_sig_punctuation('*', '*')
|
||||
for a in self.attrs:
|
||||
a.describe_signature(signode)
|
||||
if len(self.attrs) > 0 and (self.restrict or self.volatile or self.const):
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
|
||||
def _add_anno(signode: TextElement, text: str) -> None:
|
||||
signode += addnodes.desc_annotation(text, text)
|
||||
signode += addnodes.desc_sig_keyword(text, text)
|
||||
|
||||
if self.restrict:
|
||||
_add_anno(signode, 'restrict')
|
||||
if self.volatile:
|
||||
if self.restrict:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
_add_anno(signode, 'volatile')
|
||||
if self.const:
|
||||
if self.restrict or self.volatile:
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
_add_anno(signode, 'const')
|
||||
if self.const or self.volatile or self.restrict or len(self.attrs) > 0:
|
||||
if self.next.require_space_after_declSpecs():
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.next.describe_signature(signode, mode, env, symbol)
|
||||
|
||||
|
||||
@ -1070,9 +1078,9 @@ class ASTDeclaratorParen(ASTDeclarator):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
signode += nodes.Text('(')
|
||||
signode += addnodes.desc_sig_punctuation('(', '(')
|
||||
self.inner.describe_signature(signode, mode, env, symbol)
|
||||
signode += nodes.Text(')')
|
||||
signode += addnodes.desc_sig_punctuation(')', ')')
|
||||
self.next.describe_signature(signode, "noneIsName", env, symbol)
|
||||
|
||||
|
||||
@ -1090,15 +1098,16 @@ class ASTParenExprList(ASTBaseParenExprList):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
signode.append(nodes.Text('('))
|
||||
signode += addnodes.desc_sig_punctuation('(', '(')
|
||||
first = True
|
||||
for e in self.exprs:
|
||||
if not first:
|
||||
signode.append(nodes.Text(', '))
|
||||
signode += addnodes.desc_sig_punctuation(',', ',')
|
||||
signode += addnodes.desc_sig_space()
|
||||
else:
|
||||
first = False
|
||||
e.describe_signature(signode, mode, env, symbol)
|
||||
signode.append(nodes.Text(')'))
|
||||
signode += addnodes.desc_sig_punctuation(')', ')')
|
||||
|
||||
|
||||
class ASTBracedInitList(ASTBase):
|
||||
@ -1114,17 +1123,18 @@ class ASTBracedInitList(ASTBase):
|
||||
def describe_signature(self, signode: TextElement, mode: str,
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
signode.append(nodes.Text('{'))
|
||||
signode += addnodes.desc_sig_punctuation('{', '{')
|
||||
first = True
|
||||
for e in self.exprs:
|
||||
if not first:
|
||||
signode.append(nodes.Text(', '))
|
||||
signode += addnodes.desc_sig_punctuation(',', ',')
|
||||
signode += addnodes.desc_sig_space()
|
||||
else:
|
||||
first = False
|
||||
e.describe_signature(signode, mode, env, symbol)
|
||||
if self.trailingComma:
|
||||
signode.append(nodes.Text(','))
|
||||
signode.append(nodes.Text('}'))
|
||||
signode += addnodes.desc_sig_punctuation(',', ',')
|
||||
signode += addnodes.desc_sig_punctuation('}', '}')
|
||||
|
||||
|
||||
class ASTInitializer(ASTBase):
|
||||
@ -1144,7 +1154,9 @@ class ASTInitializer(ASTBase):
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
if self.hasAssign:
|
||||
signode.append(nodes.Text(' = '))
|
||||
signode += addnodes.desc_sig_space()
|
||||
signode += addnodes.desc_sig_punctuation('=', '=')
|
||||
signode += addnodes.desc_sig_space()
|
||||
self.value.describe_signature(signode, 'markType', env, symbol)
|
||||
|
||||
|
||||
@ -1187,7 +1199,7 @@ class ASTType(ASTBase):
|
||||
self.declSpecs.describe_signature(signode, 'markType', env, symbol)
|
||||
if (self.decl.require_space_after_declSpecs() and
|
||||
len(str(self.declSpecs)) > 0):
|
||||
signode += nodes.Text(' ')
|
||||
signode += addnodes.desc_sig_space()
|
||||
# for parameters that don't really declare new names we get 'markType',
|
||||
# this should not be propagated, but be 'noneIsName'.
|
||||
if mode == 'markType':
|
||||
@ -1241,10 +1253,10 @@ class ASTMacroParameter(ASTBase):
|
||||
env: "BuildEnvironment", symbol: "Symbol") -> None:
|
||||
verify_description_mode(mode)
|
||||
if self.ellipsis:
|
||||
signode += nodes.Text('...')
|
||||
signode += addnodes.desc_sig_punctuation('...', '...')
|
||||
elif self.variadic:
|
||||
name = str(self)
|
||||
signode += nodes.emphasis(name, name)
|
||||
signode += addnodes.desc_sig_name(name, name)
|
||||
else:
|
||||
self.arg.describe_signature(signode, mode, env, symbol=symbol)
|
||||
|
||||
@ -1427,23 +1439,27 @@ class ASTDeclaration(ASTBaseBase):
|
||||
elif self.objectType == 'macro':
|
||||
pass
|
||||
elif self.objectType == 'struct':
|
||||
mainDeclNode += addnodes.desc_annotation('struct ', 'struct ')
|
||||
mainDeclNode += addnodes.desc_sig_keyword('struct', 'struct')
|
||||
mainDeclNode += addnodes.desc_sig_space()
|
||||
elif self.objectType == 'union':
|
||||
mainDeclNode += addnodes.desc_annotation('union ', 'union ')
|
||||
mainDeclNode += addnodes.desc_sig_keyword('union', 'union')
|
||||
mainDeclNode += addnodes.desc_sig_space()
|
||||
elif self.objectType == 'enum':
|
||||
mainDeclNode += addnodes.desc_annotation('enum ', 'enum ')
|
||||
mainDeclNode += addnodes.desc_sig_keyword('enum', 'enum')
|
||||
mainDeclNode += addnodes.desc_sig_space()
|
||||
elif self.objectType == 'enumerator':
|
||||
mainDeclNode += addnodes.desc_annotation('enumerator ', 'enumerator ')
|
||||
mainDeclNode += addnodes.desc_sig_keyword('enumerator', 'enumerator')
|
||||
mainDeclNode += addnodes.desc_sig_space()
|
||||
elif self.objectType == 'type':
|
||||
decl = cast(ASTType, self.declaration)
|
||||
prefix = decl.get_type_declaration_prefix()
|
||||
prefix += ' '
|
||||
mainDeclNode += addnodes.desc_annotation(prefix, prefix)
|
||||
mainDeclNode += addnodes.desc_sig_keyword(prefix, prefix)
|
||||
mainDeclNode += addnodes.desc_sig_space()
|
||||
else:
|
||||
assert False
|
||||
self.declaration.describe_signature(mainDeclNode, mode, env, self.symbol)
|
||||
if self.semicolon:
|
||||
mainDeclNode += nodes.Text(';')
|
||||
mainDeclNode += addnodes.desc_sig_punctuation(';', ';')
|
||||
|
||||
|
||||
class SymbolLookupResult:
|
||||
@ -3661,31 +3677,28 @@ class CExprRole(SphinxRole):
|
||||
if asCode:
|
||||
# render the expression as inline code
|
||||
self.class_type = 'c-expr'
|
||||
self.node_type: Type[TextElement] = nodes.literal
|
||||
else:
|
||||
# render the expression as inline text
|
||||
self.class_type = 'c-texpr'
|
||||
self.node_type = nodes.inline
|
||||
|
||||
def run(self) -> Tuple[List[Node], List[system_message]]:
|
||||
text = self.text.replace('\n', ' ')
|
||||
parser = DefinitionParser(text, location=self.get_source_info(),
|
||||
config=self.env.config)
|
||||
# attempt to mimic XRefRole classes, except that...
|
||||
classes = ['xref', 'c', self.class_type]
|
||||
try:
|
||||
ast = parser.parse_expression()
|
||||
except DefinitionError as ex:
|
||||
logger.warning('Unparseable C expression: %r\n%s', text, ex,
|
||||
location=self.get_source_info())
|
||||
# see below
|
||||
return [self.node_type(text, text, classes=classes)], []
|
||||
return [addnodes.desc_inline('c', text, text, classes=[self.class_type])], []
|
||||
parentSymbol = self.env.temp_data.get('c:parent_symbol', None)
|
||||
if parentSymbol is None:
|
||||
parentSymbol = self.env.domaindata['c']['root_symbol']
|
||||
# ...most if not all of these classes should really apply to the individual references,
|
||||
# not the container node
|
||||
signode = self.node_type(classes=classes)
|
||||
signode = addnodes.desc_inline('c', classes=[self.class_type])
|
||||
ast.describe_signature(signode, 'markType', self.env, parentSymbol)
|
||||
return [signode], []
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user