styleText function
Implementation
String styleText(String text, Iterable<TextStyle> styles) {
if (text.isEmpty || styles.isEmpty) {
return text;
}
final open = StringBuffer(),
close = StringBuffer(),
processedText = styles.fold(text, (text, style) {
final escapedOpen = _escape(style.open),
escapedClose = _escape(style.close),
pattern = RegExp(RegExp.escape(escapedClose));
open.write(escapedOpen);
close.write(escapedClose);
return text.replaceAllMapped(pattern, (match) {
final matchedText = match.group(0)!;
if (match.start + matchedText.length < text.length) {
if (style.open == TextStyle.dim.open ||
style.open == TextStyle.bold.open) {
return '$matchedText$escapedOpen';
}
return escapedOpen;
}
return matchedText;
});
});
return open.toString() + processedText + close.toString();
}