| 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 |