in lib/src/intl/number_format_parser.dart [171:217]
bool parseCharacterAffix(StringBuffer affix) {
var ch = pattern.current;
if (ch == null) return false;
if (ch == QUOTE) {
if (pattern.peek == QUOTE) {
pattern.moveNext();
affix.write(QUOTE); // 'don''t'
} else {
inQuote = !inQuote;
}
return true;
}
if (inQuote) {
affix.write(ch);
} else {
switch (ch) {
case PATTERN_DIGIT:
case PATTERN_ZERO_DIGIT:
case PATTERN_GROUPING_SEPARATOR:
case PATTERN_DECIMAL_SEPARATOR:
case PATTERN_SEPARATOR:
return false;
case PATTERN_CURRENCY_SIGN:
// TODO(alanknight): Handle the local/global/portable currency signs
affix.write(currencySymbol);
break;
case PATTERN_PERCENT:
if (result.multiplier != 1 && result.multiplier != PERCENT_SCALE) {
throw const FormatException('Too many percent/permill');
}
result.multiplier = PERCENT_SCALE;
affix.write(symbols.PERCENT);
break;
case PATTERN_PER_MILLE:
if (result.multiplier != 1 && result.multiplier != PER_MILLE_SCALE) {
throw const FormatException('Too many percent/permill');
}
result.multiplier = PER_MILLE_SCALE;
affix.write(symbols.PERMILL);
break;
default:
affix.write(ch);
}
}
return true;
}