1
0
Эх сурвалжийг харах

Reader -> CharacterReader

And moved `CharacterReader` and `IdentifierParser` into Avalonia.Utilities.
Steven Kirk 7 жил өмнө
parent
commit
dc6f14e775

+ 3 - 3
src/Markup/Avalonia.Markup/Markup/Parsers/Reader.cs → src/Avalonia.Base/Utilities/CharacterReader.cs

@@ -3,14 +3,14 @@
 
 using System;
 
-namespace Avalonia.Markup.Parsers
+namespace Avalonia.Utilities
 {
-    public class Reader
+    public class CharacterReader
     {
         private readonly string _s;
         private int _i;
 
-        public Reader(string s)
+        public CharacterReader(string s)
         {
             _s = s;
         }

+ 2 - 2
src/Markup/Avalonia.Markup/Markup/Parsers/IdentifierParser.cs → src/Avalonia.Base/Utilities/IdentifierParser.cs

@@ -4,11 +4,11 @@
 using System.Globalization;
 using System.Text;
 
-namespace Avalonia.Markup.Parsers
+namespace Avalonia.Utilities
 {
     public static class IdentifierParser
     {
-        public static string Parse(Reader r)
+        public static string Parse(CharacterReader r)
         {
             if (IsValidIdentifierStart(r.Peek))
             {

+ 2 - 1
src/Markup/Avalonia.Markup.Xaml/Converters/AvaloniaPropertyTypeConverter.cs

@@ -10,6 +10,7 @@ using Avalonia.Markup.Parsers;
 using Avalonia.Markup.Xaml.Parsers;
 using Avalonia.Markup.Xaml.Templates;
 using Avalonia.Styling;
+using Avalonia.Utilities;
 using Portable.Xaml.ComponentModel;
 
 namespace Avalonia.Markup.Xaml.Converters
@@ -25,7 +26,7 @@ namespace Avalonia.Markup.Xaml.Converters
         {
             var registry = AvaloniaPropertyRegistry.Instance;
             var parser = new PropertyParser();
-            var reader = new Reader((string)value);
+            var reader = new CharacterReader((string)value);
             var (ns, owner, propertyName) = parser.Parse(reader);
             var ownerType = TryResolveOwnerByName(context, ns, owner);
             var targetType = context.GetFirstAmbientValue<ControlTemplate>()?.TargetType ??

+ 2 - 1
src/Markup/Avalonia.Markup.Xaml/Parsers/PropertyParser.cs

@@ -1,12 +1,13 @@
 using System;
 using Avalonia.Data.Core;
 using Avalonia.Markup.Parsers;
+using Avalonia.Utilities;
 
 namespace Avalonia.Markup.Xaml.Parsers
 {
     internal class PropertyParser
     {
-        public (string ns, string owner, string name) Parse(Reader r)
+        public (string ns, string owner, string name) Parse(CharacterReader r)
         {
             if (r.End)
             {

+ 2 - 1
src/Markup/Avalonia.Markup/Markup/Parsers/ArgumentListParser.cs

@@ -2,6 +2,7 @@
 // Licensed under the MIT license. See licence.md file in the project root for full license information.
 
 using Avalonia.Data.Core;
+using Avalonia.Utilities;
 using System;
 using System.Collections.Generic;
 using System.Text;
@@ -10,7 +11,7 @@ namespace Avalonia.Markup.Parsers
 {
     internal static class ArgumentListParser
     {
-        public static IList<string> Parse(Reader r, char open, char close)
+        public static IList<string> Parse(CharacterReader r, char open, char close)
         {
             if (r.Peek == open)
             {

+ 2 - 1
src/Markup/Avalonia.Markup/Markup/Parsers/ExpressionObserverBuilder.cs

@@ -1,4 +1,5 @@
 using Avalonia.Data.Core;
+using Avalonia.Utilities;
 using System;
 using System.Collections.Generic;
 using System.Reactive;
@@ -15,7 +16,7 @@ namespace Avalonia.Markup.Parsers
                 return new EmptyExpressionNode();
             }
 
-            var reader = new Reader(expression);
+            var reader = new CharacterReader(expression);
             var parser = new ExpressionParser(enableValidation, typeResolver);
             var node = parser.Parse(reader);
 

+ 12 - 11
src/Markup/Avalonia.Markup/Markup/Parsers/ExpressionParser.cs

@@ -3,6 +3,7 @@
 
 using Avalonia.Data.Core;
 using Avalonia.Markup.Parsers.Nodes;
+using Avalonia.Utilities;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -20,7 +21,7 @@ namespace Avalonia.Markup.Parsers
             _enableValidation = enableValidation;
         }
 
-        public ExpressionNode Parse(Reader r)
+        public ExpressionNode Parse(CharacterReader r)
         {
             var nodes = new List<ExpressionNode>();
             var state = State.Start;
@@ -64,7 +65,7 @@ namespace Avalonia.Markup.Parsers
             return nodes.FirstOrDefault();
         }
 
-        private State ParseStart(Reader r, IList<ExpressionNode> nodes)
+        private State ParseStart(CharacterReader r, IList<ExpressionNode> nodes)
         {
             if (ParseNot(r))
             {
@@ -93,7 +94,7 @@ namespace Avalonia.Markup.Parsers
             return State.End;
         }
 
-        private static State ParseAfterMember(Reader r, IList<ExpressionNode> nodes)
+        private static State ParseAfterMember(CharacterReader r, IList<ExpressionNode> nodes)
         {
             if (ParseMemberAccessor(r))
             {
@@ -112,7 +113,7 @@ namespace Avalonia.Markup.Parsers
             return State.End;
         }
 
-        private State ParseBeforeMember(Reader r, IList<ExpressionNode> nodes)
+        private State ParseBeforeMember(CharacterReader r, IList<ExpressionNode> nodes)
         {
             if (ParseOpenBrace(r))
             {
@@ -132,7 +133,7 @@ namespace Avalonia.Markup.Parsers
             }
         }
 
-        private State ParseAttachedProperty(Reader r, List<ExpressionNode> nodes)
+        private State ParseAttachedProperty(CharacterReader r, List<ExpressionNode> nodes)
         {
             string ns = string.Empty;
             string owner;
@@ -171,7 +172,7 @@ namespace Avalonia.Markup.Parsers
             return State.AfterMember;
         }
 
-        private State ParseIndexer(Reader r, List<ExpressionNode> nodes)
+        private State ParseIndexer(CharacterReader r, List<ExpressionNode> nodes)
         {
             var args = ArgumentListParser.Parse(r, '[', ']');
 
@@ -184,27 +185,27 @@ namespace Avalonia.Markup.Parsers
             return State.AfterMember;
         }
         
-        private static bool ParseNot(Reader r)
+        private static bool ParseNot(CharacterReader r)
         {
             return !r.End && r.TakeIf('!');
         }
 
-        private static bool ParseMemberAccessor(Reader r)
+        private static bool ParseMemberAccessor(CharacterReader r)
         {
             return !r.End && r.TakeIf('.');
         }
 
-        private static bool ParseOpenBrace(Reader r)
+        private static bool ParseOpenBrace(CharacterReader r)
         {
             return !r.End && r.TakeIf('(');
         }
 
-        private static bool PeekOpenBracket(Reader r)
+        private static bool PeekOpenBracket(CharacterReader r)
         {
             return !r.End && r.Peek == '[';
         }
 
-        private static bool ParseStreamOperator(Reader r)
+        private static bool ParseStreamOperator(CharacterReader r)
         {
             return !r.End && r.TakeIf('^');
         }

+ 20 - 19
tests/Avalonia.Markup.Xaml.UnitTests/Parsers/PropertyParserTests.cs

@@ -2,6 +2,7 @@
 using Avalonia.Data.Core;
 using Avalonia.Markup.Parsers;
 using Avalonia.Markup.Xaml.Parsers;
+using Avalonia.Utilities;
 using Xunit;
 
 namespace Avalonia.Markup.Xaml.UnitTests.Parsers
@@ -12,7 +13,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Parses_Name()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo");
+            var reader = new CharacterReader("Foo");
             var (ns, owner, name) = target.Parse(reader);
 
             Assert.Null(ns);
@@ -24,7 +25,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Parses_Owner_And_Name()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo.Bar");
+            var reader = new CharacterReader("Foo.Bar");
             var (ns, owner, name) = target.Parse(reader);
 
             Assert.Null(ns);
@@ -36,7 +37,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Parses_Namespace_Owner_And_Name()
         {
             var target = new PropertyParser();
-            var reader = new Reader("foo:Bar.Baz");
+            var reader = new CharacterReader("foo:Bar.Baz");
             var (ns, owner, name) = target.Parse(reader);
 
             Assert.Equal("foo", ns);
@@ -48,7 +49,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Parses_Owner_And_Name_With_Parentheses()
         {
             var target = new PropertyParser();
-            var reader = new Reader("(Foo.Bar)");
+            var reader = new CharacterReader("(Foo.Bar)");
             var (ns, owner, name) = target.Parse(reader);
 
             Assert.Null(ns);
@@ -60,7 +61,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Parses_Namespace_Owner_And_Name_With_Parentheses()
         {
             var target = new PropertyParser();
-            var reader = new Reader("(foo:Bar.Baz)");
+            var reader = new CharacterReader("(foo:Bar.Baz)");
             var (ns, owner, name) = target.Parse(reader);
 
             Assert.Equal("foo", ns);
@@ -72,7 +73,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Empty_String()
         {
             var target = new PropertyParser();
-            var reader = new Reader("");
+            var reader = new CharacterReader("");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(0, ex.Column);
@@ -83,7 +84,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Only_Whitespace()
         {
             var target = new PropertyParser();
-            var reader = new Reader("  ");
+            var reader = new CharacterReader("  ");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(0, ex.Column);
@@ -94,7 +95,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Leading_Whitespace()
         {
             var target = new PropertyParser();
-            var reader = new Reader(" Foo");
+            var reader = new CharacterReader(" Foo");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(0, ex.Column);
@@ -105,7 +106,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Trailing_Whitespace()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo ");
+            var reader = new CharacterReader("Foo ");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(3, ex.Column);
@@ -116,7 +117,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Invalid_Property_Name()
         {
             var target = new PropertyParser();
-            var reader = new Reader("123");
+            var reader = new CharacterReader("123");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(0, ex.Column);
@@ -127,7 +128,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Trailing_Junk()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo%");
+            var reader = new CharacterReader("Foo%");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(3, ex.Column);
@@ -138,7 +139,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Invalid_Property_Name_After_Owner()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo.123");
+            var reader = new CharacterReader("Foo.123");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(4, ex.Column);
@@ -149,7 +150,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Whitespace_Between_Owner_And_Name()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo. Bar");
+            var reader = new CharacterReader("Foo. Bar");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(4, ex.Column);
@@ -160,7 +161,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Too_Many_Segments()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo.Bar.Baz");
+            var reader = new CharacterReader("Foo.Bar.Baz");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(8, ex.Column);
@@ -171,7 +172,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Too_Many_Namespaces()
         {
             var target = new PropertyParser();
-            var reader = new Reader("foo:bar:Baz");
+            var reader = new CharacterReader("foo:bar:Baz");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(8, ex.Column);
@@ -182,7 +183,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Parens_But_No_Owner()
         {
             var target = new PropertyParser();
-            var reader = new Reader("(Foo)");
+            var reader = new CharacterReader("(Foo)");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(1, ex.Column);
@@ -193,7 +194,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Parens_And_Namespace_But_No_Owner()
         {
             var target = new PropertyParser();
-            var reader = new Reader("(foo:Bar)");
+            var reader = new CharacterReader("(foo:Bar)");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(1, ex.Column);
@@ -204,7 +205,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Missing_Close_Parens()
         {
             var target = new PropertyParser();
-            var reader = new Reader("(Foo.Bar");
+            var reader = new CharacterReader("(Foo.Bar");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(8, ex.Column);
@@ -215,7 +216,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Parsers
         public void Fails_With_Unexpected_Close_Parens()
         {
             var target = new PropertyParser();
-            var reader = new Reader("Foo.Bar)");
+            var reader = new CharacterReader("Foo.Bar)");
 
             var ex = Assert.Throws<ExpressionParseException>(() => target.Parse(reader));
             Assert.Equal(7, ex.Column);