HtmlParser constructor
Implementation
HtmlParser(String html, Map<String, Function> handler) {
last = html;
this.handler = handler;
while (html.isNotEmpty) {
chars = true;
if (html.indexOf("<!--") == 0) {
index = html.indexOf("-->");
if (index >= 0) {
handler["comment"]!(html.substring(4, index));
html = html.substring(index + 3);
chars = false;
}
} else if (html.indexOf("</") == 0) {
match = RegExp(r"^<([\s\S]*?)>").stringMatch(html);
var matchLength = match?.length;
if (match != null && matchLength! > 0) {
html = html.substring(matchLength!);
match = match?.substring(2, matchLength - 1);
parseEndTag(match!);
chars = false;
}
} else if (html.indexOf("<") == 0) {
if ((match = RegExp(r"^<([\s\S]*?)>").stringMatch(html)) != null &&
match!.isNotEmpty) {
var matchLength = match?.length;
html = html.substring(matchLength!);
if (match!.endsWith(r"/>")) {
match = match?.substring(1, matchLength - 2);
parseStartTag(match!, match!.split(" ")[0], true);
} else {
match = match!.substring(1, matchLength - 1);
parseStartTag(match!, match!.split(" ")[0], false);
}
}
chars = false;
}
if (chars) {
index = html.indexOf("<");
var text = index < 0 ? html : html.substring(0, index);
html = index < 0 ? "" : html.substring(index);
if (text.trim().isNotEmpty) handler["chars"]!(text);
}
if (html == last) throw "Parse Error: " + html;
last = html;
}
parseEndTag();
}