aboutsummaryrefslogtreecommitdiffstatsci
path: root/Samples/common/src/ImlParsing
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-06-07 15:05:30 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-06-07 15:05:30 +0200
commit263de03914a3de5d55c4508c322e32d36caf2a87 (patch)
treec279464365fd7683744fa59d01b242e4b3ab17b9 /Samples/common/src/ImlParsing
parentf738cf0f78c57750cce8fd5744825b0591f24bb8 (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.cs14
-rw-r--r--Samples/common/src/ImlParsing/TokenType.cs4
-rw-r--r--Samples/common/src/ImlParsing/XmlSource.cs13
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();