formatMessage function
- String text
Tokenises text: links, **bold**, _italic_, `code` and line
breaks. HTML is never interpreted.
Implementation
List<FormatToken> formatMessage(String text) {
final out = <FormatToken>[];
final lines = text.replaceAll(_newlineRe, '\n').split('\n');
for (var i = 0; i < lines.length; i++) {
if (i > 0) out.add(const BrToken());
for (final seg in _splitBy(lines[i], _urlRe)) {
if (seg.match) {
out.add(LinkToken(seg.value, seg.value));
continue;
}
for (final inl in _splitBy(seg.value, _inlineRe)) {
if (!inl.match) {
if (inl.value.isNotEmpty) out.add(TextToken(inl.value));
continue;
}
final v = inl.value;
if (v.startsWith('**')) {
out.add(BoldToken(v.substring(2, v.length - 2)));
} else if (v.startsWith('`')) {
out.add(CodeToken(v.substring(1, v.length - 1)));
} else {
out.add(ItalicToken(v.substring(1, v.length - 1)));
}
}
}
}
return out;
}