styleText function

String styleText(
  1. String text,
  2. Iterable<TextStyle> styles
)

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