Skip to content

Commit 1792bab

Browse files
committed
Fixed typo in analyzer.
Began adding syntax highter support to Grun tool.
1 parent 39bd849 commit 1792bab

File tree

9 files changed

+97
-20
lines changed

9 files changed

+97
-20
lines changed

Common/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.0.20079.0")]
36-
[assembly: AssemblyFileVersion("1.0.20079.0")]
35+
[assembly: AssemblyVersion("1.0.20080.0")]
36+
[assembly: AssemblyFileVersion("1.0.20080.0")]

Grun/Program.cs

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
using System.Text;
4545
using System.Windows.Forms;
4646

47+
using Antlr4.Runtime;
4748
using Antlr4.Runtime.Misc;
4849

4950
using CommandLine;
@@ -59,6 +60,9 @@
5960
using Org.Edgerunner.ANTLR4.Tools.Testing.Grammar;
6061
using Org.Edgerunner.ANTLR4.Tools.Testing.GrunDotNet.Properties;
6162
using Org.Edgerunner.ANTLR4.Tools.Testing.GrunWin;
63+
using Org.Edgerunner.ANTLR4.Tools.Testing.GrunWin.Editor.SyntaxHighlighting;
64+
65+
using Parser = CommandLine.Parser;
6266

6367
// ReSharper disable RedundantNameQualifier
6468
namespace Org.Edgerunner.ANTLR4.Tools.Testing.GrunDotNet
@@ -132,10 +136,50 @@ private static void Main(string[] args)
132136
}
133137
else
134138
{
139+
var analyzer = new Analyzer();
140+
var builder = new StringBuilder();
141+
var currentLine = Console.CursorTop;
135142
Console.WriteLine(Resources.ReadingFromStandardInputPromptMessage);
136-
string line;
137-
while ((line = Console.ReadLine()) != null)
138-
data += line + Environment.NewLine;
143+
while (true)
144+
{
145+
var typed = Console.ReadKey(true);
146+
147+
if ((typed.Modifiers & ConsoleModifiers.Control) == ConsoleModifiers.Control
148+
&& typed.Key == ConsoleKey.Z)
149+
{
150+
Console.Write("^Z");
151+
break;
152+
}
153+
154+
if (typed.Key == ConsoleKey.Enter)
155+
{
156+
Console.WriteLine();
157+
builder.Append("\r\n");
158+
}
159+
else if (typed.Key == ConsoleKey.Backspace)
160+
{
161+
if (Console.CursorLeft > 0)
162+
{
163+
Console.Write(typed.KeyChar);
164+
Console.Write(' ');
165+
Console.Write(typed.KeyChar);
166+
builder.Remove(builder.Length - 1, 1);
167+
}
168+
}
169+
else
170+
{
171+
Console.Write(typed.KeyChar);
172+
builder.Append(typed.KeyChar);
173+
}
174+
175+
var grammarParser = analyzer.BuildParserWithOptions(grammar, data, ParseOption.None);
176+
grammarParser.RemoveErrorListeners();
177+
analyzer.ExecuteParsing(grammarParser, o.RuleName);
178+
HighlightSyntaxInConsole(currentLine, analyzer, null);
179+
}
180+
181+
Console.WriteLine();
182+
data = builder.ToString();
139183
}
140184

141185
// If tokens are the only option we've received, we don't need to parse
@@ -153,7 +197,7 @@ private static void Main(string[] args)
153197
analyzer.ExecuteParsing(grammarParser, o.RuleName);
154198

155199
if (showParseTree)
156-
Console.WriteLine(analyzer.ParseContext.ToStringTree(grammarParser));
200+
Console.WriteLine(analyzer.ParserContext.ToStringTree(grammarParser));
157201

158202
if (writeSvg)
159203
{
@@ -164,7 +208,7 @@ private static void Main(string[] args)
164208
BorderColor = _Settings.GraphNodeBorderColor.GetMsAglColor(),
165209
TextColor = _Settings.GraphNodeTextColor.GetMsAglColor()
166210
};
167-
var graph = grapher.CreateGraph(analyzer.ParseContext, rules.ToList());
211+
var graph = grapher.CreateGraph(analyzer.ParserContext, rules.ToList());
168212
graph.LayoutAlgorithmSettings = new SugiyamaLayoutSettings();
169213
GraphRenderer renderer = new GraphRenderer(graph);
170214
renderer.CalculateLayout();
@@ -207,6 +251,39 @@ private static void Main(string[] args)
207251
}
208252
}
209253

254+
private static void HighlightSyntaxInConsole(int lineOffset, Analyzer analyzer, IStyleRegistry registry)
255+
{
256+
return;
257+
258+
if (analyzer?.ParserContext == null)
259+
return;
260+
261+
if (registry == null)
262+
return;
263+
264+
var cursorRow = Console.CursorTop;
265+
var cursorColumn = Console.CursorLeft;
266+
foreach (var token in analyzer.DisplayTokens)
267+
ColorToken(token, lineOffset, registry);
268+
269+
Console.SetCursorPosition(cursorColumn, cursorRow);
270+
}
271+
272+
private static void ColorToken(SyntaxToken token, int lineOffset, IStyleRegistry registry)
273+
{
274+
var startLine = token.LineNumber + lineOffset;
275+
var endLine = token.EndingLineNumber + lineOffset;
276+
for (int ln = startLine; ln < endLine + 1; ln++)
277+
{
278+
for (int col = token.ColumnPosition; col < token.EndingColumnPosition + 1; col++)
279+
{
280+
Console.SetCursorPosition(col, ln);
281+
282+
// TODO: add syntax highlight logic.
283+
}
284+
}
285+
}
286+
210287
private static void DisplayTokens(GrammarReference grammar, string data)
211288
{
212289
var analyzer = new Grammar.Analyzer();

Grun/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.0.20079.0")]
36-
[assembly: AssemblyFileVersion("1.0.20079.0")]
35+
[assembly: AssemblyVersion("1.0.20080.15")]
36+
[assembly: AssemblyFileVersion("1.0.20080.15")]

GunWin/Dialogs/AboutBox.resx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
k4H0HyCOSy4oKmFgYIwBsrnLSwpA7AwgWyQpG8yuAbGLgA4EsieA2OkQ9hKwGgh7B1hNSJAzkH0GyHZI
127127
R2InIbGh9oIAc7IRA9VBSWpFCYh2c2JgAIUpelghxJjFgNgYGBdLEGL5ixgYLL4CxScgxJJmMjBsb2Vg
128128
kLiFEFNZwMDA38LAsO18cmlRGdRqKSA+zXiSOZl1Ekc29zcBe9FAaRPFj5oTjCSsJ7mxBpbHvs0uqGLt
129-
3DirZk3m/trLh18a/P8PAN5BU32YWvgkAAAACXBIWXMAAA7CAAAOwgEVKEqAAAD+Y0lEQVR4Xuz9B0BU
129+
3DirZk3m/trLh18a/P8PAN5BU32YWvgkAAAACXBIWXMAAA7BAAAOwQG4kWvtAAD+Y0lEQVR4Xuz9B0BU
130130
d9o2DidxTd1sNjGJSTY9GjX23nuhV1FRUVARBRURRFBUkCoIdlEQFey999577xXpdXpvzP1d95kZnbhJ
131131
9nnf73ne/7NZf7tXZhhnzjlz5lzXfd33r5w3Xrf/9vZmhw4+7/n4+HwyfPjwf/gHBTUMCQntMiY4dNS4
132132
CWEJE8MiN0RNm3FvVkKKKj1jAeWsyKVt23fS4cPH6MzZC3T9+k16/OQplZSUUXW1mFQqNdXU1NDvNjP+

GunWin/Parsing/ParseWorker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ private ParserResult HandleParsing(ParserWorkItem work)
178178
parser.AddErrorListener(errorListener);
179179
analyzer.ExecuteParsing(parser, work.ParserRuleName);
180180

181-
return new ParserResult(analyzer.DisplayTokens, analyzer.ParseContext, work.ParserRuleName, errorListener.Errors, trace ? parseTreeListener.Events : new List<TraceEvent>());
181+
return new ParserResult(analyzer.DisplayTokens, analyzer.ParserContext, work.ParserRuleName, errorListener.Errors, trace ? parseTreeListener.Events : new List<TraceEvent>());
182182
}
183183

184184
private void OnParsingFinished(ParserResult result)

GunWin/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.0.20079.0")]
36-
[assembly: AssemblyFileVersion("1.0.20079.0")]
35+
[assembly: AssemblyVersion("1.0.20080.1")]
36+
[assembly: AssemblyFileVersion("1.0.20080.1")]

GunWin/VisualAnalyzer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ public void ParseSource()
232232

233233
try
234234
{
235-
_GraphWorker?.Graph(_Grapher, analyzer.ParseContext, _Grammar.ParserRules);
235+
_GraphWorker?.Graph(_Grapher, analyzer.ParserContext, _Grammar.ParserRules);
236236
}
237237
catch (Exception ex)
238238
{

TestRig/Grammar/Analyzer.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ public class Analyzer
6565
public IList<SyntaxToken> DisplayTokens { get; private set; }
6666

6767
/// <summary>
68-
/// Gets the parse context.
68+
/// Gets the parser context.
6969
/// </summary>
70-
/// <value>The parse context.</value>
71-
public ParserRuleContext ParseContext { get; private set; }
70+
/// <value>The parser context.</value>
71+
public ParserRuleContext ParserContext { get; private set; }
7272

7373
/// <summary>
7474
/// Gets a Lisp-style parse tree.
@@ -183,7 +183,7 @@ public void ExecuteParsing([NotNull] Parser parser, [NotNull] string parserRule)
183183
if (methodInfo == null)
184184
throw new GrammarException($"No parser rule with name \"{parserRule}\" found.");
185185

186-
ParseContext = methodInfo.Invoke(parser, null) as ParserRuleContext;
186+
ParserContext = methodInfo.Invoke(parser, null) as ParserRuleContext;
187187
IsParsed = true;
188188
}
189189

TestRig/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.0.20079.0")]
36-
[assembly: AssemblyFileVersion("1.0.20079.0")]
35+
[assembly: AssemblyVersion("1.0.20080.0")]
36+
[assembly: AssemblyFileVersion("1.0.20080.0")]

0 commit comments

Comments
 (0)