/// <summary> /// Создание основной формы /// </summary> /// <param name="s">Путь к файлу, который открывается в программе</param> public Form1(string s) { InitializeComponent(); timer.Interval = 150; timer.Tick += new EventHandler(timer_Tick); splitContainer1.Panel1.Location = new Point(0, 0); splitContainer1.Panel2.Location = new Point(Size.Width / 2, 0); splitContainer1.SplitterDistance = Width / 2; redactorToolStripMenuItem.Image = mark; visorToolStripMenuItem.Image = mark; textBox1.Location = new Point(5, 5); textBox1.Size = new Size(splitContainer1.Panel1.Width - 25, 29); main = this; if (s != null) { file = s; textBox1.Text = File.ReadAllText(file); } LinesStruct.MainSearch(textBox1.Text, 0, linesTexts, splitContainer1.Panel2, 0, this); int lastY = 10; for (int i = 0; i < linesTexts.Count; i++) { linesTexts[i].value.Location = new Point(10, lastY); lastY += linesTexts[i].value.Height; } }
/// <summary> /// Пересборка разметки /// </summary> private void MyResetText() { if (selected != -1) { textBox1.SelectionStart = selected; selected = -1; } if (linesTexts.Count > 1) { int countOfDelete, countOfEnter; if (countOfLine > textBox1.Lines.Length) { countOfDelete = countOfLine - textBox1.Lines.Length; } else { countOfDelete = 0; //Количество удаленных строк } if (countOfLine < textBox1.Lines.Length) { countOfEnter = textBox1.Lines.Length - countOfLine; } else { countOfEnter = 0; // Количество добавленных строк } int start = textBox1.Text.Substring(0, textBox1.SelectionStart).Split('\r').Length - 1 - countOfEnter; // Первая строка изменений int end = 0; // Последняя строка изменений int startString = 0; // Первый изменяемый элемент визуализации int endString = 0; // Последний изменяемый элемент визуализации bool tr = true; for (int i = 0; i < linesTexts.Count; i++) { if (linesTexts[i].startString > start) //Если мы нашли первую строку изменений { for (int j = i; j < linesTexts.Count; j++) { if (start + 1 <= linesTexts[j].startString - countOfDelete + countOfEnter) // { if (start + 1 == linesTexts[j].startString - countOfDelete + countOfEnter) // Если строка граничит со следующим абзацем { endString = j; // Следующий абзац последний на персбоку if (j + 1 < linesTexts.Count) // Определение последний строки этого абзаца { end = linesTexts[j + 1].startString - 1 - countOfDelete + countOfEnter; } else { end = textBox1.Lines.Length - 1; } } else { endString = j - 1; // Последний абзац на персборку - предыдущий end = linesTexts[j].startString - 1 - countOfDelete + countOfEnter; } tr = false; break; } } if (tr) { end = textBox1.Lines.Length - 1; // Последняя строка текста endString = linesTexts.Count - 1;; // Последний блок tr = false; } if (i - 2 >= 0) // Если старт не в первом блоке { if (linesTexts[i - 1].startString != start) { start = linesTexts[i - 1].startString; startString = i - 1; } else { start = linesTexts[i - 2].startString; // Первая строка блока текста для которого будет проводиться сборка startString = i - 2; // Индекс первого блока визуализации } } else { start = 0; startString = 0; } break; } } if (tr) { if (linesTexts.Count > 1 && linesTexts[linesTexts.Count - 1].startString == start) { startString = linesTexts.Count - 2; start = linesTexts[linesTexts.Count - 2].startString; // Первая строка блока текста для которого будет проводиться сборка end = textBox1.Lines.Length - 1; endString = linesTexts.Count - 1; } else { startString = linesTexts.Count - 1; start = linesTexts[linesTexts.Count - 1].startString; // Первая строка блока текста для которого будет проводиться сборка end = textBox1.Lines.Length - 1; endString = linesTexts.Count - 1; } } for (int i = startString; i <= endString; i++) // удаление всех пересобираеммых элементов визуализации { splitContainer1.Panel2.Controls.Remove(linesTexts[startString].value); linesTexts.RemoveAt(startString); } for (int i = startString; i < linesTexts.Count; i++) // Сдвиг старотвых строк для находящихся ниже элементов визуализации { linesTexts[i].startString += countOfEnter - countOfDelete; } string s = ""; for (int i = start; i <= end; i++) // Подготовка текста для преобразования { s += textBox1.Lines[i] + "\r\n"; } try { LinesStruct.MainSearch(s.Substring(0, s.Length - 2), start, linesTexts, splitContainer1.Panel2, startString, this); } catch { LinesStruct.MainSearch("", start, linesTexts, splitContainer1.Panel2, startString, this); } // Смещение визуализации int lastY = 10; if (start > 0) { lastY = linesTexts[startString - 1].value.Location.Y + linesTexts[startString - 1].value.Height + 10; } for (int i = startString; i < linesTexts.Count; i++) { linesTexts[i].value.Location = new Point(10, lastY); lastY += linesTexts[i].value.Height + 10; } } else { splitContainer1.Panel2.Controls.Clear(); linesTexts.RemoveAt(0); LinesStruct.MainSearch(textBox1.Text, 0, linesTexts, splitContainer1.Panel2, 0, this); int lastY = 10; for (int i = 0; i < linesTexts.Count; i++) { linesTexts[i].value.Location = new Point(10, lastY); lastY += linesTexts[i].value.Height; } } countOfLine = textBox1.Lines.Length; }