diff options
author | Johan Dahlin <johan@gnome.org> | 2008-04-27 23:27:17 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2008-04-27 23:27:17 +0000 |
commit | bc995eb2d5af650e33ec6dc5c8722ae27aa124b7 (patch) | |
tree | 35b80bb86d7ce8fa5ada279862fb979344958f4f /giscanner/scannerlexer.l | |
parent | 65c706f0d9c2dd8ac34bcf9fe7b399eccea25fdc (diff) | |
download | gobject-introspection-bc995eb2d5af650e33ec6dc5c8722ae27aa124b7.tar.gz |
Allow parenthesis in annotations
2008-04-27 Johan Dahlin <johan@gnome.org>
* giscanner/scannerlexer.l:
Allow parenthesis in annotations
* giscanner/ast.py:
* giscanner/gidlwriter.py:
* giscanner/girwriter.py:
* giscanner/glibtransformer.py:
* giscanner/transformer.py:
Add initial sequence support, including annotation.
Refactor type handling a bit.
svn path=/trunk/; revision=233
Diffstat (limited to 'giscanner/scannerlexer.l')
-rw-r--r-- | giscanner/scannerlexer.l | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l index 9870efd7..51355c2a 100644 --- a/giscanner/scannerlexer.l +++ b/giscanner/scannerlexer.l @@ -227,23 +227,32 @@ parse_gtkdoc (GISourceScanner *scanner, { char *ptr = parts[1]; GString *current = NULL; - gboolean open = (*ptr == '('); + gint8 pstack = 0; current = g_string_new (""); value = parts[2]; - while (*ptr++) + do { if (*ptr == '(') - open = TRUE; - else if (*ptr != ')' && open) - g_string_append_c (current, *ptr); - else if (*ptr == ')') { - options = g_slist_prepend (options, g_strdup (current->str)); - open = FALSE; - } + { + pstack++; + if (pstack == 1) + continue; + } + else if (*ptr == ')') + pstack--; + + if (pstack == 0) + { + options = g_slist_prepend (options, current->str); + break; + } + g_string_append_c (current, *ptr); } - g_string_free (current, TRUE); + while (*ptr++); + + g_string_free (current, FALSE); } else value = parts[1]; |