summaryrefslogtreecommitdiff
path: root/giscanner/scannerlexer.l
diff options
context:
space:
mode:
authorColin Walters <walters@src.gnome.org>2008-09-29 19:03:37 +0000
committerColin Walters <walters@src.gnome.org>2008-09-29 19:03:37 +0000
commit62d3aea7d2b161710f6b8964cf26baa79b010c5b (patch)
tree3d788e970e8a81fb12f97c06336f6249d49936bb /giscanner/scannerlexer.l
parent3de4dd3835dd294dc76e186cf0d756356cfe281e (diff)
downloadgobject-introspection-62d3aea7d2b161710f6b8964cf26baa79b010c5b.tar.gz
Write out list and map types, parse 'array' annotation
svn path=/trunk/; revision=634
Diffstat (limited to 'giscanner/scannerlexer.l')
-rw-r--r--giscanner/scannerlexer.l40
1 files changed, 15 insertions, 25 deletions
diff --git a/giscanner/scannerlexer.l b/giscanner/scannerlexer.l
index 80529f98..4f3a0c13 100644
--- a/giscanner/scannerlexer.l
+++ b/giscanner/scannerlexer.l
@@ -249,34 +249,24 @@ parse_gtkdoc (GISourceScanner *scanner,
if (n_parts == 3)
{
- char *ptr = parts[1];
- GString *current = NULL;
- gint8 pstack = 0;
+ char *ptr = g_strdup (parts[1]);
+ char **option_parts, **option_part;
- current = g_string_new ("");
- value = parts[2];
-
- do
- {
- if (*ptr == '<')
- {
- pstack++;
- if (pstack == 1)
- continue;
- }
- else if (*ptr == '>')
- pstack--;
-
- if (pstack == 0)
+ if (*ptr == '<')
+ {
+ char *end = strchr (ptr, '>');
+ if (end)
{
- options = g_slist_prepend (options, current->str);
- break;
+ *end = '\0';
+ option_parts = g_strsplit (ptr+1, ",", 0);
+ for (option_part = option_parts; *option_part; option_part++)
+ options = g_slist_prepend (options, g_strdup (*option_part));
+ options = g_slist_reverse (options);
+ g_strfreev (option_parts);
}
- g_string_append_c (current, *ptr);
- }
- while (*ptr++);
-
- g_string_free (current, FALSE);
+ }
+ g_free (ptr);
+ value = parts[2];
}
else
value = parts[1];