mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Refactored again. This time added a new type PrefixedNameDefExpr that is
used to prefix a name. This is used to give a node a full name if it was defined in the context of a parent (eg, function in a class).
This commit is contained in:
parent
45b89708f0
commit
3f82edf3b9
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
import string
|
import string
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
|
|
||||||
@ -99,7 +100,10 @@ class DefExpr(object):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def to_id(self):
|
def clone(self):
|
||||||
|
return deepcopy(self)
|
||||||
|
|
||||||
|
def get_id(self):
|
||||||
return u''
|
return u''
|
||||||
|
|
||||||
def split_owner(self):
|
def split_owner(self):
|
||||||
@ -117,7 +121,7 @@ class NameDefExpr(DefExpr):
|
|||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
name = _id_shortwords.get(self.name)
|
name = _id_shortwords.get(self.name)
|
||||||
if name is not None:
|
if name is not None:
|
||||||
return name
|
return name
|
||||||
@ -132,8 +136,8 @@ class PathDefExpr(DefExpr):
|
|||||||
def __init__(self, parts):
|
def __init__(self, parts):
|
||||||
self.path = parts
|
self.path = parts
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
rv = u'::'.join(x.to_id() for x in self.path)
|
rv = u'::'.join(x.get_id() for x in self.path)
|
||||||
return _id_shortwords.get(rv, rv)
|
return _id_shortwords.get(rv, rv)
|
||||||
|
|
||||||
def split_owner(self):
|
def split_owner(self):
|
||||||
@ -151,10 +155,10 @@ class ModifierDefExpr(DefExpr):
|
|||||||
self.modifiers = modifiers
|
self.modifiers = modifiers
|
||||||
self.typename = typename
|
self.typename = typename
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
pieces = [_id_shortwords.get(unicode(x), unicode(x))
|
pieces = [_id_shortwords.get(unicode(x), unicode(x))
|
||||||
for x in self.modifiers]
|
for x in self.modifiers]
|
||||||
pieces.append(self.typename.to_id())
|
pieces.append(self.typename.get_id())
|
||||||
return u'-'.join(pieces)
|
return u'-'.join(pieces)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
@ -166,8 +170,8 @@ class PtrDefExpr(DefExpr):
|
|||||||
def __init__(self, typename):
|
def __init__(self, typename):
|
||||||
self.typename = typename
|
self.typename = typename
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return self.typename.to_id() + u'P'
|
return self.typename.get_id() + u'P'
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'%s*' % self.typename
|
return u'%s*' % self.typename
|
||||||
@ -178,8 +182,8 @@ class RefDefExpr(DefExpr):
|
|||||||
def __init__(self, typename):
|
def __init__(self, typename):
|
||||||
self.typename = typename
|
self.typename = typename
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return self.typename.to_id() + u'R'
|
return self.typename.get_id() + u'R'
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'%s&' % self.typename
|
return u'%s&' % self.typename
|
||||||
@ -191,8 +195,8 @@ class ConstDefExpr(DefExpr):
|
|||||||
self.typename = typename
|
self.typename = typename
|
||||||
self.prefix = prefix
|
self.prefix = prefix
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return self.typename.to_id() + u'C'
|
return self.typename.get_id() + u'C'
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return (self.prefix and u'const %s' or u'%s const') % self.typename
|
return (self.prefix and u'const %s' or u'%s const') % self.typename
|
||||||
@ -203,8 +207,8 @@ class CastOpDefExpr(DefExpr):
|
|||||||
def __init__(self, typename):
|
def __init__(self, typename):
|
||||||
self.typename = typename
|
self.typename = typename
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return u'to-%s-operator' % self.typename.to_id()
|
return u'castto-%s-operator' % self.typename.get_id()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'operator %s' % self.typename
|
return u'operator %s' % self.typename
|
||||||
@ -216,9 +220,9 @@ class TemplateDefExpr(DefExpr):
|
|||||||
self.typename = typename
|
self.typename = typename
|
||||||
self.args = args
|
self.args = args
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return u'%s:%s:' % (self.typename.to_id(),
|
return u'%s:%s:' % (self.typename.get_id(),
|
||||||
u'.'.join(x.to_id() for x in self.args))
|
u'.'.join(x.get_id() for x in self.args))
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return u'%s<%s>' % (self.typename, u', '.join(map(unicode, self.args)))
|
return u'%s<%s>' % (self.typename, u', '.join(map(unicode, self.args)))
|
||||||
@ -227,12 +231,12 @@ class TemplateDefExpr(DefExpr):
|
|||||||
class ArgumentDefExpr(DefExpr):
|
class ArgumentDefExpr(DefExpr):
|
||||||
|
|
||||||
def __init__(self, type, name, default=None):
|
def __init__(self, type, name, default=None):
|
||||||
self.type = type
|
|
||||||
self.name = name
|
self.name = name
|
||||||
|
self.type = type
|
||||||
self.default = default
|
self.default = default
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return self.type.to_id()
|
return self.type.get_id()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return (self.type is not None and u'%s %s' % (self.type, self.name)
|
return (self.type is not None and u'%s %s' % (self.type, self.name)
|
||||||
@ -240,16 +244,35 @@ class ArgumentDefExpr(DefExpr):
|
|||||||
u'=%s' % self.default or u'')
|
u'=%s' % self.default or u'')
|
||||||
|
|
||||||
|
|
||||||
class TypeObjDefExpr(DefExpr):
|
class PrefixedNameDefExpr(DefExpr):
|
||||||
|
|
||||||
def __init__(self, typename, name):
|
def __init__(self, prefix, name):
|
||||||
self.typename = typename
|
self.prefix = prefix
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
|
return u'%s::%s' % (self.prefix.get_id(), self.name.get_id())
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return u'%s::%s' % (self.prefix, self.name)
|
||||||
|
|
||||||
|
|
||||||
|
class NamedDefExpr(DefExpr):
|
||||||
|
|
||||||
|
def __init__(self, name):
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
|
||||||
|
class TypeObjDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
|
def __init__(self, typename, name):
|
||||||
|
NamedDefExpr.__init__(self, name)
|
||||||
|
self.typename = typename
|
||||||
|
|
||||||
|
def get_id(self):
|
||||||
if self.typename is None:
|
if self.typename is None:
|
||||||
return self.name.to_id()
|
return self.name.get_id()
|
||||||
return u'%s__%s' % (self.name.to_id(), self.typename.to_id())
|
return u'%s__%s' % (self.name.get_id(), self.typename.get_id())
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
if self.typename is None:
|
if self.typename is None:
|
||||||
@ -257,37 +280,37 @@ class TypeObjDefExpr(DefExpr):
|
|||||||
return u'%s %s' % (self.typename, self.name)
|
return u'%s %s' % (self.typename, self.name)
|
||||||
|
|
||||||
|
|
||||||
class MemberObjDefExpr(DefExpr):
|
class MemberObjDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
def __init__(self, typename, name, value):
|
def __init__(self, typename, name, value):
|
||||||
|
NamedDefExpr.__init__(self, name)
|
||||||
self.typename = typename
|
self.typename = typename
|
||||||
self.name = name
|
|
||||||
self.value = value
|
self.value = value
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return u'%s__%s' % (self.name.to_id(), self.typename.to_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)
|
rv = u'%s %s' % (self.typename, self.name)
|
||||||
if value is not None:
|
if self.value is not None:
|
||||||
rv = u'%s = %s' % (rv, self.value)
|
rv = u'%s = %s' % (rv, self.value)
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
|
|
||||||
class FuncDefExpr(DefExpr):
|
class FuncDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
def __init__(self, name, rv, signature, const, pure_virtual):
|
def __init__(self, name, rv, signature, const, pure_virtual):
|
||||||
self.name = name
|
NamedDefExpr.__init__(self, name)
|
||||||
self.rv = rv
|
self.rv = rv
|
||||||
self.signature = signature
|
self.signature = signature
|
||||||
self.const = const
|
self.const = const
|
||||||
self.pure_virtual = pure_virtual
|
self.pure_virtual = pure_virtual
|
||||||
|
|
||||||
def to_id(self):
|
def get_id(self):
|
||||||
return u'%s%s%s' % (
|
return u'%s%s%s' % (
|
||||||
self.name.to_id(),
|
self.name.get_id(),
|
||||||
self.signature and u'__' +
|
self.signature and u'__' +
|
||||||
u'.'.join(x.to_id() for x in self.signature) or u'',
|
u'.'.join(x.get_id() for x in self.signature) or u'',
|
||||||
self.const and u'C' or u''
|
self.const and u'C' or u''
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -301,6 +324,18 @@ class FuncDefExpr(DefExpr):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ClassDefExpr(NamedDefExpr):
|
||||||
|
|
||||||
|
def __init__(self, name):
|
||||||
|
NamedDefExpr.__init__(self, name)
|
||||||
|
|
||||||
|
def get_id(self):
|
||||||
|
return self.name.get_id()
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return unicode(self.name)
|
||||||
|
|
||||||
|
|
||||||
class DefinitionParser(object):
|
class DefinitionParser(object):
|
||||||
|
|
||||||
# mapping of valid type modifiers. if the set is None it means
|
# mapping of valid type modifiers. if the set is None it means
|
||||||
@ -610,8 +645,8 @@ class DefinitionParser(object):
|
|||||||
name = self._parse_type()
|
name = self._parse_type()
|
||||||
return FuncDefExpr(name, rv, *self._parse_signature())
|
return FuncDefExpr(name, rv, *self._parse_signature())
|
||||||
|
|
||||||
def parse_typename(self):
|
def parse_class(self):
|
||||||
return self._parse_type()
|
return ClassDefExpr(self._parse_type())
|
||||||
|
|
||||||
def read_rest(self):
|
def read_rest(self):
|
||||||
rv = self.definition[self.pos:]
|
rv = self.definition[self.pos:]
|
||||||
@ -645,8 +680,9 @@ class CPPObject(ObjectDescription):
|
|||||||
pnode += nodes.Text(text)
|
pnode += nodes.Text(text)
|
||||||
node += pnode
|
node += pnode
|
||||||
|
|
||||||
def add_target_and_index(self, (name, sigobj), sig, signode):
|
def add_target_and_index(self, sigobj, sig, signode):
|
||||||
theid = sigobj.to_id()
|
theid = sigobj.get_id()
|
||||||
|
name = unicode(sigobj.name)
|
||||||
signode['names'].append(theid)
|
signode['names'].append(theid)
|
||||||
signode['ids'].append(theid)
|
signode['ids'].append(theid)
|
||||||
signode['first'] = (not self.names)
|
signode['first'] = (not self.names)
|
||||||
@ -659,9 +695,10 @@ class CPPObject(ObjectDescription):
|
|||||||
self.indexnode['entries'].append(('single', indextext, name, name))
|
self.indexnode['entries'].append(('single', indextext, name, name))
|
||||||
|
|
||||||
def before_content(self):
|
def before_content(self):
|
||||||
lastname = self.names and self.names[-1][0]
|
lastname = self.names and self.names[-1]
|
||||||
if lastname and not self.env.temp_data.get('cpp:parent'):
|
if lastname and not self.env.temp_data.get('cpp:parent'):
|
||||||
self.env.temp_data['cpp:parent'] = lastname
|
assert isinstance(lastname, NamedDefExpr)
|
||||||
|
self.env.temp_data['cpp:parent'] = lastname.name
|
||||||
self.parentname_set = True
|
self.parentname_set = True
|
||||||
else:
|
else:
|
||||||
self.parentname_set = False
|
self.parentname_set = False
|
||||||
@ -680,12 +717,13 @@ class CPPObject(ObjectDescription):
|
|||||||
parser = DefinitionParser(sig)
|
parser = DefinitionParser(sig)
|
||||||
rv = self.parse_definition(parser)
|
rv = self.parse_definition(parser)
|
||||||
parser.assert_end()
|
parser.assert_end()
|
||||||
name = self.describe_signature(signode, rv)
|
self.describe_signature(signode, rv)
|
||||||
|
|
||||||
parentname = self.env.temp_data.get('cpp:parent')
|
parentname = self.env.temp_data.get('cpp:parent')
|
||||||
if parentname:
|
if parentname is not None:
|
||||||
return u'%s::%s' % (parentname, name), rv
|
rv = rv.clone()
|
||||||
return unicode(name), rv
|
rv.name = PrefixedNameDefExpr(parentname, rv.name)
|
||||||
|
return rv
|
||||||
|
|
||||||
|
|
||||||
class CPPClassObject(CPPObject):
|
class CPPClassObject(CPPObject):
|
||||||
@ -694,12 +732,11 @@ class CPPClassObject(CPPObject):
|
|||||||
return _('%s (C++ class)') % name
|
return _('%s (C++ class)') % name
|
||||||
|
|
||||||
def parse_definition(self, parser):
|
def parse_definition(self, parser):
|
||||||
return parser.parse_typename()
|
return parser.parse_class()
|
||||||
|
|
||||||
def describe_signature(self, signode, typename):
|
def describe_signature(self, signode, cls):
|
||||||
signode += addnodes.desc_annotation('class ', 'class ')
|
signode += addnodes.desc_annotation('class ', 'class ')
|
||||||
self.attach_name(signode, typename)
|
self.attach_name(signode, cls.name)
|
||||||
return typename
|
|
||||||
|
|
||||||
|
|
||||||
class CPPTypeObject(CPPObject):
|
class CPPTypeObject(CPPObject):
|
||||||
@ -718,7 +755,6 @@ class CPPTypeObject(CPPObject):
|
|||||||
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)
|
||||||
return obj.name
|
|
||||||
|
|
||||||
|
|
||||||
class CPPMemberObject(CPPObject):
|
class CPPMemberObject(CPPObject):
|
||||||
@ -737,7 +773,6 @@ class CPPMemberObject(CPPObject):
|
|||||||
self.attach_name(signode, obj.name)
|
self.attach_name(signode, obj.name)
|
||||||
if obj.value is not None:
|
if obj.value is not None:
|
||||||
signode += nodes.Text(u' = ' + obj.value)
|
signode += nodes.Text(u' = ' + obj.value)
|
||||||
return obj.name
|
|
||||||
|
|
||||||
|
|
||||||
class CPPFunctionObject(CPPObject):
|
class CPPFunctionObject(CPPObject):
|
||||||
@ -790,7 +825,6 @@ class CPPFunctionObject(CPPObject):
|
|||||||
self.attach_type(signode, func.rv)
|
self.attach_type(signode, func.rv)
|
||||||
signode += nodes.Text(u' ')
|
signode += nodes.Text(u' ')
|
||||||
self.attach_function(signode, func)
|
self.attach_function(signode, func)
|
||||||
return func.name
|
|
||||||
|
|
||||||
|
|
||||||
class CPPDomain(Domain):
|
class CPPDomain(Domain):
|
||||||
|
Loading…
Reference in New Issue
Block a user