convertHiNodes function
Implementation
List<TextSpan> convertHiNodes(
List<hi.Node> nodes,
Map<String, TextStyle> theme,
TextStyle? style,
TextStyle? styleNotMatched,
) {
List<TextSpan> spans = [];
var currentSpans = spans;
List<List<TextSpan>> stack = [];
void traverse(hi.Node node, TextStyle? parentStyle) {
final nodeStyle = parentStyle ?? theme[node.className ?? ''];
final finallyStyle = (nodeStyle ?? styleNotMatched)?.merge(style);
if (node.value != null) {
currentSpans.add(node.className == null
? TextSpan(text: node.value, style: finallyStyle)
: TextSpan(text: node.value, style: finallyStyle));
} else if (node.children != null) {
List<TextSpan> tmp = [];
currentSpans.add(TextSpan(children: tmp, style: finallyStyle));
stack.add(currentSpans);
currentSpans = tmp;
for (var n in node.children!) {
traverse(n, nodeStyle);
if (n == node.children!.last) {
currentSpans = stack.isEmpty ? spans : stack.removeLast();
}
}
}
}
for (var node in nodes) {
traverse(node, null);
}
return spans;
}