OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of csslib.visitor; | 5 part of csslib.visitor; |
6 | 6 |
7 ///////////////////////////////////////////////////////////////////////// | 7 ///////////////////////////////////////////////////////////////////////// |
8 // CSS specific types: | 8 // CSS specific types: |
9 ///////////////////////////////////////////////////////////////////////// | 9 ///////////////////////////////////////////////////////////////////////// |
10 | 10 |
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1199 // font-style font-variant font-weight font-size/line-height font-family | 1199 // font-style font-variant font-weight font-size/line-height font-family |
1200 // TODO(terry): Only px/pt for now need to handle all possible units to | 1200 // TODO(terry): Only px/pt for now need to handle all possible units to |
1201 // support calc expressions on units. | 1201 // support calc expressions on units. |
1202 FontExpression(SourceSpan span, {dynamic size, List<String> family, | 1202 FontExpression(SourceSpan span, {dynamic size, List<String> family, |
1203 int weight, String style, String variant, LineHeight lineHeight}) : | 1203 int weight, String style, String variant, LineHeight lineHeight}) : |
1204 font = new Font(size : size is LengthTerm ? size.value : size, | 1204 font = new Font(size : size is LengthTerm ? size.value : size, |
1205 family: family, weight: weight, style: style, variant: variant, | 1205 family: family, weight: weight, style: style, variant: variant, |
1206 lineHeight: lineHeight), | 1206 lineHeight: lineHeight), |
1207 super(DartStyleExpression.fontStyle, span); | 1207 super(DartStyleExpression.fontStyle, span); |
1208 | 1208 |
1209 FontExpression merged(FontExpression newFontExpr) { | 1209 FontExpression merged(DartStyleExpression newFontExpr) { |
1210 if (this.isFont && newFontExpr.isFont) { | 1210 if (newFontExpr is FontExpression && this.isFont && newFontExpr.isFont) { |
1211 return new FontExpression.merge(this, newFontExpr); | 1211 return new FontExpression.merge(this, newFontExpr); |
1212 } | 1212 } |
1213 | |
1214 return null; | 1213 return null; |
1215 } | 1214 } |
1216 | 1215 |
1217 /** | 1216 /** |
1218 * Merge the two FontExpression and return the result. | 1217 * Merge the two FontExpression and return the result. |
1219 */ | 1218 */ |
1220 factory FontExpression.merge(FontExpression x, FontExpression y) { | 1219 factory FontExpression.merge(FontExpression x, FontExpression y) { |
1221 return new FontExpression._merge(x, y, y.span); | 1220 return new FontExpression._merge(x, y, y.span); |
1222 } | 1221 } |
1223 | 1222 |
1224 FontExpression._merge(FontExpression x, FontExpression y, SourceSpan span) | 1223 FontExpression._merge(FontExpression x, FontExpression y, SourceSpan span) |
1225 : super(DartStyleExpression.fontStyle, span), | 1224 : font = new Font.merge(x.font, y.font), |
1226 font = new Font.merge(x.font, y.font); | 1225 super(DartStyleExpression.fontStyle, span); |
1227 | 1226 |
1228 FontExpression clone() => | 1227 FontExpression clone() => |
1229 new FontExpression(span, size: font.size, family: font.family, | 1228 new FontExpression(span, size: font.size, family: font.family, |
1230 weight: font.weight, style: font.style, variant: font.variant, | 1229 weight: font.weight, style: font.style, variant: font.variant, |
1231 lineHeight: font.lineHeight); | 1230 lineHeight: font.lineHeight); |
1232 | 1231 |
1233 visit(VisitorBase visitor) => visitor.visitFontExpression(this); | 1232 visit(VisitorBase visitor) => visitor.visitFontExpression(this); |
1234 } | 1233 } |
1235 | 1234 |
1236 abstract class BoxExpression extends DartStyleExpression { | 1235 abstract class BoxExpression extends DartStyleExpression { |
1237 final BoxEdge box; | 1236 final BoxEdge box; |
1238 | 1237 |
1239 BoxExpression(int styleType, SourceSpan span, this.box) | 1238 BoxExpression(int styleType, SourceSpan span, this.box) |
1240 : super(styleType, span); | 1239 : super(styleType, span); |
1241 | 1240 |
1242 /* | |
1243 * Merges give 2 DartStyleExpression (or derived from DartStyleExpression, | |
1244 * e.g., FontExpression, etc.) will merge if the two expressions are of the | |
1245 * same property name (implies same exact type e.g, FontExpression). | |
1246 */ | |
1247 merged(BoxExpression newDartExpr); | |
1248 | |
1249 visit(VisitorBase visitor) => visitor.visitBoxExpression(this); | 1241 visit(VisitorBase visitor) => visitor.visitBoxExpression(this); |
1250 | 1242 |
1251 String get formattedBoxEdge { | 1243 String get formattedBoxEdge { |
1252 if (box.top == box.left && box.top == box.bottom && | 1244 if (box.top == box.left && box.top == box.bottom && |
1253 box.top== box.right) { | 1245 box.top== box.right) { |
1254 return '.uniform(${box.top})'; | 1246 return '.uniform(${box.top})'; |
1255 } else { | 1247 } else { |
1256 var left = box.left == null ? 0 : box.left; | 1248 var left = box.left == null ? 0 : box.left; |
1257 var top = box.top == null ? 0 : box.top; | 1249 var top = box.top == null ? 0 : box.top; |
1258 var right = box.right == null ? 0 : box.right; | 1250 var right = box.right == null ? 0 : box.right; |
1259 var bottom = box.bottom == null ? 0 : box.bottom; | 1251 var bottom = box.bottom == null ? 0 : box.bottom; |
1260 return '.clockwiseFromTop($top,$right,$bottom,$left)'; | 1252 return '.clockwiseFromTop($top,$right,$bottom,$left)'; |
1261 } | 1253 } |
1262 } | 1254 } |
1263 } | 1255 } |
1264 | 1256 |
1265 class MarginExpression extends BoxExpression { | 1257 class MarginExpression extends BoxExpression { |
1266 // TODO(terry): Does auto for margin need to be exposed to Dart UI framework? | 1258 // TODO(terry): Does auto for margin need to be exposed to Dart UI framework? |
1267 /** Margin expression ripped apart. */ | 1259 /** Margin expression ripped apart. */ |
1268 MarginExpression(SourceSpan span, {num top, num right, num bottom, num left}) | 1260 MarginExpression(SourceSpan span, {num top, num right, num bottom, num left}) |
1269 : super(DartStyleExpression.marginStyle, span, | 1261 : super(DartStyleExpression.marginStyle, span, |
1270 new BoxEdge(left, top, right, bottom)); | 1262 new BoxEdge(left, top, right, bottom)); |
1271 | 1263 |
1272 MarginExpression.boxEdge(SourceSpan span, BoxEdge box) | 1264 MarginExpression.boxEdge(SourceSpan span, BoxEdge box) |
1273 : super(DartStyleExpression.marginStyle, span, box); | 1265 : super(DartStyleExpression.marginStyle, span, box); |
1274 | 1266 |
1275 merged(MarginExpression newMarginExpr) { | 1267 merged(DartStyleExpression newMarginExpr) { |
1276 if (this.isMargin && newMarginExpr.isMargin) { | 1268 if (newMarginExpr is MarginExpression && this.isMargin && |
| 1269 newMarginExpr.isMargin) { |
1277 return new MarginExpression.merge(this, newMarginExpr); | 1270 return new MarginExpression.merge(this, newMarginExpr); |
1278 } | 1271 } |
1279 | 1272 |
1280 return null; | 1273 return null; |
1281 } | 1274 } |
1282 | 1275 |
1283 /** | 1276 /** |
1284 * Merge the two MarginExpressions and return the result. | 1277 * Merge the two MarginExpressions and return the result. |
1285 */ | 1278 */ |
1286 factory MarginExpression.merge(MarginExpression x, MarginExpression y) { | 1279 factory MarginExpression.merge(MarginExpression x, MarginExpression y) { |
(...skipping 13 matching lines...) Expand all Loading... |
1300 | 1293 |
1301 class BorderExpression extends BoxExpression { | 1294 class BorderExpression extends BoxExpression { |
1302 /** Border expression ripped apart. */ | 1295 /** Border expression ripped apart. */ |
1303 BorderExpression(SourceSpan span, {num top, num right, num bottom, num left}) | 1296 BorderExpression(SourceSpan span, {num top, num right, num bottom, num left}) |
1304 : super(DartStyleExpression.borderStyle, span, | 1297 : super(DartStyleExpression.borderStyle, span, |
1305 new BoxEdge(left, top, right, bottom)); | 1298 new BoxEdge(left, top, right, bottom)); |
1306 | 1299 |
1307 BorderExpression.boxEdge(SourceSpan span, BoxEdge box) | 1300 BorderExpression.boxEdge(SourceSpan span, BoxEdge box) |
1308 : super(DartStyleExpression.borderStyle, span, box); | 1301 : super(DartStyleExpression.borderStyle, span, box); |
1309 | 1302 |
1310 merged(BorderExpression newBorderExpr) { | 1303 merged(DartStyleExpression newBorderExpr) { |
1311 if (this.isBorder && newBorderExpr.isBorder) { | 1304 if (newBorderExpr is BorderExpression && this.isBorder && newBorderExpr.isBo
rder) { |
1312 return new BorderExpression.merge(this, newBorderExpr); | 1305 return new BorderExpression.merge(this, newBorderExpr); |
1313 } | 1306 } |
1314 | 1307 |
1315 return null; | 1308 return null; |
1316 } | 1309 } |
1317 | 1310 |
1318 /** | 1311 /** |
1319 * Merge the two BorderExpression and return the result. | 1312 * Merge the two BorderExpression and return the result. |
1320 */ | 1313 */ |
1321 factory BorderExpression.merge(BorderExpression x, BorderExpression y) { | 1314 factory BorderExpression.merge(BorderExpression x, BorderExpression y) { |
(...skipping 11 matching lines...) Expand all Loading... |
1333 | 1326 |
1334 visit(VisitorBase visitor) => visitor.visitBorderExpression(this); | 1327 visit(VisitorBase visitor) => visitor.visitBorderExpression(this); |
1335 } | 1328 } |
1336 | 1329 |
1337 class HeightExpression extends DartStyleExpression { | 1330 class HeightExpression extends DartStyleExpression { |
1338 final height; | 1331 final height; |
1339 | 1332 |
1340 HeightExpression(SourceSpan span, this.height) | 1333 HeightExpression(SourceSpan span, this.height) |
1341 : super(DartStyleExpression.heightStyle, span); | 1334 : super(DartStyleExpression.heightStyle, span); |
1342 | 1335 |
1343 merged(HeightExpression newHeightExpr) { | 1336 merged(DartStyleExpression newHeightExpr) { |
1344 if (this.isHeight && newHeightExpr.isHeight) { | 1337 if (newHeightExpr is DartStyleExpression && this.isHeight && newHeightExpr.i
sHeight) { |
1345 return newHeightExpr; | 1338 return newHeightExpr; |
1346 } | 1339 } |
1347 | 1340 |
1348 return null; | 1341 return null; |
1349 } | 1342 } |
1350 | 1343 |
1351 HeightExpression clone() => new HeightExpression(span, height); | 1344 HeightExpression clone() => new HeightExpression(span, height); |
1352 visit(VisitorBase visitor) => visitor.visitHeightExpression(this); | 1345 visit(VisitorBase visitor) => visitor.visitHeightExpression(this); |
1353 } | 1346 } |
1354 | 1347 |
1355 class WidthExpression extends DartStyleExpression { | 1348 class WidthExpression extends DartStyleExpression { |
1356 final width; | 1349 final width; |
1357 | 1350 |
1358 WidthExpression(SourceSpan span, this.width) | 1351 WidthExpression(SourceSpan span, this.width) |
1359 : super(DartStyleExpression.widthStyle, span); | 1352 : super(DartStyleExpression.widthStyle, span); |
1360 | 1353 |
1361 merged(WidthExpression newWidthExpr) { | 1354 merged(DartStyleExpression newWidthExpr) { |
1362 if (this.isWidth && newWidthExpr.isWidth) { | 1355 if (newWidthExpr is WidthExpression && this.isWidth && |
| 1356 newWidthExpr.isWidth) { |
1363 return newWidthExpr; | 1357 return newWidthExpr; |
1364 } | 1358 } |
1365 | 1359 |
1366 return null; | 1360 return null; |
1367 } | 1361 } |
1368 | 1362 |
1369 WidthExpression clone() => new WidthExpression(span, width); | 1363 WidthExpression clone() => new WidthExpression(span, width); |
1370 visit(VisitorBase visitor) => visitor.visitWidthExpression(this); | 1364 visit(VisitorBase visitor) => visitor.visitWidthExpression(this); |
1371 } | 1365 } |
1372 | 1366 |
1373 class PaddingExpression extends BoxExpression { | 1367 class PaddingExpression extends BoxExpression { |
1374 /** Padding expression ripped apart. */ | 1368 /** Padding expression ripped apart. */ |
1375 PaddingExpression(SourceSpan span, {num top, num right, num bottom, num left}) | 1369 PaddingExpression(SourceSpan span, {num top, num right, num bottom, num left}) |
1376 : super(DartStyleExpression.paddingStyle, span, | 1370 : super(DartStyleExpression.paddingStyle, span, |
1377 new BoxEdge(left, top, right, bottom)); | 1371 new BoxEdge(left, top, right, bottom)); |
1378 | 1372 |
1379 PaddingExpression.boxEdge(SourceSpan span, BoxEdge box) | 1373 PaddingExpression.boxEdge(SourceSpan span, BoxEdge box) |
1380 : super(DartStyleExpression.paddingStyle, span, box); | 1374 : super(DartStyleExpression.paddingStyle, span, box); |
1381 | 1375 |
1382 merged(PaddingExpression newPaddingExpr) { | 1376 merged(DartStyleExpression newPaddingExpr) { |
1383 if (this.isPadding && newPaddingExpr.isPadding) { | 1377 if (newPaddingExpr is PaddingExpression && this.isPadding && |
| 1378 newPaddingExpr.isPadding) { |
1384 return new PaddingExpression.merge(this, newPaddingExpr); | 1379 return new PaddingExpression.merge(this, newPaddingExpr); |
1385 } | 1380 } |
1386 | 1381 |
1387 return null; | 1382 return null; |
1388 } | 1383 } |
1389 | 1384 |
1390 /** | 1385 /** |
1391 * Merge the two PaddingExpression and return the result. | 1386 * Merge the two PaddingExpression and return the result. |
1392 */ | 1387 */ |
1393 factory PaddingExpression.merge(PaddingExpression x, PaddingExpression y) { | 1388 factory PaddingExpression.merge(PaddingExpression x, PaddingExpression y) { |
1394 return new PaddingExpression._merge(x, y, y.span); | 1389 return new PaddingExpression._merge(x, y, y.span); |
1395 } | 1390 } |
1396 | 1391 |
1397 PaddingExpression._merge(PaddingExpression x, PaddingExpression y, | 1392 PaddingExpression._merge(PaddingExpression x, PaddingExpression y, |
1398 SourceSpan span) | 1393 SourceSpan span) |
1399 : super(DartStyleExpression.paddingStyle, span, | 1394 : super(DartStyleExpression.paddingStyle, span, |
1400 new BoxEdge.merge(x.box, y.box)); | 1395 new BoxEdge.merge(x.box, y.box)); |
1401 | 1396 |
1402 PaddingExpression clone() => | 1397 PaddingExpression clone() => |
1403 new PaddingExpression(span, top: box.top, right: box.right, | 1398 new PaddingExpression(span, top: box.top, right: box.right, |
1404 bottom: box.bottom, left: box.left); | 1399 bottom: box.bottom, left: box.left); |
1405 visit(VisitorBase visitor) => visitor.visitPaddingExpression(this); | 1400 visit(VisitorBase visitor) => visitor.visitPaddingExpression(this); |
1406 } | 1401 } |
OLD | NEW |