parseHTML function
Parses a html
to nodes.
Implementation
List<DOMNode>? parseHTML(String? html) {
if (html == null) return null;
var dependentTagMatch = _regexpDependentTag.firstMatch(html);
if (dependentTagMatch != null) {
var dependentTagName = dependentTagMatch.group(1)!.toLowerCase();
late Object parsed;
if (dependentTagName == 'td' || dependentTagName == 'th') {
parsed =
_domHTML.parse('<table><tbody><tr></tr>\n$html\n</tbody></table>')!;
} else if (dependentTagName == 'tbody' ||
dependentTagName == 'thead' ||
dependentTagName == 'tfoot') {
parsed = _domHTML.parse('<table>\n$html\n</table>')!;
}
var node = _domHTML.querySelector(parsed, dependentTagName);
return [DOMNode.from(node)!];
}
var parsed = _domHTML.parse(html);
if (parsed is DOMNode) {
return <DOMNode>[parsed];
} else if (parsed is List<DOMNode>) {
return parsed;
}
var parsedNodes = _domHTML.getChildrenNodes(parsed);
if (parsedNodes.isEmpty) {
return null;
} else if (parsedNodes.length == 1) {
var node = parsedNodes[0];
return [DOMNode.from(node)!];
} else {
while (parsedNodes.isNotEmpty) {
var o = parsedNodes[0];
if (_domHTML.isEmptyTextNode(o)) {
parsedNodes.removeAt(0);
} else {
break;
}
}
while (parsedNodes.isNotEmpty) {
var i = parsedNodes.length - 1;
var o = parsedNodes[i];
if (_domHTML.isEmptyTextNode(o)) {
parsedNodes.removeAt(i);
} else {
break;
}
}
var domList =
parsedNodes.map((e) => DOMNode.from(e)).whereType<DOMNode>().toList();
return domList;
}
}