summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Ronacher <armin.ronacher@active-4.com>2011-01-07 15:49:01 +0100
committerArmin Ronacher <armin.ronacher@active-4.com>2011-01-07 15:49:01 +0100
commit3411097bf8a2ba377e763c9d31e46fc74f7914c3 (patch)
treefd6b34cfc9a7c8e3f3e0c6e19b27d162bcb5dae6
parentf75bb97a922e4c0b6f008d5a9b1f1802a27e0fec (diff)
downloadsphinx-3411097bf8a2ba377e763c9d31e46fc74f7914c3.tar.gz
C++ domain now supports array definitions.
-rw-r--r--CHANGES2
-rw-r--r--sphinx/domains/cpp.py19
2 files changed, 21 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 92336902..d9fe9efd 100644
--- a/CHANGES
+++ b/CHANGES
@@ -67,6 +67,8 @@ Release 1.1 (in development)
* #259: HTML table rows now have even/odd CSS classes to enable
"Zebra styling".
+* C++ domain now supports array definitions.
+
Release 1.0.7 (in development)
==============================
diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py
index e712e01e..4688691d 100644
--- a/sphinx/domains/cpp.py
+++ b/sphinx/domains/cpp.py
@@ -28,6 +28,7 @@ _whitespace_re = re.compile(r'\s+(?u)')
_string_re = re.compile(r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'"
r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.S)
_visibility_re = re.compile(r'\b(public|private|protected)\b')
+_array_def_re = re.compile(r'\[\s*(.+?)?\s*\]')
_operator_re = re.compile(r'''(?x)
\[\s*\]
| \(\s*\)
@@ -273,6 +274,22 @@ class PtrDefExpr(WrappingDefExpr):
return u'%s*' % self.typename
+class ArrayDefExpr(WrappingDefExpr):
+
+ def __init__(self, typename, size_hint=None):
+ WrappingDefExpr.__init__(self, typename)
+ self.size_hint = size_hint
+
+ def get_id(self):
+ return self.typename.get_id() + u'A'
+
+ def __unicode__(self):
+ return u'%s[%s]' % (
+ self.typename,
+ self.size_hint is not None and unicode(self.size_hint) or u''
+ )
+
+
class RefDefExpr(WrappingDefExpr):
def get_id(self):
@@ -562,6 +579,8 @@ class DefinitionParser(object):
expr = ConstDefExpr(expr)
elif self.skip_string('*'):
expr = PtrDefExpr(expr)
+ elif self.match(_array_def_re):
+ expr = ArrayDefExpr(expr, self.last_match.group(1))
elif self.skip_string('&'):
expr = RefDefExpr(expr)
else: