From 7f2c65b219ac6abaa9b999e6db49e02c5cdfe4ca Mon Sep 17 00:00:00 2001 From: linchuanghu Date: Fri, 10 Sep 2021 16:12:42 +0800 Subject: [PATCH 1/6] Fix issue #834 Inline style with "text-shadow" parse failed. --- lib/src/css_parser.dart | 64 ++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/lib/src/css_parser.dart b/lib/src/css_parser.dart index 261a09ba27..5d6dd5fe5a 100644 --- a/lib/src/css_parser.dart +++ b/lib/src/css_parser.dart @@ -809,34 +809,58 @@ class ExpressionMapping { previousIndex = i + 1; } for (List list in valueList) { - css.Expression exp = list[0]; - css.Expression exp2 = list[1]; - css.LiteralTerm? exp3 = list.length > 2 ? list[2] as css.LiteralTerm? : null; - css.LiteralTerm? exp4 = list.length > 3 ? list[3] as css.LiteralTerm? : null; + css.Expression? offsetX; + css.Expression? offsetY; + css.Expression? blurRadius; + css.HexColorTerm? color; + int expressionIndex = 0; + list.forEach((element) { + if (element is css.HexColorTerm) { + color = element; + } else if (expressionIndex == 0) { + offsetX = element; + expressionIndex++; + } else if (expressionIndex++ == 1) { + offsetY = element; + expressionIndex++; + } else { + blurRadius = element; + } + }); RegExp nonNumberRegex = RegExp(r'\s+(\d+\.\d+)\s+'); - if (exp is css.LiteralTerm && exp2 is css.LiteralTerm) { - if (exp3 != null && ExpressionMapping.expressionToColor(exp3) != null) { - shadow.add(Shadow( - color: expressionToColor(exp3)!, - offset: Offset(double.tryParse(exp.text.replaceAll(nonNumberRegex, ''))!, double.tryParse(exp2.text.replaceAll(nonNumberRegex, ''))!) - )); - } else if (exp3 != null && exp3 is css.LiteralTerm) { - if (exp4 != null && ExpressionMapping.expressionToColor(exp4) != null) { + if (offsetX is css.LiteralTerm && offsetY is css.LiteralTerm) { + if (color != null && ExpressionMapping.expressionToColor(color) != null) { + if (blurRadius is css.LiteralTerm) { shadow.add(Shadow( - color: expressionToColor(exp4)!, - offset: Offset(double.tryParse(exp.text.replaceAll(nonNumberRegex, ''))!, double.tryParse(exp2.text.replaceAll(nonNumberRegex, ''))!), - blurRadius: double.tryParse(exp3.text.replaceAll(nonNumberRegex, ''))! + color: expressionToColor(color)!, + offset: Offset( + double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, + double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), + blurRadius: double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! )); } else { shadow.add(Shadow( - offset: Offset(double.tryParse(exp.text.replaceAll(nonNumberRegex, ''))!, double.tryParse(exp2.text.replaceAll(nonNumberRegex, ''))!), - blurRadius: double.tryParse(exp3.text.replaceAll(nonNumberRegex, ''))! + color: expressionToColor(color)!, + offset: Offset( + double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, + double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), )); } } else { - shadow.add(Shadow( - offset: Offset(double.tryParse(exp.text.replaceAll(nonNumberRegex, ''))!, double.tryParse(exp2.text.replaceAll(nonNumberRegex, ''))!) - )); + if (blurRadius is css.LiteralTerm) { + shadow.add(Shadow( + offset: Offset( + double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, + double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), + blurRadius: double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! + )); + } else { + shadow.add(Shadow( + offset: Offset( + double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, + double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), + )); + } } } } From 7f4acaaedf86d9c37fc0c6c370710ed0c8319a83 Mon Sep 17 00:00:00 2001 From: linchuanghu Date: Fri, 10 Sep 2021 17:14:20 +0800 Subject: [PATCH 2/6] Add min width for 'table' tag. --- lib/src/layout_element.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/src/layout_element.dart b/lib/src/layout_element.dart index b677e9d872..99e6fa21ca 100644 --- a/lib/src/layout_element.dart +++ b/lib/src/layout_element.dart @@ -112,9 +112,12 @@ class TableLayoutElement extends LayoutElement { columni++; } if (child is TableCellElement) { + String width = child.attributes["width"] ?? ""; + width.replaceAll("px", ""); + final pxSize = double.tryParse(width) ?? 120; cells.add(GridPlacement( child: Container( - width: double.infinity, + width: pxSize, padding: child.style.padding ?? row.style.padding, decoration: BoxDecoration( color: child.style.backgroundColor ?? row.style.backgroundColor, From 511fa4bf2110a5aef4d92267bf150b17e3add91c Mon Sep 17 00:00:00 2001 From: windows7lake <979506634@qq.com> Date: Mon, 13 Sep 2021 09:12:06 +0800 Subject: [PATCH 3/6] Update layout_element.dart --- lib/src/layout_element.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/layout_element.dart b/lib/src/layout_element.dart index 99e6fa21ca..00c9769698 100644 --- a/lib/src/layout_element.dart +++ b/lib/src/layout_element.dart @@ -117,7 +117,7 @@ class TableLayoutElement extends LayoutElement { final pxSize = double.tryParse(width) ?? 120; cells.add(GridPlacement( child: Container( - width: pxSize, + width: double.infinity, padding: child.style.padding ?? row.style.padding, decoration: BoxDecoration( color: child.style.backgroundColor ?? row.style.backgroundColor, From 5a8e0480f4f48088b1ba84c8853def955b9ab994 Mon Sep 17 00:00:00 2001 From: windows7lake <979506634@qq.com> Date: Mon, 13 Sep 2021 09:18:29 +0800 Subject: [PATCH 4/6] Update css_parser.dart --- lib/src/css_parser.dart | 43 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/lib/src/css_parser.dart b/lib/src/css_parser.dart index 5d6dd5fe5a..fa986b0914 100644 --- a/lib/src/css_parser.dart +++ b/lib/src/css_parser.dart @@ -830,37 +830,20 @@ class ExpressionMapping { RegExp nonNumberRegex = RegExp(r'\s+(\d+\.\d+)\s+'); if (offsetX is css.LiteralTerm && offsetY is css.LiteralTerm) { if (color != null && ExpressionMapping.expressionToColor(color) != null) { - if (blurRadius is css.LiteralTerm) { - shadow.add(Shadow( - color: expressionToColor(color)!, - offset: Offset( - double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, - double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), - blurRadius: double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! - )); - } else { - shadow.add(Shadow( - color: expressionToColor(color)!, - offset: Offset( - double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, - double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), - )); - } + shadow.add(Shadow( + color: expressionToColor(color)!, + offset: Offset( + double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, + double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), + blurRadius: (blurRadius is css.LiteralTerm) ? double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! : null, + )); } else { - if (blurRadius is css.LiteralTerm) { - shadow.add(Shadow( - offset: Offset( - double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, - double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), - blurRadius: double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! - )); - } else { - shadow.add(Shadow( - offset: Offset( - double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, - double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), - )); - } + shadow.add(Shadow( + offset: Offset( + double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, + double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), + blurRadius: (blurRadius is css.LiteralTerm) ? double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! : null, + )); } } } From 1a1e0bdf5d23fd37113975c26900aa7afe0af57a Mon Sep 17 00:00:00 2001 From: windows7lake <979506634@qq.com> Date: Mon, 13 Sep 2021 09:27:10 +0800 Subject: [PATCH 5/6] Update css_parser.dart return a null value will report "The argument type 'double?' can't be assigned to the parameter type 'double'." --- lib/src/css_parser.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/css_parser.dart b/lib/src/css_parser.dart index fa986b0914..11eaec8e33 100644 --- a/lib/src/css_parser.dart +++ b/lib/src/css_parser.dart @@ -835,14 +835,14 @@ class ExpressionMapping { offset: Offset( double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), - blurRadius: (blurRadius is css.LiteralTerm) ? double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! : null, + blurRadius: (blurRadius is css.LiteralTerm) ? double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! : 0.0, )); } else { shadow.add(Shadow( offset: Offset( double.tryParse((offsetX as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!, double.tryParse((offsetY as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))!), - blurRadius: (blurRadius is css.LiteralTerm) ? double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! : null, + blurRadius: (blurRadius is css.LiteralTerm) ? double.tryParse((blurRadius as css.LiteralTerm).text.replaceAll(nonNumberRegex, ''))! : 0.0, )); } } From 9d7890216ba8417d841da4ab438c7d47c5b080c5 Mon Sep 17 00:00:00 2001 From: windows7lake <979506634@qq.com> Date: Fri, 24 Sep 2021 08:32:58 +0800 Subject: [PATCH 6/6] Update layout_element.dart remove unrelative code --- lib/src/layout_element.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/src/layout_element.dart b/lib/src/layout_element.dart index 00c9769698..b677e9d872 100644 --- a/lib/src/layout_element.dart +++ b/lib/src/layout_element.dart @@ -112,9 +112,6 @@ class TableLayoutElement extends LayoutElement { columni++; } if (child is TableCellElement) { - String width = child.attributes["width"] ?? ""; - width.replaceAll("px", ""); - final pxSize = double.tryParse(width) ?? 120; cells.add(GridPlacement( child: Container( width: double.infinity,