applyInlineStyles method
Future<List<TextSpan>>
applyInlineStyles(
- String line, [
- TextStyle? style,
- 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;
}