const char **value, int *val_len,
int *tr)
{
+ int v0, v1;
int i = skipName(cp);
*attr_len = i;
*value = NULL;
if (!i)
return skipSpace(cp);
i += skipSpace(cp + i);
- if (cp[i] == '=')
+ if (cp[i] != '=')
+ return 0;
+
+ i++;
+ i += skipSpace(cp + i);
+ if (cp[i] == '\"' || cp[i] == '\'')
{
- int v0, v1;
- i++;
- i += skipSpace(cp + i);
- if (cp[i] == '\"' || cp[i] == '\'')
- {
- *tr = cp[i];
- v0 = ++i;
- while (cp[i] != *tr && cp[i])
- i++;
- v1 = i;
- if (cp[i])
- i++;
- }
- else
- {
- *tr = 0;
- v0 = i;
- while (cp[i] && !strchr(SPACECHR ">", cp[i]))
- i++;
- v1 = i;
- }
- *value = cp + v0;
- *val_len = v1 - v0;
+ *tr = cp[i];
+ v0 = ++i;
+ while (cp[i] != *tr && cp[i])
+ i++;
+ v1 = i;
+ if (cp[i])
+ i++;
+ }
+ else
+ {
+ *tr = 0;
+ v0 = i;
+ while (cp[i] && !strchr(SPACECHR ">", cp[i]))
+ i++;
+ v1 = i;
}
+ *value = cp + v0;
+ *val_len = v1 - v0;
+
i += skipSpace(cp + i);
return i;
}
const char *value;
int val_len;
int tr;
+ char x[2];
int nor = skipAttribute(event, cp+i, &attr_len, &value, &val_len, &tr);
+ if (!nor)
+ break;
i += nor;
- if (nor)
- {
- char x[2];
- x[0] = tr;
- x[1] = 0;
- if (m_verbose)
- printf ("------ attr %.*s=%.*s\n", attr_len, attr_name,
- val_len, value);
- event.attribute(name, len, attr_name, attr_len, value, val_len, x);
- }
- else
- {
- i++;
- }
+
+ x[0] = tr;
+ x[1] = 0;
+ if (m_verbose)
+ printf ("------ attr %.*s=%.*s\n", attr_len, attr_name,
+ val_len, value);
+ event.attribute(name, len, attr_name, attr_len, value, val_len, x);
}
return i;
}
for (; cp[i] && cp[i] != '/' && cp[i] != '>'; i++)
;
if (i > 0)
+ {
+ if (m_verbose)
+ printf("------ text %.*s\n", i, cp);
event.text(cp, i);
+ }
if (cp[i] == '/')
{
close_it = 1;
}
if (cp[i] == '>')
{
+ if (m_verbose)
+ printf("------ any tag %s %.*s\n",
+ close_it ? " close" : "end", tag_len, tag);
event.anyTagEnd(tag, tag_len, close_it);
i++;
}
"<html><body><a t1=v1 t2='v2' t3=\"v3\">some text</a>"
"<hr><table></table ><a href=\"x\"/></body></html>";
MyEvent e;
- hp.set_verbose(1);
+ hp.set_verbose(0);
hp.parse(e, html);
- std::cout << "Expected" << std::endl;
- std::cout << expected << std::endl;
- std::cout << "Got" << std::endl;
- std::cout << e.out << std::endl;
BOOST_CHECK_EQUAL(std::string(expected), e.out);
+ if (std::string(expected) != e.out)
+ {
+ std::cout << "Expected" << std::endl;
+ std::cout << expected << std::endl;
+ std::cout << "Got" << std::endl;
+ std::cout << e.out << std::endl;
+ }
}
catch (std::exception & e)
{
const char* expected = html;
MyEvent e;
- hp.set_verbose(1);
+ hp.set_verbose(0);
hp.parse(e, html);
- std::cout << "Expected" << std::endl;
- std::cout << expected << std::endl;
- std::cout << "Got" << std::endl;
- std::cout << e.out << std::endl;
-
BOOST_CHECK_EQUAL(std::string(expected), e.out);
+ if (std::string(expected) != e.out)
+ {
+ std::cout << "Expected" << std::endl;
+ std::cout << expected << std::endl;
+ std::cout << "Got" << std::endl;
+ std::cout << e.out << std::endl;
+ }
}
catch (std::exception & e)
{
const char* expected = html;
MyEvent e;
- hp.set_verbose(1);
+ hp.set_verbose(0);
hp.parse(e, html);
- std::cout << "Expected" << std::endl;
- std::cout << expected << std::endl;
- std::cout << "Got" << std::endl;
- std::cout << e.out << std::endl;
-
BOOST_CHECK_EQUAL(std::string(expected), e.out);
+ if (std::string(expected) != e.out)
+ {
+ std::cout << "Expected" << std::endl;
+ std::cout << expected << std::endl;
+ std::cout << "Got" << std::endl;
+ std::cout << e.out << std::endl;
+ }
}
catch (std::exception & e)
{
}
}
-#if 0
-// null ptr exception
BOOST_AUTO_TEST_CASE( test_html_parser_4 )
{
try
{
mp::HTMLParser hp;
const char* html =
- "<\"?xml version=\"1.0\" strandalone=\"no\"?>\n"
- "<book></book>";
+ "<\"?xml version=\"1.0\" strandalone=\"no\"? ax>\n"
+ "<book></book>"; // <book badboy></book> does not work
const char* expected = html;
MyEvent e;
hp.set_verbose(1);
hp.parse(e, html);
- std::cout << "Expected" << std::endl;
- std::cout << expected << std::endl;
- std::cout << "Got" << std::endl;
- std::cout << e.out << std::endl;
-
BOOST_CHECK_EQUAL(std::string(expected), e.out);
+ if (std::string(expected) != e.out)
+ {
+ std::cout << "Expected" << std::endl;
+ std::cout << expected << std::endl;
+ std::cout << "Got" << std::endl;
+ std::cout << e.out << std::endl;
+ }
}
catch (std::exception & e)
{
BOOST_CHECK (false);
}
}
-#endif
/*
* Local variables: