diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2021-06-07 15:05:30 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2021-06-07 15:05:30 +0200 |
| commit | 263de03914a3de5d55c4508c322e32d36caf2a87 (patch) | |
| tree | c279464365fd7683744fa59d01b242e4b3ab17b9 /Samples/common/src/ImlParsing | |
| parent | f738cf0f78c57750cce8fd5744825b0591f24bb8 (diff) | |
suggestion in IML editor, editor base classe for ShowCase and LogAnalyzerSimplifiedTabView
Diffstat (limited to 'Samples/common/src/ImlParsing')
| -rw-r--r-- | Samples/common/src/ImlParsing/Syntax.cs | 14 | ||||
| -rw-r--r-- | Samples/common/src/ImlParsing/TokenType.cs | 4 | ||||
| -rw-r--r-- | Samples/common/src/ImlParsing/XmlSource.cs | 13 |
3 files changed, 22 insertions, 9 deletions
diff --git a/Samples/common/src/ImlParsing/Syntax.cs b/Samples/common/src/ImlParsing/Syntax.cs index fd410eaf..a38e1558 100644 --- a/Samples/common/src/ImlParsing/Syntax.cs +++ b/Samples/common/src/ImlParsing/Syntax.cs @@ -128,8 +128,12 @@ namespace Crow Exceptions.Add (new SyntaxException ("Extra equal sign in attribute syntax", iter.Current)); else attrib.EqualToken = iter.Current; - else if (iter.Current.Type == TokenType.AttributeValue) { - attrib.ValueToken = attrib.EndToken = iter.Current; + else if (iter.Current.Type == TokenType.AttributeValueOpen) + attrib.ValueOpenToken = iter.Current; + else if (iter.Current.Type == TokenType.AttributeValue) + attrib.ValueToken = iter.Current; + else if (iter.Current.Type == TokenType.AttributeValueClose) { + attrib.ValueCloseToken = attrib.EndToken = iter.Current; CurrentNode = CurrentNode.Parent; } else { Exceptions.Add (new SyntaxException ("Unexpected Token", iter.Current)); @@ -232,7 +236,7 @@ namespace Crow public XmlSource Source => Root.source; public bool Contains (int pos) => EndToken.HasValue ? - StartToken.Start <= pos && EndToken.Value.End >= pos : false; + StartToken.Start <= pos && EndToken.Value.End > pos : false; public void Dump (int level = 0) { Console.WriteLine ($"{new string('\t', level)}{this}"); @@ -303,8 +307,10 @@ namespace Crow public class AttributeSyntax : SyntaxNode { public Token? NameToken { get; internal set; } public Token? EqualToken { get; internal set; } + public Token? ValueOpenToken { get; internal set; } + public Token? ValueCloseToken { get; internal set; } public Token? ValueToken { get; internal set; } public AttributeSyntax (Token startTok) : base (startTok) {} - public override bool IsComplete => base.IsComplete & NameToken.HasValue & EqualToken.HasValue & ValueToken.HasValue; + public override bool IsComplete => base.IsComplete & NameToken.HasValue & EqualToken.HasValue & ValueToken.HasValue & ValueOpenToken.HasValue & ValueCloseToken.HasValue; } }
\ No newline at end of file diff --git a/Samples/common/src/ImlParsing/TokenType.cs b/Samples/common/src/ImlParsing/TokenType.cs index f9d7bcc6..3289d5ae 100644 --- a/Samples/common/src/ImlParsing/TokenType.cs +++ b/Samples/common/src/ImlParsing/TokenType.cs @@ -26,7 +26,9 @@ namespace Crow PI_End = 0x0402,// '?>' Operator = 0x0800, EqualSign = 0x0801, - AttributeValue = 0x2000, + AttributeValue = 0x2000, + AttributeValueOpen = 0x2001, + AttributeValueClose = 0x2002, Keyword = 0x1000, ElementOpen = 0x0403,// '<' EndElementOpen = 0x0404,// '</' diff --git a/Samples/common/src/ImlParsing/XmlSource.cs b/Samples/common/src/ImlParsing/XmlSource.cs index f520dcf3..f70aec24 100644 --- a/Samples/common/src/ImlParsing/XmlSource.cs +++ b/Samples/common/src/ImlParsing/XmlSource.cs @@ -25,9 +25,10 @@ namespace Crow syntaxAnalyser.Process (); sw.Stop(); - foreach (Token t in Tokens) + /*foreach (Token t in Tokens) Console.WriteLine ($"{t,-40} {Source.AsSpan(t.Start, t.Length).ToString()}"); - syntaxAnalyser.Root.Dump(); + syntaxAnalyser.Root.Dump();*/ + Console.WriteLine ($"Syntax Analysis done in {sw.ElapsedMilliseconds}(ms) {sw.ElapsedTicks}(ticks)"); foreach (SyntaxException ex in syntaxAnalyser.Exceptions) Console.WriteLine ($"{ex}"); @@ -212,9 +213,13 @@ namespace Crow case '\'': case '"': char q = reader.Read(); - if (reader.TryReadUntil (q)) + addTok (ref reader, TokenType.AttributeValueOpen); + if (reader.TryReadUntil (q)) { + addTok (ref reader, TokenType.AttributeValue); reader.Advance (); - addTok (ref reader, TokenType.AttributeValue); + addTok (ref reader, TokenType.AttributeValueClose); + } else + addTok (ref reader, TokenType.AttributeValue); break; case '=': reader.Advance(); |