public override void OnSettingsChanged() { if (!TextAreaLoaded) { return; } SelectedTheme = Themes[Settings.SelectedTheme]; m_AssemblyIndentationStrategy.AutoIndentationEnabled = Settings.AssemblyEditorSettings.AutoCodeFormating; if (m_AssemblyIndentationStrategy.AutoIndentationEnabled) { m_AssemblyIndentationStrategy.IndentLines(Document); Save(); } if (Settings.AssemblyEditorSettings.CodeFolding) { m_CodeFolding.ResumeUpdate(); } else { m_CodeFolding.SuspendUpdate(true); } if (Settings.AssemblyEditorSettings.AutoCodeAnalization) { m_CodeAnalyzer.Trigger = AnalizerTrigger.DocumentChange; m_CodeAnalyzer.AnalyzeCode(); } else { m_CodeAnalyzer.ClearResults(); InterpretedSymbols.Clear(); WrongLines.Clear(); m_CodeAnalyzer.Trigger = AnalizerTrigger.Manual; } ApplyEditorStyle(); }
public override void AnalyzeCode() { ClearResults(); var programLines = Document.Lines.Select(dl => Document.GetText(dl.Offset, dl.TotalLength) .TrimStart(' ', '\t').Replace(Environment.NewLine, "").ToUpper()).ToList(); var fileName = Path.GetFileName(m_ProgramFullPath); var programDirectory = Path.GetDirectoryName(m_ProgramFullPath); m_Assembler = new Z80Assembler(programLines, new List <string> { programDirectory }, fileName); if (!m_Assembler.BuildProgram()) { MarkLineAsWrong(Document.GetLineByNumber(m_Assembler.WrongLineNumber), m_Assembler.StatusMessage); WrongLine.Add(new Tuple <string, int>(m_Assembler.StatusMessage, m_Assembler.WrongLineNumber)); AnalizingFinished?.Invoke(this, new EventArgs()); return; } InterpretedSymbols.AddRange(m_Assembler.AssembledProgram.SymbolTable.Where(sd => sd.Key != @".LC").Select(kvp => new SymbolData { SymbolName = kvp.Key, SymbolText = kvp.Value.ToString(), LineNumber = kvp.Value.LineNumber, SymbolType = kvp.Value.Type == SymbolType.Address ? @"Cím" : "Konstans" })); if (Settings.AssemblyEditorSettings.MarkInactiveCode) { MarkSkippedLines(m_Assembler.SkippedLineNumbers); } AnalizingFinished?.Invoke(this, new EventArgs()); }
public void ClearResults() { MarkerService.RemoveAll(m => true); InterpretedSymbols.Clear(); WrongLine.Clear(); }