+ 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]))
+ {
+ int i;
+
+ i = skipName(++cp);
+
+ if (!nest)
+ {
+ if (i == 6 && !yaz_strncasecmp(cp, "script", i))
+ {
+ int ws = skipSpace(cp + 6);
+ if (cp[ws + 6] == '>')
+ nest = true; /* really terminated */
+ }
+ if (!nest)
+ continue;
+ }
+ tagText(event, text_start, cp - 2);
+ event.closeTag(cp, i);
+ if (m_verbose)
+ printf("------ tag close %.*s\n", i, cp);
+ i += tagEnd(event, cp, i, cp + i);
+ cp += i;
+ text_start = cp;
+ }
+ else if (nest && isAlpha(*cp))
+ {
+ int i, j;
+ tagText(event, text_start, cp - 1);
+ i = skipName(cp);
+ event.openTagStart(cp, i);
+ if (m_verbose)
+ printf("------ tag open %.*s\n", i, cp);
+ j = tagAttrs(event, cp, i, cp + i);
+ j += tagEnd(event, cp, i, cp + i + j);
+
+ if (i == 6 && !yaz_strncasecmp(cp, "script", i))
+ nest = false;
+
+ cp += i + j;
+ text_start = cp;