Beispiel #1
0
        /// <summary>
        /// Получить список строк
        /// без служебных символов
        /// </summary>
        /// <returns>список строк</returns>
        public List <string> ПолучитьСписокСтрок()
        {
            List <string> списокСтрок = new List <string>();

            foreach (string строка in СписокСтрок)
            {
                списокСтрок.Add(KTerminalStringParser.ПолучитьЧистуюСтроку(строка));
            }
            return(списокСтрок);
        }
Beispiel #2
0
        /// <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(списокВидимыхСтрок);
        }
Beispiel #3
0
        /// <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;
        }