Subversion Repositories Kolibri OS

Rev

Rev 1457 | Rev 1459 | 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,

        181

        2) опции, если 1 то изменять цвета скроллингов если 2 то изменять размер, можно давать комбинацию опций с помощью или.

        182

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

        183
        stdcall [ted_init_scroll_bars], tedit0,2
        184
         
        185

        ted_init_syntax_file

        186

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

        187

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

        188

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

        189

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

        190

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

        191
        stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
        192
         
        193

        ted_is_select

        194

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

        195

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

        196
        push eax edi
        197
        	mov edi,tedit0
        198
        	call [ted_is_select]
        199
        	cmp al,0
        200
        .........
        201
        pop edi eax
        202
         
        203

        ted_key

        204

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

        205

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

        206

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

        207

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

        208

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

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

        ted_mouse

        236

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

        237

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

        238
        stdcall [ted_mouse], tedit0
        239
         
        240

        ted_open_file

        241

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

        242

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

        243

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

        244

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

        245

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

        246
        stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
        247
         
        248

        ted_text_add

        249

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

        250

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

        251

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

        252

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

        253

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

        254

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

        255
        mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
        256
        stdcall [ted_text_add], tedit0,ted_buffer,30,ebx
        257

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

        258

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

        259
         
        260

        ted_text_colored

        261

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

        262

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

        263
        push edi
        264
        	mov edi,tedit0
        265
        	call [ted_text_colored]
        266
        pop edi
        267
         
        1457 IgorA 268

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

        269

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

        270

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

        271

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

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

        273

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

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

        275

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

        276
         
        277

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

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

        279

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

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

        281

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

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

        283
         
        1458 IgorA 284

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

        1457 IgorA 285
        286
        ЭлементРазмер (байт)
        287
        Количество цветов текста
        288
          
        4
        289
        Количество подсвечиваемых слов
        290
          
        4
        291
        Цвета интерфейса
        292
          
        4*6
        293
        Цвета для текста
        294
          
        4*(кол. цв. текста)
        295
        Структуры со свойствами и описаниями слов
        296
          
        sizeof(TexColViv)*(кол. слов)
        297
        Разделительный символ, означающий начало описаний слов (всегда равен 0)
        298
          
        1 байт
        299
        Описания слов (строки текста с 0-ми в конце)
        300
          
        (длинна справочного текста + 1)
        301
        302

        Замечания.

        303
          304
        • Все слова должны быть расположены в порядке следования их ASCII кодов.
        • 305
            Возможно в будущих версиях формат файлов подсветки будет изменен.
          306
          307
           
          308

          1458 IgorA 309

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

          1457 IgorA 310
           
          311
          312