+ if (*cp++ != '<')
+ continue;
+
+ if (nest && *cp == '!')
+ {
+ int i;
+ tagText(event, text_start, cp - 1);
+ if (cp[1] == '-' && cp[2] == '-')
+ {
+ for (i = 3; cp[i]; i++)
+ if (cp[i] == '-' && cp[i+1] == '-' && cp[i+2] == '>')
+ {
+ i+= 2;
+ event.openTagStart(cp, i);
+ break;
+ }
+ }
+ else
+ {
+ for (i = 1; cp[i] && cp[i] != '>'; i++)
+ ;
+ event.openTagStart(cp, i);
+ }
+ if (m_verbose)
+ printf("------ dtd %.*s\n", i, cp);
+ i += tagEnd(event, cp, i, cp + i);
+ cp += i;
+ text_start = cp;
+ }
+ else if (nest && *cp == '?')
+ {
+ int i;
+ tagText(event, text_start, cp - 1);
+ for (i = 1; cp[i] && cp[i] != '>'; i++)
+ ;
+ event.openTagStart(cp, i);
+ if (m_verbose)
+ printf("------ pi %.*s\n", i, cp);
+ i += tagEnd(event, cp, i, cp + i);
+ cp += i;
+ text_start = cp;
+ }
+ else if (*cp == '/' && isAlpha(cp[1]))