mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Added basic modifier support
This commit is contained in:
@@ -29,6 +29,7 @@ _identifier_re = re.compile(r'\b(~?[a-zA-Z_][a-zA-Z0-9_]*)\b')
|
|||||||
_whitespace_re = re.compile(r'\s+(?u)')
|
_whitespace_re = re.compile(r'\s+(?u)')
|
||||||
_string_re = re.compile(r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'"
|
_string_re = re.compile(r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'"
|
||||||
r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.S)
|
r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.S)
|
||||||
|
_visibility_re = re.compile(r'\b(public|private|protected)\b')
|
||||||
_operator_re = re.compile(r'''(?x)
|
_operator_re = re.compile(r'''(?x)
|
||||||
\[\s*\]
|
\[\s*\]
|
||||||
| \(\s*\)
|
| \(\s*\)
|
||||||
@@ -268,14 +269,24 @@ class PrefixedNameDefExpr(DefExpr):
|
|||||||
|
|
||||||
class NamedDefExpr(DefExpr):
|
class NamedDefExpr(DefExpr):
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name, visibility, static):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
self.visibility = visibility
|
||||||
|
self.static = static
|
||||||
|
|
||||||
|
def get_modifiers(self):
|
||||||
|
rv = []
|
||||||
|
if self.visibility != 'public':
|
||||||
|
rv.append(self.visibility)
|
||||||
|
if self.static:
|
||||||
|
rv.append(u'static')
|
||||||
|
return rv
|
||||||
|
|
||||||
|
|
||||||
class TypeObjDefExpr(NamedDefExpr):
|
class TypeObjDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
def __init__(self, typename, name):
|
def __init__(self, name, visibility, static, typename):
|
||||||
NamedDefExpr.__init__(self, name)
|
NamedDefExpr.__init__(self, name, visibility, static)
|
||||||
self.typename = typename
|
self.typename = typename
|
||||||
|
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
@@ -284,15 +295,18 @@ class TypeObjDefExpr(NamedDefExpr):
|
|||||||
return u'%s__%s' % (self.name.get_id(), self.typename.get_id())
|
return u'%s__%s' % (self.name.get_id(), self.typename.get_id())
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
buf = self.get_modifiers()
|
||||||
if self.typename is None:
|
if self.typename is None:
|
||||||
return unicode(self.name)
|
buf.append(unicode(self.name))
|
||||||
return u'%s %s' % (self.typename, self.name)
|
else:
|
||||||
|
buf.extend(map(unicode, (self.typename, self.name)))
|
||||||
|
return u' '.join(buf)
|
||||||
|
|
||||||
|
|
||||||
class MemberObjDefExpr(NamedDefExpr):
|
class MemberObjDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
def __init__(self, typename, name, value):
|
def __init__(self, name, visibility, static, typename, value):
|
||||||
NamedDefExpr.__init__(self, name)
|
NamedDefExpr.__init__(self, name, visibility, static)
|
||||||
self.typename = typename
|
self.typename = typename
|
||||||
self.value = value
|
self.value = value
|
||||||
|
|
||||||
@@ -300,16 +314,18 @@ class MemberObjDefExpr(NamedDefExpr):
|
|||||||
return u'%s__%s' % (self.name.get_id(), self.typename.get_id())
|
return u'%s__%s' % (self.name.get_id(), self.typename.get_id())
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
rv = u'%s %s' % (self.typename, self.name)
|
buf = self.get_modifiers()
|
||||||
|
buf.append(u'%s %s' % (self.typename, self.name))
|
||||||
if self.value is not None:
|
if self.value is not None:
|
||||||
rv = u'%s = %s' % (rv, self.value)
|
buf.append(u'%s = %s' % (rv, self.value))
|
||||||
return rv
|
return u' '.join(buf)
|
||||||
|
|
||||||
|
|
||||||
class FuncDefExpr(NamedDefExpr):
|
class FuncDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
def __init__(self, name, rv, signature, const, pure_virtual):
|
def __init__(self, name, visibility, static, rv, signature,
|
||||||
NamedDefExpr.__init__(self, name)
|
const, pure_virtual):
|
||||||
|
NamedDefExpr.__init__(self, name, visibility, static)
|
||||||
self.rv = rv
|
self.rv = rv
|
||||||
self.signature = signature
|
self.signature = signature
|
||||||
self.const = const
|
self.const = const
|
||||||
@@ -324,25 +340,30 @@ class FuncDefExpr(NamedDefExpr):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'%s%s(%s)%s%s' % (
|
buf = self.get_modifiers()
|
||||||
self.rv is not None and unicode(self.rv) + u' ' or u'',
|
if self.rv is not None:
|
||||||
self.name,
|
buf.append(unicode(self.rv))
|
||||||
u', '.join(map(unicode, self.signature)),
|
buf.append(u'%s(%s)' % (self.name, u', '.join(
|
||||||
self.const and u' const' or u'',
|
map(unicode, self.signature))))
|
||||||
self.pure_virtual and ' = 0' or ''
|
if self.const:
|
||||||
)
|
buf.append(u'const')
|
||||||
|
if self.pure_virtual:
|
||||||
|
buf.append(u'= 0')
|
||||||
|
return u' '.join(buf)
|
||||||
|
|
||||||
|
|
||||||
class ClassDefExpr(NamedDefExpr):
|
class ClassDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name, visibility, static):
|
||||||
NamedDefExpr.__init__(self, name)
|
NamedDefExpr.__init__(self, name, visibility, static)
|
||||||
|
|
||||||
def get_id(self):
|
def get_id(self):
|
||||||
return self.name.get_id()
|
return self.name.get_id()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return unicode(self.name)
|
buf = self.get_modifiers()
|
||||||
|
buf.append(unicode(self.name))
|
||||||
|
return u' '.join(buf)
|
||||||
|
|
||||||
|
|
||||||
class DefinitionParser(object):
|
class DefinitionParser(object):
|
||||||
@@ -514,6 +535,7 @@ class DefinitionParser(object):
|
|||||||
return TemplateDefExpr(typename, args)
|
return TemplateDefExpr(typename, args)
|
||||||
|
|
||||||
def _parse_type(self, in_template=False):
|
def _parse_type(self, in_template=False):
|
||||||
|
self.skip_ws()
|
||||||
result = []
|
result = []
|
||||||
modifiers = []
|
modifiers = []
|
||||||
|
|
||||||
@@ -623,10 +645,18 @@ class DefinitionParser(object):
|
|||||||
pure_virtual = False
|
pure_virtual = False
|
||||||
return args, const, pure_virtual
|
return args, const, pure_virtual
|
||||||
|
|
||||||
|
def _parse_visibility_static(self):
|
||||||
|
visibility = 'public'
|
||||||
|
if self.match(_visibility_re):
|
||||||
|
visibility = self.matched_text
|
||||||
|
static = self.skip_word('static')
|
||||||
|
return visibility, static
|
||||||
|
|
||||||
def parse_type(self):
|
def parse_type(self):
|
||||||
return self._parse_type()
|
return self._parse_type()
|
||||||
|
|
||||||
def parse_type_object(self):
|
def parse_type_object(self):
|
||||||
|
visibility, static = self._parse_visibility_static()
|
||||||
typename = self._parse_type()
|
typename = self._parse_type()
|
||||||
self.skip_ws()
|
self.skip_ws()
|
||||||
if not self.eof:
|
if not self.eof:
|
||||||
@@ -634,9 +664,10 @@ class DefinitionParser(object):
|
|||||||
else:
|
else:
|
||||||
name = typename
|
name = typename
|
||||||
typename = None
|
typename = None
|
||||||
return TypeObjDefExpr(typename, name)
|
return TypeObjDefExpr(name, visibility, static, typename)
|
||||||
|
|
||||||
def parse_member_object(self):
|
def parse_member_object(self):
|
||||||
|
visibility, static = self._parse_visibility_static()
|
||||||
typename = self._parse_type()
|
typename = self._parse_type()
|
||||||
name = self._parse_type()
|
name = self._parse_type()
|
||||||
self.skip_ws()
|
self.skip_ws()
|
||||||
@@ -644,9 +675,10 @@ class DefinitionParser(object):
|
|||||||
value = self.read_rest().strip()
|
value = self.read_rest().strip()
|
||||||
else:
|
else:
|
||||||
value = None
|
value = None
|
||||||
return MemberObjDefExpr(typename, name, value)
|
return MemberObjDefExpr(name, visibility, static, typename, value)
|
||||||
|
|
||||||
def parse_function(self):
|
def parse_function(self):
|
||||||
|
visibility, static = self._parse_visibility_static()
|
||||||
rv = self._parse_type()
|
rv = self._parse_type()
|
||||||
self.skip_ws()
|
self.skip_ws()
|
||||||
# some things just don't have return values
|
# some things just don't have return values
|
||||||
@@ -655,10 +687,12 @@ class DefinitionParser(object):
|
|||||||
rv = None
|
rv = None
|
||||||
else:
|
else:
|
||||||
name = self._parse_type()
|
name = self._parse_type()
|
||||||
return FuncDefExpr(name, rv, *self._parse_signature())
|
return FuncDefExpr(name, visibility, static, rv,
|
||||||
|
*self._parse_signature())
|
||||||
|
|
||||||
def parse_class(self):
|
def parse_class(self):
|
||||||
return ClassDefExpr(self._parse_type())
|
visibility, static = self._parse_visibility_static()
|
||||||
|
return ClassDefExpr(self._parse_type(), visibility, static)
|
||||||
|
|
||||||
def read_rest(self):
|
def read_rest(self):
|
||||||
rv = self.definition[self.pos:]
|
rv = self.definition[self.pos:]
|
||||||
@@ -692,6 +726,15 @@ class CPPObject(ObjectDescription):
|
|||||||
pnode += nodes.Text(text)
|
pnode += nodes.Text(text)
|
||||||
node += pnode
|
node += pnode
|
||||||
|
|
||||||
|
def attach_modifiers(self, node, obj):
|
||||||
|
if obj.visibility != 'public':
|
||||||
|
node += addnodes.desc_annotation(obj.visibility,
|
||||||
|
obj.visibility)
|
||||||
|
node += nodes.Text(' ')
|
||||||
|
if obj.static:
|
||||||
|
node += addnodes.desc_annotation('static', 'static')
|
||||||
|
node += nodes.Text(' ')
|
||||||
|
|
||||||
def add_target_and_index(self, sigobj, sig, signode):
|
def add_target_and_index(self, sigobj, sig, signode):
|
||||||
theid = sigobj.get_id()
|
theid = sigobj.get_id()
|
||||||
name = unicode(sigobj.name)
|
name = unicode(sigobj.name)
|
||||||
@@ -752,6 +795,7 @@ class CPPClassObject(CPPObject):
|
|||||||
return parser.parse_class()
|
return parser.parse_class()
|
||||||
|
|
||||||
def describe_signature(self, signode, cls):
|
def describe_signature(self, signode, cls):
|
||||||
|
self.attach_modifiers(signode, cls)
|
||||||
signode += addnodes.desc_annotation('class ', 'class ')
|
signode += addnodes.desc_annotation('class ', 'class ')
|
||||||
self.attach_name(signode, cls.name)
|
self.attach_name(signode, cls.name)
|
||||||
|
|
||||||
@@ -767,6 +811,7 @@ class CPPTypeObject(CPPObject):
|
|||||||
return parser.parse_type_object()
|
return parser.parse_type_object()
|
||||||
|
|
||||||
def describe_signature(self, signode, obj):
|
def describe_signature(self, signode, obj):
|
||||||
|
self.attach_modifiers(signode, obj)
|
||||||
signode += addnodes.desc_annotation('type ', 'type ')
|
signode += addnodes.desc_annotation('type ', 'type ')
|
||||||
if obj.typename is not None:
|
if obj.typename is not None:
|
||||||
self.attach_type(signode, obj.typename)
|
self.attach_type(signode, obj.typename)
|
||||||
@@ -785,6 +830,7 @@ class CPPMemberObject(CPPObject):
|
|||||||
return parser.parse_member_object()
|
return parser.parse_member_object()
|
||||||
|
|
||||||
def describe_signature(self, signode, obj):
|
def describe_signature(self, signode, obj):
|
||||||
|
self.attach_modifiers(signode, obj)
|
||||||
self.attach_type(signode, obj.typename)
|
self.attach_type(signode, obj.typename)
|
||||||
signode += nodes.Text(' ')
|
signode += nodes.Text(' ')
|
||||||
self.attach_name(signode, obj.name)
|
self.attach_name(signode, obj.name)
|
||||||
@@ -835,6 +881,7 @@ class CPPFunctionObject(CPPObject):
|
|||||||
return parser.parse_function()
|
return parser.parse_function()
|
||||||
|
|
||||||
def describe_signature(self, signode, func):
|
def describe_signature(self, signode, func):
|
||||||
|
self.attach_modifiers(signode, func)
|
||||||
# return value is None for things with a reverse return value
|
# return value is None for things with a reverse return value
|
||||||
# such as casting operator definitions or constructors
|
# such as casting operator definitions or constructors
|
||||||
# and destructors.
|
# and destructors.
|
||||||
|
|||||||
Reference in New Issue
Block a user