Subversion Repositories Kolibri OS

Rev

Rev 1458 | Rev 1464 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1457 IgorA 1
2
3
элемент Text Editor
4
5
6
7
 
8
9

На главную ↑

10

Оглавление

11
 
12

Введение

13

Функции

14
    15
  • ted_but_copy
  • 1458 IgorA 16
  • ted_but_cut
  • 17
  • ted_but_find_next
  • 18
  • ted_but_paste
  • 19
  • ted_but_redo
  • 20
  • ted_but_reverse
  • 21
  • ted_but_save_file
  • 22
  • ted_but_select_word
  • 23
  • ted_but_sumb_lover
  • 24
  • ted_but_sumb_upper
  • 25
  • ted_but_undo
  • 26
  • ted_can_save
  • 27
  • ted_clear
  • 28
  • ted_delete
  • 29
  • ted_draw
  • 30
  • ted_init
  • 31
  • ted_init_scroll_bars
  • 32
  • ted_init_syntax_file
  • 33
  • ted_is_select
  • 34
  • ted_key
  • 35
  • ted_mouse
  • 36
  • ted_open_file
  • 37
  • ted_text_add
  • 38
  • ted_text_colored
  • 1457 IgorA 39
    1458 IgorA 40

    Формат файла подсветки *.syn

    1457 IgorA 41
     
    42

    Введение

    43

    Элемент text_editor позволяет работать с текстовыми файлами, содержит много функция для редактирования текста.

    44

    45

    Внешний вид программы, с элементом text_editor.

    46
     
    47

    Возможности

    48
      49
        
    • Открытие (Ctrl+O)/Сохранение файла.
    • 50
        
    • Редактирование: Повтор/Отмена действия (Ctrl+Z), Вырезать/Копировать (Ctrl+C)/Вставить (Ctrl+V), Поиск (Ctrl+F, F3).
    • 51
        
    • Выделение цветом слов, заданных в файле синтаксиса. Вывод справки по ним, если она есть (нажатием F1 когда курсор на слове).
    • 52
      53
       
      54

      Некоторые недоработки

      55
        56
      • Если открыть большой файл, размер которого больше чем:
      • 57
            maxChars equ 100002 ;(...+2)
        58
          он откроется не весь, а первые maxChars-2 символов из файла
        59
          (о чем выдается сообщение).
        60
      • При сохранении программа не спрашивает о замене существ. файла.
      • 61
        62
         
        63

        О работе программы

        64

        Раздел для программистов (и интересующихся людей), в котором расказаны

        65
          некоторые идеи, на которых построена данная программа.

        66
         
        67

        Для работы с текстом программа использует структуры:

        68
        struct symbol
        69
          c db ?	;  +0 символ
        70
          col db ?	;  +1 цвет
        71
          perv dd ? ;  +2
        72
          next dd ? ;  +6 указатели
        73
          tc dd ?	; +10 врем. создания
        74
          td dd ?	; +14 врем. удаления
        75
        ends
        76

        Каждая из таких структур сохраняет один символ в переменной 'c'. Переменные

        77
          'perv' и 'next' хранят индексы первого и следующего символов. Благодаря чему
        78
          текст создается в виде цепочки символов (двунаправленный список).

        79

        'tc' - время создания символа, при отмене действия текстовый редактор "знает"

        80
          какие символы отображать, а какие нет (хотя все символы "висят" в памяти).

        81

        'td' - время удаления символа, заполняется при удалении, при отмене действия

        82
          удаления символов, текст может быть восстановлен.

        83

        'col' - используется для цветовой разметки.

        84
         
        85

        Функции

        86

        Функции на экспорт:

        87
         
        88

        ted_but_copy

        1458 IgorA 89

        Функция которая будет вызываться при нажатии на кнопку копирования в буфер или на Ctrl+C. Текст копируется в буфер ted_buffer, максимальный размер буфера указывается в ted_buffer_size.

        1457 IgorA 90

        Пример использования:

        91
        stdcall [ted_but_copy], tedit0
        92
         
        1458 IgorA 93

        ted_but_cut

        94

        Функция вырезает выделенный текст и копирует его в буфер.

        95

        Пример использования:

        96
        stdcall [ted_but_cut], tedit0
        1457 IgorA 97
         
        1458 IgorA 98

        ted_but_find_next

        99

        Функция для поиска текста. Ищет текст из буфера ted_buffer_find, при нахождении перемещает курсор к найденому тексту и выделяет его.

        100

        Пример использования:

        101
        stdcall [ted_but_find_next], tedit0
        102
         
        103

        ted_but_paste

        104

        Функция вставляет текст из буфера ted_buffer.

        105

        Пример использования:

        106
        stdcall [ted_but_paste], tedit0
        107
         
        108

        ted_but_redo

        109

        Повторяет отмененные действия по редактированию текста.

        110

        Пример использования:

        111
        stdcall [ted_but_redo], tedit0
        112
         
        113

        ted_but_reverse

        114

        Меняет порядок следования символов в выделенном тексте.

        115

        Пример использования:

        116
        stdcall [ted_but_reverse], tedit0
        117
         
        118

        ted_but_save_file

        119

        Функция для сохранения файла. Принимает 3 параметра:

        120

        1) структура tedit,

        121

        2) структура для работы 70-й функции (до вызова функции заполнения не требует),

        122

        3) строка с путем и именем файла.

        123

        Пример использования:

        124
        stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
        125
         
        126

        ted_but_select_word

        127

        Функция для выделения ключевого слова под курсором. Если ключевые слова не используются, тогда будет выделен весь текст.

        128

        Пример использования:

        129
        stdcall [ted_but_select_word], tedit0
        130
         
        131

        ted_but_sumb_lover

        132

        Переводит выделенные символы к нижнему регистру.

        133

        Пример использования:

        134
        stdcall [ted_but_sumb_lover], tedit0
        135
         
        136

        ted_but_sumb_upper

        137

        Переводит выделенные символы к верхнему регистру.

        138

        Пример использования:

        139
        stdcall [ted_but_sumb_upper], tedit0
        140
         
        141

        ted_but_undo

        142

        Отменяет действия по редактированию текста. Действия функции ted_but_reverse не отменяются.

        143

        Пример использования:

        144
        stdcall [ted_but_undo], tedit0
        145
         
        146

        ted_can_save

        147

        Функция которая проверяет были ли не сохраненные изменения в тексте. Результат возвращается в регистр al, если изменения были то возвращает 1 иначе 0.

        148

        Пример использования:

        149
        push eax
        150
        	stdcall [ted_can_save], tedit0
        151
        	cmp al,1
        152
        .........
        153
        pop eax
        154
         
        155

        ted_clear

        156

        Очистка текста в окне редактора. Принимает 2 параметра:

        157

        1) структура tedit,

        158

        2) параметр определяет будет ли очистка памяти полной.

        159

        Если 2-й параметр равен 1, то очистка будет полной, при 0 нет. Пользователю нужно вызывать функцию с параметром 1, параметр 0 для внутреннего использования.

        160

        Пример использования:

        161
        stdcall [ted_clear], tedit0,1
        162
         
        163

        ted_delete

        164

        Деструктор элемента, освобождает память занятую элементом.

        165

        Пример использования:

        166
        stdcall [ted_delete], tedit0
        167
         
        168

        ted_draw

        169

        Перерисовка всего окна редактора, включая дочерние скроллинги.

        170

        Пример использования:

        171
        stdcall [ted_draw], tedit0
        172
         
        173

        ted_init

        174

        Конструктор элемента, выделяет память необходимую для работы текстового редактора.

        175

        Пример использования:

        176
        stdcall [ted_init], tedit0
        177
         
        178

        ted_init_scroll_bars

        179

        Устанавливает цвет скроллингов и настраивает их размеры в зависимости от размеров окна. Можно вызывать эту функцию при изменении размеров окна в пользовательской программе. Принимает 2 параметра:

        180

        1) структура tedit,

        1459 IgorA 181

        2) опции, указывают какие нужно изменить параметры:

        182
          183
        • 1 - изменить цвета скроллингов
        • 184
        • 2 - изменился размер окна
        • 185
        • 4 - изменился размер документа
        • 186
          187

          Параметры можно комбинировать через логическое или.

          1458 IgorA 188

          Пример использования:

          189
          stdcall [ted_init_scroll_bars], tedit0,2
          190
           
          191

          ted_init_syntax_file

          192

          Функция для загрузки цветов интерфейса и ключевых слов из файла синтаксиса. Принимает 3 параметра:

          193

          1) структура tedit,

          194

          2) структура для работы 70-й функции (до вызова функции заполнения не требует),

          195

          3) строка с путем и именем файла синтаксиса.

          196

          Пример использования:

          197
          stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
          198
           
          199

          ted_is_select

          200

          Определяет есть в окне редактора выделенный текст. Если есть в регистр al записывается 1 иначе 0. Функция необходима для создания панелей инстрементов, в которых в зависимости от выделения будут доступны или заблокированы определенные кнопки (действия). Например кнопку для копирования в буфер можно заблокировать если нет выбранного текста.

          201

          Пример использования:

          202
          push eax edi
          203
          	mov edi,tedit0
          204
          	call [ted_is_select]
          205
          	cmp al,0
          206
          .........
          207
          pop edi eax
          208
           
          209

          ted_key

          210

          Функция вызываемая для реакции на клавиатуру. В регистре eax должен быть код нажатой клавиши. Принимает 3 параметра:

          211

          1) структура tedit,

          212

          2) таблица для конвертации scan кодов в ascii,

          213

          3) управляющие символы.

          214

          Пример использования:

          215
          mcall 66,3 ;66.3 получить состояние управляющих клавиш
          216
          xor esi,esi
          217
          mov ecx,1
          218
          test al,0x03 ;[Shift]
          219
          jz @f
          220
          	mov cl,2
          221
          	or esi,KM_SHIFT
          222
          @@:
          223
          test al,0x0c ;[Ctrl]
          224
          jz @f
          225
          	or esi,KM_CTRL
          226
          @@:
          227
          test al,0x30 ;[Alt]
          228
          jz @f
          229
          mov cl,3
          230
          	or esi,KM_ALT
          231
          @@:
          232
          test al,0x80 ;[NumLock]
          233
          jz @f
          234
          	or esi,KM_NUMLOCK
          235
          @@:
          236
           
          237
          mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
          238
          mcall 2 ;получаем код нажатой клавиши
          239
          stdcall [ted_key], tedit0, conv_tabl,esi
          240
           
          241

          ted_mouse

          242

          Функция на перемещение или нажатие мыши.

          243

          Пример использования:

          244
          stdcall [ted_mouse], tedit0
          245
           
          246

          ted_open_file

          247

          Функция для открытия файла. Принимает 3 параметра:

          248

          1) структура tedit,

          249

          2) структура для работы 70-й функции (до вызова функции заполнения не требует),

          250

          3) строка с путем и именем файла.

          1459 IgorA 251

          Возвращает 2 параметра:

          252

          1) eax = код ошибки

          253

          2) ebx = колличество прочитанных байт

          1458 IgorA 254

          Пример использования:

          1459 IgorA 255
          push eax ebx
          256
          stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
          257
          .........
          258
          pop ebx eax
          1458 IgorA 259
           
          260

          ted_text_add

          261

          Функция для добавления текста. Принимает 4 параметра:

          262

          1) структура tedit,

          263

          2) указатель на буфер с текстом,

          264

          3) длина текста,

          265

          4) опции вставки.

          266

          Пример использования:

          1459 IgorA 267
          text_buffer db 500 dup(0)
          268
          .........
          269
          mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
          270
          stdcall [ted_text_add], tedit0,text_buffer,30,ebx
          1458 IgorA 271

          ted_opt_ed_change_time - фиксировать изменения документа, что-бы их можно было отменить. Например если нужно сделать несколько изменений текста, которые будут отменяться за один раз, то 1-е изменение идет с этой константой а остальные нет.

          272

          ted_opt_ed_move_cursor - константа которая определяет сдвиг курсора после добавления текста.

          273
           
          274

          ted_text_colored

          275

          Функция для разметки текста цветом. Обычно вызывается внутри самой библиотеки, при изменениях текста. В некоторых случаях может понадобиться вызвать принудительно из внешней программы.

          276

          Пример использования:

          277
          push edi
          278
          	mov edi,tedit0
          279
          	call [ted_text_colored]
          280
          pop edi
          281
           
          1457 IgorA 282

          Внутренние функции:

          283

          ted_get_text_perv_pos - переход на предыдущий символ в цепи (через указатель 'perv')

          284

          ted_get_text_next_pos - переход на следующий символ в цепи (через указатель 'next')

          285

          ted_symbol_not_vis - определяет видимый ли указанный символ на экране (в зависимости

          286
                от значений 'tc' и 'td')

          287

          ted_iterat_next - переход на следующий видимый символ в цепи. Использует для

          288
                работы функции ted_get_text_next_pos и ted_symbol_not_vis.

          289

          ted_iterat_perv - переход на предедущий видимый символ в цепи.

          290
           
          291

          ted_iterat_next_pos_char - найти следующую позицию указанного символа (edx-поз. начала

          292
                поиска, bl->код искомого символа)

          293

          ted_get_pos_by_coords - берет позицию символа по координатам (esi->коорд. x, знак;

          294
                ecx->коорд. y, строка)

          295

          ted_go_to_pos - переставляет курсор в указанную позицию, если указанная позиция

          296
                находится вне экрана, то также переставляются скролинги (ecx->коорд. x, знак; edx->коорд. y, строка)

          297
           
          1458 IgorA 298

          Формат файла подсветки *.syn

          1457 IgorA 299
          300
          ЭлементРазмер (байт)
          301
          Количество цветов текста
          302
            
          4
          303
          Количество подсвечиваемых слов
          304
            
          4
          305
          Цвета интерфейса
          306
            
          4*6
          307
          Цвета для текста
          308
            
          4*(кол. цв. текста)
          309
          Структуры со свойствами и описаниями слов
          310
            
          sizeof(TexColViv)*(кол. слов)
          311
          Разделительный символ, означающий начало описаний слов (всегда равен 0)
          312
            
          1 байт
          313
          Описания слов (строки текста с 0-ми в конце)
          314
            
          (длинна справочного текста + 1)
          315
          316

          Замечания.

          317
            318
          • Все слова должны быть расположены в порядке следования их ASCII кодов.
          • 319
              Возможно в будущих версиях формат файлов подсветки будет изменен.
            320
            321
             
            322

            1459 IgorA 323

            Документация обновлялась последний раз 05.05.10.

            1457 IgorA 324
             
            325
            326