applyInlineStyles method

Future<List<TextSpan>> applyInlineStyles(
  1. String line, [
  2. TextStyle? style,
  3. bool addFontSize = true
])

Implementation

Future<List<pw.TextSpan>> applyInlineStyles(String line, [pw.TextStyle? style, bool addFontSize = true]) async {
  final List<pw.TextSpan> spans = <pw.TextSpan>[];
  final pw.TextStyle? inheritedStyle = style;
  final Iterable<RegExpMatch> matches = Constant.INLINE_MATCHER.allMatches(line);
  int currentIndex = 0;
  int i = 0;
  while (i < matches.length) {
    final RegExpMatch match = matches.elementAt(i);
    final String plainText = line.substring(currentIndex, match.start);
    if (plainText.isNotEmpty) {
      if (Constant.INLINE_MATCHER.hasMatch(plainText)) {
        spans.add(pw.TextSpan(
            children: await applyInlineStyles(plainText.convertUTF8QuotesToValidString, inheritedStyle, addFontSize),
            style: inheritedStyle ?? defaultTextStyle)); // Apply currentinheritedStyle
      } else {
        spans.add(pw.TextSpan(
            text: plainText.convertUTF8QuotesToValidString.decodeSymbols,
            style: inheritedStyle ?? defaultTextStyle)); // Apply currentinheritedStyle
      }
    }

    ///2 bold italic, 4 bold, 6 italic, 8 underline, 12 is strike
    final String? contentInlineStyles = match.group(2) ?? match.group(4) ?? match.group(6) ?? match.group(8) ?? match.group(12); //inline
    final String? contentLink = match.group(15); //link
    final List<pw.TextSpan> spansLineStyle =
        await getInlineStyles(contentInlineStyles?.convertUTF8QuotesToValidString ?? '', inheritedStyle);
    final List<pw.TextSpan> spansLinkStyle =
        await getLinkStyle(contentLink?.convertUTF8QuotesToValidString ?? '', inheritedStyle, addFontSize);
    spans.merge(<List<pw.TextSpan>>[spansLineStyle, spansLinkStyle]);
    currentIndex = match.end;
    i++;
  }
  final String remainingText = line.substring(currentIndex);
  if (remainingText.isNotEmpty) {
    if (Constant.INLINE_MATCHER.hasMatch(remainingText)) {
      spans.add(pw.TextSpan(
          children: await applyInlineStyles(remainingText.convertUTF8QuotesToValidString, inheritedStyle, addFontSize),
          style: inheritedStyle ?? defaultTextStyle)); // Apply currentinheritedStyle
    } else {
      spans.add(pw.TextSpan(
          text: remainingText.convertUTF8QuotesToValidString.decodeSymbols,
          style: inheritedStyle ?? defaultTextStyle)); // Apply currentinheritedStyle
    }
  }
  return spans;
}