MarkdownParser constructor
MarkdownParser(
- String data
Implementation
MarkdownParser(this.data) {
plainText = '';
spans = [MarkdownSpan(text: '', markups: [], style: const TextStyle())];
bool bold = false;
bool italic = false;
bool underline = false;
const String markupBold = '**';
const String markupItalic = '_';
const String markupUnderline = '++';
addSpan(String markup, bool isOpening) {
final List<Markup> markups = [Markup(markup, isOpening)];
if (bold && markup != markupBold) markups.add(Markup(markupBold, true));
if (italic && markup != markupItalic) {
markups.add(Markup(markupItalic, true));
}
if (underline && markup != markupUnderline) {
markups.add(Markup(markupUnderline, true));
}
spans.add(
MarkdownSpan(
text: '',
markups: markups,
style: TextStyle(
fontWeight: bold ? FontWeight.bold : null,
fontStyle: italic ? FontStyle.italic : null,
decoration: underline ? TextDecoration.underline : null,
),
),
);
}
bool checkMarkup(int i, String markup) {
return data.substring(i, min(i + markup.length, data.length)) == markup;
}
for (int c = 0; c < data.length; c++) {
if (checkMarkup(c, markupBold)) {
bold = !bold;
addSpan(markupBold, bold);
c += markupBold.length - 1;
} else if (checkMarkup(c, markupItalic)) {
italic = !italic;
addSpan(markupItalic, italic);
c += markupItalic.length - 1;
} else if (checkMarkup(c, markupUnderline)) {
underline = !underline;
addSpan(markupUnderline, underline);
c += markupUnderline.length - 1;
} else {
spans[spans.length - 1].text += data[c];
plainText = plainText ?? data[c];
}
}
}