From b3cfc22e27cb18e9c758ab9f3fc551c3577ec80e Mon Sep 17 00:00:00 2001 From: Benedikt Schroeder Date: Thu, 28 Jun 2018 19:55:25 +0200 Subject: [PATCH] Add scientific notation support for double values --- src/Avalonia.Visuals/Media/PathMarkupParser.cs | 15 +++++++++++++++ .../Media/PathMarkupParserTests.cs | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/src/Avalonia.Visuals/Media/PathMarkupParser.cs b/src/Avalonia.Visuals/Media/PathMarkupParser.cs index 384c96a7d6..bfb6ec6450 100644 --- a/src/Avalonia.Visuals/Media/PathMarkupParser.cs +++ b/src/Avalonia.Visuals/Media/PathMarkupParser.cs @@ -451,6 +451,21 @@ namespace Avalonia.Media } for (; i < remaining.Length && char.IsNumber(remaining[i]); i++) valid = true; + if (i < remaining.Length) + { + // scientific notation + if (remaining[i] == 'E') + { + valid = false; + i++; + if (remaining[i] == '-' || remaining[i] == '+') + { + i++; + for (; i < remaining.Length && char.IsNumber(remaining[i]); i++) valid = true; + } + } + } + if (!valid) { argument = ReadOnlySpan.Empty; diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs index 5074d306fd..6c456a9321 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs @@ -142,6 +142,10 @@ namespace Avalonia.Visuals.UnitTests.Media } [Theory] + [InlineData("F1M9.0771,11C9.1161,10.701,9.1801,10.352,9.3031,10L9.0001,10 9.0001,6.166 3.0001,9.767 3.0001,10 " + + "9.99999999997669E-05,10 9.99999999997669E-05,0 3.0001,0 3.0001,0.234 9.0001,3.834 9.0001,0 " + + "12.0001,0 12.0001,8.062C12.1861,8.043 12.3821,8.031 12.5941,8.031 15.3481,8.031 15.7961,9.826 " + + "15.9201,11L16.0001,16 9.0001,16 9.0001,12.562 9.0001,11z")] // issue #1708 [InlineData(" M0 0")] [InlineData("F1 M24,14 A2,2,0,1,1,20,14 A2,2,0,1,1,24,14 z")] // issue #1107 [InlineData("M0 0L10 10z")]