static void Test03() { const char *s = "a < b > c <> d <"; HtmlPullParser parser(s, str::Len(s)); HtmlToken *t = parser.Next(); assert(t && t->IsText() && StrEqNIx(t->s, t->sLen, "a ")); t = parser.Next(); assert(t && t->IsText() && StrEqNIx(t->s, t->sLen, "< b > c ")); t = parser.Next(); assert(t && t->IsText() && StrEqNIx(t->s, t->sLen, "<> d ")); t = parser.Next(); assert(t && t->IsError() && HtmlToken::UnclosedTag == t->error); t = parser.Next(); assert(!t); }
// for now just ignores any namespace qualifier // (i.e. succeeds for "opf:content" with name="content" and any value of ns) // TODO: add proper namespace support bool HtmlToken::NameIsNS(const char *name, const char *ns) const { CrashIf(!ns); const char *nameStart = (const char *)memchr(s, ':', nLen); nameStart = nameStart ? nameStart + 1 : s; return StrEqNIx(nameStart, nLen - (nameStart - s), name); }
// for now just ignores any namespace qualifier // (i.e. succeeds for "xlink:href" with name="href" and any value of attrNS) // TODO: add proper namespace support bool AttrInfo::NameIsNS(const char *s, const char *ns) const { CrashIf(!ns); const char *nameStart = (const char *)memchr(name, ':', nameLen); nameStart = nameStart ? nameStart + 1 : name; return StrEqNIx(nameStart, nameLen - (nameStart - name), s); }
static void Test02() { const char *s = "<p>Last paragraph"; HtmlPullParser parser(s, str::Len(s)); HtmlToken *t = parser.Next(); assert(t && t->IsTag() && t->IsStartTag() && Tag_P == t->tag); t = parser.Next(); assert(t && t->IsText() && StrEqNIx(t->s, t->sLen, "Last paragraph")); }
bool AttrInfo::ValIs(const char *s) const { return StrEqNIx(val, valLen, s); }
bool AttrInfo::NameIs(const char *s) const { return StrEqNIx(name, nameLen, s); }