home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 6 File / 06-File.zip / mc454src.zip / mc-4.5.4.src / mc-4.5.4 / gtkedit / syntax.c < prev    next >
C/C++ Source or Header  |  1999-01-04  |  107KB  |  3,213 lines

  1. /* editor syntax highlighting.
  2.  
  3.    Copyright (C) 1996, 1997, 1998 the Free Software Foundation
  4.  
  5.    Authors: 1998 Paul Sheer
  6.  
  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.
  11.  
  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.
  16.  
  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.  */
  20.  
  21. #include <config.h>
  22. #if defined(MIDNIGHT) || defined(GTK)
  23. #include "edit.h"
  24. #else
  25. #include "coolwidget.h"
  26. #endif
  27.  
  28. /* bytes */
  29. #define SYNTAX_MARKER_DENSITY 512
  30.  
  31. #if !defined(MIDNIGHT) || defined(HAVE_SYNTAXH)
  32.  
  33. int option_syntax_highlighting = 1;
  34.  
  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);
  39.  
  40. static void *syntax_malloc (size_t x)
  41. {
  42.     void *p;
  43.     p = malloc (x);
  44.     memset (p, 0, x);
  45.     return p;
  46. }
  47.  
  48. #define syntax_free(x) {if(x){free(x);(x)=0;}}
  49.  
  50. static int compare_word_to_right (WEdit * edit, long i, char *text, char *whole_left, char *whole_right, int line_start)
  51. {
  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++;
  74.         }
  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;
  90.         }
  91.         if (whole_right)
  92.             if (!strchr (whole_right, c)) {
  93.             if (!j)
  94.                 return 0;
  95.             i = j;
  96.             break;
  97.             }
  98.         i++;
  99.         }
  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 */
  121.         }
  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;
  143.         }
  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;
  152.     }
  153.     }
  154.     if (whole_right)
  155.     if (strchr (whole_right, edit_get_byte (edit, i)))
  156.         return 0;
  157.     return 1;
  158. }
  159.  
  160. static int compare_word_to_left (WEdit * edit, long i, char *text, char *whole_left, char *whole_right, int line_start)
  161. {
  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--;
  180.         }
  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--;
  194.         }
  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 */
  218.         }
  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;
  241.         }
  242.         i++;
  243.         p--;
  244.         break;
  245. #endif
  246.     default:
  247.         if (*p != edit_get_byte (edit, i))
  248.         return 0;
  249.     }
  250.     }
  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;
  259. }
  260.  
  261.  
  262. #if 0
  263. #define debug_printf(x,y) fprintf(stderr,x,y)
  264. #else
  265. #define debug_printf(x,y)
  266. #endif
  267.  
  268. static inline unsigned long apply_rules_going_right (WEdit * edit, long i, unsigned long rule)
  269. {
  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;
  282.  
  283.     debug_printf ("%c->", c1);
  284.     debug_printf ("%c ", c2);
  285.  
  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);
  296.     }
  297.     }
  298.     debug_printf ("border=%s ", border ? ((border & RULE_ON_LEFT_BORDER) ? "left" : "right") : "off");
  299.  
  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;
  325.         }
  326.     }
  327.     }
  328.     debug_printf ("\n", 0);
  329.  
  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;
  343.         }
  344.     }
  345.     }
  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;
  375.             }
  376.             }
  377.             break;
  378.         }
  379.         }
  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;
  389.             }
  390.             break;
  391.         }
  392.         }
  393.     }
  394.     }
  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;
  407.         }
  408.     }
  409.     }
  410.     debug_printf ("border=%s ", border ? ((border & RULE_ON_LEFT_BORDER) ? "left" : "right") : "off");
  411.     debug_printf ("keyword=%d ", keyword);
  412.  
  413.     debug_printf (" %d#\n\n", context);
  414.  
  415.     return (context << RULE_CONTEXT_SHIFT) | (keyword << RULE_WORD_SHIFT) | border;
  416. }
  417.  
  418. static unsigned long edit_get_rule (WEdit * edit, long byte_index)
  419. {
  420.     long i;
  421.     if (byte_index < 0) {
  422.     edit->last_get_rule = -1;
  423.     edit->rule = 0;
  424.     return 0;
  425.     }
  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;
  436.         }
  437.     }
  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;
  446.         }
  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;
  452.         }
  453.         s = edit->syntax_marker->next;
  454.         syntax_free (edit->syntax_marker);
  455.         edit->syntax_marker = s;
  456.     }
  457.     }
  458.     edit->last_get_rule = byte_index;
  459.     return edit->rule;
  460. }
  461.  
  462. static void translate_rule_to_color (WEdit * edit, unsigned long rule, int *fg, int *bg)
  463. {
  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;
  468. }
  469.  
  470. void edit_get_syntax_color (WEdit * edit, long byte_index, int *fg, int *bg)
  471. {
  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);
  483.     }
  484. }
  485.  
  486.  
  487. /*
  488.    Returns 0 on error/eof or a count of the number of bytes read
  489.    including the newline. Result must be free'd.
  490.  */
  491. static int read_one_line (char **line, FILE * f)
  492. {
  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;
  512.         }
  513.         p[i++] = c;
  514.     }
  515.     }
  516.     p[i] = 0;
  517.     *line = p;
  518.     return r;
  519. }
  520.  
  521. static char *strdup_convert (char *s)
  522. {
  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;
  573.             }
  574. #endif
  575.         }
  576.         break;
  577.         default:
  578.         *p = *s;
  579.         break;
  580.         }
  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;
  598.     }
  599.     s++;
  600.     p++;
  601.     }
  602.     *p = 0;
  603.     return r;
  604. }
  605.  
  606. #define whiteness(x) ((x) == '\t' || (x) == '\n' || (x) == ' ')
  607.  
  608. static void get_args (char *l, char **args, int *argc)
  609. {
  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++;
  622.     }
  623.     *args = 0;
  624. }
  625.  
  626. static void free_args (char **args)
  627. {
  628.     while (*args) {
  629.     syntax_free (*args);
  630.     *args = 0;
  631.     args++;
  632.     }
  633. }
  634.  
  635. #define check_a {if(!*a){result=line;break;}}
  636. #define check_not_a {if(*a){result=line;break;}}
  637.  
  638. #ifdef MIDNIGHT
  639.  
  640. int try_alloc_color_pair (char *fg, char *bg);
  641.  
  642. int this_try_alloc_color_pair (char *fg, char *bg)
  643. {
  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;
  657.     }
  658.     if (bg) {
  659.     strcpy (b, bg);
  660.     p = strchr (b, '/');
  661.     if (p)
  662.         *p = '\0';
  663.     bg = b;
  664.     }
  665.     return try_alloc_color_pair (fg, bg);
  666. }
  667. #else
  668. #ifdef GTK
  669. int allocate_color (WEdit *edit, gchar *color);
  670.  
  671. int this_allocate_color (WEdit *edit, char *fg)
  672. {
  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);
  683. }
  684. #else
  685. int this_allocate_color (WEdit *edit, char *fg)
  686. {
  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);
  697. }
  698. #endif
  699. #endif
  700.  
  701. /* returns line number on error */
  702. static int edit_read_syntax_rules (WEdit * edit, FILE * f)
  703. {
  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;
  714.  
  715.     args[0] = 0;
  716.  
  717.     strcpy (whole_left, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890");
  718.     strcpy (whole_right, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890");
  719.  
  720.     r = edit->rules = syntax_malloc (256 * sizeof (struct context_rule *));
  721.  
  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);
  742.         }
  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;
  751.         }
  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;
  762.         }
  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);
  774.         }
  775.         check_a;
  776.         if (!strcmp (*a, "linestart")) {
  777.             a++;
  778.             c->line_start_left = 1;
  779.         }
  780.         check_a;
  781.         c->left = strdup (*a++);
  782.         check_a;
  783.         if (!strcmp (*a, "linestart")) {
  784.             a++;
  785.             c->line_start_right = 1;
  786.         }
  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);
  794.         }
  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);
  831.         }
  832.         check_a;
  833.         if (!strcmp (*a, "linestart")) {
  834.         a++;
  835.         k->line_start = 1;
  836.         }
  837.         check_a;
  838.         if (!strcmp (*a, "whole")) {
  839.         *a = 0;
  840.         check_a;
  841.         }
  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;
  870.     }
  871.     free_args (args);
  872.     syntax_free (l);
  873.     }
  874.     free_args (args);
  875.     syntax_free (l);
  876.  
  877.     if (result)
  878.     return result;
  879.  
  880.     if (num_contexts == -1) {
  881.     result = line;
  882.     return result;
  883.     }
  884.  
  885.     {
  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;
  897.         }
  898.         *p = '\0';
  899.         *q = '\0';
  900.         c->keyword_first_chars = strdup (first_chars);
  901.         c->keyword_last_chars = strdup (last_chars);
  902.     }
  903.     }
  904.  
  905.     return result;
  906. }
  907.  
  908. void (*syntax_change_callback) (CWidget *) = 0;
  909.  
  910. void edit_set_syntax_change_callback (void (*callback) (CWidget *))
  911. {
  912.     syntax_change_callback = callback;
  913. }
  914.  
  915. void edit_free_syntax_rules (WEdit * edit)
  916. {
  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]);
  937.         }
  938.     }
  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]);
  947.     }
  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;
  955.     }
  956.     syntax_free (edit->rules);
  957. }
  958.  
  959. #define CURRENT_SYNTAX_RULES_VERSION "44"
  960.  
  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",
  980. "",
  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",
  1018. "",
  1019. "###############################################################################",
  1020. "file ..\\*\\\\.lsm$ LSM\\sFile",
  1021. "",
  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",
  1035. "",
  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",
  1044. "",
  1045. "context linestart Author:\\s\\s\\s\\s\\s\\s\\s\\s\\s \\n brightred/19",
  1046. "    keyword whole \\s*@*\\s(*)        cyan/16",
  1047. "",
  1048. "context linestart Maintained-by:\\s\\s \\n brightred/19",
  1049. "    keyword whole \\s*@*\\s(*)        cyan/16",
  1050. "",
  1051. "###############################################################################",
  1052. "file ..\\*\\\\.sh$ Shell\\sScript ^#!\\s\\*/.\\*/(ksh|bash|sh|pdkzsh)$",
  1053. "",
  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",
  1078. "",
  1079. "    keyword whole linestart #!\\[\\s\\]/bin/\\[abkpct\\]sh brightcyan/17 black/0",
  1080. "",
  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",
  1089. "",
  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",
  1100. "",
  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",
  1127. "",
  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",
  1154. "",
  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",
  1165. "",
  1166. "    keyword $ brightgreen/16",
  1167. "",
  1168. "    keyword wholeleft function*() brightblue/11",
  1169. "",
  1170. "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
  1171. "wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
  1172. "",
  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",
  1261. "",
  1262. "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
  1263. "wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",
  1264. "",
  1265. "context # \\n brown/22",
  1266. "",
  1267. "context exclusive whole <\\[\\s\\\\\\]EOF EOF green/6",
  1268. "",
  1269. "context ' ' green/6",
  1270. "",
  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",
  1294. "",
  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",
  1321. "",
  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",
  1348. "",
  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",
  1359. "",
  1360. "    keyword $ brightgreen/16",
  1361. "",
  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",
  1370. "",
  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",
  1379. "",
  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",
  1390. "",
  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",
  1417. "",
  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",
  1444. "",
  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",
  1455. "",
  1456. "    keyword $ brightgreen/16",
  1457. "",
  1458. "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
  1459. "wholechars left abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._",
  1460. "",
  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",
  1549. "",
  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",
  1558. "",
  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",
  1580. "",
  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",
  1611. "",
  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",
  1622. "",
  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",
  1631. "",
  1632. "    keyword $ brightgreen/15",
  1633. "    keyword & brightmagenta/19",
  1634. "    keyword % brightcyan/17",
  1635. "    keyword @ white/21",
  1636. "    keyword \\\\\" brightred/18",
  1637. "    keyword \\\\' brightred/18",
  1638. "",
  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",
  1670. "",
  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",
  1677. "",
  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",
  1697. "",
  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",
  1707. "",
  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",
  1728. "",
  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",
  1742. "",
  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",
  1760. "",
  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",
  1774. "",
  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",
  1798. "",
  1799. "    keyword whole formline yellow/24",
  1800. "    keyword whole write yellow/24",
  1801. "",
  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",
  1808. "",
  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",
  1832. "",
  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",
  1846. "",
  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",
  1858. "",
  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",
  1869. "",
  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",
  1880. "",
  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",
  1886. "",
  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",
  1902. "",
  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",
  1912. "",
  1913. "context exclusive ` ` white/26 black/0",
  1914. "",
  1915. "context whole __END__ guacomale_pudding white/26 black/0",
  1916. "",
  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",
  1969. "",
  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",
  2015. "",
  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",
  2037. "",
  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",
  2078. "",
  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",
  2119. "",
  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",
  2132. "",
  2133. "    keyword whole __*__ brightred/18",
  2134. "",
  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",
  2165. "",
  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",
  2194. "",
  2195. "###############################################################################",
  2196. "file ..\\*\\\\.(man|[0-9n]|[0-9]x)$ NROFF\\sSource",
  2197. "",
  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",
  2400. "",
  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",
  2406. "",
  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",
  2411. "",
  2412. "###############################################################################",
  2413. "# Assumes you've set a dark background, e.g. navy blue.",
  2414. "file ..\\*\\\\.(htm|html|HTM|HTML)$ HTML\\sFile",
  2415. "",
  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",
  2430. "",
  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",
  2534. "",
  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",
  2542. "",
  2543. "",
  2544. "###############################################################################",
  2545. "file ..\\*\\\\.tex$ LaTeX\\s2.09\\sDocument",
  2546. "context default",
  2547. "wholechars left \\\\ ",
  2548. "wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
  2549. "",
  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",
  2561. "",
  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",
  2577. "",
  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",
  2584. "",
  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",
  2607. "",
  2608. "    keyword whole \\\\appendix brightred/19",
  2609. "    keyword whole \\\\tableofcontents brightred/19",
  2610. "",
  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",
  2617. "",
  2618. "# docuement and page styles    ",
  2619. "    keyword whole \\\\documentstyle[*]{*} yellow/20",
  2620. "    keyword whole \\\\documentstyle{*} yellow/20",
  2621. "    keyword whole \\\\pagestyle{*} yellow/20",
  2622. "",
  2623. "# cross references",
  2624. "    keyword whole \\\\label{*} yellow/24",
  2625. "    keyword whole \\\\ref{*} yellow/24",
  2626. "",
  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",
  2633. "",
  2634. "# splitting the input",
  2635. "    keyword whole \\\\input{*} yellow/20",
  2636. "    keyword whole \\\\include{*} yellow/20",
  2637. "    keyword whole \\\\includeonly{*} yellow/20",
  2638. "",
  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",
  2647. "",
  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",
  2656. "",
  2657. "# defintiions",
  2658. "    keyword \\\\newcommand{*}[*] cyan/5",
  2659. "    keyword \\\\newcommand{*} cyan/5",
  2660. "    keyword \\\\newenvironment{*}[*]{*} cyan/5",
  2661. "    keyword \\\\newenvironment{*}{*} cyan/5",
  2662. "",
  2663. "# boxes",
  2664. "",
  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",
  2682. "",
  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",
  2699. "",
  2700. "    keyword \\\\begin{*} brightcyan/16",
  2701. "    keyword \\\\end{*} brightcyan/16",
  2702. "",
  2703. "    keyword \\\\theorem{*}{*} yellow/24",
  2704. "",
  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",
  2715. "",
  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",
  2722. "",
  2723. "context % \\n brown/22",
  2724. "",
  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",
  2729. "",
  2730. "",
  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",
  2797. "",
  2798. "    keyword /\\* brown/22",
  2799. "    keyword \\*/ brown/22",
  2800. "",
  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",
  2857. "",
  2858. "###############################################################################",
  2859. "file .\\*ChangeLog$ GNU\\sDistribution\\sChangeLog\\sFile",
  2860. "",
  2861. "context default",
  2862. "    keyword \\s+() brightmagenta/23",
  2863. "    keyword \\t+() brightmagenta/23",
  2864. "",
  2865. "context linestart \\t\\* : brightcyan/17",
  2866. "context linestart \\s\\s\\s\\s\\s\\s\\s\\s\\* : brightcyan/17",
  2867. "",
  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",
  2886. "",
  2887. "",
  2888. "###############################################################################",
  2889. "file .\\*Makefile[\\\\\\.a-z]\\*$ Makefile",
  2890. "",
  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",
  2908. "",
  2909. "context linestart # \\n brown/22",
  2910. "    keyword whole @+@ brightmagenta/23 black/0",
  2911. "    keyword @+@ brightmagenta/23 black/0",
  2912. "",
  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",
  2920. "",
  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",
  2928. "",
  2929. "###############################################################################",
  2930. "",
  2931. "file .\\*syntax$ Syntax\\sHighlighting\\sdefinitions",
  2932. "",
  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",
  2955. "",
  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",
  2983. "",
  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",
  3000. "",
  3001. "context linestart # \\n brown/22",
  3002. "",
  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",
  3011. "",
  3012. 0};
  3013.  
  3014.  
  3015. FILE *upgrade_syntax_file (char *syntax_file)
  3016. {
  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");
  3029.     }
  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);
  3054.     }
  3055.     }
  3056.     return 0;            /* not reached */
  3057. }
  3058.  
  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)
  3061. {
  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;
  3070.  
  3071.     f = upgrade_syntax_file (syntax_file);
  3072.     if (!f)
  3073.     return -1;
  3074.     args[0] = 0;
  3075.  
  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;
  3086.         }
  3087.         if (regcomp (&r, args[1], REG_EXTENDED)) {
  3088.         result = line;
  3089.         break;
  3090.         }
  3091.         if (regcomp (&r2, args[3] ? args[3] : "^nEvEr MaTcH aNyThInG$", REG_EXTENDED)) {
  3092.         result = line;
  3093.         break;
  3094.         }
  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);
  3121.             }
  3122.             break;
  3123.         }
  3124.         }
  3125.     }
  3126.     free_args (args);
  3127.     syntax_free (l);
  3128.     }
  3129.     free_args (args);
  3130.     syntax_free (l);
  3131.  
  3132.     fclose (f);
  3133.  
  3134.     return result;
  3135. }
  3136.  
  3137. static char *get_first_editor_line (WEdit * edit)
  3138. {
  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;
  3149.     }
  3150.     }
  3151.     s[255] = '\0';
  3152.     return s;
  3153. }
  3154.  
  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)
  3159. {
  3160.     int r;
  3161.     char *f;
  3162.  
  3163.     edit_free_syntax_rules (edit);
  3164.  
  3165. #ifdef MIDNIGHT
  3166.     if (!SLtt_Use_Ansi_Colors || !use_colors)
  3167.     return;
  3168. #endif
  3169.  
  3170.     if (edit) {
  3171.     if (!edit->filename)
  3172.         return;
  3173.     if (!*edit->filename && !type)
  3174.         return;
  3175.     }
  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;
  3182.     }
  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;
  3189.     }
  3190. }
  3191.  
  3192. #else
  3193.  
  3194. int option_syntax_highlighting = 0;
  3195.  
  3196. void edit_load_syntax (WEdit * edit, char **names, char *type)
  3197. {
  3198.     return;
  3199. }
  3200.  
  3201. void edit_free_syntax_rules (WEdit * edit)
  3202. {
  3203.     return;
  3204. }
  3205.  
  3206. void edit_get_syntax_color (WEdit * edit, long byte_index, int *fg, int *bg)
  3207. {
  3208.     *fg = NORMAL_COLOR;
  3209. }
  3210.  
  3211. #endif        /* !defined(MIDNIGHT) || defined(HAVE_SYNTAXH) */
  3212.  
  3213.