in lib/src/ansi_code.dart [121:161]
String? wrapWith(String? value, Iterable<AnsiCode> codes,
{bool forScript = false}) {
// Eliminate duplicates
final myCodes = codes.toSet();
if (_isNoop(myCodes.isEmpty, value, forScript)) {
return value;
}
var foreground = 0, background = 0;
for (var code in myCodes) {
switch (code.type) {
case AnsiCodeType.foreground:
foreground++;
if (foreground > 1) {
throw ArgumentError.value(codes, 'codes',
'Cannot contain more than one foreground color code.');
}
break;
case AnsiCodeType.background:
background++;
if (background > 1) {
throw ArgumentError.value(codes, 'codes',
'Cannot contain more than one foreground color code.');
}
break;
case AnsiCodeType.reset:
throw ArgumentError.value(
codes, 'codes', 'Cannot contain reset codes.');
case AnsiCodeType.style:
// Ignore.
break;
}
}
final sortedCodes = myCodes.map((ac) => ac.code).toList()..sort();
final escapeValue = forScript ? _ansiEscapeForScript : _ansiEscapeLiteral;
return "$escapeValue[${sortedCodes.join(';')}m$value"
'${resetAll._escapeValue(forScript: forScript)}';
}