wrapWithSpan method
- String text, {
- bool isHtml = false,
- bool resetDir = true,
- TextDirection? direction,
Formats a string of a given (or estimated, if not provided) direction
for use in HTML output of the context directionality, so an
opposite-directionality string is neither garbled nor garbles what follows
it.
If the input string's directionality doesn't match the context
directionality, we wrap it with a span tag and add a dir attribute
(either "dir=rtl" or "dir=ltr"). If alwaysSpan was true when constructing
the formatter, the input is always wrapped with span tag, skipping the
dir attribute when it's not needed.
If resetDir is true and the overall directionality or the exit
directionality of text is opposite to the context directionality,
a trailing unicode BiDi mark matching the context directionality is
appended (LRM or RLM). If isHtml is false, we HTML-escape the text.
Implementation
String wrapWithSpan(String text,
{bool isHtml = false, bool resetDir = true, TextDirection? direction}) {
direction ??= estimateDirection(text, isHtml: isHtml);
String result;
if (!isHtml) text = const HtmlEscape().convert(text);
var directionChange = contextDirection.isDirectionChange(direction);
if (_alwaysSpan || directionChange) {
var spanDirection = '';
if (directionChange) {
spanDirection = ' dir=${direction.spanText}';
}
result = '<span$spanDirection>$text</span>';
} else {
result = text;
}
return result + (resetDir ? _resetDir(text, direction, isHtml) : '');
}