wrapWithSpan method
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}) {
if (direction == null) direction = estimateDirection(text, isHtml: isHtml);
var 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) : '');
}