Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
6589 siemargl 1
#ifndef KOLIBRI_EDITOR_H
2
#define KOLIBRI_EDITOR_H
3
 
4
// (количество символов в новом документе + 2)
5
#define TE_MAXCHARS 100002
6
// максимальный размер файла синтаксиса
7
#define TE_MAX_SYNTAX_FILESIZE 410000
8
// buffer for copy|paste
9
#define TE_BUF_SIZE  4096
10
typedef void (*editor_callback)(void);
11
 
12
struct __attribute__ ((__packed__)) editor_symbol {
13
	uint8_t     c;      //  +0 символ
14
	uint8_t     col;    //  +1 цвет
15
	struct editor_symbol   *prev;   //  +2
16
	struct editor_symbol   *next;   //  +6 указатели
17
	uint32_t    tc;     //  +10 врем. создания
18
	uint32_t    td;     // +14 врем. удаления
19
};
20
 
21
/// структура текстового редактора
22
typedef struct __attribute__ ((__packed__)) {
23
    uint32_t    x_pos;  //0
24
    uint32_t    y_pos;  //50
25
    uint32_t    width;  //440
26
    uint32_t    hight;  //150
6612 siemargl 27
    uint32_t    w_pane;      //30 ширина панели в окне, width of left pane with line numbers
28
    uint32_t    h_pane;      //25 высота панели в окне, hight of top pane with Rows, Cols Undo info
6589 siemargl 29
    uint32_t    width_sym;  //9 ширина символа (знакоместа) в окне
30
    uint32_t    hight_sym;  //16 высота символа (знакоместа) в окне
31
	uint8_t     drag_m;     // выделение от мыши
32
	uint8_t     drag_k;     // выделение от клавиатуры
33
	uint32_t    sel_x0;     // структура выделения
34
	uint32_t    sel_y0;
35
	uint32_t    sel_x1;
36
	uint32_t    sel_y1;
37
	uint32_t    seln_x0;    //дополнительная структура выделения
38
	uint32_t    seln_y0;
39
	uint32_t    seln_x1;
40
	uint32_t    seln_y1;
41
	struct editor_symbol   *tex;    // text memory pointer
42
	struct editor_symbol   *tex_1;  // text first symbol pointer
43
	struct editor_symbol   *tex_end;// text end memory pointer
44
	uint32_t    cur_x;      //координата x курсора
45
	uint32_t    cur_y;      //координата y курсора
46
	uint32_t    max_chars;  // TE_MAXCHARS ;+86 максимальное число символов в одном документе
47
	uint32_t    count_colors_text; // 1 ;+90 количество цветов текста
48
	uint32_t    count_key_words;   //+94 колличество ключевых слов
49
	color_t     color_cursor;   // 0x808080 ;+98 цвет курсора
50
	color_t     color_wnd_capt; // 0x80 ;+102 цвет полей вокруг окна
51
	color_t     color_wnd_work; // 0x0 ;+106 цвет фона окна
52
	color_t     color_wnd_bord; //0xd0d0d0 ;+110 цвет текста на полях
53
	color_t     color_select;   // 0x208080 ;+114 цвет выделения
54
	color_t     color_cur_text; // 0xff0000 ;+118 цвет символа под курсором
55
	color_t     color_wnd_text; // 0xffff00 ;+122 цвет текста в окне
56
	char       *syntax_file;    // указатель на начало файла синтаксиса
57
	uint32_t    syntax_file_size;   // TE_MAX_SYNTAX_FILESIZE ;+130 максимальный размер файла синтаксиса
58
	void       *text_colors;    // указатель на массив цветов текста
59
	char       *help_text_f1;   // указатель на текст справки (по нажатии F1)
60
	int         help_id;	    // -1 ;+142 идентификатор для справки
61
	void       *key_words_data; // указатель на структуры ключевых слов TexColViv
62
	uint32_t    tim_ch;     // количество изменений в файле
63
	uint32_t    tim_undo;   // количество отмененных действий
64
	uint32_t    tim_ls;     // время последнего сохранения
65
	uint32_t    tim_co;     // время последней цветовой разметки
66
	void       *el_focus;   // указатель на переменную элемента в фокусе pointer to pointer**
67
	uint8_t     err_save;   // ошибка сохранения файла
68
	uint8_t     panel_id;   // номер открытой панели
69
	uint8_t     key_new;    // символ, который будет добавлятся с клавиатуры
70
	uint8_t     symbol_new_line; // ascii 20 символ завершения строки
71
	scrollbar  *scr_w;      // вертикальный скроллинг != NULL
72
	scrollbar  *scr_h;      // горизонтальный скроллинг != NULL
73
	char       *arr_key_pos;// указатель на массив позиций ключевых слов
74
	char       *buffer;     // указатель на буфер копирования/вставки != NULL, also size
75
	char       *buffer_find;// указатель на буфер для поиска (sized 302)
76
	uint8_t     cur_ins;    // 1 режим работы курсора (обычный или замена)
77
	uint8_t     mode_color; // 1 режим выделения слов цветом (0-выкл. 1-вкл.)
78
	uint8_t     mode_invis; // 0 режим показа непечатаемых символов
79
	uint8_t     gp_opt;     // 0 опции возвращаемые функцией ted_get_pos_by_cursor
80
	editor_callback fun_on_key_ctrl_o;  // указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла), can be NULL
81
	editor_callback fun_on_key_ctrl_f;  // ... Ctrl+F (вызова/скрытия панели поиска)
82
	editor_callback fun_on_key_ctrl_n;  // ... Ctrl+N (создание нового документа)
83
	editor_callback fun_on_key_ctrl_s;  // ... Ctrl+S
84
	uint32_t    buffer_size;// BUF_SIZE размер буфера копирования/вставки
85
	editor_callback fun_find_err;       // указатель на функцию вызываемую если поиск закончился неудачно
86
	editor_callback fun_init_synt_err;  // unused указатель на функцию вызываемую при ошибочном открытии файла синтаксиса
87
	editor_callback fun_draw_panel_buttons; // указатель на функцию рисования панели с кнопками
88
	editor_callback fun_draw_panel_find;    // указатель на функцию рисования панели поиска
89
	editor_callback fun_draw_panel_syntax;  // указатель на функцию рисования панели синтаксиса
90
	editor_callback fun_save_err;   // указатель на функцию вызываемую если сохранение файла закончилось неудачно
91
	uint32_t    increase_size;  //200 число символов на которые будет увечиваться память при нехватке
92
	void       *ptr_free_symb;  // используется внутри элемента для ускорения вставки текста
93
	uint32_t    font_size;       // ;+250 множитель для размера шрифта // binary OR mask for ECX SysFn4
94
} editor;
95
 
96
struct __attribute__ ((__packed__)) editor_color_item
97
{
98
    char        word[40];   // слово для подсветки
99
    uint32_t    f1_offset;  // смещение в таблице F1 подсказок
100
	uint8_t     flags;      // флаги используемые при выделении
101
	uint8_t     endc;       // символ конца выделения (используется при flags&4)
102
	uint8_t     escc;       // экранирующий символ (используется при flags&4)  ascii(34) примеры экранирования \r \n \t
103
    uint8_t     color;      // цвет по таблице цветов
104
};
105
 
106
struct editor_syntax_file
107
{
108
    uint32_t    count_colors_text;  // кол-во цветов текста dd (text-color_wnd_text)/4
109
    uint32_t    count_key_words;    // кол-во ключевых слов dd (f1-text)/48
110
    color_t     color_cursor;       // dd 0xf1fcd0
111
    color_t     color_wnd_capt;     // dd 0x080808
112
    color_t     color_wnd_work;     // dd 0x1C1C1C
113
    color_t     color_wnd_bord;     // dd 0xc0c0c0
114
    color_t     color_select;       // dd 0x3E3D32
115
    color_t     color_cur_text;     // dd 0x808080
116
    color_t     color_wnd_text[];   // таблица цветов размером count_colors_text
117
    // editor_color_item[];         // таблица ключевых подсвеченных слов размером count_key_words
118
};
119
 
120
 
121
static struct editor_syntax_file default_syntax = {
122
    10,     //count_colors_text
6601 siemargl 123
    1,      // count_key_words dd (f1-text)/48, minimum 1
6589 siemargl 124
    0xf1fcd0, //color_cursor dd 0xf1fcd0
125
    0x080808, //color_wnd_capt dd 0x080808
126
    0x1C1C1C, //color_wnd_work dd 0x1C1C1C
127
    0xc0c0c0, //color_wnd_bord dd 0xc0c0c0
128
    0x3E3D32, //color_select dd 0x3E3D32
129
    0x808080, //color_cur_text dd 0x808080
130
	{0xD0D0D0, 0xffff00, 0x00ff00, 0x00ffff, 0x808080, 0xff40ff, 0x4080ff, 0xff0000, 0x8080ff, 0x00ccff}
131
};
132
// next structure must follow syntax definition, at least has 1 element !!!
133
static struct editor_color_item  word1 = {
134
    "siemargl", 1, 0, 0, 1  // test word colored as 1st in table
135
};
136
// next structure preferably follow syntax definition, at least has 1 element !!!
137
static char f1_table[] = {
138
    "\0"
139
    "First\0"
140
    "Last\0"
141
};
142
 
143
 
144
extern void (*ted_draw)(editor *) __attribute__((__stdcall__));
145
extern void (*ted_init_scroll_bars)(editor *, int opt) __attribute__((__stdcall__));
146
/// opt bits = 1 - менять цвет скроллингов, 2 - изменились размеры окна, 4 - изменились размеры документа
147
extern void (*ted_init_syntax_file)(editor *) __attribute__((__stdcall__));
148
extern void (*ted_mouse)(editor *) __attribute__((__stdcall__));
149
extern void (*ted_text_add)(editor *, char *text, int textlen, int opt) __attribute__((__stdcall__));
150
/// add text to cursor pos
151
/// opt == ted_opt_ed_change_time, ted_opt_ed_move_cursor
152
///ted_opt_ed_move_cursor equ 1 ;двигать курсор после добавления текста
153
///ted_opt_ed_change_time equ 2 ;добавлять изменения при редактировании текста
154
extern void (*ted_but_select_word)(editor *) __attribute__((__stdcall__));
155
/// select word under cursor
156
extern void (*ted_but_copy)(editor *) __attribute__((__stdcall__));
157
extern void (*ted_but_paste)(editor *) __attribute__((__stdcall__));
158
 
159
extern void (*ted_but_find_next)(editor *) __attribute__((__stdcall__));
160
///move cursor to , calls ted_fun_find_err() if exist
161
 
162
 
163
 
164
extern void (*ted_but_sumb_upper_asm)(editor *) __attribute__((__stdcall__));
165
static inline void editor_selected_toupper(editor *ed)
166
{
167
    __asm__ __volatile__ (
6601 siemargl 168
             "push %%edi \n\t"
169
             "push %%esi \n\t":::);
6589 siemargl 170
 
171
    (*ted_but_sumb_upper_asm)(ed);
172
 
173
    __asm__ __volatile__ (
6601 siemargl 174
             "pop %%esi \n\t"
175
             "pop %%edi \n\t":::);
6589 siemargl 176
}
177
 
178
extern void (*ted_but_sumb_lover_asm)(editor *) __attribute__((__stdcall__));
179
static inline void editor_selected_tolower(editor *ed)
180
{
181
    __asm__ __volatile__ (
6601 siemargl 182
             "push %%edi \n\t"
183
             "push %%esi \n\t":::);
6589 siemargl 184
 
185
    (*ted_but_sumb_lover_asm)(ed);
186
 
187
    __asm__ __volatile__ (
6601 siemargl 188
             "pop %%esi \n\t"
189
             "pop %%edi \n\t":::);
6589 siemargl 190
}
191
 
192
 
193
extern void (*ted_but_convert_by_table_asm)(editor *, char* table) __attribute__((__stdcall__));
194
static inline void editor_convert_by_table(editor *ed, char* table)
195
{
196
    __asm__ __volatile__ (
6601 siemargl 197
             "push %%edi \n\t"
198
             "push %%esi \n\t":::);
6589 siemargl 199
 
200
    (*ted_but_convert_by_table_asm)(ed, table);
201
 
202
    __asm__ __volatile__ (
6601 siemargl 203
             "pop %%esi \n\t"
204
             "pop %%edi \n\t":::);
6589 siemargl 205
}
206
 
207
extern int (*ted_can_save_asm)(editor *) __attribute__((__stdcall__));
208
static inline int editor_can_save(editor *ed)
6601 siemargl 209
/// return 1 if need to be saved (has changes), 0 otherwise
6589 siemargl 210
{
211
    int ret;
212
    __asm__ __volatile__ (
6601 siemargl 213
             "push %%edi \n\t":::);
6589 siemargl 214
 
215
    (*ted_can_save_asm)(ed);
216
 
217
    __asm__ __volatile__ (
6601 siemargl 218
             "pop %%edi \n\t":"=a"(ret)::);
6589 siemargl 219
    return ret;
220
}
221
 
222
extern void (*ted_clear_asm)(editor *, int) __attribute__((__stdcall__));
223
static inline void editor_clear(editor *ed, int all)
224
/// all==1 - clear all memory
225
{
226
    __asm__ __volatile__ (
6601 siemargl 227
             "push %%edi \n\t":::);
6589 siemargl 228
 
229
    (*ted_clear_asm)(ed, all);
230
 
231
    __asm__ __volatile__ (
6601 siemargl 232
             "pop %%edi \n\t":::);
6589 siemargl 233
}
234
 
235
extern void (*ted_delete_asm)(editor *) __attribute__((__stdcall__));
236
static inline void editor_delete(editor *ed)
237
/// frees all memory (destroy)
238
{
239
    __asm__ __volatile__ (
6601 siemargl 240
             "push %%edi \n\t":::);
6589 siemargl 241
 
242
    (*ted_delete_asm)(ed);
243
 
244
    __asm__ __volatile__ (
6601 siemargl 245
             "pop %%edi \n\t":::);
6589 siemargl 246
    free(ed->scr_w);
247
    free(ed->scr_h);
248
    free(ed->buffer);
249
    free(ed->buffer_find);
250
}
251
 
252
extern void (*ted_init_asm)(editor *) __attribute__((__stdcall__));
253
static inline void editor_init(editor *ed)
254
/// allocate memory
255
{
256
    __asm__ __volatile__ (
6601 siemargl 257
             "push %%edi \n\t":::);
6589 siemargl 258
 
259
    (*ted_init_asm)(ed);
260
 
261
    __asm__ __volatile__ (
6601 siemargl 262
             "pop %%edi \n\t":::);
6589 siemargl 263
}
264
 
265
extern int (*ted_is_select)(editor *) __attribute__((__stdcall__));
266
static inline int editor_is_select(editor *ed)
267
/// return 1 if have selection
268
{
269
    int ret;
270
    __asm__ __volatile__ (
6601 siemargl 271
             "push %%ebx \n\t":::);
6589 siemargl 272
 
273
    (*ted_is_select)(ed);
274
 
275
    __asm__ __volatile__ (
6601 siemargl 276
             "pop %%ebx \n\t":"=a"(ret)::);
6589 siemargl 277
    return ret;
278
}
279
 
280
enum control_keys {
281
    KM_SHIFT = 0x00010000,
282
    KM_CTRL = 0x00020000,
283
    KM_ALT = 0x00040000,
284
    KM_NUMLOCK = 0x00080000
285
};
286
 
287
extern void (*ted_key_asm)(editor *, char* table, int control) __attribute__((__stdcall__));
6612 siemargl 288
static inline __attribute__((__stdcall__)) void editor_keyboard(editor *ed, char* table, enum control_keys control, int ch)
6589 siemargl 289
/// control is KM_SHIFT, KM_ALT, KM_CTRL, KM_NUMLOCK,
290
/// ch = GET_KEY
291
/// table = SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT
292
{
293
    __asm__ __volatile__ (
6612 siemargl 294
             "push %4\n\t"
295
             "push %3\n\t"
296
             "push %2\n\t"
297
             "call *%1 \n\t"::"a"(ch), "m"(ted_key_asm), "m"(ed), "m"(table), "m"(control):);
298
/*
299
    __asm__ __volatile__ (
6589 siemargl 300
             "nop \n\t"::"a"(ch):);
301
    (*ted_key_asm)(ed, table, control);
6612 siemargl 302
*/
6589 siemargl 303
}
304
 
305
extern void (*ted_open_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__));
306
static inline int editor_openfile(editor *ed, char *fname, int *readbytes)
307
/// returns errcode as SysFn70
308
{
309
    int     ret;
310
    struct fs_dirinfo   di;
311
    __asm__ __volatile__ (
6601 siemargl 312
             "push %%edi \n\t":::);
6589 siemargl 313
 
314
    (*ted_open_file_asm)(ed, &di, fname);
315
 
316
    __asm__ __volatile__ (
6601 siemargl 317
             "pop %%edi \n\t":"=b"(*readbytes), "=a"(ret)::);
6589 siemargl 318
    return ret;
319
}
320
 
321
extern void (*ted_save_file_asm)(editor *, struct fs_dirinfo*, char *fname) __attribute__((__stdcall__));
322
static inline int editor_savefile(editor *ed, char *fname)
323
/// returns errcode, calls fun_save_err() if exists
324
{
325
    struct fs_dirinfo   di;
326
 
327
    (*ted_save_file_asm)(ed, &di, fname);
328
 
329
    return ed->err_save;
330
}
331
 
332
extern void (*ted_but_cut)(editor *) __attribute__((__stdcall__));
333
static inline void editor_cut(editor *ed)
334
{
335
    __asm__ __volatile__ (
6601 siemargl 336
             "push %%edi \n\t":::);
6589 siemargl 337
 
338
    (*ted_but_cut)(ed);
339
 
340
    __asm__ __volatile__ (
6601 siemargl 341
             "pop %%edi \n\t":::);
6589 siemargl 342
}
343
 
344
extern void (*ted_but_undo)(editor *) __attribute__((__stdcall__));
345
static inline void editor_undo(editor *ed)
346
{
347
    __asm__ __volatile__ (
6601 siemargl 348
             "push %%edi \n\t":::);
6589 siemargl 349
 
350
    (*ted_but_undo)(ed);
351
 
352
    __asm__ __volatile__ (
6601 siemargl 353
             "pop %%edi \n\t":::);
6589 siemargl 354
}
355
 
356
extern void (*ted_but_redo)(editor *) __attribute__((__stdcall__));
357
static inline void editor_redo(editor *ed)
358
{
359
    __asm__ __volatile__ (
6601 siemargl 360
             "push %%edi \n\t":::);
6589 siemargl 361
 
362
    (*ted_but_redo)(ed);
363
 
364
    __asm__ __volatile__ (
6601 siemargl 365
             "pop %%edi \n\t":::);
6589 siemargl 366
}
367
 
368
extern void (*ted_but_reverse)(editor *) __attribute__((__stdcall__));
369
static inline void editor_reverse(editor *ed)
370
{
371
    __asm__ __volatile__ (
6601 siemargl 372
             "push %%edi \n\t"
373
             "push %%ebx\n\t":::);
6589 siemargl 374
 
375
    (*ted_but_reverse)(ed);
376
 
377
    __asm__ __volatile__ (
6601 siemargl 378
             "pop %%ebx \n\t"
379
             "pop %%edi \n\t":::);
6589 siemargl 380
}
381
 
382
extern void (*ted_text_colored_asm)() __attribute__((__stdcall__));
383
static inline void editor_text_colored(editor *ed)
384
{
385
    __asm__ __volatile__ (
386
             "nop \n\t"::"D"(ed):);
387
 
388
    (*ted_text_colored_asm)();
389
}
390
 
391
static inline
392
uint32_t get_control_keys(void)
393
{
394
    uint32_t ctrl;
395
 
396
    __asm__ __volatile__(
397
    "int $0x40 \n\t"
398
    :"=a"(ctrl)
399
    :"a"(66),"b"(3));
400
 
401
    return ctrl;
402
};
403
 
404
static inline
405
int get_keyboard_layout(int opt, char* buf)
406
/// 128 byte buffer
407
/// opt: 1 - normal, 2 - shifted, 3 - alted, or 9 - return language
408
{
409
    uint32_t lang;
410
 
411
    __asm__ __volatile__(
412
    "int $0x40 \n\t"
413
    :"=a"(lang)
414
    :"a"(26),"b"(2), "c"(opt), "d"(buf));
415
 
416
    return lang;
417
};
418
 
6612 siemargl 419
__attribute__((__stdcall__))
420
static void editor_key(editor* ed, oskey_t key)
6589 siemargl 421
// callback for gui
422
{
6612 siemargl 423
    //if(ed->el_focus != ed) return;  // need to check not to lose keyb buffer
424
 
6589 siemargl 425
    uint32_t control = get_control_keys();
426
    enum control_keys ed_ctrl = 0;
427
    int ly_opt = 1;
428
    if (control & 3) { ed_ctrl |= KM_SHIFT; ly_opt = 2; }
429
    if (control & 0xC) ed_ctrl |= KM_CTRL;
430
    if (control & 0x30){ ed_ctrl |= KM_ALT; ly_opt = 3; }
431
    if (control & 0x80) ed_ctrl |= KM_NUMLOCK;
432
 
433
    char conv_table[128];
434
    get_keyboard_layout(ly_opt, conv_table);
435
 
6612 siemargl 436
    editor_keyboard(ed, conv_table, ed_ctrl, key.val);
6589 siemargl 437
}
438
 
6601 siemargl 439
static inline void gui_add_editor(kolibri_window *wnd, editor* e)
6589 siemargl 440
{
441
    kolibri_window_add_element(wnd, KOLIBRI_EDITOR, e);
442
}
443
 
6612 siemargl 444
static inline editor* kolibri_new_editor(uint32_t x_w, uint32_t y_h, uint32_t font, uint32_t max_chars, void *editor_interlock)
6589 siemargl 445
/// font - 0b10SSS 8x16 size multiply (SSS+1), 0xSSS - 6x9 multiply (SSS+1)
446
 
447
{
448
    editor *ed = (editor *)calloc(1, sizeof(editor));
449
    ed->x_pos = x_w >> 16;
450
    ed->width = x_w & 0xFFFF;
451
    ed->y_pos = y_h >> 16;
452
    ed->hight = y_h & 0xFFFF;
453
 
6612 siemargl 454
    ed->w_pane = 30;
455
    ed->h_pane = 20;
6589 siemargl 456
    // font
457
    if (font == 0) font = 0x10;  // default 16 = 8x16
458
    int font_multipl = (font & 7) + 1;
459
    ed->font_size = font << 24;
460
    if (font & 0x10) // 8x16
461
    {
462
        ed->width_sym = 8 * font_multipl;
463
        ed->hight_sym = 16 * font_multipl;
464
    } else   // 6x9
465
    {
466
        ed->width_sym = 6 * font_multipl;
467
        ed->hight_sym = 9 * font_multipl;
468
    }
469
    // memory sizing for text & syntax
470
    ed->max_chars = max_chars;
471
    ed->increase_size = max_chars / 2;
472
    ed->syntax_file_size = sizeof (default_syntax);
473
 
474
/* // loaded auto from syntax
475
    ed->color_cursor = 0x808080;
476
    ed->color_wnd_capt = 0x80;
477
    ed->color_wnd_bord = 0xd0d0d0;
478
    ed->color_select = 0x208080;
479
    ed->color_cur_text = 0xff0000;
480
    ed->color_wnd_text = 0xffff00;
481
*/
482
    ed->symbol_new_line = 20;  // ascii(20)
483
 
6612 siemargl 484
    ed->scr_w = kolibri_new_scrollbar_def(X_Y(0, 16), X_Y(0, 0), 100, 30, 0);  // cur_area will be inited ltr, max & pos undef
485
    ed->scr_h = kolibri_new_scrollbar_def(X_Y(0, 0), X_Y(0, 16), 100, 30, 0);  // cur_area will be inited ltr, max & pos undef
6589 siemargl 486
 
487
    ed->buffer_size = TE_BUF_SIZE;
488
    ed->buffer = malloc(TE_BUF_SIZE);
489
    ed->buffer_find = malloc(TE_BUF_SIZE / 8);  //where to store text to search
490
 
491
    ed->cur_ins = 1; // insert mode default
492
    ed->mode_color = 1; // can select text
493
    ed->mode_invis = 1; // show nonprinted symbols
494
 
6612 siemargl 495
    ed->el_focus = editor_interlock;
496
 
6589 siemargl 497
    // ??? saveregs ax,cx,di
498
    editor_init(ed);  // memory allocation, cleaning
499
    ed->syntax_file = (char*)&default_syntax;
500
    (*ted_init_syntax_file)(ed); // load colors and syntax highlight
501
    ed->help_text_f1 = f1_table; // override if not aligned immediately after syntax words
502
    ed->key_words_data = &word1;
503
 
504
    return ed;
505
}
506
 
507
 
508
#endif // KOLIBRI_EDITOR_H