update
[midnight-commander.git] / gtkedit / syntax.c
blobf6313588ea117ecc92f61d71b222ef3259e38dc8
1 /* editor syntax highlighting.
3 Copyright (C) 1996, 1997, 1998 the Free Software Foundation
5 Authors: 1998 Paul Sheer
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
21 #include <config.h>
22 #if defined(MIDNIGHT) || defined(GTK)
23 #include "edit.h"
24 #else
25 #include "coolwidget.h"
26 #endif
28 /* bytes */
29 #define SYNTAX_MARKER_DENSITY 512
31 #if !defined(MIDNIGHT) || defined(HAVE_SYNTAXH)
33 int option_syntax_highlighting = 1;
35 /* these three functions are called from the outside */
36 void edit_load_syntax (WEdit * edit, char **names, char *type);
37 void edit_free_syntax_rules (WEdit * edit);
38 void edit_get_syntax_color (WEdit * edit, long byte_index, int *fg, int *bg);
40 static void *syntax_malloc (size_t x)
42 void *p;
43 p = malloc (x);
44 memset (p, 0, x);
45 return p;
48 #define syntax_free(x) {if(x){free(x);(x)=0;}}
50 static int compare_word_to_right (WEdit * edit, long i, char *text, char *whole_left, char *whole_right, int line_start)
52 char *p;
53 int c, d, j;
54 if (!*text)
55 return 0;
56 c = edit_get_byte (edit, i - 1);
57 if (line_start)
58 if (c != '\n')
59 return 0;
60 if (whole_left)
61 if (strchr (whole_left, c))
62 return 0;
63 for (p = text; *p; p++, i++) {
64 switch (*p) {
65 case '\001':
66 p++;
67 for (;;) {
68 c = edit_get_byte (edit, i);
69 if (c == *p)
70 break;
71 if (c == '\n')
72 return 0;
73 i++;
75 break;
76 case '\002':
77 p++;
78 j = 0;
79 for (;;) {
80 c = edit_get_byte (edit, i);
81 if (c == *p)
82 j = i;
83 if (j && strchr (p + 1, c)) /* c exists further down, so it will get matched later */
84 break;
85 if (c == '\n' || c == '\t' || c == ' ') {
86 if (!j)
87 return 0;
88 i = j;
89 break;
91 if (whole_right)
92 if (!strchr (whole_right, c)) {
93 if (!j)
94 return 0;
95 i = j;
96 break;
98 i++;
100 break;
101 case '\003':
102 p++;
103 #if 0
104 c = edit_get_byte (edit, i++);
105 for (j = 0; p[j] != '\003'; j++)
106 if (c == p[j])
107 goto found_char1;
108 return 0;
109 found_char1:
110 #endif
111 c = -1;
112 for (;; i++) {
113 d = c;
114 c = edit_get_byte (edit, i);
115 for (j = 0; p[j] != '\003'; j++)
116 if (c == p[j])
117 goto found_char2;
118 break;
119 found_char2:
120 j = c; /* dummy command */
122 i--;
123 while (*p != '\003')
124 p++;
125 if (p[1] == d)
126 i--;
127 break;
128 #if 0
129 case '\004':
130 p++;
131 c = edit_get_byte (edit, i++);
132 for (j = 0; p[j] != '\004'; j++)
133 if (c == p[j])
134 return 0;
135 for (;; i++) {
136 c = edit_get_byte (edit, i);
137 for (j = 0; p[j] != '\004'; j++)
138 if (c == p[j])
139 goto found_char4;
140 continue;
141 found_char4:
142 break;
144 i--;
145 while (*p != '\004')
146 p++;
147 break;
148 #endif
149 default:
150 if (*p != edit_get_byte (edit, i))
151 return 0;
154 if (whole_right)
155 if (strchr (whole_right, edit_get_byte (edit, i)))
156 return 0;
157 return 1;
160 static int compare_word_to_left (WEdit * edit, long i, char *text, char *whole_left, char *whole_right, int line_start)
162 char *p;
163 int c, d, j;
164 if (!*text)
165 return 0;
166 if (whole_right)
167 if (strchr (whole_right, edit_get_byte (edit, i + 1)))
168 return 0;
169 for (p = text + strlen (text) - 1; (unsigned long) p >= (unsigned long) text; p--, i--) {
170 switch (*p) {
171 case '\001':
172 p--;
173 for (;;) {
174 c = edit_get_byte (edit, i);
175 if (c == *p)
176 break;
177 if (c == '\n')
178 return 0;
179 i--;
181 break;
182 case '\002':
183 p--;
184 for (;;) {
185 c = edit_get_byte (edit, i);
186 if (c == *p)
187 break;
188 if (c == '\n' || c == '\t' || c == ' ')
189 return 0;
190 if (whole_right)
191 if (!strchr (whole_right, c))
192 return 0;
193 i--;
195 break;
196 case '\003':
197 while (*(--p) != '\003');
198 p++;
199 #if 0
200 c = edit_get_byte (edit, i--);
201 for (j = 0; p[j] != '\003'; j++)
202 if (c == p[j])
203 goto found_char1;
204 return 0;
205 found_char1:
206 #endif
207 c = -1;
208 d = '\0';
209 for (;; i--) {
210 d = c;
211 c = edit_get_byte (edit, i);
212 for (j = 0; p[j] != '\003'; j++)
213 if (c == p[j])
214 goto found_char2;
215 break;
216 found_char2:
217 j = c; /* dummy command */
219 i++;
220 p--;
221 if (*(p - 1) == d)
222 i++;
223 break;
224 #if 0
225 case '\004':
226 while (*(--p) != '\004');
227 d = *p;
228 p++;
229 c = edit_get_byte (edit, i--);
230 for (j = 0; p[j] != '\004'; j++)
231 if (c == p[j])
232 return 0;
233 for (;; i--) {
234 c = edit_get_byte (edit, i);
235 for (j = 0; p[j] != '\004'; j++)
236 if (c == p[j] || c == '\n' || c == d)
237 goto found_char4;
238 continue;
239 found_char4:
240 break;
242 i++;
243 p--;
244 break;
245 #endif
246 default:
247 if (*p != edit_get_byte (edit, i))
248 return 0;
251 c = edit_get_byte (edit, i);
252 if (line_start)
253 if (c != '\n')
254 return 0;
255 if (whole_left)
256 if (strchr (whole_left, c))
257 return 0;
258 return 1;
262 #if 0
263 #define debug_printf(x,y) fprintf(stderr,x,y)
264 #else
265 #define debug_printf(x,y)
266 #endif
268 static inline unsigned long apply_rules_going_right (WEdit * edit, long i, unsigned long rule)
270 struct context_rule *r;
271 int context, contextchanged = 0, keyword, c1, c2;
272 int found_right = 0, found_left = 0, keyword_foundleft = 0;
273 int done = 0;
274 unsigned long border;
275 context = (rule & RULE_CONTEXT) >> RULE_CONTEXT_SHIFT;
276 keyword = (rule & RULE_WORD) >> RULE_WORD_SHIFT;
277 border = rule & (RULE_ON_LEFT_BORDER | RULE_ON_RIGHT_BORDER);
278 c1 = edit_get_byte (edit, i - 1);
279 c2 = edit_get_byte (edit, i);
280 if (!c2 || !c1)
281 return rule;
283 debug_printf ("%c->", c1);
284 debug_printf ("%c ", c2);
286 /* check to turn off a keyword */
287 if (keyword) {
288 struct key_word *k;
289 k = edit->rules[context]->keyword[keyword];
290 if (c1 == '\n')
291 keyword = 0;
292 if (k->last == c1 && compare_word_to_left (edit, i - 1, k->keyword, k->whole_word_chars_left, k->whole_word_chars_right, k->line_start)) {
293 keyword = 0;
294 keyword_foundleft = 1;
295 debug_printf ("keyword=%d ", keyword);
298 debug_printf ("border=%s ", border ? ((border & RULE_ON_LEFT_BORDER) ? "left" : "right") : "off");
300 /* check to turn off a context */
301 if (context && !keyword) {
302 r = edit->rules[context];
303 if (r->first_right == c2 && compare_word_to_right (edit, i, r->right, r->whole_word_chars_left, r->whole_word_chars_right, r->line_start_right) \
304 &&!(rule & RULE_ON_RIGHT_BORDER)) {
305 debug_printf ("A:3 ", 0);
306 found_right = 1;
307 border = RULE_ON_RIGHT_BORDER;
308 if (r->between_delimiters)
309 context = 0;
310 } else if (!found_left) {
311 if (r->last_right == c1 && compare_word_to_left (edit, i - 1, r->right, r->whole_word_chars_left, r->whole_word_chars_right, r->line_start_right) \
312 &&(rule & RULE_ON_RIGHT_BORDER)) {
313 /* always turn off a context at 4 */
314 debug_printf ("A:4 ", 0);
315 found_left = 1;
316 border = 0;
317 if (!keyword_foundleft)
318 context = 0;
319 } else if (r->last_left == c1 && compare_word_to_left (edit, i - 1, r->left, r->whole_word_chars_left, r->whole_word_chars_right, r->line_start_left) \
320 &&(rule & RULE_ON_LEFT_BORDER)) {
321 /* never turn off a context at 2 */
322 debug_printf ("A:2 ", 0);
323 found_left = 1;
324 border = 0;
328 debug_printf ("\n", 0);
330 /* check to turn on a keyword */
331 if (!keyword) {
332 char *p;
333 p = (r = edit->rules[context])->keyword_first_chars;
334 while ((p = strchr (p + 1, c2))) {
335 struct key_word *k;
336 int count;
337 count = (unsigned long) p - (unsigned long) r->keyword_first_chars;
338 k = r->keyword[count];
339 if (compare_word_to_right (edit, i, k->keyword, k->whole_word_chars_left, k->whole_word_chars_right, k->line_start)) {
340 keyword = count;
341 debug_printf ("keyword=%d ", keyword);
342 break;
346 /* check to turn on a context */
347 if (!context) {
348 int count;
349 for (count = 1; edit->rules[count] && !done; count++) {
350 r = edit->rules[count];
351 if (!found_left) {
352 if (r->last_right == c1 && compare_word_to_left (edit, i - 1, r->right, r->whole_word_chars_left, r->whole_word_chars_right, r->line_start_right) \
353 &&(rule & RULE_ON_RIGHT_BORDER)) {
354 debug_printf ("B:4 count=%d", count);
355 found_left = 1;
356 border = 0;
357 context = 0;
358 contextchanged = 1;
359 keyword = 0;
360 } else if (r->last_left == c1 && compare_word_to_left (edit, i - 1, r->left, r->whole_word_chars_left, r->whole_word_chars_right, r->line_start_left) \
361 &&(rule & RULE_ON_LEFT_BORDER)) {
362 debug_printf ("B:2 ", 0);
363 found_left = 1;
364 border = 0;
365 if (r->between_delimiters) {
366 context = count;
367 contextchanged = 1;
368 keyword = 0;
369 debug_printf ("context=%d ", context);
370 if (r->first_right == c2 && compare_word_to_right (edit, i, r->right, r->whole_word_chars_left, r->whole_word_chars_right, r->line_start_right)) {
371 debug_printf ("B:3 ", 0);
372 found_right = 1;
373 border = RULE_ON_RIGHT_BORDER;
374 context = 0;
377 break;
380 if (!found_right) {
381 if (r->first_left == c2 && compare_word_to_right (edit, i, r->left, r->whole_word_chars_left, r->whole_word_chars_right, r->line_start_left)) {
382 debug_printf ("B:1 ", 0);
383 found_right = 1;
384 border = RULE_ON_LEFT_BORDER;
385 if (!r->between_delimiters) {
386 debug_printf ("context=%d ", context);
387 if (!keyword)
388 context = count;
390 break;
395 if (!keyword && contextchanged) {
396 char *p;
397 p = (r = edit->rules[context])->keyword_first_chars;
398 while ((p = strchr (p + 1, c2))) {
399 struct key_word *k;
400 int coutner;
401 coutner = (unsigned long) p - (unsigned long) r->keyword_first_chars;
402 k = r->keyword[coutner];
403 if (compare_word_to_right (edit, i, k->keyword, k->whole_word_chars_left, k->whole_word_chars_right, k->line_start)) {
404 keyword = coutner;
405 debug_printf ("keyword=%d ", keyword);
406 break;
410 debug_printf ("border=%s ", border ? ((border & RULE_ON_LEFT_BORDER) ? "left" : "right") : "off");
411 debug_printf ("keyword=%d ", keyword);
413 debug_printf (" %d#\n\n", context);
415 return (context << RULE_CONTEXT_SHIFT) | (keyword << RULE_WORD_SHIFT) | border;
418 static unsigned long edit_get_rule (WEdit * edit, long byte_index)
420 long i;
421 if (byte_index < 0) {
422 edit->last_get_rule = -1;
423 edit->rule = 0;
424 return 0;
426 if (byte_index > edit->last_get_rule) {
427 for (i = edit->last_get_rule + 1; i <= byte_index; i++) {
428 edit->rule = apply_rules_going_right (edit, i, edit->rule);
429 if (i > (edit->syntax_marker ? edit->syntax_marker->offset + SYNTAX_MARKER_DENSITY : SYNTAX_MARKER_DENSITY)) {
430 struct _syntax_marker *s;
431 s = edit->syntax_marker;
432 edit->syntax_marker = malloc (sizeof (struct _syntax_marker));
433 edit->syntax_marker->next = s;
434 edit->syntax_marker->offset = i;
435 edit->syntax_marker->rule = edit->rule;
438 } else if (byte_index < edit->last_get_rule) {
439 struct _syntax_marker *s;
440 for (;;) {
441 if (!edit->syntax_marker) {
442 edit->rule = 0;
443 for (i = -1; i <= byte_index; i++)
444 edit->rule = apply_rules_going_right (edit, i, edit->rule);
445 break;
447 if (byte_index >= edit->syntax_marker->offset) {
448 edit->rule = edit->syntax_marker->rule;
449 for (i = edit->syntax_marker->offset + 1; i <= byte_index; i++)
450 edit->rule = apply_rules_going_right (edit, i, edit->rule);
451 break;
453 s = edit->syntax_marker->next;
454 syntax_free (edit->syntax_marker);
455 edit->syntax_marker = s;
458 edit->last_get_rule = byte_index;
459 return edit->rule;
462 static void translate_rule_to_color (WEdit * edit, unsigned long rule, int *fg, int *bg)
464 struct key_word *k;
465 k = edit->rules[(rule & RULE_CONTEXT) >> RULE_CONTEXT_SHIFT]->keyword[(rule & RULE_WORD) >> RULE_WORD_SHIFT];
466 *bg = k->bg;
467 *fg = k->fg;
470 void edit_get_syntax_color (WEdit * edit, long byte_index, int *fg, int *bg)
472 unsigned long rule;
473 if (!edit->rules || byte_index >= edit->last_byte || !option_syntax_highlighting) {
474 #ifdef MIDNIGHT
475 *fg = EDITOR_NORMAL_COLOR;
476 #else
477 *fg = NO_COLOR;
478 *bg = NO_COLOR;
479 #endif
480 } else {
481 rule = edit_get_rule (edit, byte_index);
482 translate_rule_to_color (edit, rule, fg, bg);
488 Returns 0 on error/eof or a count of the number of bytes read
489 including the newline. Result must be free'd.
491 static int read_one_line (char **line, FILE * f)
493 char *p;
494 int len = 256, c, r = 0, i = 0;
495 p = syntax_malloc (len);
496 for (;;) {
497 c = fgetc (f);
498 if (c == -1) {
499 r = 0;
500 break;
501 } else if (c == '\n') {
502 r = i + 1; /* extra 1 for the newline just read */
503 break;
504 } else {
505 if (i >= len - 1) {
506 char *q;
507 q = syntax_malloc (len * 2);
508 memcpy (q, p, len);
509 syntax_free (p);
510 p = q;
511 len *= 2;
513 p[i++] = c;
516 p[i] = 0;
517 *line = p;
518 return r;
521 static char *strdup_convert (char *s)
523 #if 0
524 int e = 0;
525 #endif
526 char *r, *p;
527 p = r = strdup (s);
528 while (*s) {
529 switch (*s) {
530 case '\\':
531 s++;
532 switch (*s) {
533 case ' ':
534 *p = ' ';
535 s--;
536 break;
537 case 'n':
538 *p = '\n';
539 break;
540 case 'r':
541 *p = '\r';
542 break;
543 case 't':
544 *p = '\t';
545 break;
546 case 's':
547 *p = ' ';
548 break;
549 case '*':
550 *p = '*';
551 break;
552 case '\\':
553 *p = '\\';
554 break;
555 case '[':
556 case ']':
557 if ((unsigned long) p == (unsigned long) r || strlen (s) == 1)
558 *p = *s;
559 else {
560 #if 0
561 if (!strncmp (s, "[^", 2)) {
562 *p = '\004';
563 e = 1;
564 s++;
565 } else {
566 if (e)
567 *p = '\004';
568 else
569 #endif
570 *p = '\003';
571 #if 0
572 e = 0;
574 #endif
576 break;
577 default:
578 *p = *s;
579 break;
581 break;
582 case '*':
583 /* a * or + at the beginning or end of the line must be interpreted literally */
584 if ((unsigned long) p == (unsigned long) r || strlen (s) == 1)
585 *p = '*';
586 else
587 *p = '\001';
588 break;
589 case '+':
590 if ((unsigned long) p == (unsigned long) r || strlen (s) == 1)
591 *p = '+';
592 else
593 *p = '\002';
594 break;
595 default:
596 *p = *s;
597 break;
599 s++;
600 p++;
602 *p = 0;
603 return r;
606 #define whiteness(x) ((x) == '\t' || (x) == '\n' || (x) == ' ')
608 static void get_args (char *l, char **args, int *argc)
610 *argc = 0;
611 l--;
612 for (;;) {
613 char *p;
614 for (p = l + 1; *p && whiteness (*p); p++);
615 if (!*p)
616 break;
617 for (l = p + 1; *l && !whiteness (*l); l++);
618 *l = '\0';
619 *args = strdup_convert (p);
620 (*argc)++;
621 args++;
623 *args = 0;
626 static void free_args (char **args)
628 while (*args) {
629 syntax_free (*args);
630 *args = 0;
631 args++;
635 #define check_a {if(!*a){result=line;break;}}
636 #define check_not_a {if(*a){result=line;break;}}
638 #ifdef MIDNIGHT
640 int try_alloc_color_pair (char *fg, char *bg);
642 int this_try_alloc_color_pair (char *fg, char *bg)
644 char f[80], b[80], *p;
645 if (bg)
646 if (!*bg)
647 bg = 0;
648 if (fg)
649 if (!*fg)
650 fg = 0;
651 if (fg) {
652 strcpy (f, fg);
653 p = strchr (f, '/');
654 if (p)
655 *p = '\0';
656 fg = f;
658 if (bg) {
659 strcpy (b, bg);
660 p = strchr (b, '/');
661 if (p)
662 *p = '\0';
663 bg = b;
665 return try_alloc_color_pair (fg, bg);
667 #else
668 #ifdef GTK
669 int allocate_color (WEdit *edit, gchar *color);
671 int this_allocate_color (WEdit *edit, char *fg)
673 char *p;
674 if (fg)
675 if (!*fg)
676 fg = 0;
677 if (!fg)
678 return allocate_color (edit, 0);
679 p = strchr (fg, '/');
680 if (!p)
681 return allocate_color (edit, fg);
682 return allocate_color (edit, p + 1);
684 #else
685 int this_allocate_color (WEdit *edit, char *fg)
687 char *p;
688 if (fg)
689 if (!*fg)
690 fg = 0;
691 if (!fg)
692 return allocate_color (0);
693 p = strchr (fg, '/');
694 if (!p)
695 return allocate_color (fg);
696 return allocate_color (p + 1);
698 #endif
699 #endif
701 /* returns line number on error */
702 static int edit_read_syntax_rules (WEdit * edit, FILE * f)
704 char *fg, *bg;
705 char last_fg[32] = "", last_bg[32] = "";
706 char whole_right[256];
707 char whole_left[256];
708 char *args[1024], *l = 0;
709 int line = 0;
710 struct context_rule **r, *c;
711 int num_words = -1, num_contexts = -1;
712 int argc, result = 0;
713 int i, j;
715 args[0] = 0;
717 strcpy (whole_left, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890");
718 strcpy (whole_right, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890");
720 r = edit->rules = syntax_malloc (256 * sizeof (struct context_rule *));
722 for (;;) {
723 char **a;
724 line++;
725 if (!read_one_line (&l, f))
726 break;
727 get_args (l, args, &argc);
728 a = args + 1;
729 if (!args[0]) {
730 /* do nothing */
731 } else if (!strcmp (args[0], "wholechars")) {
732 check_a;
733 if (!strcmp (*a, "left")) {
734 a++;
735 strcpy (whole_left, *a);
736 } else if (!strcmp (*a, "right")) {
737 a++;
738 strcpy (whole_right, *a);
739 } else {
740 strcpy (whole_left, *a);
741 strcpy (whole_right, *a);
743 a++;
744 check_not_a;
745 } else if (!strcmp (args[0], "context")) {
746 check_a;
747 if (num_contexts == -1) {
748 if (strcmp (*a, "default")) { /* first context is the default */
749 *a = 0;
750 check_a;
752 a++;
753 c = r[0] = syntax_malloc (sizeof (struct context_rule));
754 c->left = strdup (" ");
755 c->right = strdup (" ");
756 num_contexts = 0;
757 } else {
758 c = r[num_contexts] = syntax_malloc (sizeof (struct context_rule));
759 if (!strcmp (*a, "exclusive")) {
760 a++;
761 c->between_delimiters = 1;
763 check_a;
764 if (!strcmp (*a, "whole")) {
765 a++;
766 c->whole_word_chars_left = strdup (whole_left);
767 c->whole_word_chars_right = strdup (whole_right);
768 } else if (!strcmp (*a, "wholeleft")) {
769 a++;
770 c->whole_word_chars_left = strdup (whole_left);
771 } else if (!strcmp (*a, "wholeright")) {
772 a++;
773 c->whole_word_chars_right = strdup (whole_right);
775 check_a;
776 if (!strcmp (*a, "linestart")) {
777 a++;
778 c->line_start_left = 1;
780 check_a;
781 c->left = strdup (*a++);
782 check_a;
783 if (!strcmp (*a, "linestart")) {
784 a++;
785 c->line_start_right = 1;
787 check_a;
788 c->right = strdup (*a++);
789 c->last_left = c->left[strlen (c->left) - 1];
790 c->last_right = c->right[strlen (c->right) - 1];
791 c->first_left = *c->left;
792 c->first_right = *c->right;
793 c->single_char = (strlen (c->right) == 1);
795 c->keyword = syntax_malloc (1024 * sizeof (struct key_word *));
796 num_words = 1;
797 c->keyword[0] = syntax_malloc (sizeof (struct key_word));
798 fg = *a;
799 if (*a)
800 a++;
801 bg = *a;
802 if (*a)
803 a++;
804 strcpy (last_fg, fg ? fg : "");
805 strcpy (last_bg, bg ? bg : "");
806 #ifdef MIDNIGHT
807 c->keyword[0]->fg = this_try_alloc_color_pair (fg, bg);
808 #else
809 c->keyword[0]->fg = this_allocate_color (edit, fg);
810 c->keyword[0]->bg = this_allocate_color (edit, bg);
811 #endif
812 c->keyword[0]->keyword = strdup (" ");
813 check_not_a;
814 num_contexts++;
815 } else if (!strcmp (args[0], "keyword")) {
816 struct key_word *k;
817 if (num_words == -1)
818 *a = 0;
819 check_a;
820 k = r[num_contexts - 1]->keyword[num_words] = syntax_malloc (sizeof (struct key_word));
821 if (!strcmp (*a, "whole")) {
822 a++;
823 k->whole_word_chars_left = strdup (whole_left);
824 k->whole_word_chars_right = strdup (whole_right);
825 } else if (!strcmp (*a, "wholeleft")) {
826 a++;
827 k->whole_word_chars_left = strdup (whole_left);
828 } else if (!strcmp (*a, "wholeright")) {
829 a++;
830 k->whole_word_chars_right = strdup (whole_right);
832 check_a;
833 if (!strcmp (*a, "linestart")) {
834 a++;
835 k->line_start = 1;
837 check_a;
838 if (!strcmp (*a, "whole")) {
839 *a = 0;
840 check_a;
842 k->keyword = strdup (*a++);
843 k->last = k->keyword[strlen (k->keyword) - 1];
844 k->first = *k->keyword;
845 fg = *a;
846 if (*a)
847 a++;
848 bg = *a;
849 if (*a)
850 a++;
851 if (!fg)
852 fg = last_fg;
853 if (!bg)
854 bg = last_bg;
855 #ifdef MIDNIGHT
856 k->fg = this_try_alloc_color_pair (fg, bg);
857 #else
858 k->fg = this_allocate_color (edit, fg);
859 k->bg = this_allocate_color (edit, bg);
860 #endif
861 check_not_a;
862 num_words++;
863 } else if (!strncmp (args[0], "#", 1)) {
864 /* do nothing for comment */
865 } else if (!strcmp (args[0], "file")) {
866 break;
867 } else { /* anything else is an error */
868 *a = 0;
869 check_a;
871 free_args (args);
872 syntax_free (l);
874 free_args (args);
875 syntax_free (l);
877 if (result)
878 return result;
880 if (num_contexts == -1) {
881 result = line;
882 return result;
886 char first_chars[1024], *p;
887 char last_chars[1024], *q;
888 for (i = 0; edit->rules[i]; i++) {
889 c = edit->rules[i];
890 p = first_chars;
891 q = last_chars;
892 *p++ = (char) 1;
893 *q++ = (char) 1;
894 for (j = 1; c->keyword[j]; j++) {
895 *p++ = c->keyword[j]->first;
896 *q++ = c->keyword[j]->last;
898 *p = '\0';
899 *q = '\0';
900 c->keyword_first_chars = strdup (first_chars);
901 c->keyword_last_chars = strdup (last_chars);
905 return result;
908 void (*syntax_change_callback) (CWidget *) = 0;
910 void edit_set_syntax_change_callback (void (*callback) (CWidget *))
912 syntax_change_callback = callback;
915 void edit_free_syntax_rules (WEdit * edit)
917 int i, j;
918 if (!edit)
919 return;
920 if (!edit->rules)
921 return;
922 syntax_free (edit->syntax_type);
923 edit->syntax_type = 0;
924 if (syntax_change_callback)
925 #ifdef MIDNIGHT
926 (*syntax_change_callback) (&edit->widget);
927 #else
928 (*syntax_change_callback) (edit->widget);
929 #endif
930 for (i = 0; edit->rules[i]; i++) {
931 if (edit->rules[i]->keyword) {
932 for (j = 0; edit->rules[i]->keyword[j]; j++) {
933 syntax_free (edit->rules[i]->keyword[j]->keyword);
934 syntax_free (edit->rules[i]->keyword[j]->whole_word_chars_left);
935 syntax_free (edit->rules[i]->keyword[j]->whole_word_chars_right);
936 syntax_free (edit->rules[i]->keyword[j]);
939 syntax_free (edit->rules[i]->left);
940 syntax_free (edit->rules[i]->right);
941 syntax_free (edit->rules[i]->whole_word_chars_left);
942 syntax_free (edit->rules[i]->whole_word_chars_right);
943 syntax_free (edit->rules[i]->keyword);
944 syntax_free (edit->rules[i]->keyword_first_chars);
945 syntax_free (edit->rules[i]->keyword_last_chars);
946 syntax_free (edit->rules[i]);
948 for (;;) {
949 struct _syntax_marker *s;
950 if (!edit->syntax_marker)
951 break;
952 s = edit->syntax_marker->next;
953 syntax_free (edit->syntax_marker);
954 edit->syntax_marker = s;
956 syntax_free (edit->rules);
959 #define CURRENT_SYNTAX_RULES_VERSION "44"
961 char *syntax_text[] = {
962 "# syntax rules version " CURRENT_SYNTAX_RULES_VERSION,
963 "# (after the slash is a Cooledit color, 0-26 or any of the X colors in rgb.txt)",
964 "# black",
965 "# red",
966 "# green",
967 "# brown",
968 "# blue",
969 "# magenta",
970 "# cyan",
971 "# lightgray",
972 "# gray",
973 "# brightred",
974 "# brightgreen",
975 "# yellow",
976 "# brightblue",
977 "# brightmagenta",
978 "# brightcyan",
979 "# white",
981 "###############################################################################",
982 "file ..\\*\\\\.diff$ Unified\\sDiff\\sOutput ^diff.\\*(-u|--unified)",
983 "# yawn",
984 "context default",
985 " keyword linestart @@*@@ green/16",
986 " keyword linestart \\s black/0 white/26",
987 "context linestart diff \\n white/26 red/9",
988 "context linestart --- \\n brightmagenta/20",
989 "context linestart +++ \\n brightmagenta/20",
990 "context linestart + \\n brightgreen/6",
991 "context linestart - \\n brightred/18",
992 "context linestart A \\n white/26 black/0",
993 "context linestart B \\n white/26 black/0",
994 "context linestart C \\n white/26 black/0",
995 "context linestart D \\n white/26 black/0",
996 "context linestart E \\n white/26 black/0",
997 "context linestart F \\n white/26 black/0",
998 "context linestart G \\n white/26 black/0",
999 "context linestart H \\n white/26 black/0",
1000 "context linestart I \\n white/26 black/0",
1001 "context linestart J \\n white/26 black/0",
1002 "context linestart K \\n white/26 black/0",
1003 "context linestart L \\n white/26 black/0",
1004 "context linestart M \\n white/26 black/0",
1005 "context linestart N \\n white/26 black/0",
1006 "context linestart O \\n white/26 black/0",
1007 "context linestart P \\n white/26 black/0",
1008 "context linestart Q \\n white/26 black/0",
1009 "context linestart R \\n white/26 black/0",
1010 "context linestart S \\n white/26 black/0",
1011 "context linestart T \\n white/26 black/0",
1012 "context linestart U \\n white/26 black/0",
1013 "context linestart V \\n white/26 black/0",
1014 "context linestart W \\n white/26 black/0",
1015 "context linestart X \\n white/26 black/0",
1016 "context linestart Y \\n white/26 black/0",
1017 "context linestart Z \\n white/26 black/0",
1019 "###############################################################################",
1020 "file ..\\*\\\\.lsm$ LSM\\sFile",
1022 "context default",
1023 " keyword linestart Begin3 brightmagenta/20",
1024 " keyword linestart Title:\\s\\s\\s\\s\\s\\s\\s\\s\\s\\s red/9 yellow/24",
1025 " keyword linestart Version:\\s\\s\\s\\s\\s\\s\\s\\s red/9 yellow/24",
1026 " keyword linestart Entered-date:\\s\\s\\s red/9 yellow/24",
1027 " keyword linestart Description:\\s\\s\\s\\s red/9 yellow/24",
1028 " keyword linestart Keywords:\\s\\s\\s\\s\\s\\s\\s red/9 yellow/24",
1029 " keyword linestart Alternate-site:\\s red/9 yellow/24",
1030 " keyword linestart Primary-site:\\s\\s\\s red/9 yellow/24",
1031 " keyword linestart Original-site:\\s\\s red/9 yellow/24",
1032 " keyword linestart Platforms:\\s\\s\\s\\s\\s\\s red/9 yellow/24",
1033 " keyword linestart Copying-policy:\\s red/9 yellow/24",
1034 " keyword linestart End brightmagenta/20",
1036 " keyword linestart \\t\\t white/26 yellow/24",
1037 " keyword linestart \\s\\s\\s\\s\\s\\s\\s\\s\\s\\s\\s\\s\\s\\s\\s\\s white/26 yellow/24",
1038 " keyword whole GPL green/6",
1039 " keyword whole BSD green/6",
1040 " keyword whole Shareware green/6",
1041 " keyword whole sunsite.unc.edu green/6",
1042 " keyword wholeright \\s*.tar.gz green/6",
1043 " keyword wholeright \\s*.lsm green/6",
1045 "context linestart Author:\\s\\s\\s\\s\\s\\s\\s\\s\\s \\n brightred/19",
1046 " keyword whole \\s*@*\\s(*) cyan/16",
1048 "context linestart Maintained-by:\\s\\s \\n brightred/19",
1049 " keyword whole \\s*@*\\s(*) cyan/16",
1051 "###############################################################################",
1052 "file ..\\*\\\\.sh$ Shell\\sScript ^#!\\s\\*/.\\*/(ksh|bash|sh|pdkzsh)$",
1054 "context default",
1055 " keyword whole for yellow/24",
1056 " keyword whole in yellow/24",
1057 " keyword whole do yellow/24",
1058 " keyword whole done yellow/24",
1059 " keyword whole select yellow/24",
1060 " keyword whole case yellow/24",
1061 " keyword whole esac yellow/24",
1062 " keyword whole if yellow/24",
1063 " keyword whole then yellow/24",
1064 " keyword whole elif yellow/24",
1065 " keyword whole else yellow/24",
1066 " keyword whole fi yellow/24",
1067 " keyword whole while yellow/24",
1068 " keyword whole until yellow/24",
1069 " keyword ;; brightred/18",
1070 " keyword \\\\\" brightred/18",
1071 " keyword \\\\' brightred/18",
1072 " keyword ` brightred/18",
1073 " keyword ; brightcyan/17",
1074 " keyword $(*) brightgreen/16",
1075 " keyword ${*} brightgreen/16",
1076 " keyword { brightcyan/14",
1077 " keyword } brightcyan/14",
1079 " keyword whole linestart #!\\[\\s\\]/bin/\\[abkpct\\]sh brightcyan/17 black/0",
1081 " keyword $\\* brightred/18",
1082 " keyword $@ brightred/18",
1083 " keyword $# brightred/18",
1084 " keyword $? brightred/18",
1085 " keyword $- brightred/18",
1086 " keyword $$ brightred/18",
1087 " keyword $! brightred/18",
1088 " keyword $_ brightred/18",
1090 " keyword wholeright $\\[0123456789\\]0 brightred/18",
1091 " keyword wholeright $\\[0123456789\\]1 brightred/18",
1092 " keyword wholeright $\\[0123456789\\]2 brightred/18",
1093 " keyword wholeright $\\[0123456789\\]3 brightred/18",
1094 " keyword wholeright $\\[0123456789\\]4 brightred/18",
1095 " keyword wholeright $\\[0123456789\\]5 brightred/18",
1096 " keyword wholeright $\\[0123456789\\]6 brightred/18",
1097 " keyword wholeright $\\[0123456789\\]7 brightred/18",
1098 " keyword wholeright $\\[0123456789\\]8 brightred/18",
1099 " keyword wholeright $\\[0123456789\\]9 brightred/18",
1101 " keyword wholeright $+A brightgreen/16",
1102 " keyword wholeright $+B brightgreen/16",
1103 " keyword wholeright $+C brightgreen/16",
1104 " keyword wholeright $+D brightgreen/16",
1105 " keyword wholeright $+E brightgreen/16",
1106 " keyword wholeright $+F brightgreen/16",
1107 " keyword wholeright $+G brightgreen/16",
1108 " keyword wholeright $+H brightgreen/16",
1109 " keyword wholeright $+I brightgreen/16",
1110 " keyword wholeright $+J brightgreen/16",
1111 " keyword wholeright $+K brightgreen/16",
1112 " keyword wholeright $+L brightgreen/16",
1113 " keyword wholeright $+M brightgreen/16",
1114 " keyword wholeright $+N brightgreen/16",
1115 " keyword wholeright $+O brightgreen/16",
1116 " keyword wholeright $+P brightgreen/16",
1117 " keyword wholeright $+Q brightgreen/16",
1118 " keyword wholeright $+R brightgreen/16",
1119 " keyword wholeright $+S brightgreen/16",
1120 " keyword wholeright $+T brightgreen/16",
1121 " keyword wholeright $+U brightgreen/16",
1122 " keyword wholeright $+V brightgreen/16",
1123 " keyword wholeright $+W brightgreen/16",
1124 " keyword wholeright $+X brightgreen/16",
1125 " keyword wholeright $+Y brightgreen/16",
1126 " keyword wholeright $+Z brightgreen/16",
1128 " keyword wholeright $+a brightgreen/16",
1129 " keyword wholeright $+b brightgreen/16",
1130 " keyword wholeright $+c brightgreen/16",
1131 " keyword wholeright $+d brightgreen/16",
1132 " keyword wholeright $+e brightgreen/16",
1133 " keyword wholeright $+f brightgreen/16",
1134 " keyword wholeright $+g brightgreen/16",
1135 " keyword wholeright $+h brightgreen/16",
1136 " keyword wholeright $+i brightgreen/16",
1137 " keyword wholeright $+j brightgreen/16",
1138 " keyword wholeright $+k brightgreen/16",
1139 " keyword wholeright $+l brightgreen/16",
1140 " keyword wholeright $+m brightgreen/16",
1141 " keyword wholeright $+n brightgreen/16",
1142 " keyword wholeright $+o brightgreen/16",
1143 " keyword wholeright $+p brightgreen/16",
1144 " keyword wholeright $+q brightgreen/16",
1145 " keyword wholeright $+r brightgreen/16",
1146 " keyword wholeright $+s brightgreen/16",
1147 " keyword wholeright $+t brightgreen/16",
1148 " keyword wholeright $+u brightgreen/16",
1149 " keyword wholeright $+v brightgreen/16",
1150 " keyword wholeright $+w brightgreen/16",
1151 " keyword wholeright $+x brightgreen/16",
1152 " keyword wholeright $+y brightgreen/16",
1153 " keyword wholeright $+z brightgreen/16",
1155 " keyword wholeright $+0 brightgreen/16",
1156 " keyword wholeright $+1 brightgreen/16",
1157 " keyword wholeright $+2 brightgreen/16",
1158 " keyword wholeright $+3 brightgreen/16",
1159 " keyword wholeright $+4 brightgreen/16",
1160 " keyword wholeright $+5 brightgreen/16",
1161 " keyword wholeright $+6 brightgreen/16",
1162 " keyword wholeright $+7 brightgreen/16",
1163 " keyword wholeright $+8 brightgreen/16",
1164 " keyword wholeright $+9 brightgreen/16",
1166 " keyword $ brightgreen/16",
1168 " keyword wholeleft function*() brightblue/11",
1170 "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
1171 "wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
1173 " keyword whole arch cyan/14",
1174 " keyword whole ash cyan/14",
1175 " keyword whole awk cyan/14",
1176 " keyword whole basename cyan/14",
1177 " keyword whole bash cyan/14",
1178 " keyword whole basnemae cyan/14",
1179 " keyword whole bg_backup cyan/14",
1180 " keyword whole bg_restore cyan/14",
1181 " keyword whole bsh cyan/14",
1182 " keyword whole cat cyan/14",
1183 " keyword whole chgrp cyan/14",
1184 " keyword whole chmod cyan/14",
1185 " keyword whole chown cyan/14",
1186 " keyword whole cp cyan/14",
1187 " keyword whole cpio cyan/14",
1188 " keyword whole csh cyan/14",
1189 " keyword whole date cyan/14",
1190 " keyword whole dd cyan/14",
1191 " keyword whole df cyan/14",
1192 " keyword whole dmesg cyan/14",
1193 " keyword whole dnsdomainname cyan/14",
1194 " keyword whole doexec cyan/14",
1195 " keyword whole domainname cyan/14",
1196 " keyword whole echo cyan/14",
1197 " keyword whole ed cyan/14",
1198 " keyword whole egrep cyan/14",
1199 " keyword whole ex cyan/14",
1200 " keyword whole false cyan/14",
1201 " keyword whole fgrep cyan/14",
1202 " keyword whole fsconf cyan/14",
1203 " keyword whole gawk cyan/14",
1204 " keyword whole grep cyan/14",
1205 " keyword whole gunzip cyan/14",
1206 " keyword whole gzip cyan/14",
1207 " keyword whole hostname cyan/14",
1208 " keyword whole igawk cyan/14",
1209 " keyword whole ipcalc cyan/14",
1210 " keyword whole kill cyan/14",
1211 " keyword whole ksh cyan/14",
1212 " keyword whole linuxconf cyan/14",
1213 " keyword whole ln cyan/14",
1214 " keyword whole login cyan/14",
1215 " keyword whole lpdconf cyan/14",
1216 " keyword whole ls cyan/14",
1217 " keyword whole mail cyan/14",
1218 " keyword whole mkdir cyan/14",
1219 " keyword whole mknod cyan/14",
1220 " keyword whole mktemp cyan/14",
1221 " keyword whole more cyan/14",
1222 " keyword whole mount cyan/14",
1223 " keyword whole mt cyan/14",
1224 " keyword whole mv cyan/14",
1225 " keyword whole netconf cyan/14",
1226 " keyword whole netstat cyan/14",
1227 " keyword whole nice cyan/14",
1228 " keyword whole nisdomainname cyan/14",
1229 " keyword whole ping cyan/14",
1230 " keyword whole ps cyan/14",
1231 " keyword whole pwd cyan/14",
1232 " keyword whole red cyan/14",
1233 " keyword whole remadmin cyan/14",
1234 " keyword whole rm cyan/14",
1235 " keyword whole rmdir cyan/14",
1236 " keyword whole rpm cyan/14",
1237 " keyword whole sed cyan/14",
1238 " keyword whole setserial cyan/14",
1239 " keyword whole sh cyan/14",
1240 " keyword whole sleep cyan/14",
1241 " keyword whole sort cyan/14",
1242 " keyword whole stty cyan/14",
1243 " keyword whole su cyan/14",
1244 " keyword whole sync cyan/14",
1245 " keyword whole taper cyan/14",
1246 " keyword whole tar cyan/14",
1247 " keyword whole tcsh cyan/14",
1248 " keyword whole touch cyan/14",
1249 " keyword whole true cyan/14",
1250 " keyword whole umount cyan/14",
1251 " keyword whole uname cyan/14",
1252 " keyword whole userconf cyan/14",
1253 " keyword whole usleep cyan/14",
1254 " keyword whole vi cyan/14",
1255 " keyword whole view cyan/14",
1256 " keyword whole vim cyan/14",
1257 " keyword whole xconf cyan/14",
1258 " keyword whole ypdomainname cyan/14",
1259 " keyword whole zcat cyan/14",
1260 " keyword whole zsh cyan/14",
1262 "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
1263 "wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
1265 "context # \\n brown/22",
1267 "context exclusive whole <\\[\\s\\\\\\]EOF EOF green/6",
1269 "context ' ' green/6",
1271 "context \" \" green/6",
1272 " keyword \\\\' brightgreen/16",
1273 " keyword \\\\\" brightgreen/16",
1274 " keyword $(*) brightgreen/16",
1275 " keyword ${*} brightgreen/16",
1276 " keyword $\\* brightred/18",
1277 " keyword $@ brightred/18",
1278 " keyword $# brightred/18",
1279 " keyword $? brightred/18",
1280 " keyword $- brightred/18",
1281 " keyword $$ brightred/18",
1282 " keyword $! brightred/18",
1283 " keyword $_ brightred/18",
1284 " keyword wholeright $\\[0123456789\\]0 brightred/18",
1285 " keyword wholeright $\\[0123456789\\]1 brightred/18",
1286 " keyword wholeright $\\[0123456789\\]2 brightred/18",
1287 " keyword wholeright $\\[0123456789\\]3 brightred/18",
1288 " keyword wholeright $\\[0123456789\\]4 brightred/18",
1289 " keyword wholeright $\\[0123456789\\]5 brightred/18",
1290 " keyword wholeright $\\[0123456789\\]6 brightred/18",
1291 " keyword wholeright $\\[0123456789\\]7 brightred/18",
1292 " keyword wholeright $\\[0123456789\\]8 brightred/18",
1293 " keyword wholeright $\\[0123456789\\]9 brightred/18",
1295 " keyword wholeright $+A brightgreen/16",
1296 " keyword wholeright $+B brightgreen/16",
1297 " keyword wholeright $+C brightgreen/16",
1298 " keyword wholeright $+D brightgreen/16",
1299 " keyword wholeright $+E brightgreen/16",
1300 " keyword wholeright $+F brightgreen/16",
1301 " keyword wholeright $+G brightgreen/16",
1302 " keyword wholeright $+H brightgreen/16",
1303 " keyword wholeright $+I brightgreen/16",
1304 " keyword wholeright $+J brightgreen/16",
1305 " keyword wholeright $+K brightgreen/16",
1306 " keyword wholeright $+L brightgreen/16",
1307 " keyword wholeright $+M brightgreen/16",
1308 " keyword wholeright $+N brightgreen/16",
1309 " keyword wholeright $+O brightgreen/16",
1310 " keyword wholeright $+P brightgreen/16",
1311 " keyword wholeright $+Q brightgreen/16",
1312 " keyword wholeright $+R brightgreen/16",
1313 " keyword wholeright $+S brightgreen/16",
1314 " keyword wholeright $+T brightgreen/16",
1315 " keyword wholeright $+U brightgreen/16",
1316 " keyword wholeright $+V brightgreen/16",
1317 " keyword wholeright $+W brightgreen/16",
1318 " keyword wholeright $+X brightgreen/16",
1319 " keyword wholeright $+Y brightgreen/16",
1320 " keyword wholeright $+Z brightgreen/16",
1322 " keyword wholeright $+a brightgreen/16",
1323 " keyword wholeright $+b brightgreen/16",
1324 " keyword wholeright $+c brightgreen/16",
1325 " keyword wholeright $+d brightgreen/16",
1326 " keyword wholeright $+e brightgreen/16",
1327 " keyword wholeright $+f brightgreen/16",
1328 " keyword wholeright $+g brightgreen/16",
1329 " keyword wholeright $+h brightgreen/16",
1330 " keyword wholeright $+i brightgreen/16",
1331 " keyword wholeright $+j brightgreen/16",
1332 " keyword wholeright $+k brightgreen/16",
1333 " keyword wholeright $+l brightgreen/16",
1334 " keyword wholeright $+m brightgreen/16",
1335 " keyword wholeright $+n brightgreen/16",
1336 " keyword wholeright $+o brightgreen/16",
1337 " keyword wholeright $+p brightgreen/16",
1338 " keyword wholeright $+q brightgreen/16",
1339 " keyword wholeright $+r brightgreen/16",
1340 " keyword wholeright $+s brightgreen/16",
1341 " keyword wholeright $+t brightgreen/16",
1342 " keyword wholeright $+u brightgreen/16",
1343 " keyword wholeright $+v brightgreen/16",
1344 " keyword wholeright $+w brightgreen/16",
1345 " keyword wholeright $+x brightgreen/16",
1346 " keyword wholeright $+y brightgreen/16",
1347 " keyword wholeright $+z brightgreen/16",
1349 " keyword wholeright $+0 brightgreen/16",
1350 " keyword wholeright $+1 brightgreen/16",
1351 " keyword wholeright $+2 brightgreen/16",
1352 " keyword wholeright $+3 brightgreen/16",
1353 " keyword wholeright $+4 brightgreen/16",
1354 " keyword wholeright $+5 brightgreen/16",
1355 " keyword wholeright $+6 brightgreen/16",
1356 " keyword wholeright $+7 brightgreen/16",
1357 " keyword wholeright $+8 brightgreen/16",
1358 " keyword wholeright $+9 brightgreen/16",
1360 " keyword $ brightgreen/16",
1362 "context exclusive ` ` white/26 black/0",
1363 " keyword '*' green/6",
1364 " keyword \" green/6",
1365 " keyword ; brightcyan/17",
1366 " keyword $(*) brightgreen/16",
1367 " keyword ${*} brightgreen/16",
1368 " keyword { brightcyan/14",
1369 " keyword } brightcyan/14",
1371 " keyword $\\* brightred/18",
1372 " keyword $@ brightred/18",
1373 " keyword $# brightred/18",
1374 " keyword $? brightred/18",
1375 " keyword $- brightred/18",
1376 " keyword $$ brightred/18",
1377 " keyword $! brightred/18",
1378 " keyword $_ brightred/18",
1380 " keyword wholeright $\\[0123456789\\]0 brightred/18",
1381 " keyword wholeright $\\[0123456789\\]1 brightred/18",
1382 " keyword wholeright $\\[0123456789\\]2 brightred/18",
1383 " keyword wholeright $\\[0123456789\\]3 brightred/18",
1384 " keyword wholeright $\\[0123456789\\]4 brightred/18",
1385 " keyword wholeright $\\[0123456789\\]5 brightred/18",
1386 " keyword wholeright $\\[0123456789\\]6 brightred/18",
1387 " keyword wholeright $\\[0123456789\\]7 brightred/18",
1388 " keyword wholeright $\\[0123456789\\]8 brightred/18",
1389 " keyword wholeright $\\[0123456789\\]9 brightred/18",
1391 " keyword wholeright $+A brightgreen/16",
1392 " keyword wholeright $+B brightgreen/16",
1393 " keyword wholeright $+C brightgreen/16",
1394 " keyword wholeright $+D brightgreen/16",
1395 " keyword wholeright $+E brightgreen/16",
1396 " keyword wholeright $+F brightgreen/16",
1397 " keyword wholeright $+G brightgreen/16",
1398 " keyword wholeright $+H brightgreen/16",
1399 " keyword wholeright $+I brightgreen/16",
1400 " keyword wholeright $+J brightgreen/16",
1401 " keyword wholeright $+K brightgreen/16",
1402 " keyword wholeright $+L brightgreen/16",
1403 " keyword wholeright $+M brightgreen/16",
1404 " keyword wholeright $+N brightgreen/16",
1405 " keyword wholeright $+O brightgreen/16",
1406 " keyword wholeright $+P brightgreen/16",
1407 " keyword wholeright $+Q brightgreen/16",
1408 " keyword wholeright $+R brightgreen/16",
1409 " keyword wholeright $+S brightgreen/16",
1410 " keyword wholeright $+T brightgreen/16",
1411 " keyword wholeright $+U brightgreen/16",
1412 " keyword wholeright $+V brightgreen/16",
1413 " keyword wholeright $+W brightgreen/16",
1414 " keyword wholeright $+X brightgreen/16",
1415 " keyword wholeright $+Y brightgreen/16",
1416 " keyword wholeright $+Z brightgreen/16",
1418 " keyword wholeright $+a brightgreen/16",
1419 " keyword wholeright $+b brightgreen/16",
1420 " keyword wholeright $+c brightgreen/16",
1421 " keyword wholeright $+d brightgreen/16",
1422 " keyword wholeright $+e brightgreen/16",
1423 " keyword wholeright $+f brightgreen/16",
1424 " keyword wholeright $+g brightgreen/16",
1425 " keyword wholeright $+h brightgreen/16",
1426 " keyword wholeright $+i brightgreen/16",
1427 " keyword wholeright $+j brightgreen/16",
1428 " keyword wholeright $+k brightgreen/16",
1429 " keyword wholeright $+l brightgreen/16",
1430 " keyword wholeright $+m brightgreen/16",
1431 " keyword wholeright $+n brightgreen/16",
1432 " keyword wholeright $+o brightgreen/16",
1433 " keyword wholeright $+p brightgreen/16",
1434 " keyword wholeright $+q brightgreen/16",
1435 " keyword wholeright $+r brightgreen/16",
1436 " keyword wholeright $+s brightgreen/16",
1437 " keyword wholeright $+t brightgreen/16",
1438 " keyword wholeright $+u brightgreen/16",
1439 " keyword wholeright $+v brightgreen/16",
1440 " keyword wholeright $+w brightgreen/16",
1441 " keyword wholeright $+x brightgreen/16",
1442 " keyword wholeright $+y brightgreen/16",
1443 " keyword wholeright $+z brightgreen/16",
1445 " keyword wholeright $+0 brightgreen/16",
1446 " keyword wholeright $+1 brightgreen/16",
1447 " keyword wholeright $+2 brightgreen/16",
1448 " keyword wholeright $+3 brightgreen/16",
1449 " keyword wholeright $+4 brightgreen/16",
1450 " keyword wholeright $+5 brightgreen/16",
1451 " keyword wholeright $+6 brightgreen/16",
1452 " keyword wholeright $+7 brightgreen/16",
1453 " keyword wholeright $+8 brightgreen/16",
1454 " keyword wholeright $+9 brightgreen/16",
1456 " keyword $ brightgreen/16",
1458 "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
1459 "wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
1461 " keyword whole arch cyan/14",
1462 " keyword whole ash cyan/14",
1463 " keyword whole awk cyan/14",
1464 " keyword whole basename cyan/14",
1465 " keyword whole bash cyan/14",
1466 " keyword whole basnemae cyan/14",
1467 " keyword whole bg_backup cyan/14",
1468 " keyword whole bg_restore cyan/14",
1469 " keyword whole bsh cyan/14",
1470 " keyword whole cat cyan/14",
1471 " keyword whole chgrp cyan/14",
1472 " keyword whole chmod cyan/14",
1473 " keyword whole chown cyan/14",
1474 " keyword whole cp cyan/14",
1475 " keyword whole cpio cyan/14",
1476 " keyword whole csh cyan/14",
1477 " keyword whole date cyan/14",
1478 " keyword whole dd cyan/14",
1479 " keyword whole df cyan/14",
1480 " keyword whole dmesg cyan/14",
1481 " keyword whole dnsdomainname cyan/14",
1482 " keyword whole doexec cyan/14",
1483 " keyword whole domainname cyan/14",
1484 " keyword whole echo cyan/14",
1485 " keyword whole ed cyan/14",
1486 " keyword whole egrep cyan/14",
1487 " keyword whole ex cyan/14",
1488 " keyword whole false cyan/14",
1489 " keyword whole fgrep cyan/14",
1490 " keyword whole fsconf cyan/14",
1491 " keyword whole gawk cyan/14",
1492 " keyword whole grep cyan/14",
1493 " keyword whole gunzip cyan/14",
1494 " keyword whole gzip cyan/14",
1495 " keyword whole hostname cyan/14",
1496 " keyword whole igawk cyan/14",
1497 " keyword whole ipcalc cyan/14",
1498 " keyword whole kill cyan/14",
1499 " keyword whole ksh cyan/14",
1500 " keyword whole linuxconf cyan/14",
1501 " keyword whole ln cyan/14",
1502 " keyword whole login cyan/14",
1503 " keyword whole lpdconf cyan/14",
1504 " keyword whole ls cyan/14",
1505 " keyword whole mail cyan/14",
1506 " keyword whole mkdir cyan/14",
1507 " keyword whole mknod cyan/14",
1508 " keyword whole mktemp cyan/14",
1509 " keyword whole more cyan/14",
1510 " keyword whole mount cyan/14",
1511 " keyword whole mt cyan/14",
1512 " keyword whole mv cyan/14",
1513 " keyword whole netconf cyan/14",
1514 " keyword whole netstat cyan/14",
1515 " keyword whole nice cyan/14",
1516 " keyword whole nisdomainname cyan/14",
1517 " keyword whole ping cyan/14",
1518 " keyword whole ps cyan/14",
1519 " keyword whole pwd cyan/14",
1520 " keyword whole red cyan/14",
1521 " keyword whole remadmin cyan/14",
1522 " keyword whole rm cyan/14",
1523 " keyword whole rmdir cyan/14",
1524 " keyword whole rpm cyan/14",
1525 " keyword whole sed cyan/14",
1526 " keyword whole setserial cyan/14",
1527 " keyword whole sh cyan/14",
1528 " keyword whole sleep cyan/14",
1529 " keyword whole sort cyan/14",
1530 " keyword whole stty cyan/14",
1531 " keyword whole su cyan/14",
1532 " keyword whole sync cyan/14",
1533 " keyword whole taper cyan/14",
1534 " keyword whole tar cyan/14",
1535 " keyword whole tcsh cyan/14",
1536 " keyword whole touch cyan/14",
1537 " keyword whole true cyan/14",
1538 " keyword whole umount cyan/14",
1539 " keyword whole uname cyan/14",
1540 " keyword whole userconf cyan/14",
1541 " keyword whole usleep cyan/14",
1542 " keyword whole vi cyan/14",
1543 " keyword whole view cyan/14",
1544 " keyword whole vim cyan/14",
1545 " keyword whole xconf cyan/14",
1546 " keyword whole ypdomainname cyan/14",
1547 " keyword whole zcat cyan/14",
1548 " keyword whole zsh cyan/14",
1550 "###############################################################################",
1551 "file ..\\*\\\\.(pl|PL])$ Perl\\sProgram ^#!\\s\\*/.\\*/perl$",
1552 "context default",
1553 " keyword whole linestart #!\\[\\s\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/bin/perl brightcyan/17 black/0",
1554 " keyword whole linestart #!\\[\\s\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/bin/perl brightcyan/17 black/0",
1555 " keyword whole linestart #!\\[\\s\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/bin/perl brightcyan/17 black/0",
1556 " keyword whole linestart #!\\[\\s\\]/\\[abcdefghijklmnopqrstuvwxyz\\]/bin/perl brightcyan/17 black/0",
1557 " keyword whole linestart #!\\[\\s\\]/bin/perl brightcyan/17 black/0",
1559 " keyword $_ red/orange",
1560 " keyword $. red/orange",
1561 " keyword $/ red/orange",
1562 " keyword $, red/orange",
1563 " keyword $\" red/orange",
1564 " keyword $\\\\ red/orange",
1565 " keyword $# red/orange",
1566 " keyword $\\* red/orange",
1567 " keyword $? red/orange",
1568 " keyword $] red/orange",
1569 " keyword $[ red/orange",
1570 " keyword $; red/orange",
1571 " keyword $! red/orange",
1572 " keyword $@ red/orange",
1573 " keyword $: red/orange",
1574 " keyword $0 red/orange",
1575 " keyword $$ red/orange",
1576 " keyword $< red/orange",
1577 " keyword $> red/orange",
1578 " keyword $( red/orange",
1579 " keyword $) red/orange",
1581 " keyword $% red/orange",
1582 " keyword $= red/orange",
1583 " keyword $- red/orange",
1584 " keyword $~ red/orange",
1585 " keyword $| red/orange",
1586 " keyword $& red/orange",
1587 " keyword $` red/orange",
1588 " keyword $' red/orange",
1589 " keyword $+ red/orange",
1590 " keyword $11 red/orange",
1591 " keyword $12 red/orange",
1592 " keyword $13 red/orange",
1593 " keyword $14 red/orange",
1594 " keyword $15 red/orange",
1595 " keyword $16 red/orange",
1596 " keyword $17 red/orange",
1597 " keyword $18 red/orange",
1598 " keyword $19 red/orange",
1599 " keyword $20 red/orange",
1600 " keyword $10 red/orange",
1601 " keyword $1 red/orange",
1602 " keyword $2 red/orange",
1603 " keyword $3 red/orange",
1604 " keyword $4 red/orange",
1605 " keyword $5 red/orange",
1606 " keyword $6 red/orange",
1607 " keyword $7 red/orange",
1608 " keyword $8 red/orange",
1609 " keyword $9 red/orange",
1610 " keyword $0 red/orange",
1612 " keyword $^A red/orange",
1613 " keyword $^D red/orange",
1614 " keyword $^E red/orange",
1615 " keyword $^I red/orange",
1616 " keyword $^L red/orange",
1617 " keyword $^P red/orange",
1618 " keyword $^T red/orange",
1619 " keyword $^W red/orange",
1620 " keyword $^X red/orange",
1621 " keyword $^A red/orange",
1623 " keyword @EXPORT red/orange",
1624 " keyword @EXPORT_OK red/orange",
1625 " keyword @INC red/orange",
1626 " keyword @ISA red/orange",
1627 " keyword @_ red/orange",
1628 " keyword @ENV red/orange",
1629 " keyword @OVERLOAD red/orange",
1630 " keyword @SIG red/orange",
1632 " keyword $ brightgreen/15",
1633 " keyword & brightmagenta/19",
1634 " keyword % brightcyan/17",
1635 " keyword @ white/21",
1636 " keyword \\\\\" brightred/18",
1637 " keyword \\\\' brightred/18",
1639 " keyword <+> brightred/18",
1640 " keyword -> yellow/24",
1641 " keyword => yellow/24",
1642 " keyword > yellow/24",
1643 " keyword < yellow/24",
1644 " keyword \\+ yellow/24",
1645 " keyword - yellow/24",
1646 " keyword \\* yellow/24",
1647 " keyword / yellow/24",
1648 " keyword % yellow/24",
1649 " keyword = yellow/24",
1650 " keyword != yellow/24",
1651 " keyword == yellow/24",
1652 " keyword whole ge yellow/24",
1653 " keyword whole le yellow/24",
1654 " keyword whole gt yellow/24",
1655 " keyword whole lt yellow/24",
1656 " keyword whole eq yellow/24",
1657 " keyword whole ne yellow/24",
1658 " keyword whole cmp yellow/24",
1659 " keyword ~ yellow/24",
1660 " keyword { brightcyan/14",
1661 " keyword } brightcyan/14",
1662 " keyword ( brightcyan/15",
1663 " keyword ) brightcyan/15",
1664 " keyword [ brightcyan/14",
1665 " keyword ] brightcyan/14",
1666 " keyword , brightcyan/14",
1667 " keyword .. brightcyan/14",
1668 " keyword : brightcyan/14",
1669 " keyword ; brightmagenta/19",
1671 " keyword whole sub yellow/24",
1672 " keyword whole STDIN brightred/18",
1673 " keyword whole STDOUT brightred/18",
1674 " keyword whole STDERR brightred/18",
1675 " keyword whole STDARGV brightred/18",
1676 " keyword whole DATA brightred/18",
1678 " keyword whole do magenta/23",
1679 " keyword whole if magenta/23",
1680 " keyword whole until magenta/23",
1681 " keyword whole elsif magenta/23",
1682 " keyword whole else magenta/23",
1683 " keyword whole unless magenta/23",
1684 " keyword whole while magenta/23",
1685 " keyword whole foreach magenta/23",
1686 " keyword whole goto magenta/23",
1687 " keyword whole last magenta/23",
1688 " keyword whole next magenta/23",
1689 " keyword whole bless magenta/23",
1690 " keyword whole caller magenta/23",
1691 " keyword whole import magenta/23",
1692 " keyword whole package magenta/23",
1693 " keyword whole require magenta/23",
1694 " keyword whole return magenta/23",
1695 " keyword whole untie magenta/23",
1696 " keyword whole use magenta/23",
1698 " keyword whole diagnostics brightcyan/17",
1699 " keyword whole integer brightcyan/17",
1700 " keyword whole less brightcyan/17",
1701 " keyword whole lib brightcyan/17",
1702 " keyword whole ops brightcyan/17",
1703 " keyword whole overload brightcyan/17",
1704 " keyword whole sigtrap brightcyan/17",
1705 " keyword whole strict brightcyan/17",
1706 " keyword whole vars brightcyan/17",
1708 " keyword whole abs yellow/24",
1709 " keyword whole atan2 yellow/24",
1710 " keyword whole cos yellow/24",
1711 " keyword whole exp yellow/24",
1712 " keyword whole int yellow/24",
1713 " keyword whole log yellow/24",
1714 " keyword whole rand yellow/24",
1715 " keyword whole sin yellow/24",
1716 " keyword whole sqrt yellow/24",
1717 " keyword whole srand yellow/24",
1718 " keyword whole time yellow/24",
1719 " keyword whole chr yellow/24",
1720 " keyword whole gmtime yellow/24",
1721 " keyword whole hex yellow/24",
1722 " keyword whole localtime yellow/24",
1723 " keyword whole oct yellow/24",
1724 " keyword whole ord yellow/24",
1725 " keyword whole vec yellow/24",
1726 " keyword whole pack yellow/24",
1727 " keyword whole unpack yellow/24",
1729 " keyword whole chomp yellow/YellowGreen",
1730 " keyword whole chop yellow/YellowGreen",
1731 " keyword whole crypt yellow/YellowGreen",
1732 " keyword whole eval yellow/YellowGreen",
1733 " keyword whole index yellow/YellowGreen",
1734 " keyword whole length yellow/YellowGreen",
1735 " keyword whole lc yellow/YellowGreen",
1736 " keyword whole lcfirst yellow/YellowGreen",
1737 " keyword whole quotemeta yellow/YellowGreen",
1738 " keyword whole rindex yellow/YellowGreen",
1739 " keyword whole substr yellow/YellowGreen",
1740 " keyword whole uc yellow/YellowGreen",
1741 " keyword whole ucfirst yellow/YellowGreen",
1743 " keyword whole delete yellow/24",
1744 " keyword whole each yellow/24",
1745 " keyword whole exists yellow/24",
1746 " keyword whole grep yellow/24",
1747 " keyword whole join yellow/24",
1748 " keyword whole keys yellow/24",
1749 " keyword whole map yellow/24",
1750 " keyword whole pop yellow/24",
1751 " keyword whole push yellow/24",
1752 " keyword whole reverse yellow/24",
1753 " keyword whole scalar yellow/24",
1754 " keyword whole shift yellow/24",
1755 " keyword whole sort yellow/24",
1756 " keyword whole splice yellow/24",
1757 " keyword whole split yellow/24",
1758 " keyword whole unshift yellow/24",
1759 " keyword whole values yellow/24",
1761 " keyword whole chmod yellow/24",
1762 " keyword whole chown yellow/24",
1763 " keyword whole truncate yellow/24",
1764 " keyword whole link yellow/24",
1765 " keyword whole lstat yellow/24",
1766 " keyword whole mkdir yellow/24",
1767 " keyword whole readlink yellow/24",
1768 " keyword whole rename yellow/24",
1769 " keyword whole rmdir yellow/24",
1770 " keyword whole stat yellow/24",
1771 " keyword whole symlink yellow/24",
1772 " keyword whole unlink yellow/24",
1773 " keyword whole utime yellow/24",
1775 " keyword whole binmade yellow/24",
1776 " keyword whole close yellow/24",
1777 " keyword whole dbmclose yellow/24",
1778 " keyword whole dbmopen yellow/24",
1779 " keyword whole binmade yellow/24",
1780 " keyword whole eof yellow/24",
1781 " keyword whole fcntl yellow/24",
1782 " keyword whole fileno yellow/24",
1783 " keyword whole flock yellow/24",
1784 " keyword whole getc yellow/24",
1785 " keyword whole ioctl yellow/24",
1786 " keyword whole open yellow/24",
1787 " keyword whole pipe yellow/24",
1788 " keyword whole print yellow/24",
1789 " keyword whole printf yellow/24",
1790 " keyword whole read yellow/24",
1791 " keyword whole seek yellow/24",
1792 " keyword whole select yellow/24",
1793 " keyword whole sprintf yellow/24",
1794 " keyword whole sysopen yellow/24",
1795 " keyword whole sysread yellow/24",
1796 " keyword whole syswrite yellow/24",
1797 " keyword whole tell yellow/24",
1799 " keyword whole formline yellow/24",
1800 " keyword whole write yellow/24",
1802 " keyword whole closedir yellow/24",
1803 " keyword whole opendir yellow/24",
1804 " keyword whole readdir yellow/24",
1805 " keyword whole rewinddir yellow/24",
1806 " keyword whole seekdir yellow/24",
1807 " keyword whole telldir yellow/24",
1809 " keyword whole alarm yellow/24",
1810 " keyword whole chdir yellow/24",
1811 " keyword whole chroot yellow/24",
1812 " keyword whole die yellow/24",
1813 " keyword whole exec yellow/24",
1814 " keyword whole exit yellow/24",
1815 " keyword whole fork yellow/24",
1816 " keyword whole getlogin yellow/24",
1817 " keyword whole getpgrp yellow/24",
1818 " keyword whole getppid yellow/24",
1819 " keyword whole getpriority yellow/24",
1820 " keyword whole glob yellow/24",
1821 " keyword whole kill yellow/24",
1822 " keyword whole setpgrp yellow/24",
1823 " keyword whole setpriority yellow/24",
1824 " keyword whole sleep yellow/24",
1825 " keyword whole syscall yellow/24",
1826 " keyword whole system yellow/24",
1827 " keyword whole times yellow/24",
1828 " keyword whole umask yellow/24",
1829 " keyword whole wait yellow/24",
1830 " keyword whole waitpid yellow/24",
1831 " keyword whole warn yellow/24",
1833 " keyword whole accept yellow/24",
1834 " keyword whole bind yellow/24",
1835 " keyword whole connect yellow/24",
1836 " keyword whole getpeername yellow/24",
1837 " keyword whole getsockname yellow/24",
1838 " keyword whole getsockopt yellow/24",
1839 " keyword whole listen yellow/24",
1840 " keyword whole recv yellow/24",
1841 " keyword whole send yellow/24",
1842 " keyword whole setsockopt yellow/24",
1843 " keyword whole shutdown yellow/24",
1844 " keyword whole socket yellow/24",
1845 " keyword whole socketpair yellow/24",
1847 " keyword whole msgctl yellow/24",
1848 " keyword whole msgget yellow/24",
1849 " keyword whole msgsnd yellow/24",
1850 " keyword whole msgrcv yellow/24",
1851 " keyword whole semctl yellow/24",
1852 " keyword whole semget yellow/24",
1853 " keyword whole semop yellow/24",
1854 " keyword whole shmctl yellow/24",
1855 " keyword whole shmget yellow/24",
1856 " keyword whole shmread yellow/24",
1857 " keyword whole shmwrite yellow/24",
1859 " keyword whole defined yellow/24",
1860 " keyword whole dump yellow/24",
1861 " keyword whole eval yellow/24",
1862 " keyword whole local yellow/24",
1863 " keyword whole my yellow/24",
1864 " keyword whole ref yellow/24",
1865 " keyword whole reset yellow/24",
1866 " keyword whole scalar yellow/24",
1867 " keyword whole undef yellow/24",
1868 " keyword whole wantarray yellow/24",
1870 " keyword whole endpwent yellow/24",
1871 " keyword whole getpwent yellow/24",
1872 " keyword whole getpwnam yellow/24",
1873 " keyword whole getpwuid yellow/24",
1874 " keyword whole setpwent yellow/24",
1875 " keyword whole endgrent yellow/24",
1876 " keyword whole getgrgid yellow/24",
1877 " keyword whole getgrnam yellow/24",
1878 " keyword whole getgrent yellow/24",
1879 " keyword whole setgrent yellow/24",
1881 " keyword whole endhostent yellow/24",
1882 " keyword whole gethostbyaddr yellow/24",
1883 " keyword whole gethostbyname yellow/24",
1884 " keyword whole gethostent yellow/24",
1885 " keyword whole sethostent yellow/24",
1887 " keyword whole endnetent yellow/24",
1888 " keyword whole getnetbyaddr yellow/24",
1889 " keyword whole getnetbyname yellow/24",
1890 " keyword whole getnetent yellow/24",
1891 " keyword whole setnetent yellow/24",
1892 " keyword whole endservent yellow/24",
1893 " keyword whole getservbyname yellow/24",
1894 " keyword whole getservbyport yellow/24",
1895 " keyword whole getservent yellow/24",
1896 " keyword whole serservent yellow/24",
1897 " keyword whole endprotoent yellow/24",
1898 " keyword whole getprotobyname yellow/24",
1899 " keyword whole getprotobynumber yellow/24",
1900 " keyword whole getprotoent yellow/24",
1901 " keyword whole setprotoent yellow/24",
1903 "context exclusive whole <\\[\\s\\\\\\]EOF EOF green/6",
1904 "context # \\n brown/22",
1905 "context linestart = =cut brown/22",
1906 "context \" \" green/6",
1907 " keyword \\\\\" brightgreen/16",
1908 " keyword \\\\\\\\ brightgreen/16",
1909 "context ' ' brightgreen/16",
1910 " keyword \\\\' green/6",
1911 " keyword \\\\\\\\ green/6",
1913 "context exclusive ` ` white/26 black/0",
1915 "context whole __END__ guacomale_pudding white/26 black/0",
1917 "###############################################################################",
1918 "file ..\\*\\\\.(py|PY])$ Python\\sProgram ^#!\\s\\*/.\\*/python$",
1919 "context default",
1920 " keyword : brightred/18",
1921 " keyword > yellow/24",
1922 " keyword < yellow/24",
1923 " keyword \\+ yellow/24",
1924 " keyword - yellow/24",
1925 " keyword \\* yellow/24",
1926 " keyword / yellow/24",
1927 " keyword % yellow/24",
1928 " keyword = yellow/24",
1929 " keyword != yellow/24",
1930 " keyword == yellow/24",
1931 " keyword { brightcyan/14",
1932 " keyword } brightcyan/14",
1933 " keyword ( brightcyan/15",
1934 " keyword ) brightcyan/15",
1935 " keyword [ brightcyan/14",
1936 " keyword ] brightcyan/14",
1937 " keyword , brightcyan/14",
1938 " keyword : brightcyan/14",
1939 " keyword ; brightmagenta/19",
1940 " keyword whole self brightred/18",
1941 " keyword whole access yellow/24",
1942 " keyword whole and yellow/24",
1943 " keyword whole break yellow/24",
1944 " keyword whole class yellow/24",
1945 " keyword whole continue yellow/24",
1946 " keyword whole def yellow/24",
1947 " keyword whole del yellow/24",
1948 " keyword whole elif yellow/24",
1949 " keyword whole else yellow/24",
1950 " keyword whole except yellow/24",
1951 " keyword whole exec yellow/24",
1952 " keyword whole finally yellow/24",
1953 " keyword whole for yellow/24",
1954 " keyword whole from yellow/24",
1955 " keyword whole global yellow/24",
1956 " keyword whole if yellow/24",
1957 " keyword whole import yellow/24",
1958 " keyword whole in yellow/24",
1959 " keyword whole is yellow/24",
1960 " keyword whole lambda yellow/24",
1961 " keyword whole not yellow/24",
1962 " keyword whole or yellow/24",
1963 " keyword whole pass yellow/24",
1964 " keyword whole print yellow/24",
1965 " keyword whole raise yellow/24",
1966 " keyword whole return yellow/24",
1967 " keyword whole try yellow/24",
1968 " keyword whole while yellow/24",
1970 " keyword whole abs brightcyan/17",
1971 " keyword whole apply brightcyan/17",
1972 " keyword whole callable brightcyan/17",
1973 " keyword whole chr brightcyan/17",
1974 " keyword whole cmp brightcyan/17",
1975 " keyword whole coerce brightcyan/17",
1976 " keyword whole compile brightcyan/17",
1977 " keyword whole delattr brightcyan/17",
1978 " keyword whole dir brightcyan/17",
1979 " keyword whole divmod brightcyan/17",
1980 " keyword whole eval brightcyan/17",
1981 " keyword whole exec brightcyan/17",
1982 " keyword whole execfile brightcyan/17",
1983 " keyword whole filter brightcyan/17",
1984 " keyword whole float brightcyan/17",
1985 " keyword whole getattr brightcyan/17",
1986 " keyword whole globals brightcyan/17",
1987 " keyword whole hasattr brightcyan/17",
1988 " keyword whole hash brightcyan/17",
1989 " keyword whole hex brightcyan/17",
1990 " keyword whole id brightcyan/17",
1991 " keyword whole input brightcyan/17",
1992 " keyword whole int brightcyan/17",
1993 " keyword whole len brightcyan/17",
1994 " keyword whole locals brightcyan/17",
1995 " keyword whole long brightcyan/17",
1996 " keyword whole map brightcyan/17",
1997 " keyword whole max brightcyan/17",
1998 " keyword whole min brightcyan/17",
1999 " keyword whole oct brightcyan/17",
2000 " keyword whole open brightcyan/17",
2001 " keyword whole ord brightcyan/17",
2002 " keyword whole pow brightcyan/17",
2003 " keyword whole range brightcyan/17",
2004 " keyword whole raw_input brightcyan/17",
2005 " keyword whole reduce brightcyan/17",
2006 " keyword whole reload brightcyan/17",
2007 " keyword whole repr brightcyan/17",
2008 " keyword whole round brightcyan/17",
2009 " keyword whole setattr brightcyan/17",
2010 " keyword whole str brightcyan/17",
2011 " keyword whole tuple brightcyan/17",
2012 " keyword whole type brightcyan/17",
2013 " keyword whole vars brightcyan/17",
2014 " keyword whole xrange brightcyan/17",
2016 " keyword whole atof magenta/23",
2017 " keyword whole atoi magenta/23",
2018 " keyword whole atol magenta/23",
2019 " keyword whole expandtabs magenta/23",
2020 " keyword whole find magenta/23",
2021 " keyword whole rfind magenta/23",
2022 " keyword whole index magenta/23",
2023 " keyword whole rindex magenta/23",
2024 " keyword whole count magenta/23",
2025 " keyword whole split magenta/23",
2026 " keyword whole splitfields magenta/23",
2027 " keyword whole join magenta/23",
2028 " keyword whole joinfields magenta/23",
2029 " keyword whole strip magenta/23",
2030 " keyword whole swapcase magenta/23",
2031 " keyword whole upper magenta/23",
2032 " keyword whole lower magenta/23",
2033 " keyword whole ljust magenta/23",
2034 " keyword whole rjust magenta/23",
2035 " keyword whole center magenta/23",
2036 " keyword whole zfill magenta/23",
2038 " keyword whole __init__ lightgray/13",
2039 " keyword whole __del__ lightgray/13",
2040 " keyword whole __repr__ lightgray/13",
2041 " keyword whole __str__ lightgray/13",
2042 " keyword whole __cmp__ lightgray/13",
2043 " keyword whole __hash__ lightgray/13",
2044 " keyword whole __call__ lightgray/13",
2045 " keyword whole __getattr__ lightgray/13",
2046 " keyword whole __setattr__ lightgray/13",
2047 " keyword whole __delattr__ lightgray/13",
2048 " keyword whole __len__ lightgray/13",
2049 " keyword whole __getitem__ lightgray/13",
2050 " keyword whole __setitem__ lightgray/13",
2051 " keyword whole __delitem__ lightgray/13",
2052 " keyword whole __getslice__ lightgray/13",
2053 " keyword whole __setslice__ lightgray/13",
2054 " keyword whole __delslice__ lightgray/13",
2055 " keyword whole __add__ lightgray/13",
2056 " keyword whole __sub__ lightgray/13",
2057 " keyword whole __mul__ lightgray/13",
2058 " keyword whole __div__ lightgray/13",
2059 " keyword whole __mod__ lightgray/13",
2060 " keyword whole __divmod__ lightgray/13",
2061 " keyword whole __pow__ lightgray/13",
2062 " keyword whole __lshift__ lightgray/13",
2063 " keyword whole __rshift__ lightgray/13",
2064 " keyword whole __and__ lightgray/13",
2065 " keyword whole __xor__ lightgray/13",
2066 " keyword whole __or__ lightgray/13",
2067 " keyword whole __neg__ lightgray/13",
2068 " keyword whole __pos__ lightgray/13",
2069 " keyword whole __abs__ lightgray/13",
2070 " keyword whole __invert__ lightgray/13",
2071 " keyword whole __nonzero__ lightgray/13",
2072 " keyword whole __coerce__ lightgray/13",
2073 " keyword whole __int__ lightgray/13",
2074 " keyword whole __long__ lightgray/13",
2075 " keyword whole __float__ lightgray/13",
2076 " keyword whole __oct__ lightgray/13",
2077 " keyword whole __hex__ lightgray/13",
2079 " keyword whole __init__ lightgray/13",
2080 " keyword whole __del__ lightgray/13",
2081 " keyword whole __repr__ lightgray/13",
2082 " keyword whole __str__ lightgray/13",
2083 " keyword whole __cmp__ lightgray/13",
2084 " keyword whole __hash__ lightgray/13",
2085 " keyword whole __call__ lightgray/13",
2086 " keyword whole __getattr__ lightgray/13",
2087 " keyword whole __setattr__ lightgray/13",
2088 " keyword whole __delattr__ lightgray/13",
2089 " keyword whole __len__ lightgray/13",
2090 " keyword whole __getitem__ lightgray/13",
2091 " keyword whole __setitem__ lightgray/13",
2092 " keyword whole __delitem__ lightgray/13",
2093 " keyword whole __getslice__ lightgray/13",
2094 " keyword whole __setslice__ lightgray/13",
2095 " keyword whole __delslice__ lightgray/13",
2096 " keyword whole __add__ lightgray/13",
2097 " keyword whole __sub__ lightgray/13",
2098 " keyword whole __mul__ lightgray/13",
2099 " keyword whole __div__ lightgray/13",
2100 " keyword whole __mod__ lightgray/13",
2101 " keyword whole __divmod__ lightgray/13",
2102 " keyword whole __pow__ lightgray/13",
2103 " keyword whole __lshift__ lightgray/13",
2104 " keyword whole __rshift__ lightgray/13",
2105 " keyword whole __and__ lightgray/13",
2106 " keyword whole __xor__ lightgray/13",
2107 " keyword whole __or__ lightgray/13",
2108 " keyword whole __neg__ lightgray/13",
2109 " keyword whole __pos__ lightgray/13",
2110 " keyword whole __abs__ lightgray/13",
2111 " keyword whole __invert__ lightgray/13",
2112 " keyword whole __nonzero__ lightgray/13",
2113 " keyword whole __coerce__ lightgray/13",
2114 " keyword whole __int__ lightgray/13",
2115 " keyword whole __long__ lightgray/13",
2116 " keyword whole __float__ lightgray/13",
2117 " keyword whole __oct__ lightgray/13",
2118 " keyword whole __hex__ lightgray/13",
2120 " keyword whole __radd__ lightgray/13",
2121 " keyword whole __rsub__ lightgray/13",
2122 " keyword whole __rmul__ lightgray/13",
2123 " keyword whole __rdiv__ lightgray/13",
2124 " keyword whole __rmod__ lightgray/13",
2125 " keyword whole __rdivmod__ lightgray/13",
2126 " keyword whole __rpow__ lightgray/13",
2127 " keyword whole __rlshift__ lightgray/13",
2128 " keyword whole __rrshift__ lightgray/13",
2129 " keyword whole __rand__ lightgray/13",
2130 " keyword whole __rxor__ lightgray/13",
2131 " keyword whole __ror__ lightgray/13",
2133 " keyword whole __*__ brightred/18",
2135 "context \"\"\" \"\"\" brown/22",
2136 "context # \\n brown/22",
2137 "context \" \" green/6",
2138 " keyword \\\\\" brightgreen/16",
2139 " keyword %% brightgreen/16",
2140 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]e brightgreen/16",
2141 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]E brightgreen/16",
2142 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]f brightgreen/16",
2143 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]g brightgreen/16",
2144 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]G brightgreen/16",
2145 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]d brightgreen/16",
2146 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]i brightgreen/16",
2147 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]o brightgreen/16",
2148 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]u brightgreen/16",
2149 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]x brightgreen/16",
2150 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]X brightgreen/16",
2151 " keyword %\\[hl\\]n brightgreen/16",
2152 " keyword %\\[.\\]\\[0123456789\\]s brightgreen/16",
2153 " keyword %[*] brightgreen/16",
2154 " keyword %c brightgreen/16",
2155 " keyword \\\\\\\\ brightgreen/16",
2156 " keyword \\\\' brightgreen/16",
2157 " keyword \\\\a brightgreen/16",
2158 " keyword \\\\b brightgreen/16",
2159 " keyword \\\\t brightgreen/16",
2160 " keyword \\\\n brightgreen/16",
2161 " keyword \\\\v brightgreen/16",
2162 " keyword \\\\f brightgreen/16",
2163 " keyword \\\\r brightgreen/16",
2164 " keyword \\\\0 brightgreen/16",
2166 "context ' ' green/6",
2167 " keyword \\\\\" brightgreen/16",
2168 " keyword %% brightgreen/16",
2169 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]e brightgreen/16",
2170 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]E brightgreen/16",
2171 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]f brightgreen/16",
2172 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]g brightgreen/16",
2173 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]G brightgreen/16",
2174 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]d brightgreen/16",
2175 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]i brightgreen/16",
2176 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]o brightgreen/16",
2177 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]u brightgreen/16",
2178 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]x brightgreen/16",
2179 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]X brightgreen/16",
2180 " keyword %\\[hl\\]n brightgreen/16",
2181 " keyword %\\[.\\]\\[0123456789\\]s brightgreen/16",
2182 " keyword %[*] brightgreen/16",
2183 " keyword %c brightgreen/16",
2184 " keyword \\\\\\\\ brightgreen/16",
2185 " keyword \\\\' brightgreen/16",
2186 " keyword \\\\a brightgreen/16",
2187 " keyword \\\\b brightgreen/16",
2188 " keyword \\\\t brightgreen/16",
2189 " keyword \\\\n brightgreen/16",
2190 " keyword \\\\v brightgreen/16",
2191 " keyword \\\\f brightgreen/16",
2192 " keyword \\\\r brightgreen/16",
2193 " keyword \\\\0 brightgreen/16",
2195 "###############################################################################",
2196 "file ..\\*\\\\.(man|[0-9n]|[0-9]x)$ NROFF\\sSource",
2198 "context default",
2199 " keyword \\\\fP brightgreen/6",
2200 " keyword \\\\fR brightgreen/6",
2201 " keyword \\\\fB brightgreen/6",
2202 " keyword \\\\fI brightgreen/6",
2203 " keyword linestart .AS cyan/5",
2204 " keyword linestart .Ar cyan/5",
2205 " keyword linestart .At cyan/5",
2206 " keyword linestart .BE cyan/5",
2207 " keyword linestart .BH cyan/5",
2208 " keyword linestart .BI cyan/5",
2209 " keyword linestart .BR cyan/5",
2210 " keyword linestart .BS cyan/5",
2211 " keyword linestart .Bd cyan/5",
2212 " keyword linestart .Bk cyan/5",
2213 " keyword linestart .Bl cyan/5",
2214 " keyword linestart .Bu cyan/5",
2215 " keyword linestart .Bx cyan/5",
2216 " keyword linestart .CE cyan/5",
2217 " keyword linestart .CM cyan/5",
2218 " keyword linestart .CS cyan/5",
2219 " keyword linestart .CT cyan/5",
2220 " keyword linestart .CW cyan/5",
2221 " keyword linestart .Cm cyan/5",
2222 " keyword linestart .Co cyan/5",
2223 " keyword linestart .DA cyan/5",
2224 " keyword linestart .DE cyan/5",
2225 " keyword linestart .DS cyan/5",
2226 " keyword linestart .DT cyan/5",
2227 " keyword linestart .Dd cyan/5",
2228 " keyword linestart .De cyan/5",
2229 " keyword linestart .Dl cyan/5",
2230 " keyword linestart .Dq cyan/5",
2231 " keyword linestart .Ds cyan/5",
2232 " keyword linestart .Dt cyan/5",
2233 " keyword linestart .Dv cyan/5",
2234 " keyword linestart .EE cyan/5",
2235 " keyword linestart .EN cyan/5",
2236 " keyword linestart .EQ cyan/5",
2237 " keyword linestart .EX cyan/5",
2238 " keyword linestart .Ed cyan/5",
2239 " keyword linestart .Ee cyan/5",
2240 " keyword linestart .Ek cyan/5",
2241 " keyword linestart .El cyan/5",
2242 " keyword linestart .Em cyan/5",
2243 " keyword linestart .En cyan/5",
2244 " keyword linestart .Ev cyan/5",
2245 " keyword linestart .Ex cyan/5",
2246 " keyword linestart .FI cyan/5",
2247 " keyword linestart .FL cyan/5",
2248 " keyword linestart .FN cyan/5",
2249 " keyword linestart .FT cyan/5",
2250 " keyword linestart .Fi cyan/5",
2251 " keyword linestart .Fl cyan/5",
2252 " keyword linestart .Fn cyan/5",
2253 " keyword linestart .HP cyan/5",
2254 " keyword linestart .HS cyan/5",
2255 " keyword linestart .Hh cyan/5",
2256 " keyword linestart .Hi cyan/5",
2257 " keyword linestart .IB cyan/5",
2258 " keyword linestart .IP cyan/5",
2259 " keyword linestart .IR cyan/5",
2260 " keyword linestart .IX cyan/5",
2261 " keyword linestart .Ic cyan/5",
2262 " keyword linestart .Id cyan/5",
2263 " keyword linestart .Ip cyan/5",
2264 " keyword linestart .It cyan/5",
2265 " keyword linestart .LI cyan/5",
2266 " keyword linestart .LO cyan/5",
2267 " keyword linestart .LP cyan/5",
2268 " keyword linestart .LR cyan/5",
2269 " keyword linestart .Li cyan/5",
2270 " keyword linestart .MF cyan/5",
2271 " keyword linestart .ML cyan/5",
2272 " keyword linestart .MU cyan/5",
2273 " keyword linestart .MV cyan/5",
2274 " keyword linestart .N cyan/5",
2275 " keyword linestart .NF cyan/5",
2276 " keyword linestart .Nd cyan/5",
2277 " keyword linestart .Nm cyan/5",
2278 " keyword linestart .No cyan/5",
2279 " keyword linestart .OP cyan/5",
2280 " keyword linestart .Oc cyan/5",
2281 " keyword linestart .Oo cyan/5",
2282 " keyword linestart .Op cyan/5",
2283 " keyword linestart .Os cyan/5",
2284 " keyword linestart .PD cyan/5",
2285 " keyword linestart .PN cyan/5",
2286 " keyword linestart .PP cyan/5",
2287 " keyword linestart .PU cyan/5",
2288 " keyword linestart .Pa cyan/5",
2289 " keyword linestart .Pf cyan/5",
2290 " keyword linestart .Pp cyan/5",
2291 " keyword linestart .Pq cyan/5",
2292 " keyword linestart .Pr cyan/5",
2293 " keyword linestart .Ps cyan/5",
2294 " keyword linestart .Ql cyan/5",
2295 " keyword linestart .RB cyan/5",
2296 " keyword linestart .RE cyan/5",
2297 " keyword linestart .RI cyan/5",
2298 " keyword linestart .RS cyan/5",
2299 " keyword linestart .RT cyan/5",
2300 " keyword linestart .Re cyan/5",
2301 " keyword linestart .Rs cyan/5",
2302 " keyword linestart .SB cyan/5",
2303 " keyword linestart .SH cyan/5",
2304 " keyword linestart .SM cyan/5",
2305 " keyword linestart .SP cyan/5",
2306 " keyword linestart .SS cyan/5",
2307 " keyword linestart .Sa cyan/5",
2308 " keyword linestart .Sh cyan/5",
2309 " keyword linestart .Sm cyan/5",
2310 " keyword linestart .Sp cyan/5",
2311 " keyword linestart .Sq cyan/5",
2312 " keyword linestart .Ss cyan/5",
2313 " keyword linestart .St cyan/5",
2314 " keyword linestart .Sx cyan/5",
2315 " keyword linestart .Sy cyan/5",
2316 " keyword linestart .TE cyan/5",
2317 " keyword linestart .TH cyan/5",
2318 " keyword linestart .TP cyan/5",
2319 " keyword linestart .TQ cyan/5",
2320 " keyword linestart .TS cyan/5",
2321 " keyword linestart .Tn cyan/5",
2322 " keyword linestart .Tp cyan/5",
2323 " keyword linestart .UC cyan/5",
2324 " keyword linestart .Uh cyan/5",
2325 " keyword linestart .Ux cyan/5",
2326 " keyword linestart .VE cyan/5",
2327 " keyword linestart .VS cyan/5",
2328 " keyword linestart .Va cyan/5",
2329 " keyword linestart .Vb cyan/5",
2330 " keyword linestart .Ve cyan/5",
2331 " keyword linestart .Xc cyan/5",
2332 " keyword linestart .Xe cyan/5",
2333 " keyword linestart .Xr cyan/5",
2334 " keyword linestart .YN cyan/5",
2335 " keyword linestart .ad cyan/5",
2336 " keyword linestart .am cyan/5",
2337 " keyword linestart .bd cyan/5",
2338 " keyword linestart .bp cyan/5",
2339 " keyword linestart .br cyan/5",
2340 " keyword linestart .ce cyan/5",
2341 " keyword linestart .cs cyan/5",
2342 " keyword linestart .de cyan/5",
2343 " keyword linestart .ds cyan/5",
2344 " keyword linestart .ec cyan/5",
2345 " keyword linestart .eh cyan/5",
2346 " keyword linestart .el cyan/5",
2347 " keyword linestart .eo cyan/5",
2348 " keyword linestart .ev cyan/5",
2349 " keyword linestart .fc cyan/5",
2350 " keyword linestart .fi cyan/5",
2351 " keyword linestart .ft cyan/5",
2352 " keyword linestart .hy cyan/5",
2353 " keyword linestart .iX cyan/5",
2354 " keyword linestart .ie cyan/5",
2355 " keyword linestart .if cyan/5",
2356 " keyword linestart .ig cyan/5",
2357 " keyword linestart .in cyan/5",
2358 " keyword linestart .ll cyan/5",
2359 " keyword linestart .lp cyan/5",
2360 " keyword linestart .ls cyan/5",
2361 " keyword linestart .mk cyan/5",
2362 " keyword linestart .na cyan/5",
2363 " keyword linestart .ne cyan/5",
2364 " keyword linestart .nf cyan/5",
2365 " keyword linestart .nh cyan/5",
2366 " keyword linestart .nr cyan/5",
2367 " keyword linestart .ns cyan/5",
2368 " keyword linestart .oh cyan/5",
2369 " keyword linestart .ps cyan/5",
2370 " keyword linestart .re cyan/5",
2371 " keyword linestart .rm cyan/5",
2372 " keyword linestart .rn cyan/5",
2373 " keyword linestart .rr cyan/5",
2374 " keyword linestart .so cyan/5",
2375 " keyword linestart .sp cyan/5",
2376 " keyword linestart .ss cyan/5",
2377 " keyword linestart .ta cyan/5",
2378 " keyword linestart .ti cyan/5",
2379 " keyword linestart .tm cyan/5",
2380 " keyword linestart .tr cyan/5",
2381 " keyword linestart .ul cyan/5",
2382 " keyword linestart .vs cyan/5",
2383 " keyword linestart .zZ cyan/5",
2384 " keyword linestart .e cyan/5",
2385 " keyword linestart .d cyan/5",
2386 " keyword linestart .h cyan/5",
2387 " keyword linestart .B cyan/5",
2388 " keyword linestart .I cyan/5",
2389 " keyword linestart .R cyan/5",
2390 " keyword linestart .P cyan/5",
2391 " keyword linestart .L cyan/5",
2392 " keyword linestart .V cyan/5",
2393 " keyword linestart .F cyan/5",
2394 " keyword linestart .T cyan/5",
2395 " keyword linestart .X cyan/5",
2396 " keyword linestart .Y cyan/5",
2397 " keyword linestart .b cyan/5",
2398 " keyword linestart .l cyan/5",
2399 " keyword linestart .i cyan/5",
2401 "context exclusive linestart .SH \\n brightred/18",
2402 "context exclusive linestart .TH \\n brightred/18",
2403 "context exclusive linestart .B \\n magenta/23",
2404 "context exclusive linestart .I \\n yellow/24",
2405 "context exclusive linestart .nf linestart .fi green/15",
2407 "# font changes should end in a \\fP",
2408 "context exclusive \\\\fB \\\\fP magenta/23",
2409 "context exclusive \\\\fI \\\\fP yellow/24",
2410 "context linestart .\\\\\" \\n brown/22",
2412 "###############################################################################",
2413 "# Assumes you've set a dark background, e.g. navy blue.",
2414 "file ..\\*\\\\.(htm|html|HTM|HTML)$ HTML\\sFile",
2416 "context default white/25",
2417 " keyword whole &*; brightgreen/16",
2418 "context <!-- --> white/26",
2419 "context < > brightcyan/17",
2420 " keyword \"http:*\" magenta/22",
2421 " keyword \"ftp:*\" magenta/22",
2422 " keyword \"mailto:*\" magenta/22",
2423 " keyword \"gopher:*\" magenta/22",
2424 " keyword \"telnet:*\" magenta/22",
2425 " keyword \"file:*\" magenta/22",
2426 " keyword \"*.gif\" brightred/19",
2427 " keyword \"*.jpg\" brightred/19",
2428 " keyword \"*.png\" brightred/19",
2429 " keyword \"*\" cyan/5",
2431 "###############################################################################",
2432 "# Pascal (BP7 IDE alike)",
2433 "file ..\\*\\\\.(pp|PP|pas|PAS)$ Pascal Program",
2434 "context default yellow/24",
2435 " keyword whole absolute white/25",
2436 " keyword whole and white/25",
2437 " keyword whole array white/25",
2438 " keyword whole as white/25",
2439 " keyword whole asm white/25",
2440 " keyword whole assembler white/25",
2441 " keyword whole begin white/25",
2442 " keyword whole break white/25",
2443 " keyword whole case white/25",
2444 " keyword whole class white/25",
2445 " keyword whole const white/25",
2446 " keyword whole continue white/25",
2447 " keyword whole constructor white/25",
2448 " keyword whole destructor white/25",
2449 " keyword whole dispose white/25",
2450 " keyword whole div white/25",
2451 " keyword whole do white/25",
2452 " keyword whole downto white/25",
2453 " keyword whole else white/25",
2454 " keyword whole end white/25",
2455 " keyword whole except white/25",
2456 " keyword whole exit white/25",
2457 " keyword whole export white/25",
2458 " keyword whole exports white/25",
2459 " keyword whole external white/25",
2460 " keyword whole fail white/25",
2461 " keyword whole far white/25",
2462 " keyword whole false white/25",
2463 " keyword whole file white/25",
2464 " keyword whole finally white/25",
2465 " keyword whole for white/25",
2466 " keyword whole forward white/25",
2467 " keyword whole function white/25",
2468 " keyword whole goto white/25",
2469 " keyword whole if white/25",
2470 " keyword whole implementation white/25",
2471 " keyword whole in white/25",
2472 " keyword whole inherited white/25",
2473 " keyword whole initialization white/25",
2474 " keyword whole inline white/25",
2475 " keyword whole interface white/25",
2476 " keyword whole interrupt white/25",
2477 " keyword whole is white/25",
2478 " keyword whole label white/25",
2479 " keyword whole library white/25",
2480 " keyword whole mod white/25",
2481 " keyword whole near white/25",
2482 " keyword whole new white/25",
2483 " keyword whole nil white/25",
2484 " keyword whole not white/25",
2485 " keyword whole object white/25",
2486 " keyword whole of white/25",
2487 " keyword whole on white/25",
2488 " keyword whole operator white/25",
2489 " keyword whole or white/25",
2490 " keyword whole otherwise white/25",
2491 " keyword whole packed white/25",
2492 " keyword whole procedure white/25",
2493 " keyword whole program white/25",
2494 " keyword whole property white/25",
2495 " keyword whole raise white/25",
2496 " keyword whole record white/25",
2497 " keyword whole repeat white/25",
2498 " keyword whole self white/25",
2499 " keyword whole set white/25",
2500 " keyword whole shl white/25",
2501 " keyword whole shr white/25",
2502 " keyword whole string white/25",
2503 " keyword whole then white/25",
2504 " keyword whole to white/25",
2505 " keyword whole true white/25",
2506 " keyword whole try white/25",
2507 " keyword whole type white/25",
2508 " keyword whole unit white/25",
2509 " keyword whole until white/25",
2510 " keyword whole uses white/25",
2511 " keyword whole var white/25",
2512 " keyword whole virtual white/25",
2513 " keyword whole while white/25",
2514 " keyword whole with white/25",
2515 " keyword whole xor white/25",
2516 " keyword whole .. white/25",
2517 " ",
2518 " keyword > cyan/5",
2519 " keyword < cyan/5",
2520 " keyword \\+ cyan/5",
2521 " keyword - cyan/5",
2522 " keyword / cyan/5",
2523 " keyword % cyan/5",
2524 " keyword = cyan/5",
2525 " keyword [ cyan/5",
2526 " keyword ] cyan/5",
2527 " keyword ( cyan/5",
2528 " keyword ) cyan/5",
2529 " keyword , cyan/5",
2530 " keyword . cyan/5",
2531 " keyword : cyan/5",
2532 " keyword ; cyan/5",
2533 " keyword {$*} brightred/19",
2535 "context ' ' brightcyan/22",
2536 "context // \\n brown/22",
2537 "context (\\* \\*) brown/22",
2538 "# context {$ } brightred/19",
2539 "# keyword \\[ABCDEFGHIJKLMNOPQRSTUVWXYZ\\]\\[-\\+\\] brightgreen/16",
2540 "# keyword $* brightgreen/16",
2541 "context { } lightgray/22",
2544 "###############################################################################",
2545 "file ..\\*\\\\.tex$ LaTeX\\s2.09\\sDocument",
2546 "context default",
2547 "wholechars left \\\\ ",
2548 "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
2550 "# type style",
2551 " keyword whole \\\\tiny yellow/24",
2552 " keyword whole \\\\scriptsize yellow/24",
2553 " keyword whole \\\\footnotesize yellow/24",
2554 " keyword whole \\\\small yellow/24",
2555 " keyword whole \\\\normalsize yellow/24",
2556 " keyword whole \\\\large yellow/24",
2557 " keyword whole \\\\Large yellow/24",
2558 " keyword whole \\\\LARGE yellow/24",
2559 " keyword whole \\\\huge yellow/24",
2560 " keyword whole \\\\Huge yellow/24",
2562 "# accents and symbols",
2563 " keyword whole \\\\`{\\[aeiouAEIOU\\]} yellow/24",
2564 " keyword whole \\\\'{\\[aeiouAEIOU\\]} yellow/24",
2565 " keyword whole \\\\^{\\[aeiouAEIOU\\]} yellow/24",
2566 " keyword whole \\\\\"{\\[aeiouAEIOU\\]} yellow/24",
2567 " keyword whole \\\\~{\\[aeiouAEIOU\\]} yellow/24",
2568 " keyword whole \\\\={\\[aeiouAEIOU\\]} yellow/24",
2569 " keyword whole \\\\.{\\[aeiouAEIOU\\]} yellow/24",
2570 " keyword whole \\\\u{\\[aeiouAEIOU\\]} yellow/24",
2571 " keyword whole \\\\v{\\[aeiouAEIOU\\]} yellow/24",
2572 " keyword whole \\\\H{\\[aeiouAEIOU\\]} yellow/24",
2573 " keyword whole \\\\t{\\[aeiouAEIOU\\]} yellow/24",
2574 " keyword whole \\\\c{\\[aeiouAEIOU\\]} yellow/24",
2575 " keyword whole \\\\d{\\[aeiouAEIOU\\]} yellow/24",
2576 " keyword whole \\\\b{\\[aeiouAEIOU\\]} yellow/24",
2578 " keyword whole \\\\dag yellow/24",
2579 " keyword whole \\\\ddag yellow/24",
2580 " keyword whole \\\\S yellow/24",
2581 " keyword whole \\\\P yellow/24",
2582 " keyword whole \\\\copyright yellow/24",
2583 " keyword whole \\\\pounds yellow/24",
2585 "# sectioning and table of contents",
2586 " keyword whole \\\\part[*]{*} brightred/19",
2587 " keyword whole \\\\part{*} brightred/19",
2588 " keyword whole \\\\part\\*{*} brightred/19",
2589 " keyword whole \\\\chapter[*]{*} brightred/19",
2590 " keyword whole \\\\chapter{*} brightred/19",
2591 " keyword whole \\\\chapter\\*{*} brightred/19",
2592 " keyword whole \\\\section[*]{*} brightred/19",
2593 " keyword whole \\\\section{*} brightred/19",
2594 " keyword whole \\\\section\\*{*} brightred/19",
2595 " keyword whole \\\\subsection[*]{*} brightred/19",
2596 " keyword whole \\\\subsection{*} brightred/19",
2597 " keyword whole \\\\subsection\\*{*} brightred/19",
2598 " keyword whole \\\\subsubsection[*]{*} brightred/19",
2599 " keyword whole \\\\subsubsection{*} brightred/19",
2600 " keyword whole \\\\subsubsection\\*{*} brightred/19",
2601 " keyword whole \\\\paragraph[*]{*} brightred/19",
2602 " keyword whole \\\\paragraph{*} brightred/19",
2603 " keyword whole \\\\paragraph\\*{*} brightred/19",
2604 " keyword whole \\\\subparagraph[*]{*} brightred/19",
2605 " keyword whole \\\\subparagraph{*} brightred/19",
2606 " keyword whole \\\\subparagraph\\*{*} brightred/19",
2608 " keyword whole \\\\appendix brightred/19",
2609 " keyword whole \\\\tableofcontents brightred/19",
2611 "# misc",
2612 " keyword whole \\\\item[*] yellow/24",
2613 " keyword whole \\\\item yellow/24",
2614 " keyword whole \\\\\\\\ yellow/24",
2615 " keyword \\\\\\s yellow/24 black/0",
2616 " keyword %% yellow/24",
2618 "# docuement and page styles ",
2619 " keyword whole \\\\documentstyle[*]{*} yellow/20",
2620 " keyword whole \\\\documentstyle{*} yellow/20",
2621 " keyword whole \\\\pagestyle{*} yellow/20",
2623 "# cross references",
2624 " keyword whole \\\\label{*} yellow/24",
2625 " keyword whole \\\\ref{*} yellow/24",
2627 "# bibliography and citations",
2628 " keyword whole \\\\bibliography{*} yellow/24",
2629 " keyword whole \\\\bibitem[*]{*} yellow/24",
2630 " keyword whole \\\\bibitem{*} yellow/24",
2631 " keyword whole \\\\cite[*]{*} yellow/24",
2632 " keyword whole \\\\cite{*} yellow/24",
2634 "# splitting the input",
2635 " keyword whole \\\\input{*} yellow/20",
2636 " keyword whole \\\\include{*} yellow/20",
2637 " keyword whole \\\\includeonly{*} yellow/20",
2639 "# line breaking",
2640 " keyword whole \\\\linebreak[\\[01234\\]] yellow/24",
2641 " keyword whole \\\\nolinebreak[\\[01234\\]] yellow/24",
2642 " keyword whole \\\\linebreak yellow/24",
2643 " keyword whole \\\\nolinebreak yellow/24",
2644 " keyword whole \\\\[+] yellow/24",
2645 " keyword whole \\\\- yellow/24",
2646 " keyword whole \\\\sloppy yellow/24",
2648 "# page breaking",
2649 " keyword whole \\\\pagebreak[\\[01234\\]] yellow/24",
2650 " keyword whole \\\\nopagebreak[\\[01234\\]] yellow/24",
2651 " keyword whole \\\\pagebreak yellow/24",
2652 " keyword whole \\\\nopagebreak yellow/24",
2653 " keyword whole \\\\samepage yellow/24",
2654 " keyword whole \\\\newpage yellow/24",
2655 " keyword whole \\\\clearpage yellow/24",
2657 "# defintiions",
2658 " keyword \\\\newcommand{*}[*] cyan/5",
2659 " keyword \\\\newcommand{*} cyan/5",
2660 " keyword \\\\newenvironment{*}[*]{*} cyan/5",
2661 " keyword \\\\newenvironment{*}{*} cyan/5",
2663 "# boxes",
2665 "# begins and ends",
2666 " keyword \\\\begin{document} brightred/14",
2667 " keyword \\\\begin{equation} brightred/14",
2668 " keyword \\\\begin{eqnarray} brightred/14",
2669 " keyword \\\\begin{quote} brightred/14",
2670 " keyword \\\\begin{quotation} brightred/14",
2671 " keyword \\\\begin{center} brightred/14",
2672 " keyword \\\\begin{verse} brightred/14",
2673 " keyword \\\\begin{verbatim} brightred/14",
2674 " keyword \\\\begin{itemize} brightred/14",
2675 " keyword \\\\begin{enumerate} brightred/14",
2676 " keyword \\\\begin{description} brightred/14",
2677 " keyword \\\\begin{list} brightred/14",
2678 " keyword \\\\begin{array} brightred/14",
2679 " keyword \\\\begin{tabular} brightred/14",
2680 " keyword \\\\begin{thebibliography}{*} brightred/14",
2681 " keyword \\\\begin{sloppypar} brightred/14",
2683 " keyword \\\\end{document} brightred/14",
2684 " keyword \\\\end{equation} brightred/14",
2685 " keyword \\\\end{eqnarray} brightred/14",
2686 " keyword \\\\end{quote} brightred/14",
2687 " keyword \\\\end{quotation} brightred/14",
2688 " keyword \\\\end{center} brightred/14",
2689 " keyword \\\\end{verse} brightred/14",
2690 " keyword \\\\end{verbatim} brightred/14",
2691 " keyword \\\\end{itemize} brightred/14",
2692 " keyword \\\\end{enumerate} brightred/14",
2693 " keyword \\\\end{description} brightred/14",
2694 " keyword \\\\end{list} brightred/14",
2695 " keyword \\\\end{array} brightred/14",
2696 " keyword \\\\end{tabular} brightred/14",
2697 " keyword \\\\end{thebibliography}{*} brightred/14",
2698 " keyword \\\\end{sloppypar} brightred/14",
2700 " keyword \\\\begin{*} brightcyan/16",
2701 " keyword \\\\end{*} brightcyan/16",
2703 " keyword \\\\theorem{*}{*} yellow/24",
2705 "# if all else fails",
2706 " keyword whole \\\\+[*]{*}{*}{*} brightcyan/17",
2707 " keyword whole \\\\+[*]{*}{*} brightcyan/17",
2708 " keyword whole \\\\+{*}{*}{*}{*} brightcyan/17",
2709 " keyword whole \\\\+{*}{*}{*} brightcyan/17",
2710 " keyword whole \\\\+{*}{*} brightcyan/17",
2711 " keyword whole \\\\+{*} brightcyan/17",
2712 " keyword \\\\\\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\]\\n brightcyan/17",
2713 " keyword \\\\\\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\]\\s brightcyan/17",
2714 " keyword \\\\\\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\]\\t brightcyan/17",
2716 "context \\\\pagenumbering{ } yellow/20",
2717 " keyword arabic brightcyan/17",
2718 " keyword roman brightcyan/17",
2719 " keyword alph brightcyan/17",
2720 " keyword Roman brightcyan/17",
2721 " keyword Alph brightcyan/17",
2723 "context % \\n brown/22",
2725 "# mathematical formulas",
2726 "context $ $ brightgreen/6",
2727 "context exclusive \\\\begin{equation} \\\\end{equation} brightgreen/6",
2728 "context exclusive \\\\begin{eqnarray} \\\\end{eqnarray} brightgreen/6",
2731 "###############################################################################",
2732 "file ..\\*\\\\.([chC]|CC|cxx|cc|cpp|CPP|CXX)$ C/C\\+\\+\\sProgram",
2733 "context default",
2734 " keyword whole auto yellow/24",
2735 " keyword whole break yellow/24",
2736 " keyword whole case yellow/24",
2737 " keyword whole char yellow/24",
2738 " keyword whole const yellow/24",
2739 " keyword whole continue yellow/24",
2740 " keyword whole default yellow/24",
2741 " keyword whole do yellow/24",
2742 " keyword whole double yellow/24",
2743 " keyword whole else yellow/24",
2744 " keyword whole enum yellow/24",
2745 " keyword whole extern yellow/24",
2746 " keyword whole float yellow/24",
2747 " keyword whole for yellow/24",
2748 " keyword whole goto yellow/24",
2749 " keyword whole if yellow/24",
2750 " keyword whole int yellow/24",
2751 " keyword whole long yellow/24",
2752 " keyword whole register yellow/24",
2753 " keyword whole return yellow/24",
2754 " keyword whole short yellow/24",
2755 " keyword whole signed yellow/24",
2756 " keyword whole sizeof yellow/24",
2757 " keyword whole static yellow/24",
2758 " keyword whole struct yellow/24",
2759 " keyword whole switch yellow/24",
2760 " keyword whole typedef yellow/24",
2761 " keyword whole union yellow/24",
2762 " keyword whole unsigned yellow/24",
2763 " keyword whole void yellow/24",
2764 " keyword whole volatile yellow/24",
2765 " keyword whole while yellow/24",
2766 " keyword whole asm yellow/24",
2767 " keyword whole catch yellow/24",
2768 " keyword whole class yellow/24",
2769 " keyword whole friend yellow/24",
2770 " keyword whole delete yellow/24",
2771 " keyword whole inline yellow/24",
2772 " keyword whole new yellow/24",
2773 " keyword whole operator yellow/24",
2774 " keyword whole private yellow/24",
2775 " keyword whole protected yellow/24",
2776 " keyword whole public yellow/24",
2777 " keyword whole this yellow/24",
2778 " keyword whole throw yellow/24",
2779 " keyword whole template yellow/24",
2780 " keyword whole try yellow/24",
2781 " keyword whole virtual yellow/24",
2782 " keyword whole bool yellow/24",
2783 " keyword whole const_cast yellow/24",
2784 " keyword whole dynamic_cast yellow/24",
2785 " keyword whole explicit yellow/24",
2786 " keyword whole false yellow/24",
2787 " keyword whole mutable yellow/24",
2788 " keyword whole namespace yellow/24",
2789 " keyword whole reinterpret_cast yellow/24",
2790 " keyword whole static_cast yellow/24",
2791 " keyword whole true yellow/24",
2792 " keyword whole typeid yellow/24",
2793 " keyword whole typename yellow/24",
2794 " keyword whole using yellow/24",
2795 " keyword whole wchar_t yellow/24",
2796 " keyword whole ... yellow/24",
2798 " keyword /\\* brown/22",
2799 " keyword \\*/ brown/22",
2801 " keyword '\\s' brightgreen/16",
2802 " keyword '+' brightgreen/16",
2803 " keyword > yellow/24",
2804 " keyword < yellow/24",
2805 " keyword \\+ yellow/24",
2806 " keyword - yellow/24",
2807 " keyword \\* yellow/24",
2808 "# keyword / yellow/24",
2809 " keyword % yellow/24",
2810 " keyword = yellow/24",
2811 " keyword != yellow/24",
2812 " keyword == yellow/24",
2813 " keyword { brightcyan/14",
2814 " keyword } brightcyan/14",
2815 " keyword ( brightcyan/15",
2816 " keyword ) brightcyan/15",
2817 " keyword [ brightcyan/14",
2818 " keyword ] brightcyan/14",
2819 " keyword , brightcyan/14",
2820 " keyword : brightcyan/14",
2821 " keyword ; brightmagenta/19",
2822 "context exclusive /\\* \\*/ brown/22",
2823 "context // \\n brown/22",
2824 "context linestart # \\n brightred/18",
2825 " keyword \\\\\\n yellow/24",
2826 " keyword /\\**\\*/ brown/22",
2827 " keyword \"+\" red/19",
2828 " keyword <+> red/19",
2829 "context \" \" green/6",
2830 " keyword \\\\\" brightgreen/16",
2831 " keyword %% brightgreen/16",
2832 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]e brightgreen/16",
2833 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]E brightgreen/16",
2834 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]f brightgreen/16",
2835 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]g brightgreen/16",
2836 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]G brightgreen/16",
2837 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]d brightgreen/16",
2838 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]i brightgreen/16",
2839 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]o brightgreen/16",
2840 " keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]u brightgreen/16",
2841 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]x brightgreen/16",
2842 " keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]X brightgreen/16",
2843 " keyword %\\[hl\\]n brightgreen/16",
2844 " keyword %\\[.\\]\\[0123456789\\]s brightgreen/16",
2845 " keyword %[*] brightgreen/16",
2846 " keyword %c brightgreen/16",
2847 " keyword \\\\\\\\ brightgreen/16",
2848 " keyword \\\\' brightgreen/16",
2849 " keyword \\\\a brightgreen/16",
2850 " keyword \\\\b brightgreen/16",
2851 " keyword \\\\t brightgreen/16",
2852 " keyword \\\\n brightgreen/16",
2853 " keyword \\\\v brightgreen/16",
2854 " keyword \\\\f brightgreen/16",
2855 " keyword \\\\r brightgreen/16",
2856 " keyword \\\\0 brightgreen/16",
2858 "###############################################################################",
2859 "file .\\*ChangeLog$ GNU\\sDistribution\\sChangeLog\\sFile",
2861 "context default",
2862 " keyword \\s+() brightmagenta/23",
2863 " keyword \\t+() brightmagenta/23",
2865 "context linestart \\t\\* : brightcyan/17",
2866 "context linestart \\s\\s\\s\\s\\s\\s\\s\\s\\* : brightcyan/17",
2868 "context linestart 19+-+\\s \\n yellow/24",
2869 " keyword <+@+> brightred/19",
2870 "context linestart 20+-+\\s \\n yellow/24",
2871 " keyword <+@+> brightred/19",
2872 "context linestart Mon\\s+\\s+\\s+\\s \\n yellow/24",
2873 " keyword <+@+> brightred/19",
2874 "context linestart Tue\\s+\\s+\\s+\\s \\n yellow/24",
2875 " keyword <+@+> brightred/19",
2876 "context linestart Wed\\s+\\s+\\s+\\s \\n yellow/24",
2877 " keyword <+@+> brightred/19",
2878 "context linestart Thu\\s+\\s+\\s+\\s \\n yellow/24",
2879 " keyword <+@+> brightred/19",
2880 "context linestart Fri\\s+\\s+\\s+\\s \\n yellow/24",
2881 " keyword <+@+> brightred/19",
2882 "context linestart Sat\\s+\\s+\\s+\\s \\n yellow/24",
2883 " keyword <+@+> brightred/19",
2884 "context linestart Sun\\s+\\s+\\s+\\s \\n yellow/24",
2885 " keyword <+@+> brightred/19",
2888 "###############################################################################",
2889 "file .\\*Makefile[\\\\\\.a-z]\\*$ Makefile",
2891 "context default",
2892 " keyword $(*) yellow/24",
2893 " keyword ${*} brightgreen/16",
2894 " keyword whole linestart include magenta",
2895 " keyword whole linestart endif magenta",
2896 " keyword whole linestart ifeq magenta",
2897 " keyword whole linestart ifneq magenta",
2898 " keyword whole linestart else magenta",
2899 " keyword linestart \\t lightgray/13 red",
2900 " keyword whole .PHONY white/25",
2901 " keyword whole .NOEXPORT white/25",
2902 " keyword = white/25",
2903 " keyword : yellow/24",
2904 " keyword \\\\\\n yellow/24",
2905 "# this handles strange cases like @something@@somethingelse@ properly",
2906 " keyword whole @+@ brightmagenta/23 black/0",
2907 " keyword @+@ brightmagenta/23 black/0",
2909 "context linestart # \\n brown/22",
2910 " keyword whole @+@ brightmagenta/23 black/0",
2911 " keyword @+@ brightmagenta/23 black/0",
2913 "context exclusive = \\n brightcyan/17",
2914 " keyword \\\\\\n yellow/24",
2915 " keyword $(*) yellow/24",
2916 " keyword ${*} brightgreen/16",
2917 " keyword linestart \\t lightgray/13 red",
2918 " keyword whole @+@ brightmagenta/23 black/0",
2919 " keyword @+@ brightmagenta/23 black/0",
2921 "context exclusive linestart \\t \\n",
2922 " keyword \\\\\\n yellow/24",
2923 " keyword $(*) yellow/24",
2924 " keyword ${*} brightgreen/16",
2925 " keyword linestart \\t lightgray/13 red",
2926 " keyword whole @+@ brightmagenta/23 black/0",
2927 " keyword @+@ brightmagenta/23 black/0",
2929 "###############################################################################",
2931 "file .\\*syntax$ Syntax\\sHighlighting\\sdefinitions",
2933 "context default",
2934 " keyword whole keyw\\ord yellow/24",
2935 " keyword whole whole\\[\\t\\s\\]l\\inestart brightcyan/17",
2936 " keyword whole whole\\[\\t\\s\\]l\\inestart brightcyan/17",
2937 " keyword whole wh\\oleleft\\[\\t\\s\\]l\\inestart brightcyan/17",
2938 " keyword whole wh\\oleright\\[\\t\\s\\]l\\inestart brightcyan/17",
2939 " keyword whole l\\inestart\\[\\t\\s\\]wh\\ole",
2940 " keyword whole l\\inestart\\[\\t\\s\\]wh\\ole",
2941 " keyword whole l\\inestart\\[\\t\\s\\]wh\\oleleft",
2942 " keyword whole l\\inestart\\[\\t\\s\\]wh\\oleright",
2943 " keyword wholeleft whole\\s brightcyan/17",
2944 " keyword wholeleft whole\\t brightcyan/17",
2945 " keyword whole wh\\oleleft brightcyan/17",
2946 " keyword whole wh\\oleright brightcyan/17",
2947 " keyword whole lin\\[e\\]start brightcyan/17",
2948 " keyword whole c\\ontext\\[\\t\\s\\]exclusive brightred/18",
2949 " keyword whole c\\ontext\\[\\t\\s\\]default brightred/18",
2950 " keyword whole c\\ontext brightred/18",
2951 " keyword whole wh\\olechars\\[\\t\\s\\]left brightcyan/17",
2952 " keyword whole wh\\olechars\\[\\t\\s\\]right brightcyan/17",
2953 " keyword whole wh\\olechars brightcyan/17",
2954 " keyword whole f\\ile brightgreen/6",
2956 " keyword whole 0 lightgray/0 blue/26",
2957 " keyword whole 1 lightgray/1 blue/26",
2958 " keyword whole 2 lightgray/2 blue/26",
2959 " keyword whole 3 lightgray/3 blue/26",
2960 " keyword whole 4 lightgray/4 blue/26",
2961 " keyword whole 5 lightgray/5 blue/26",
2962 " keyword whole 6 lightgray/6",
2963 " keyword whole 7 lightgray/7",
2964 " keyword whole 8 lightgray/8",
2965 " keyword whole 9 lightgray/9",
2966 " keyword whole 10 lightgray/10",
2967 " keyword whole 11 lightgray/11",
2968 " keyword whole 12 lightgray/12",
2969 " keyword whole 13 lightgray/13",
2970 " keyword whole 14 lightgray/14",
2971 " keyword whole 15 lightgray/15",
2972 " keyword whole 16 lightgray/16",
2973 " keyword whole 17 lightgray/17",
2974 " keyword whole 18 lightgray/18",
2975 " keyword whole 19 lightgray/19",
2976 " keyword whole 20 lightgray/20",
2977 " keyword whole 21 lightgray/21",
2978 " keyword whole 22 lightgray/22",
2979 " keyword whole 23 lightgray/23",
2980 " keyword whole 24 lightgray/24",
2981 " keyword whole 25 lightgray/25",
2982 " keyword whole 26 lightgray/26",
2984 " keyword wholeleft black\\/ black/0",
2985 " keyword wholeleft red\\/ red/DarkRed",
2986 " keyword wholeleft green\\/ green/green3",
2987 " keyword wholeleft brown\\/ brown/saddlebrown",
2988 " keyword wholeleft blue\\/ blue/blue3",
2989 " keyword wholeleft magenta\\/ magenta/magenta3",
2990 " keyword wholeleft cyan\\/ cyan/cyan3",
2991 " keyword wholeleft lightgray\\/ lightgray/lightgray",
2992 " keyword wholeleft gray\\/ gray/gray",
2993 " keyword wholeleft brightred\\/ brightred/red",
2994 " keyword wholeleft brightgreen\\/ brightgreen/green1",
2995 " keyword wholeleft yellow\\/ yellow/yellow",
2996 " keyword wholeleft brightblue\\/ brightblue/blue1",
2997 " keyword wholeleft brightmagenta\\/ brightmagenta/magenta",
2998 " keyword wholeleft brightcyan\\/ brightcyan/cyan1",
2999 " keyword wholeleft white\\/ white/26",
3001 "context linestart # \\n brown/22",
3003 "file \\.\\* Help\\ssupport\\sother\\sfile\\stypes",
3004 "context default",
3005 "file \\.\\* by\\scoding\\srules\\sin\\s~/.cedit/syntax.",
3006 "context default",
3007 "file \\.\\* See\\sman/syntax\\sin\\sthe\\ssource\\sdistribution",
3008 "context default",
3009 "file \\.\\* and\\sconsult\\sthe\\sman\\spage.",
3010 "context default",
3015 FILE *upgrade_syntax_file (char *syntax_file)
3017 FILE *f;
3018 char line[80];
3019 f = fopen (syntax_file, "r");
3020 if (!f) {
3021 char **syntax_line;
3022 f = fopen (syntax_file, "w");
3023 if (!f)
3024 return 0;
3025 for (syntax_line = syntax_text; *syntax_line; syntax_line++)
3026 fprintf (f, "%s\n", *syntax_line);
3027 fclose (f);
3028 return fopen (syntax_file, "r");
3030 memset (line, 0, 79);
3031 fread (line, 80, 1, f);
3032 if (!strstr (line, "syntax rules version")) {
3033 goto rename_rule_file;
3034 } else {
3035 char *p;
3036 p = strstr (line, "version") + strlen ("version") + 1;
3037 if (atoi (p) < atoi (CURRENT_SYNTAX_RULES_VERSION)) {
3038 char s[1024];
3039 rename_rule_file:
3040 strcpy (s, syntax_file);
3041 strcat (s, ".OLD");
3042 unlink (s);
3043 rename (syntax_file, s);
3044 unlink (syntax_file); /* might rename() fail ? */
3045 #if defined(MIDNIGHT) || defined(GTK)
3046 edit_message_dialog (" Load Syntax Rules ", " Your syntax rule file is outdated \n A new rule file is being installed. \n Your old rule file has been saved with a .OLD extension. ");
3047 #else
3048 CMessageDialog (0, 20, 20, 0, " Load Syntax Rules ", " Your syntax rule file is outdated \n A new rule file is being installed. \n Your old rule file has been saved with a .OLD extension. ");
3049 #endif
3050 return upgrade_syntax_file (syntax_file);
3051 } else {
3052 rewind (f);
3053 return (f);
3056 return 0; /* not reached */
3059 /* returns -1 on file error, line number on error in file syntax */
3060 static int edit_read_syntax_file (WEdit * edit, char **names, char *syntax_file, char *editor_file, char *first_line, char *type)
3062 FILE *f;
3063 regex_t r, r2;
3064 regmatch_t pmatch[1];
3065 char *args[1024], *l;
3066 int line = 0;
3067 int argc;
3068 int result = 0;
3069 int count = 0;
3071 f = upgrade_syntax_file (syntax_file);
3072 if (!f)
3073 return -1;
3074 args[0] = 0;
3076 for (;;) {
3077 line++;
3078 if (!read_one_line (&l, f))
3079 break;
3080 get_args (l, args, &argc);
3081 if (!args[0]) {
3082 } else if (!strcmp (args[0], "file")) {
3083 if (!args[1] || !args[2]) {
3084 result = line;
3085 break;
3087 if (regcomp (&r, args[1], REG_EXTENDED)) {
3088 result = line;
3089 break;
3091 if (regcomp (&r2, args[3] ? args[3] : "^nEvEr MaTcH aNyThInG$", REG_EXTENDED)) {
3092 result = line;
3093 break;
3095 if (names) {
3096 names[count++] = strdup (args[2]);
3097 names[count] = 0;
3098 } else if (type) {
3099 if (!strcmp (type, args[2]))
3100 goto found_type;
3101 } else if (editor_file && edit) {
3102 if (!regexec (&r, editor_file, 1, pmatch, 0) || !regexec (&r2, first_line, 1, pmatch, 0)) {
3103 int line_error;
3104 found_type:
3105 line_error = edit_read_syntax_rules (edit, f);
3106 if (line_error)
3107 result = line + line_error;
3108 else {
3109 syntax_free (edit->syntax_type);
3110 edit->syntax_type = strdup (args[2]);
3111 if (syntax_change_callback)
3112 #ifdef MIDNIGHT
3113 (*syntax_change_callback) (&edit->widget);
3114 #else
3115 (*syntax_change_callback) (edit->widget);
3116 #endif
3117 /* if there are no rules then turn off syntax highlighting for speed */
3118 if (!edit->rules[1])
3119 if (!edit->rules[0]->keyword[1])
3120 edit_free_syntax_rules (edit);
3122 break;
3126 free_args (args);
3127 syntax_free (l);
3129 free_args (args);
3130 syntax_free (l);
3132 fclose (f);
3134 return result;
3137 static char *get_first_editor_line (WEdit * edit)
3139 int i;
3140 static char s[256];
3141 s[0] = '\0';
3142 if (!edit)
3143 return s;
3144 for (i = 0; i < 255; i++) {
3145 s[i] = edit_get_byte (edit, i);
3146 if (s[i] == '\n') {
3147 s[i] = '\0';
3148 break;
3151 s[255] = '\0';
3152 return s;
3155 /* loads rules into edit struct. one of edit or names must be zero. if
3156 edit is zero, a list of types will be stored into name. type may be zero
3157 in which case the type will be selected according to the filename. */
3158 void edit_load_syntax (WEdit * edit, char **names, char *type)
3160 int r;
3161 char *f;
3163 edit_free_syntax_rules (edit);
3165 #ifdef MIDNIGHT
3166 if (!SLtt_Use_Ansi_Colors || !use_colors)
3167 return;
3168 #endif
3170 if (edit) {
3171 if (!edit->filename)
3172 return;
3173 if (!*edit->filename && !type)
3174 return;
3176 f = catstrs (home_dir, SYNTAX_FILE, 0);
3177 r = edit_read_syntax_file (edit, names, f, edit ? edit->filename : 0, get_first_editor_line (edit), type);
3178 if (r == -1) {
3179 edit_free_syntax_rules (edit);
3180 edit_error_dialog (_ (" Load syntax file "), _ (" File access error "));
3181 return;
3183 if (r) {
3184 char s[80];
3185 edit_free_syntax_rules (edit);
3186 sprintf (s, _ (" Syntax error in file %s on line %d "), f, r);
3187 edit_error_dialog (_ (" Load syntax file "), s);
3188 return;
3192 #else
3194 int option_syntax_highlighting = 0;
3196 void edit_load_syntax (WEdit * edit, char **names, char *type)
3198 return;
3201 void edit_free_syntax_rules (WEdit * edit)
3203 return;
3206 void edit_get_syntax_color (WEdit * edit, long byte_index, int *fg, int *bg)
3208 *fg = NORMAL_COLOR;
3211 #endif /* !defined(MIDNIGHT) || defined(HAVE_SYNTAXH) */