diff options
author | Colin Walters <walters@src.gnome.org> | 2008-09-29 19:03:37 +0000 |
---|---|---|
committer | Colin Walters <walters@src.gnome.org> | 2008-09-29 19:03:37 +0000 |
commit | 62d3aea7d2b161710f6b8964cf26baa79b010c5b (patch) | |
tree | 3d788e970e8a81fb12f97c06336f6249d49936bb /giscanner/scannerlexer.l | |
parent | 3de4dd3835dd294dc76e186cf0d756356cfe281e (diff) | |
download | gobject-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.l | 40 |
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]; |