diff options
| author | Robert Lehmann <mail@robertlehmann.de> | 2011-10-08 14:02:13 +0200 |
|---|---|---|
| committer | Robert Lehmann <mail@robertlehmann.de> | 2011-10-08 14:02:13 +0200 |
| commit | f81ceba276d562a24d2765d85e73c165d5d38499 (patch) | |
| tree | 9b6d75d2c9fc9146d9c19fb28b3b1f6b59208577 /sphinx/domains/cpp.py | |
| parent | a49c13f08a85ad353d073f015ec446caaebb0ad5 (diff) | |
| download | sphinx-f81ceba276d562a24d2765d85e73c165d5d38499.tar.gz | |
Fixes #678: Support superclass declarations in C++ domain.
Diffstat (limited to 'sphinx/domains/cpp.py')
| -rw-r--r-- | sphinx/domains/cpp.py | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 7a4e479a..61173d44 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -488,8 +488,9 @@ class FuncDefExpr(NamedDefExpr): class ClassDefExpr(NamedDefExpr): - def __init__(self, name, visibility, static): + def __init__(self, name, visibility, static, bases): NamedDefExpr.__init__(self, name, visibility, static) + self.bases = bases def get_id(self): return self.name.get_id() @@ -497,6 +498,9 @@ class ClassDefExpr(NamedDefExpr): def __unicode__(self): buf = self.get_modifiers() buf.append(unicode(self.name)) + if self.bases: + buf.append(u':') + buf.append(u', '.join(unicode(base) for base in self.bases)) return u' '.join(buf) @@ -879,7 +883,21 @@ class DefinitionParser(object): def parse_class(self): visibility, static = self._parse_visibility_static() - return ClassDefExpr(self._parse_type(), visibility, static) + name = self._parse_type() + bases = [] + if self.skip_string(':'): + self.skip_ws() + while 1: + access = 'public' + if self.match(_visibility_re): + access = self.matched_text + base = self._parse_type() + bases.append(ClassDefExpr(base, access, False, [])) + if self.skip_string(','): + self.skip_ws() + else: + break + return ClassDefExpr(name, visibility, static, bases) def read_rest(self): rv = self.definition[self.pos:] @@ -1005,6 +1023,13 @@ class CPPClassObject(CPPObject): self.attach_modifiers(signode, cls) signode += addnodes.desc_annotation('class ', 'class ') self.attach_name(signode, cls.name) + if cls.bases: + signode += nodes.Text(' : ') + for base in cls.bases: + self.attach_modifiers(signode, base) + signode += nodes.emphasis(unicode(base.name), unicode(base.name)) + signode += nodes.Text(', ') + signode.pop() # remove the trailing comma class CPPTypeObject(CPPObject): |
