/// <summary> /// Получить список строк /// без служебных символов /// </summary> /// <returns>список строк</returns> public List <string> ПолучитьСписокСтрок() { List <string> списокСтрок = new List <string>(); foreach (string строка in СписокСтрок) { списокСтрок.Add(KTerminalStringParser.ПолучитьЧистуюСтроку(строка)); } return(списокСтрок); }
/// <summary> /// Получает список строк, видимых на экране /// без служебных символов /// </summary> /// <returns></returns> public List <string> ПолучитьВидимыйСписокСтрок() { if ((ИндексПервойВидимойСтроки < 0) || (КоличествоВидимыхСтрок < 1)) { return(null); } List <string> списокВидимыхСтрок = new List <string>(); for (int i = ИндексПервойВидимойСтроки; i < (КоличествоВидимыхСтрок + ИндексПервойВидимойСтроки); i++) { списокВидимыхСтрок.Add(KTerminalStringParser.ПолучитьЧистуюСтроку(СписокСтрок[i])); } return(списокВидимыхСтрок); }
/// <summary> /// Добавление массива символов /// в буфер терминала /// </summary> /// <param name="массив">массив символов</param> public void ДобавитьВСписокСтрок(char[] массив) { if ((ПозицияКурсора_Строка < 0) || (ПозицияКурсора_Строка >= СписокСтрок.Count)) { return; } List <string> списокТокенов = KTerminalStringParser.азбитьСтрокуНаТокены(СписокСтрок[ПозицияКурсора_Строка] + new string(массив)); СписокСтрок[ПозицияКурсора_Строка] = string.Empty; ПозицияКурсора_Столбец = 0; /*Разбор входной строки*/ foreach (string токен in списокТокенов) { switch (токен[0]) { case KTerminalStringParser.ОЧИСТИТЬ_ЭКРАН: СписокСтрок.Clear(); СписокСтрок.Add(string.Empty); ПозицияКурсора_Строка = 0; ПозицияКурсора_Столбец = 0; break; case KTerminalStringParser.ВОЗВРАТ_КАРЕТКИ: СписокСтрок[ПозицияКурсора_Строка] = string.Empty; ПозицияКурсора_Столбец = 0; break; case KTerminalStringParser.ПЕРЕНОС_КАРЕТКИ: ПозицияКурсора_Строка += 1; if (ПозицияКурсора_Строка >= СписокСтрок.Count) { СписокСтрок.Add(string.Empty); } else { СписокСтрок[ПозицияКурсора_Строка] = string.Empty; } ПозицияКурсора_Столбец = 0; break; case KTerminalStringParser.ПЕРЕВОД_КУРСОРА: if (KTerminalStringParser.IsToken(токен)) { ПозицияКурсора_Строка = KTerminalStringParser.ПолучитьИндексСтроки(токен); if (ПозицияКурсора_Строка >= СписокСтрок.Count) { ПозицияКурсора_Строка = this.СписокСтрок.Count - 1; continue; } if (ПозицияКурсора_Строка < 0) { ПозицияКурсора_Строка = СписокСтрок.Count - 1; int temp = (СписокСтрок[ПозицияКурсора_Строка].Length - 1); ПозицияКурсора_Столбец = (temp < 0) ? 0 : temp; } else { ПозицияКурсора_Столбец = 0; СписокСтрок[ПозицияКурсора_Строка] = string.Empty; } } else { goto ДОБАВЛЕНИЕ_ТОКЕНА; } break; default: ДОБАВЛЕНИЕ_ТОКЕНА: if (СписокСтрок[ПозицияКурсора_Строка].Length >= ПозицияКурсора_Столбец) { if (токен.Length < (СписокСтрок[ПозицияКурсора_Строка].Length - ПозицияКурсора_Столбец)) { СписокСтрок[ПозицияКурсора_Строка] = СписокСтрок[ПозицияКурсора_Строка].Remove(ПозицияКурсора_Столбец, токен.Length); } else { СписокСтрок[ПозицияКурсора_Строка] = СписокСтрок[ПозицияКурсора_Строка].Remove(ПозицияКурсора_Столбец, СписокСтрок[ПозицияКурсора_Строка].Length - ПозицияКурсора_Столбец); } } СписокСтрок[ПозицияКурсора_Строка] = СписокСтрок[ПозицияКурсора_Строка].Insert(ПозицияКурсора_Столбец, токен); ПозицияКурсора_Столбец += токен.Length; break; } } /*Конец Разбора входной строки*/ ПроконтролироватьКоличествоСтрок(); this.vScrollBar.Minimum = 0; this.vScrollBar.Maximum = this.СписокСтрок.Count - 2; ПосчитатьОптимальнуюВидимуюСтроку(); this.InvalidateVisual(); vScrollBar.IsEnabled = true; }