[cvs-annodex] commit (/annodex):
libannodex/trunk/src/libannodex/xtag.c
conrad
nobody at lists.annodex.net
Tue Feb 1 11:00:46 EST 2005
Update of /annodex (new revision 799)
Modified files:
libannodex/trunk/src/libannodex/xtag.c
Log Message:
add support to xtag to parse xml containing comments (ticket: 1)
+ XML comments <!-- .... --> are ignored, parsing continues
Modified: libannodex/trunk/src/libannodex/xtag.c
===================================================================
--- libannodex/trunk/src/libannodex/xtag.c 2005-01-31 22:27:48 UTC (rev 798)
+++ libannodex/trunk/src/libannodex/xtag.c 2005-02-01 00:00:45 UTC (rev 799)
@@ -105,6 +105,7 @@
#define X_SQUOTE 1<<4
#define X_EQUAL 1<<5
#define X_SLASH 1<<6
+#define X_DASH 1<<7
static int
xtag_cin (char c, int char_class)
@@ -130,6 +131,9 @@
if (char_class & X_SLASH)
if (c == '/') return TRUE;
+ if (char_class & X_DASH)
+ if (c == '-') return TRUE;
+
return FALSE;
}
@@ -174,27 +178,25 @@
xtag_skip_over (parser, X_WHITESPACE);
}
-#if 0
-static void
+static int
xtag_skip_to (XTagParser * parser, int char_class)
{
char * s;
int i;
- if (!parser->valid) return;
+ if (!parser->valid) return FALSE;
s = (char *)parser->start;
for (i = 0; s[i] && s != parser->end; i++) {
if (xtag_cin(s[i], char_class)) {
parser->start = &s[i];
- return;
+ return TRUE;
}
}
- return;
+ return FALSE;
}
-#endif
static char *
xtag_slurp_to (XTagParser * parser, int good_end, int bad_end)
@@ -220,7 +222,7 @@
}
static int
-xtag_assert_and_pass (XTagParser * parser, int char_class)
+xtag_pass (XTagParser * parser, int char_class, int assert)
{
char * s;
@@ -229,7 +231,7 @@
s = parser->start;
if (!xtag_cin (s[0], char_class)) {
- parser->valid = FALSE;
+ if (assert) parser->valid = FALSE;
return FALSE;
}
@@ -238,6 +240,18 @@
return TRUE;
}
+static int
+xtag_check_and_pass (XTagParser * parser, int char_class)
+{
+ return xtag_pass (parser, char_class, FALSE);
+}
+
+static int
+xtag_assert_and_pass (XTagParser * parser, int char_class)
+{
+ return xtag_pass (parser, char_class, TRUE);
+}
+
static char *
xtag_slurp_quoted (XTagParser * parser)
{
@@ -365,6 +379,19 @@
printf ("<%s ...\n", name);
#endif
+ if (!strcmp (name, "!--")) {
+#ifdef DEBUG
+ printf ("xtag: found comment\n");
+#endif
+ while (xtag_skip_to (parser, X_DASH)) {
+ if (xtag_check_and_pass (parser, X_DASH) &&
+ xtag_check_and_pass (parser, X_CLOSETAG))
+ return xtag_parse_tag (parser);
+ }
+ /* Unterminated comment */
+ return NULL;
+ }
+
tag = anx_malloc (sizeof (*tag));
tag->name = name;
tag->pcdata = NULL;
--
conrad
More information about the cvs-annodex
mailing list