Index: exo-csource/main.c =================================================================== --- exo-csource/main.c (revision 25298) +++ exo-csource/main.c (working copy) @@ -59,6 +59,7 @@ /* --- variables --- */ static gboolean gen_buildlist = FALSE; +static gboolean gen_stripxml = FALSE; static gchar *gen_linkage = "static "; static gchar *gen_varname = "my_data"; @@ -120,9 +121,14 @@ gen_buildlist = TRUE; argv[n] = NULL; } + else if (strcmp (argv[n], "--strip-xml") == 0) + { + gen_stripxml = TRUE; + argv[n] = NULL; + } } - for (m = 0, n = 1; n < argc; ++n) + for (m = 0, n = 1; n < argc; ++n) { if (m > 0) { @@ -152,10 +158,12 @@ { const guint8 *p = (const guint8 *) data; gboolean pad = FALSE; + gboolean between_node = FALSE; + gint inside_comment = 0; gint column = 0; + guint real_length = 0; g_fprintf (fp, "/* automatically generated from %s */\n", filename); - g_fprintf (fp, "%sconst unsigned %s_length = %uu;\n", gen_linkage, gen_varname, (guint) length); g_fprintf (fp, "#ifdef __SUNPRO_C\n"); g_fprintf (fp, "#pragma align 4 (%s)\n", gen_varname); g_fprintf (fp, "#endif\n"); @@ -175,6 +183,40 @@ column = 0; } + if (gen_stripxml) + { + /* skip comments */ + if (*p == '<' && *(p+1) == '!' && *(p+2) == '-' && *(p+3) == '-') + { + inside_comment = 3; + + continue; + } + else if (inside_comment > 0) + { + /* count down if we hit the end of the comment */ + if (inside_comment != 3 + || (*p == '-'&& *(p+1) == '-' && *(p+2) == '>')) + inside_comment--; + + continue; + } + + /* strip characters between xml nodes */ + if (*p == '>') + { + between_node = TRUE; + } + else if (between_node && *p == '<') + { + between_node = FALSE; + } + else if (between_node) + { + continue; + } + } + if (*p == '\"') { column += g_fprintf (fp, "\\\""); @@ -217,9 +259,12 @@ column += g_fprintf (fp, "\\%03o", (guint) *p); pad = TRUE; } + + real_length++; } - g_fprintf (fp, "\"\n};\n\n\n"); + g_fprintf (fp, "\"\n};\n\n"); + g_fprintf (fp, "%sconst unsigned %s_length = %uu;\n\n", gen_linkage, gen_varname, real_length); } @@ -236,6 +281,7 @@ g_print (_(" --static Generate static symbols\n")); g_print (_(" --name=identifier C macro/variable name\n")); g_print (_(" --build-list Parse (name, file) pairs\n")); + g_print (_(" --strip-xml Remove unused symbols from xml file\n")); g_print ("\n"); }