Skip to content

Commit

Permalink
Progress in #23
Browse files Browse the repository at this point in the history
  • Loading branch information
zspitz committed Oct 10, 2019
1 parent c9193ec commit b3bf696
Show file tree
Hide file tree
Showing 31 changed files with 367 additions and 1,004 deletions.
1 change: 1 addition & 0 deletions 2017/2017.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
<PackageReference Include="Antlr4.Runtime" Version="4.6.6">
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
</ItemGroup>
<ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions 2019/2019.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CSharp" Version="4.6.0" />
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
</ItemGroup>
<ItemGroup>
Expand Down
14 changes: 12 additions & 2 deletions ANTLR4ParseTreeVisualizer.sln
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29306.81
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2019", "2019\2019.csproj", "{AFDED9CF-6E6D-461B-B996-3E2F364DD3AD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "2019", "2019\2019.csproj", "{AFDED9CF-6E6D-461B-B996-3E2F364DD3AD}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Shared", "Shared\Shared.shproj", "{5F6D90BE-661E-4EED-BA7D-7ADCE968C72F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "_visualizerTest", "_visualizerTest\_visualizerTest.csproj", "{34D2CC07-B4FA-4CAE-8A90-2B3081B5B9A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2017", "2017\2017.csproj", "{BEB4FBE6-54E8-4212-9D94-C4E8F318FD9F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "2017", "2017\2017.csproj", "{BEB4FBE6-54E8-4212-9D94-C4E8F318FD9F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "_visualizerTest1", "_visualizerTest1\_visualizerTest1.csproj", "{CADA5CBA-1FE0-48A2-BF4F-7158C1CFF44F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "_visualizerTestCore", "_visualizerTestCore\_visualizerTestCore.csproj", "{2D92774C-E2F4-47C4-9A04-09198B1182F8}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Shared\Shared.projitems*{5f6d90be-661e-4eed-ba7d-7adce968c72f}*SharedItemsImports = 13
Expand Down Expand Up @@ -52,6 +54,14 @@ Global
{CADA5CBA-1FE0-48A2-BF4F-7158C1CFF44F}.Release|Any CPU.Build.0 = Release|Any CPU
{CADA5CBA-1FE0-48A2-BF4F-7158C1CFF44F}.ReleaseCI|Any CPU.ActiveCfg = Release|Any CPU
{CADA5CBA-1FE0-48A2-BF4F-7158C1CFF44F}.ReleaseCI2017|Any CPU.ActiveCfg = Debug|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.Release|Any CPU.Build.0 = Release|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.ReleaseCI|Any CPU.ActiveCfg = Release|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.ReleaseCI|Any CPU.Build.0 = Release|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.ReleaseCI2017|Any CPU.ActiveCfg = Release|Any CPU
{2D92774C-E2F4-47C4-9A04-09198B1182F8}.ReleaseCI2017|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
5 changes: 4 additions & 1 deletion Shared/Models/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,14 @@ public Config Clone() {
ShowTreeTextTokens = ShowTreeTextTokens,
ShowTreeErrorTokens = ShowTreeErrorTokens,
ShowTreeWhitespaceTokens = ShowTreeWhitespaceTokens,
ShowRuleContextNodes = ShowRuleContextNodes
ShowRuleContextNodes = ShowRuleContextNodes,
WatchBaseExpression = WatchBaseExpression
};
SelectedTokenTypes.AddRangeTo(ret.SelectedTokenTypes);
SelectedRuleContexts.AddRangeTo(ret.SelectedRuleContexts);
return ret;
}

public string WatchBaseExpression { get; set; }
}
}
19 changes: 5 additions & 14 deletions Shared/Models/VisualizerData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Linq.Enumerable;

namespace ParseTreeVisualizer {
[Serializable]
public class VisualizerData {
public string Source { get; }
public Config Config { get; }
Expand Down Expand Up @@ -58,9 +57,7 @@ public VisualizerData(object o, Config config) {
}

#region Load debuggee state
TokenTypeMapping =
tokenTypeMapping ??
Range(1, Tokens.MaxTokenTypeID()).ToDictionary(x => (x, x.ToString()));
TokenTypeMapping = tokenTypeMapping;

UsedRuleContexts = rulenameMapping.Keys
.Select(x => {
Expand Down Expand Up @@ -93,18 +90,14 @@ public VisualizerData(object o, Config config) {
dest?.Add(new ClassInfo(t));
}

Comparison<ClassInfo> comparison = (x, y) => string.Compare(x.Name, y.Name);
AvailableParsers.Sort(comparison);
AvailableLexers.Sort(comparison);

Config.SelectedParserName = fixList(AvailableParsers, Config.SelectedParserName);
Config.SelectedLexerName = fixList(AvailableLexers, Config.SelectedLexerName);
Config.SelectedParserName = checkSelection(AvailableParsers, Config.SelectedParserName);
Config.SelectedLexerName = checkSelection(AvailableLexers, Config.SelectedLexerName);
}

#endregion
}

private string fixList(List<ClassInfo> lst, string selected) {
private string checkSelection(List<ClassInfo> lst, string selected) {
if (lst.None(x => x.FullName == selected)) {
selected = null;
}
Expand All @@ -118,5 +111,3 @@ private string fixList(List<ClassInfo> lst, string selected) {
}
}
}

// TODO ConfigViewModel should expose AvailableParsers + AvailableLexers; add None entry to list
2 changes: 1 addition & 1 deletion Shared/ParserRuleDisplayNameSelector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class ParserRuleDisplayNameSelector : DataTemplateSelector {
public DataTemplate RuleNameTemplate { get; set; }
public DataTemplate TypeNameTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container) =>
(item as ViewModels.ParseRuleContextInfo).RuleName == null ?
(item as ClassInfo).RuleName == null ?
TypeNameTemplate :
RuleNameTemplate;
}
Expand Down
12 changes: 4 additions & 8 deletions Shared/Shared.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,17 @@
<Compile Include="$(MSBuildThisFileDirectory)Models\ParseTreeNode.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Models\Token.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Models\VisualizerData.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\TokenViewModel.cs" />
<Compile Include="..\Shared\Util\DebugTraceListener.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\HashSetT.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\KeyValuePairTKeyTValue.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\RelayCommand.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Selectable.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\ViewModelBase.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\ConfigViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\ParseTreeNodeViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\TokenTypeViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\VisualizerDataViewModel.cs" />
<Compile Include="$(MSBuildThisFileDirectory)WatchExpressionPrompt.xaml.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ParserRuleDisplayNameSelector.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\ComboBoxTemplateSelector.cs" />
Expand All @@ -31,10 +35,6 @@
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\IEnumerableKeyValuePair.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\IEnumerableToken.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\ListBoxExtensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\ClassInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\Config.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\ParseRuleContextInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\ParseTreeNode.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Models\PropertyValue.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Converters.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\ICollectionT.cs" />
Expand All @@ -50,11 +50,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\TreeView.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Extensions\Type.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Functions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\TokenList.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\TokenType.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\Token.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Util\Monitor.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\TreeVisualizer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Visualizer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)VisualizerControl.xaml.cs" />
<Compile Include="$(MSBuildThisFileDirectory)VisualizerDataObjectSource.cs" />
Expand Down
2 changes: 2 additions & 0 deletions Shared/Util/Converters.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ public class ErrorColorConverter : ReadOnlyConverterBase {

public class NodeForegroundConverter : ReadOnlyMultiConverterBase {
public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) {
if (values[0] == UnsetValue || values[1] == UnsetValue) { return UnsetValue; }

var nodeType = (TreeNodeType)values[0];
var filterState = (FilterStates?)values[1];
switch (nodeType) {
Expand Down
16 changes: 16 additions & 0 deletions Shared/Util/DebugTraceListener.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace ParseTreeVisualizer.Util {
public class DebugTraceListener : TraceListener {
private readonly static List<string> ignoreMessages = new List<string> {
"Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation')"
};
public override void Write(string message) { }
public override void WriteLine(string message) {
if (message.In(ignoreMessages)) { return; }
throw new Exception($"Binding error: {message}");
}
}
}
2 changes: 0 additions & 2 deletions Shared/Util/Extensions/IEnumerableToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@

namespace ParseTreeVisualizer.Util {
public static class IEnumerableTokenExtensions {
public static int MaxTokenTypeID(this IEnumerable<ViewModels.Token> src) => src.MaxOrDefault(x => x.TokenTypeID) ?? 0;

public static int MaxTokenTypeID(this IEnumerable<Token> src) => src.MaxOrDefault(x => x.TokenTypeID) ?? 0;

public static (int start, int end)? SelectionCharSpan(this IEnumerable<Selectable<Token>> tokens) {
Expand Down
22 changes: 22 additions & 0 deletions Shared/Util/RelayCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using System.Windows.Input;

namespace ParseTreeVisualizer.Util {
public class RelayCommand : ICommand {
private readonly Action<object> execute;
private readonly Predicate<object> canExecute;

public RelayCommand(Action<object> execute, Predicate<object> canExecute = null) {
this.execute = execute ?? throw new ArgumentNullException(nameof(execute));
this.canExecute = canExecute;
}
public bool CanExecute(object parameter) => canExecute == null ? true : canExecute(parameter);

public event EventHandler CanExecuteChanged {
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}

public void Execute(object parameter) => execute(parameter);
}
}
4 changes: 1 addition & 3 deletions Shared/Util/ViewModelBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@ namespace ParseTreeVisualizer.Util {
public abstract class ViewModelBase<TModel> : INotifyPropertyChanged {
public TModel Model { get; }

public ViewModelBase(TModel model) {
Model = model;
}
protected ViewModelBase(TModel model) => Model = model;

public event PropertyChangedEventHandler PropertyChanged;

Expand Down
50 changes: 0 additions & 50 deletions Shared/ViewModels/ClassInfo.cs

This file was deleted.

Loading

0 comments on commit b3bf696

Please sign in to comment.