HtmlParser constructor

HtmlParser(
  1. String html,
  2. Map<String, Function> handler
)

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();
}