in lib/parser.dart [2401:2478]
LiteralTerm processDimension(Token? t, Object value, SourceSpan span) {
LiteralTerm term;
var unitType = _peek();
switch (unitType) {
case TokenKind.UNIT_EM:
term = EmTerm(value, t!.text, span);
_next(); // Skip the unit
break;
case TokenKind.UNIT_EX:
term = ExTerm(value, t!.text, span);
_next(); // Skip the unit
break;
case TokenKind.UNIT_LENGTH_PX:
case TokenKind.UNIT_LENGTH_CM:
case TokenKind.UNIT_LENGTH_MM:
case TokenKind.UNIT_LENGTH_IN:
case TokenKind.UNIT_LENGTH_PT:
case TokenKind.UNIT_LENGTH_PC:
term = LengthTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
case TokenKind.UNIT_ANGLE_DEG:
case TokenKind.UNIT_ANGLE_RAD:
case TokenKind.UNIT_ANGLE_GRAD:
case TokenKind.UNIT_ANGLE_TURN:
term = AngleTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
case TokenKind.UNIT_TIME_MS:
case TokenKind.UNIT_TIME_S:
term = TimeTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
case TokenKind.UNIT_FREQ_HZ:
case TokenKind.UNIT_FREQ_KHZ:
term = FreqTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
case TokenKind.PERCENT:
term = PercentageTerm(value, t!.text, span);
_next(); // Skip the %
break;
case TokenKind.UNIT_FRACTION:
term = FractionTerm(value, t!.text, span);
_next(); // Skip the unit
break;
case TokenKind.UNIT_RESOLUTION_DPI:
case TokenKind.UNIT_RESOLUTION_DPCM:
case TokenKind.UNIT_RESOLUTION_DPPX:
term = ResolutionTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
case TokenKind.UNIT_CH:
term = ChTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
case TokenKind.UNIT_REM:
term = RemTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
case TokenKind.UNIT_VIEWPORT_VW:
case TokenKind.UNIT_VIEWPORT_VH:
case TokenKind.UNIT_VIEWPORT_VMIN:
case TokenKind.UNIT_VIEWPORT_VMAX:
term = ViewportTerm(value, t!.text, span, unitType);
_next(); // Skip the unit
break;
default:
if (value is Identifier) {
term = LiteralTerm(value, value.name, span);
} else {
term = NumberTerm(value, t!.text, span);
}
}
return term;
}