Skip to content

Commit 64a0078

Browse files
committed
Misc changes & add support for numbers/em/rem/%/px/literal terms for border width
1 parent fd978ab commit 64a0078

File tree

2 files changed

+36
-23
lines changed

2 files changed

+36
-23
lines changed

lib/src/css_parser.dart

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ Style declarationsToStyle(Map<String, List<css.Expression>> declarations) {
1818
case 'border':
1919
List<css.LiteralTerm> borderWidths = value.whereType<css.LiteralTerm>().toList();
2020
/// List<css.LiteralTerm> might include other values than the ones we want for [BorderSide.width], so make sure to remove those before passing it to [ExpressionMapping]
21-
borderWidths.removeWhere((element) => element.text != "thin" && element.text != "medium" && element.text != "thick" && !(element is css.LengthTerm));
21+
borderWidths.removeWhere((element) => element.text != "thin" && element.text != "medium" && element.text != "thick"
22+
&& !(element is css.LengthTerm) && !(element is css.PercentageTerm) && !(element is css.EmTerm) && !(element is css.RemTerm) && !(element is css.NumberTerm));
2223
List<css.Expression> borderColors = value.where((element) => ExpressionMapping.expressionToColor(element) != null).toList();
23-
List<css.LiteralTerm> temp = value.whereType<css.LiteralTerm>().toList();
24+
List<css.LiteralTerm> potentialStyles = value.whereType<css.LiteralTerm>().toList();
2425
/// Currently doesn't matter, as Flutter only supports "solid" or "none", but may support more in the future.
2526
List<String> possibleBorderValues = ["dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset", "none", "hidden"];
2627
/// List<css.LiteralTerm> might include other values than the ones we want for [BorderSide.style], so make sure to remove those before passing it to [ExpressionMapping]
27-
temp.removeWhere((element) => !possibleBorderValues.contains(element.text));
28-
List<css.LiteralTerm> borderStyles = temp;
28+
potentialStyles.removeWhere((element) => !possibleBorderValues.contains(element.text));
29+
List<css.LiteralTerm> borderStyles = potentialStyles;
2930
style.border = ExpressionMapping.expressionToBorder(borderWidths, borderStyles, borderColors);
3031
break;
3132
case 'color':
@@ -66,7 +67,7 @@ Style declarationsToStyle(Map<String, List<css.Expression>> declarations) {
6667
List<css.LiteralTerm> temp = value.whereType<css.LiteralTerm>().toList();
6768
/// List<css.LiteralTerm> might include other values than the ones we want for [textDecorationStyle], so make sure to remove those before passing it to [ExpressionMapping]
6869
temp.removeWhere((element) => element.text != "solid" && element.text != "double" && element.text != "dashed" && element.text != "dotted" && element.text != "wavy");
69-
css.LiteralTerm textDecorationStyle = temp.last ?? null;
70+
css.LiteralTerm textDecorationStyle = temp.isNotEmpty ? temp.last : null;
7071
style.textDecoration = ExpressionMapping.expressionToTextDecorationLine(textDecorationList);
7172
if (textDecorationColor != null) style.textDecorationColor = ExpressionMapping.expressionToColor(textDecorationColor);
7273
if (textDecorationStyle != null) style.textDecorationStyle = ExpressionMapping.expressionToTextDecorationStyle(textDecorationStyle);
@@ -122,7 +123,7 @@ class DeclarationVisitor extends css.Visitor {
122123
//Mapping functions
123124
class ExpressionMapping {
124125

125-
static Border expressionToBorder(List<css.LiteralTerm> borderWidths, List<css.LiteralTerm> borderStyles, List<css.Expression> borderColors) {
126+
static Border expressionToBorder(List<css.Expression> borderWidths, List<css.LiteralTerm> borderStyles, List<css.Expression> borderColors) {
126127
CustomBorderSide left = CustomBorderSide();
127128
CustomBorderSide top = CustomBorderSide();
128129
CustomBorderSide right = CustomBorderSide();
@@ -205,16 +206,27 @@ class ExpressionMapping {
205206
}
206207

207208
static double expressionToBorderWidth(css.LiteralTerm value) {
208-
switch(value.text) {
209-
case "thin":
210-
return 2.0;
211-
case "medium":
212-
return 4.0;
213-
case "thick":
214-
return 6.0;
215-
default:
216-
return double.tryParse(value.text.replaceAll(new RegExp(r'\s+(\d+\.\d+)\s+'), ''));
209+
if (value is css.NumberTerm) {
210+
return double.tryParse(value.text);
211+
} else if (value is css.PercentageTerm) {
212+
return double.tryParse(value.text) / 100;
213+
} else if (value is css.EmTerm) {
214+
return double.tryParse(value.text);
215+
} else if (value is css.RemTerm) {
216+
return double.tryParse(value.text);
217+
} else if (value is css.LengthTerm) {
218+
return double.tryParse(value.text.replaceAll(new RegExp(r'\s+(\d+\.\d+)\s+'), ''));
219+
} else if (value is css.LiteralTerm) {
220+
switch (value.text) {
221+
case "thin":
222+
return 2.0;
223+
case "medium":
224+
return 4.0;
225+
case "thick":
226+
return 6.0;
227+
}
217228
}
229+
return null;
218230
}
219231

220232
static BorderStyle expressionToBorderStyle(css.LiteralTerm value) {
@@ -541,6 +553,7 @@ class ExpressionMapping {
541553
}
542554

543555
static Color hslToRgbToColor(String text) {
556+
print(text);
544557
final hslText = text.replaceAll(')', '').replaceAll(' ', '');
545558
final hslValues = hslText.split(',').toList();
546559
List<double> parsedHsl = [];

lib/src/utils.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ import 'package:flutter/material.dart';
44
Map<String, String> namedColors = {
55
"White": "#FFFFFF",
66
"Silver": "#C0C0C0",
7-
"Gray": "#808080",
7+
"Gray": "#808080",
88
"Black": "#000000",
99
"Red": "#FF0000",
1010
"Maroon": "#800000",
11-
"Yellow": "#FFFF00",
11+
"Yellow": "#FFFF00",
1212
"Olive": "#808000",
13-
"Lime": "#00FF00",
13+
"Lime": "#00FF00",
1414
"Green": "#008000",
15-
"Aqua": "#00FFFF",
16-
"Teal": "#008080",
17-
"Blue": "#0000FF",
18-
"Navy": "#000080",
15+
"Aqua": "#00FFFF",
16+
"Teal": "#008080",
17+
"Blue": "#0000FF",
18+
"Navy": "#000080",
1919
"Fuchsia": "#FF00FF",
20-
"Purple":"#800080",
20+
"Purple": "#800080",
2121
};
2222

2323
class Context<T> {

0 commit comments

Comments
 (0)