summaryrefslogtreecommitdiff
path: root/giscanner/scannerlexer.l
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-04-27 23:27:17 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-04-27 23:27:17 +0000
commitbc995eb2d5af650e33ec6dc5c8722ae27aa124b7 (patch)
tree35b80bb86d7ce8fa5ada279862fb979344958f4f /giscanner/scannerlexer.l
parent65c706f0d9c2dd8ac34bcf9fe7b399eccea25fdc (diff)
downloadgobject-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.l29
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];