in lib/src/intl/number_format_parser.dart [293:366]
bool parseTrunkCharacter(trunk) {
var ch = pattern.current;
switch (ch) {
case PATTERN_DIGIT:
if (zeroDigitCount > 0) {
digitRightCount++;
} else {
digitLeftCount++;
}
if (groupingCount >= 0 && decimalPos < 0) {
groupingCount++;
}
break;
case PATTERN_ZERO_DIGIT:
if (digitRightCount > 0) {
throw FormatException('Unexpected "0" in pattern "${pattern.input}');
}
zeroDigitCount++;
if (groupingCount >= 0 && decimalPos < 0) {
groupingCount++;
}
break;
case PATTERN_GROUPING_SEPARATOR:
if (groupingCount > 0) {
groupingSizeSetExplicitly = true;
result.groupingSize = groupingCount;
}
groupingCount = 0;
break;
case PATTERN_DECIMAL_SEPARATOR:
if (decimalPos >= 0) {
throw FormatException(
'Multiple decimal separators in pattern "$pattern"');
}
decimalPos = digitLeftCount + zeroDigitCount + digitRightCount;
break;
case PATTERN_EXPONENT:
trunk.write(ch);
if (result.useExponentialNotation) {
throw FormatException(
'Multiple exponential symbols in pattern "$pattern"');
}
result.useExponentialNotation = true;
result.minimumExponentDigits = 0;
// exponent pattern can have a optional '+'.
pattern.moveNext();
var nextChar = pattern.current;
if (nextChar == PATTERN_PLUS) {
trunk.write(pattern.current);
pattern.moveNext();
result.useSignForPositiveExponent = true;
}
// Use lookahead to parse out the exponential part
// of the pattern, then jump into phase 2.
while (pattern.current == PATTERN_ZERO_DIGIT) {
trunk.write(pattern.current);
pattern.moveNext();
result.minimumExponentDigits++;
}
if ((digitLeftCount + zeroDigitCount) < 1 ||
result.minimumExponentDigits < 1) {
throw FormatException('Malformed exponential pattern "$pattern"');
}
return false;
default:
return false;
}
trunk.write(ch);
pattern.moveNext();
return true;
}