private void _CmdUser_TriggerBuild()
 {
     try
     {
         var prolog = new PrologEngine(persistentCommandHistory: false);
         prolog.ConsultFromString(CodeDocument.Text);
         prolog.GetFirstSolution(CodeDocumentQuery.Text);
         MyConsole.WriteLine("----------------------");
         foreach (var sol in prolog.GetEnumerator())
         {
             var errorInfo = MyPrologUtils.TryToGetErrorFromPrologSolution(sol);
             if (errorInfo != null)
             {
                 CurErrorMessage = errorInfo.Message;
                 var errorLine = CodeDocumentQuery.GetLineByNumber(1);
                 CurErrorWordHighlightQuery = new WordHighlight(errorLine.Offset, errorLine.Length);
                 break;
             }
             var stringified = sol.VarValuesIterator.Select(val => $"{val.Name}:{val.Value}").StringJoin(", ");
             MyConsole.WriteLine(stringified);
         }
     }
     catch (Exception ex)
     {
         var errorInfo = MyPrologUtils.TryToGetErrorFromException(ex);
         if (errorInfo.Line != null)
         {
             var errorLine = CodeDocument.GetLineByNumber(errorInfo.Line.Value);
             CurErrorWordHighlight = new WordHighlight(errorLine.Offset, errorLine.Length);
         }
         CurErrorMessage = errorInfo.Message;
     }
 }
        public MainViewModel(
            FileDialogsServiceWin32 fileDialogsService,
            MyAppStateService appStateService
            )
        {
            this.appStateService    = appStateService;
            this.fileDialogsService = fileDialogsService;

            // .... set up view
            SyntaxHighlighting     = MyPrologUtils.LoadSyntaxHighlightingFromResource(Constants.Resources.AvalonSyntaxProlog2);
            CodeDocument.Text      = Constants.Samples.SampleProlog;
            CodeDocumentQuery.Text = Constants.Samples.SampleQuery;

            // .... assign commands
            CmdWindow_Loaded               = new RelayCommand(_CmdWindow_Loaded);
            CmdWindow_Closing              = new RelayCommand(_CmdWindow_Closing);
            CmdWindow_Activated            = new RelayCommand(_CmdWindow_Activated);
            CmdUser_TriggerBuild           = new RelayCommand(_CmdUser_TriggerBuild);
            CmdAvalon_CaretPositionChanged = new RelayCommand <Caret>(_CmdAvalon_CaretPositionChanged);
            CmdConsole_CopyAll             = new RelayCommand(_CmdConsole_CopyAll);
            CmdConsole_ClearAll            = new RelayCommand(_CmdConsole_ClearAll);
            CmdUser_OnDragDropProlog       = new RelayCommand <string>(_CmdUser_OnDragDropProlog);
            CmdUser_Open             = new RelayCommand(_CmdUser_Open);
            CmdUser_RevealInExplorer = new RelayCommand(_CmdUser_RevealInExplorer);
            CmdUser_Save             = new RelayCommand(_CmdUser_Save);
            CmdUser_SaveAs           = new RelayCommand(_CmdUser_SaveAs);

            this.PropertyChanged += THIS_PropertyChanged;
            CodeDocument.UndoStack.PropertyChanged += CodeDocument_UndoStack_PropertyChanged;

            // .... restore from previous state
            var appState = appStateService.LoadOrCreateNew();

            if (appState.LastQueryText != null)
            {
                CodeDocumentQuery.Text = appState.LastQueryText;
            }
            IsResultsPanelTextWrappingEnabled = appState.IsResultsPanelTextWrappingEnabled;
            Config_ReplaceTabsWithSpaces      = appState.MainPanelReplaceTabsWithSpaces;

            // .... load file in question
            var argFilename = (string)Application.Current.Resources[Constants.Resources.Arg1Key];

            if (argFilename != null && File.Exists(argFilename))
            {
                LoadFile(argFilename);
            }
            else if (appState.LastFilename != null && File.Exists(appState.LastFilename))
            {
                LoadFile(appState.LastFilename);
            }

            CodeDocument.UndoStack.ClearAll();
            CodeDocumentQuery.UndoStack.ClearAll();
        }