From a2562088f7f2163f95ee157c9dd1b212f0e5cb09 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Fri, 7 Jan 2011 15:49:01 +0100 Subject: [PATCH] C++ domain now supports array definitions. --- CHANGES | 2 ++ sphinx/domains/cpp.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/CHANGES b/CHANGES index 3ebee480f..291255232 100644 --- a/CHANGES +++ b/CHANGES @@ -49,6 +49,8 @@ Release 1.0.8 (Sep 22, 2011) * #647: Do not apply SmartyPants in parsed-literal blocks. +* C++ domain now supports array definitions. + Release 1.0.7 (Jan 15, 2011) ============================ diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index dac0106bb..588a8466d 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*\) @@ -269,6 +270,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): @@ -558,6 +575,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: