private void editor_TextChanged(object sender, TextChangedEventArgs e) { if (isPainting) // Для избежания рекурсии ( изменяя текст тут, рекурсивно будет вызываться эта же функция) { return; } IsSaved = false; if (Acomp) { Dispatcher.BeginInvoke((Action)(() => { bool suc = true; cmp = new Compilator(); TextRange textRange = new TextRange(editor.Document.ContentStart, editor.Document.ContentEnd); try { cmp.Compilate(textRange.Text); } catch (CompilationException ex) { suc = false; } if (suc == true) { data.Text = cmp.mem.output; code.Text = cmp.GetCodeWithComments(); if (Properties.Settings.Default.Stop) { code.Text += "01001111 // STOP-слово"; } } }), DispatcherPriority.SystemIdle); } }
public void compiliate(ref Compilator cmp, ref TextBox data, ref TextBox code) { bool suc = true; cmp = new Compilator(); TextRange textRange = new TextRange(editor.Document.ContentStart, editor.Document.ContentEnd); try { cmp.Compilate(textRange.Text); } catch (CompilationException ex) { suc = false; } if (suc == true) { data.Text = cmp.mem.output; code.Text = cmp.GetCode(); } }
//код выглядит отвратительно private void MenuItem_Compile(object sender, RoutedEventArgs e) { var tr = new TextRange(editor.Document.ContentStart, editor.Document.ContentEnd); bool suc = true; cmp = new Compilator(); // Слишком много внутренних параметров, приходится создавать новый объект TextRange textRange = new TextRange(editor.Document.ContentStart, editor.Document.ContentEnd); try { cmp.Compilate(textRange.Text); } catch (CompilationException ex) { suc = false; MessageBox.Show(ex.Message, "Помилка компіляції", MessageBoxButton.OK, MessageBoxImage.Error); } finally { if (suc == true) { data.Text = cmp.mem.output; code.Text = cmp.GetCodeWithComments(); if (Properties.Settings.Default.Stop) { code.Text += "01001111 // STOP-слово"; } if (write == true) { if (currentfile == string.Empty) //Что бы записывать в файлы нужно сначала сохранить новый файл { MenuItem_SaveAs(null, null); } if (currentfile == string.Empty) //Если имя не поменялось { MessageBox.Show("Зроблено!\n" + "Вивід у файли не записаний, так як спочатку файл треба зберегти", "Успіх", MessageBoxButton.OK, MessageBoxImage.Asterisk); } else { if (Properties.Settings.Default.CODEBOOL == false || (Properties.Settings.Default.CODEBOOL == true && OutputCode.Text == string.Empty)) { File.WriteAllText(currentfile.Remove(currentfile.Length - 4) + "_code" + ".txt", comment.Replace(code.Text, string.Empty)); } else { File.WriteAllText(currentfile.Remove(currentfile.LastIndexOf(@"\") + 1) + OutputCode.Text + ".txt", comment.Replace(code.Text, string.Empty)); } if (Properties.Settings.Default.DATABOOL == false || (Properties.Settings.Default.CODEBOOL == true && OutputCode.Text == string.Empty)) { File.WriteAllText(currentfile.Remove(currentfile.Length - 4) + "_data" + ".txt", comment.Replace(data.Text, string.Empty)); } else { File.WriteAllText(currentfile.Remove(currentfile.LastIndexOf(@"\") + 1) + OutputData.Text + ".txt", comment.Replace(data.Text, string.Empty)); } MessageBox.Show("Зроблено!\nВивід записаний у відповідні файли", "Успіх", MessageBoxButton.OK, MessageBoxImage.Asterisk); } } else { MessageBox.Show("Зроблено!\n", "Успіх", MessageBoxButton.OK, MessageBoxImage.Asterisk); } } } }