in lib/parser.dart [1899:2032]
DartStyleExpression? buildDartStyleNode(
int styleType, Expressions exprs, List<DartStyleExpression> dartStyles) {
switch (styleType) {
// Properties in order:
//
// font-style font-variant font-weight font-size/line-height font-family
//
// The font-size and font-family values are required. If other values are
// missing; a default, if it exist, will be used.
case _fontPartFont:
var processor = ExpressionsProcessor(exprs);
return _mergeFontStyles(processor.processFont(), dartStyles);
case _fontPartFamily:
var processor = ExpressionsProcessor(exprs);
try {
return _mergeFontStyles(processor.processFontFamily(), dartStyles);
} catch (fontException) {
_error('$fontException', _peekToken.span);
}
break;
case _fontPartSize:
var processor = ExpressionsProcessor(exprs);
return _mergeFontStyles(processor.processFontSize(), dartStyles);
case _fontPartStyle:
// Possible style values:
// normal [default]
// italic
// oblique
// inherit
// TODO(terry): TBD
break;
case _fontPartVariant:
// Possible variant values:
// normal [default]
// small-caps
// inherit
// TODO(terry): TBD
break;
case _fontPartWeight:
// Possible weight values:
// normal [default]
// bold
// bolder
// lighter
// 100 - 900
// inherit
// TODO(terry): Only 'normal', 'bold', or values of 100-900 supoorted
// need to handle bolder, lighter, and inherit. See
// https://github.com/dart-lang/csslib/issues/1
var expr = exprs.expressions[0];
if (expr is NumberTerm) {
var fontExpr = FontExpression(expr.span, weight: expr.value as int?);
return _mergeFontStyles(fontExpr, dartStyles);
} else if (expr is LiteralTerm) {
var weight = _nameToFontWeight[expr.value.toString()];
if (weight != null) {
var fontExpr = FontExpression(expr.span, weight: weight);
return _mergeFontStyles(fontExpr, dartStyles);
}
}
break;
case _lineHeightPart:
if (exprs.expressions.length == 1) {
var expr = exprs.expressions[0];
if (expr is UnitTerm) {
var unitTerm = expr;
// TODO(terry): Need to handle other units and LiteralTerm normal
// See https://github.com/dart-lang/csslib/issues/2.
if (unitTerm.unit == TokenKind.UNIT_LENGTH_PX ||
unitTerm.unit == TokenKind.UNIT_LENGTH_PT) {
var fontExpr = FontExpression(expr.span,
lineHeight: LineHeight(expr.value as num, inPixels: true));
return _mergeFontStyles(fontExpr, dartStyles);
} else if (isChecked) {
_warning('Unexpected unit for line-height', expr.span);
}
} else if (expr is NumberTerm) {
var fontExpr = FontExpression(expr.span,
lineHeight: LineHeight(expr.value as num, inPixels: false));
return _mergeFontStyles(fontExpr, dartStyles);
} else if (isChecked) {
_warning('Unexpected value for line-height', expr.span);
}
}
break;
case _marginPartMargin:
return MarginExpression.boxEdge(exprs.span, processFourNums(exprs));
case _borderPartBorder:
for (var expr in exprs.expressions) {
var v = marginValue(expr);
if (v != null) {
final box = BoxEdge.uniform(v);
return BorderExpression.boxEdge(exprs.span, box);
}
}
break;
case _borderPartWidth:
var v = marginValue(exprs.expressions[0]);
if (v != null) {
final box = BoxEdge.uniform(v);
return BorderExpression.boxEdge(exprs.span, box);
}
break;
case _paddingPartPadding:
return PaddingExpression.boxEdge(exprs.span, processFourNums(exprs));
case _marginPartLeft:
case _marginPartTop:
case _marginPartRight:
case _marginPartBottom:
case _borderPartLeft:
case _borderPartTop:
case _borderPartRight:
case _borderPartBottom:
case _borderPartLeftWidth:
case _borderPartTopWidth:
case _borderPartRightWidth:
case _borderPartBottomWidth:
case _heightPart:
case _widthPart:
case _paddingPartLeft:
case _paddingPartTop:
case _paddingPartRight:
case _paddingPartBottom:
if (exprs.expressions.isNotEmpty) {
return processOneNumber(exprs, styleType);
}
break;
}
return null;
}