parse method
Converts HTML content to a list of TextSpan objects
Implementation
List<TextSpan> parse() {
List<TextSpan> spans = List.empty(growable: true);
_events.forEach((event) {
if (event is xmle.XmlStartElementEvent) {
if (!event.isSelfClosing) {
var styles = "";
if (event.name == 'b' || event.name == 'strong') {
styles = "font-weight: bold;";
} else if (event.name == 'i' || event.name == 'em') {
styles = "font-style: italic;";
} else if (event.name == 'u') {
styles = "text-decoration: underline;";
} else if (event.name == 'strike' ||
event.name == 'del' ||
event.name == 's') {
styles = "text-decoration: line-through;";
} else if (event.name == 'a') {
styles = "visit_link:__#TO_GET#__;text-decoration: underline; color: #0000ff";
}
if (event.name == 'tgYellow') {
styles = 'background:#FFFF00';
} else if (event.name == 'tgCyan') {
styles = 'background:#00FFFF';
} else if (event.name == 'tgPink') {
styles = 'background:#FF69B4';
} else if (event.name == 'tgGreen') {
styles = 'background:#90EE90';
} else if (event.name == 'tgOrange') {
styles = 'background:#FFA07A';
} else if (event.name == 'tgLilac') {
styles = 'background:#DDA0DD';
}
for (var attribute in event.attributes) {
if (attribute.name == "style") {
styles = "$styles;${attribute.value}";
} else if (attribute.name == "href") {
styles = styles.replaceFirst(r"__#TO_GET#__",
attribute.value.replaceAll(r":", "__#COLON#__"));
}
}
_stack.add(_Tag(event.name, styles));
} else {
if (event.name == "br") {
spans.add(const TextSpan(text: "\n"));
}
}
}
if (event is xmle.XmlEndElementEvent) {
dynamic top;
if (_stack.isNotEmpty) {
top = _stack.removeLast();
}
if (top.name != event.name) {
return;
}
if (event.name == "p") {
spans.add(const TextSpan(text: "\n"));
}
}
if (event is xmle.XmlTextEvent) {
final currentSpan = _handleText(event.value);
if (currentSpan.text!.isNotEmpty) {
spans.add(currentSpan);
}
}
});
// for the last p tag
// if (spans[spans.length - 1].text == '\n') {
// spans.removeLast();
// }
return spans;
}