Patch 7.4.1792
Problem:    Color name decoding is implemented several times.
Solution:   Move it to term.c. (Christian Brabandt)
Files:      src/gui_mac.c, src/gui_photon.c, src/gui_w32.c,
            src/proto/term.pro, src/term.c


*** ../vim-7.4.1791/src/gui_mac.c       2016-02-27 15:21:28.408383933 +0100
--- src/gui_mac.c       2016-04-26 20:47:26.232802428 +0200
***************
*** 3705,3721 ****
       */
  }
  
-     static int
- hex_digit(int c)
- {
-     if (isdigit(c))
-       return c - '0';
-     c = TOLOWER_ASC(c);
-     if (c >= 'a' && c <= 'f')
-       return c - 'a' + 10;
-     return -1000;
- }
- 
  /*
   * Return the Pixel value (color) for the given color name.  This routine was
   * pretty much taken from example code in the Silicon Graphics OSF/Motif
--- 3705,3710 ----
***************
*** 3728,3873 ****
      /* TODO: Add support for the new named color of MacOS 8
       */
      RGBColor  MacColor;
- //    guicolor_T      color = 0;
  
!     typedef struct guicolor_tTable
      {
!       char        *name;
!       guicolor_T  color;
!     } guicolor_tTable;
! 
!     /*
!      * The comment at the end of each line is the source
!      * (Mac, Window, Unix) and the number is the unix rgb.txt value
!      */
!     static guicolor_tTable table[] =
!     {
!       {"Black",       RGB(0x00, 0x00, 0x00)},
!       {"darkgray",    RGB(0x80, 0x80, 0x80)}, /*W*/
!       {"darkgrey",    RGB(0x80, 0x80, 0x80)}, /*W*/
!       {"Gray",        RGB(0xC0, 0xC0, 0xC0)}, /*W*/
!       {"Grey",        RGB(0xC0, 0xC0, 0xC0)}, /*W*/
!       {"lightgray",   RGB(0xE0, 0xE0, 0xE0)}, /*W*/
!       {"lightgrey",   RGB(0xE0, 0xE0, 0xE0)}, /*W*/
!       {"gray10",      RGB(0x1A, 0x1A, 0x1A)}, /*W*/
!       {"grey10",      RGB(0x1A, 0x1A, 0x1A)}, /*W*/
!       {"gray20",      RGB(0x33, 0x33, 0x33)}, /*W*/
!       {"grey20",      RGB(0x33, 0x33, 0x33)}, /*W*/
!       {"gray30",      RGB(0x4D, 0x4D, 0x4D)}, /*W*/
!       {"grey30",      RGB(0x4D, 0x4D, 0x4D)}, /*W*/
!       {"gray40",      RGB(0x66, 0x66, 0x66)}, /*W*/
!       {"grey40",      RGB(0x66, 0x66, 0x66)}, /*W*/
!       {"gray50",      RGB(0x7F, 0x7F, 0x7F)}, /*W*/
!       {"grey50",      RGB(0x7F, 0x7F, 0x7F)}, /*W*/
!       {"gray60",      RGB(0x99, 0x99, 0x99)}, /*W*/
!       {"grey60",      RGB(0x99, 0x99, 0x99)}, /*W*/
!       {"gray70",      RGB(0xB3, 0xB3, 0xB3)}, /*W*/
!       {"grey70",      RGB(0xB3, 0xB3, 0xB3)}, /*W*/
!       {"gray80",      RGB(0xCC, 0xCC, 0xCC)}, /*W*/
!       {"grey80",      RGB(0xCC, 0xCC, 0xCC)}, /*W*/
!       {"gray90",      RGB(0xE5, 0xE5, 0xE5)}, /*W*/
!       {"grey90",      RGB(0xE5, 0xE5, 0xE5)}, /*W*/
!       {"white",       RGB(0xFF, 0xFF, 0xFF)},
!       {"darkred",     RGB(0x80, 0x00, 0x00)}, /*W*/
!       {"red",         RGB(0xDD, 0x08, 0x06)}, /*M*/
!       {"lightred",    RGB(0xFF, 0xA0, 0xA0)}, /*W*/
!       {"DarkBlue",    RGB(0x00, 0x00, 0x80)}, /*W*/
!       {"Blue",        RGB(0x00, 0x00, 0xD4)}, /*M*/
!       {"lightblue",   RGB(0xA0, 0xA0, 0xFF)}, /*W*/
!       {"DarkGreen",   RGB(0x00, 0x80, 0x00)}, /*W*/
!       {"Green",       RGB(0x00, 0x64, 0x11)}, /*M*/
!       {"lightgreen",  RGB(0xA0, 0xFF, 0xA0)}, /*W*/
!       {"DarkCyan",    RGB(0x00, 0x80, 0x80)}, /*W ?0x307D7E */
!       {"cyan",        RGB(0x02, 0xAB, 0xEA)}, /*M*/
!       {"lightcyan",   RGB(0xA0, 0xFF, 0xFF)}, /*W*/
!       {"darkmagenta", RGB(0x80, 0x00, 0x80)}, /*W*/
!       {"magenta",     RGB(0xF2, 0x08, 0x84)}, /*M*/
!       {"lightmagenta",RGB(0xF0, 0xA0, 0xF0)}, /*W*/
!       {"brown",       RGB(0x80, 0x40, 0x40)}, /*W*/
!       {"yellow",      RGB(0xFC, 0xF3, 0x05)}, /*M*/
!       {"lightyellow", RGB(0xFF, 0xFF, 0xA0)}, /*M*/
!       {"darkyellow",  RGB(0xBB, 0xBB, 0x00)}, /*U*/
!       {"SeaGreen",    RGB(0x2E, 0x8B, 0x57)}, /*W 0x4E8975 */
!       {"orange",      RGB(0xFC, 0x80, 0x00)}, /*W 0xF87A17 */
!       {"Purple",      RGB(0xA0, 0x20, 0xF0)}, /*W 0x8e35e5 */
!       {"SlateBlue",   RGB(0x6A, 0x5A, 0xCD)}, /*W 0x737CA1 */
!       {"Violet",      RGB(0x8D, 0x38, 0xC9)}, /*U*/
!     };
! 
!     int               r, g, b;
!     int               i;
! 
!     if (name[0] == '#' && strlen((char *) name) == 7)
!     {
!       /* Name is in "#rrggbb" format */
!       r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
!       g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
!       b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
!       if (r < 0 || g < 0 || b < 0)
!           return INVALCOLOR;
!       return RGB(r, g, b);
!     }
!     else
!     {
!       if (STRICMP(name, "hilite") == 0)
!       {
!           LMGetHiliteRGB(&MacColor);
!           return (RGB(MacColor.red >> 8, MacColor.green >> 8, MacColor.blue 
>> 8));
!       }
!       /* Check if the name is one of the colors we know */
!       for (i = 0; i < sizeof(table) / sizeof(table[0]); i++)
!           if (STRICMP(name, table[i].name) == 0)
!               return table[i].color;
      }
! 
!     /*
!      * Last attempt. Look in the file "$VIM/rgb.txt".
!      */
!     {
! #define LINE_LEN 100
!       FILE    *fd;
!       char    line[LINE_LEN];
!       char_u  *fname;
! 
!       fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
!       if (fname == NULL)
!           return INVALCOLOR;
! 
!       fd = fopen((char *)fname, "rt");
!       vim_free(fname);
!       if (fd == NULL)
!           return INVALCOLOR;
! 
!       while (!feof(fd))
!       {
!           int         len;
!           int         pos;
!           char        *color;
! 
!           fgets(line, LINE_LEN, fd);
!           len = strlen(line);
! 
!           if (len <= 1 || line[len-1] != '\n')
!               continue;
! 
!           line[len-1] = '\0';
! 
!           i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
!           if (i != 3)
!               continue;
! 
!           color = line + pos;
! 
!           if (STRICMP(color, name) == 0)
!           {
!               fclose(fd);
!               return (guicolor_T) RGB(r, g, b);
!           }
!       }
!       fclose(fd);
!     }
! 
!     return INVALCOLOR;
  }
  
  /*
--- 3717,3729 ----
      /* TODO: Add support for the new named color of MacOS 8
       */
      RGBColor  MacColor;
  
!     if (STRICMP(name, "hilite") == 0)
      {
!       LMGetHiliteRGB(&MacColor);
!       return (RGB(MacColor.red >> 8, MacColor.green >> 8, MacColor.blue >> 
8));
      }
!     return gui_get_color_cmn(name);
  }
  
  /*
*** ../vim-7.4.1791/src/gui_photon.c    2016-01-30 17:24:01.790502532 +0100
--- src/gui_photon.c    2016-04-26 20:47:26.236802383 +0200
***************
*** 1971,1988 ****
      PtSetResource(gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0);
  }
  
-     static int
- hex_digit(int c)
- {
-     if (VIM_ISDIGIT(c))
-       return c - '0';
-     c = TOLOWER_ASC(c);
-     if (c >= 'a' && c <= 'f')
-       return c - 'a' + 10;
-     return -1000;
- }
- 
- 
  /*
   * This should be split out into a separate file,
   * every port does basically the same thing.
--- 1971,1976 ----
***************
*** 1994,2129 ****
      guicolor_T
  gui_mch_get_color(char_u *name)
  {
!     int i;
!     int r, g, b;
! 
! 
!     typedef struct GuiColourTable
!     {
!       char        *name;
!       guicolor_T     colour;
!     } GuiColourTable;
! 
!     static GuiColourTable table[] =
!     {
!       {"Black",           RGB(0x00, 0x00, 0x00)},
!       {"DarkGray",        RGB(0xA9, 0xA9, 0xA9)},
!       {"DarkGrey",        RGB(0xA9, 0xA9, 0xA9)},
!       {"Gray",            RGB(0xC0, 0xC0, 0xC0)},
!       {"Grey",            RGB(0xC0, 0xC0, 0xC0)},
!       {"LightGray",       RGB(0xD3, 0xD3, 0xD3)},
!       {"LightGrey",       RGB(0xD3, 0xD3, 0xD3)},
!       {"Gray10",          RGB(0x1A, 0x1A, 0x1A)},
!       {"Grey10",          RGB(0x1A, 0x1A, 0x1A)},
!       {"Gray20",          RGB(0x33, 0x33, 0x33)},
!       {"Grey20",          RGB(0x33, 0x33, 0x33)},
!       {"Gray30",          RGB(0x4D, 0x4D, 0x4D)},
!       {"Grey30",          RGB(0x4D, 0x4D, 0x4D)},
!       {"Gray40",          RGB(0x66, 0x66, 0x66)},
!       {"Grey40",          RGB(0x66, 0x66, 0x66)},
!       {"Gray50",          RGB(0x7F, 0x7F, 0x7F)},
!       {"Grey50",          RGB(0x7F, 0x7F, 0x7F)},
!       {"Gray60",          RGB(0x99, 0x99, 0x99)},
!       {"Grey60",          RGB(0x99, 0x99, 0x99)},
!       {"Gray70",          RGB(0xB3, 0xB3, 0xB3)},
!       {"Grey70",          RGB(0xB3, 0xB3, 0xB3)},
!       {"Gray80",          RGB(0xCC, 0xCC, 0xCC)},
!       {"Grey80",          RGB(0xCC, 0xCC, 0xCC)},
!       {"Gray90",          RGB(0xE5, 0xE5, 0xE5)},
!       {"Grey90",          RGB(0xE5, 0xE5, 0xE5)},
!       {"White",           RGB(0xFF, 0xFF, 0xFF)},
!       {"DarkRed",         RGB(0x80, 0x00, 0x00)},
!       {"Red",             RGB(0xFF, 0x00, 0x00)},
!       {"LightRed",        RGB(0xFF, 0xA0, 0xA0)},
!       {"DarkBlue",        RGB(0x00, 0x00, 0x80)},
!       {"Blue",            RGB(0x00, 0x00, 0xFF)},
!       {"LightBlue",       RGB(0xAD, 0xD8, 0xE6)},
!       {"DarkGreen",       RGB(0x00, 0x80, 0x00)},
!       {"Green",           RGB(0x00, 0xFF, 0x00)},
!       {"LightGreen",      RGB(0x90, 0xEE, 0x90)},
!       {"DarkCyan",        RGB(0x00, 0x80, 0x80)},
!       {"Cyan",            RGB(0x00, 0xFF, 0xFF)},
!       {"LightCyan",       RGB(0xE0, 0xFF, 0xFF)},
!       {"DarkMagenta",     RGB(0x80, 0x00, 0x80)},
!       {"Magenta",         RGB(0xFF, 0x00, 0xFF)},
!       {"LightMagenta",    RGB(0xFF, 0xA0, 0xFF)},
!       {"Brown",           RGB(0x80, 0x40, 0x40)},
!       {"Yellow",          RGB(0xFF, 0xFF, 0x00)},
!       {"LightYellow",     RGB(0xFF, 0xFF, 0xE0)},
!       {"SeaGreen",        RGB(0x2E, 0x8B, 0x57)},
!       {"Orange",          RGB(0xFF, 0xA5, 0x00)},
!       {"Purple",          RGB(0xA0, 0x20, 0xF0)},
!       {"SlateBlue",       RGB(0x6A, 0x5A, 0xCD)},
!       {"Violet",          RGB(0xEE, 0x82, 0xEE)},
!     };
! 
!     /* is name #rrggbb format? */
!     if (name[0] == '#' && STRLEN(name) == 7)
!     {
!       r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
!       g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
!       b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
!       if (r < 0 || g < 0 || b < 0)
!           return INVALCOLOR;
!       return RGB(r, g, b);
!     }
! 
!     for (i = 0; i < ARRAY_LENGTH(table); i++)
!     {
!       if (STRICMP(name, table[i].name) == 0)
!           return table[i].colour;
!     }
! 
!     /*
!      * Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
!      */
!     {
! #define LINE_LEN 100
!       FILE    *fd;
!       char    line[LINE_LEN];
!       char_u  *fname;
! 
!       fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
!       if (fname == NULL)
!           return INVALCOLOR;
! 
!       fd = fopen((char *)fname, "rt");
!       vim_free(fname);
!       if (fd == NULL)
!           return INVALCOLOR;
! 
!       while (!feof(fd))
!       {
!           int     len;
!           int     pos;
!           char    *color;
! 
!           fgets(line, LINE_LEN, fd);
!           len = STRLEN(line);
! 
!           if (len <= 1 || line[len-1] != '\n')
!               continue;
! 
!           line[len-1] = '\0';
! 
!           i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
!           if (i != 3)
!               continue;
! 
!           color = line + pos;
! 
!           if (STRICMP(color, name) == 0)
!           {
!               fclose(fd);
!               return (guicolor_T)RGB(r, g, b);
!           }
!       }
! 
!       fclose(fd);
!     }
! 
! 
!     return INVALCOLOR;
  }
  
      void
--- 1982,1988 ----
      guicolor_T
  gui_mch_get_color(char_u *name)
  {
!     return gui_get_color_cmn(name);
  }
  
      void
*** ../vim-7.4.1791/src/gui_w32.c       2016-04-03 22:07:35.266508711 +0200
--- src/gui_w32.c       2016-04-26 20:47:26.240802336 +0200
***************
*** 1555,1570 ****
        DeleteObject((HFONT)font);
  }
  
-     static int
- hex_digit(int c)
- {
-     if (VIM_ISDIGIT(c))
-       return c - '0';
-     c = TOLOWER_ASC(c);
-     if (c >= 'a' && c <= 'f')
-       return c - 'a' + 10;
-     return -1000;
- }
  /*
   * Return the Pixel value (color) for the given color name.
   * Return INVALCOLOR for error.
--- 1555,1560 ----
***************
*** 1572,1636 ****
      guicolor_T
  gui_mch_get_color(char_u *name)
  {
-     typedef struct guicolor_tTable
-     {
-       char        *name;
-       COLORREF    color;
-     } guicolor_tTable;
- 
-     static guicolor_tTable table[] =
-     {
-       {"Black",               RGB(0x00, 0x00, 0x00)},
-       {"DarkGray",            RGB(0xA9, 0xA9, 0xA9)},
-       {"DarkGrey",            RGB(0xA9, 0xA9, 0xA9)},
-       {"Gray",                RGB(0xC0, 0xC0, 0xC0)},
-       {"Grey",                RGB(0xC0, 0xC0, 0xC0)},
-       {"LightGray",           RGB(0xD3, 0xD3, 0xD3)},
-       {"LightGrey",           RGB(0xD3, 0xD3, 0xD3)},
-       {"Gray10",              RGB(0x1A, 0x1A, 0x1A)},
-       {"Grey10",              RGB(0x1A, 0x1A, 0x1A)},
-       {"Gray20",              RGB(0x33, 0x33, 0x33)},
-       {"Grey20",              RGB(0x33, 0x33, 0x33)},
-       {"Gray30",              RGB(0x4D, 0x4D, 0x4D)},
-       {"Grey30",              RGB(0x4D, 0x4D, 0x4D)},
-       {"Gray40",              RGB(0x66, 0x66, 0x66)},
-       {"Grey40",              RGB(0x66, 0x66, 0x66)},
-       {"Gray50",              RGB(0x7F, 0x7F, 0x7F)},
-       {"Grey50",              RGB(0x7F, 0x7F, 0x7F)},
-       {"Gray60",              RGB(0x99, 0x99, 0x99)},
-       {"Grey60",              RGB(0x99, 0x99, 0x99)},
-       {"Gray70",              RGB(0xB3, 0xB3, 0xB3)},
-       {"Grey70",              RGB(0xB3, 0xB3, 0xB3)},
-       {"Gray80",              RGB(0xCC, 0xCC, 0xCC)},
-       {"Grey80",              RGB(0xCC, 0xCC, 0xCC)},
-       {"Gray90",              RGB(0xE5, 0xE5, 0xE5)},
-       {"Grey90",              RGB(0xE5, 0xE5, 0xE5)},
-       {"White",               RGB(0xFF, 0xFF, 0xFF)},
-       {"DarkRed",             RGB(0x80, 0x00, 0x00)},
-       {"Red",                 RGB(0xFF, 0x00, 0x00)},
-       {"LightRed",            RGB(0xFF, 0xA0, 0xA0)},
-       {"DarkBlue",            RGB(0x00, 0x00, 0x80)},
-       {"Blue",                RGB(0x00, 0x00, 0xFF)},
-       {"LightBlue",           RGB(0xAD, 0xD8, 0xE6)},
-       {"DarkGreen",           RGB(0x00, 0x80, 0x00)},
-       {"Green",               RGB(0x00, 0xFF, 0x00)},
-       {"LightGreen",          RGB(0x90, 0xEE, 0x90)},
-       {"DarkCyan",            RGB(0x00, 0x80, 0x80)},
-       {"Cyan",                RGB(0x00, 0xFF, 0xFF)},
-       {"LightCyan",           RGB(0xE0, 0xFF, 0xFF)},
-       {"DarkMagenta",         RGB(0x80, 0x00, 0x80)},
-       {"Magenta",             RGB(0xFF, 0x00, 0xFF)},
-       {"LightMagenta",        RGB(0xFF, 0xA0, 0xFF)},
-       {"Brown",               RGB(0x80, 0x40, 0x40)},
-       {"Yellow",              RGB(0xFF, 0xFF, 0x00)},
-       {"LightYellow",         RGB(0xFF, 0xFF, 0xE0)},
-       {"DarkYellow",          RGB(0xBB, 0xBB, 0x00)},
-       {"SeaGreen",            RGB(0x2E, 0x8B, 0x57)},
-       {"Orange",              RGB(0xFF, 0xA5, 0x00)},
-       {"Purple",              RGB(0xA0, 0x20, 0xF0)},
-       {"SlateBlue",           RGB(0x6A, 0x5A, 0xCD)},
-       {"Violet",              RGB(0xEE, 0x82, 0xEE)},
-     };
  
      typedef struct SysColorTable
      {
--- 1562,1567 ----
***************
*** 1677,1703 ****
        {"SYS_WINDOWTEXT", COLOR_WINDOWTEXT}
      };
  
-     int                   r, g, b;
-     int                   i;
- 
-     if (name[0] == '#' && STRLEN(name) == 7)
-     {
-       /* Name is in "#rrggbb" format */
-       r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
-       g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
-       b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
-       if (r < 0 || g < 0 || b < 0)
-           return INVALCOLOR;
-       return RGB(r, g, b);
-     }
-     else
-     {
-       /* Check if the name is one of the colors we know */
-       for (i = 0; i < sizeof(table) / sizeof(table[0]); i++)
-           if (STRICMP(name, table[i].name) == 0)
-               return table[i].color;
-     }
- 
      /*
       * Try to look up a system colour.
       */
--- 1608,1613 ----
***************
*** 1705,1759 ****
        if (STRICMP(name, sys_table[i].name) == 0)
            return GetSysColor(sys_table[i].color);
  
!     /*
!      * Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
!      */
!     {
! #define LINE_LEN 100
!       FILE    *fd;
!       char    line[LINE_LEN];
!       char_u  *fname;
! 
!       fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
!       if (fname == NULL)
!           return INVALCOLOR;
! 
!       fd = mch_fopen((char *)fname, "rt");
!       vim_free(fname);
!       if (fd == NULL)
!           return INVALCOLOR;
! 
!       while (!feof(fd))
!       {
!           int     len;
!           int     pos;
!           char    *color;
! 
!           fgets(line, LINE_LEN, fd);
!           len = (int)STRLEN(line);
! 
!           if (len <= 1 || line[len-1] != '\n')
!               continue;
! 
!           line[len-1] = '\0';
! 
!           i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
!           if (i != 3)
!               continue;
! 
!           color = line + pos;
! 
!           if (STRICMP(color, name) == 0)
!           {
!               fclose(fd);
!               return (guicolor_T) RGB(r, g, b);
!           }
!       }
! 
!       fclose(fd);
!     }
! 
!     return INVALCOLOR;
  }
  /*
   * Return OK if the key with the termcap name "name" is supported.
--- 1615,1621 ----
        if (STRICMP(name, sys_table[i].name) == 0)
            return GetSysColor(sys_table[i].color);
  
!     return gui_get_color_cmn(name);
  }
  /*
   * Return OK if the key with the termcap name "name" is supported.
*** ../vim-7.4.1791/src/proto/term.pro  2016-04-21 21:08:11.793948968 +0200
--- src/proto/term.pro  2016-04-26 20:47:26.240802336 +0200
***************
*** 65,68 ****
--- 65,69 ----
  int show_one_termcode(char_u *name, char_u *code, int printit);
  char_u *translate_mapping(char_u *str, int expmap);
  void update_tcap(int attr);
+ guicolor_T gui_get_color_cmn(char_u *name);
  /* vim: set ft=c : */
*** ../vim-7.4.1791/src/term.c  2016-04-24 15:41:29.033170205 +0200
--- src/term.c  2016-04-26 20:55:42.827052476 +0200
***************
*** 1266,1410 ****
  };    /* end of builtin_termcaps */
  
  #if defined(FEAT_TERMTRUECOLOR) || defined(PROTO)
- # define RGB(r, g, b) ((r<<16) | (g<<8) | (b))
- struct rgbcolor_table_S {
-     char_u    *color_name;
-     guicolor_T         color;
- };
- 
- static struct rgbcolor_table_S rgb_table[] = {
-       {(char_u *)"black",     RGB(0x00, 0x00, 0x00)},
-       {(char_u *)"blue",      RGB(0x00, 0x00, 0xFF)},
-       {(char_u *)"brown",     RGB(0xA5, 0x2A, 0x2A)},
-       {(char_u *)"cyan",      RGB(0x00, 0xFF, 0xFF)},
-       {(char_u *)"darkblue",  RGB(0x00, 0x00, 0x8B)},
-       {(char_u *)"darkcyan",  RGB(0x00, 0x8B, 0x8B)},
-       {(char_u *)"darkgray",  RGB(0xA9, 0xA9, 0xA9)},
-       {(char_u *)"darkgreen", RGB(0x00, 0x64, 0x00)},
-       {(char_u *)"darkgrey",  RGB(0xA9, 0xA9, 0xA9)},
-       {(char_u *)"darkmagenta",       RGB(0x8B, 0x00, 0x8B)},
-       {(char_u *)"darkred",   RGB(0x8B, 0x00, 0x00)},
-       {(char_u *)"darkyellow",        RGB(0x8B, 0x8B, 0x00)}, /* No X11 */
-       {(char_u *)"gray",      RGB(0xBE, 0xBE, 0xBE)},
-       {(char_u *)"gray10",    RGB(0x1A, 0x1A, 0x1A)},
-       {(char_u *)"gray20",    RGB(0x33, 0x33, 0x33)},
-       {(char_u *)"gray30",    RGB(0x4D, 0x4D, 0x4D)},
-       {(char_u *)"gray40",    RGB(0x66, 0x66, 0x66)},
-       {(char_u *)"gray50",    RGB(0x7F, 0x7F, 0x7F)},
-       {(char_u *)"gray60",    RGB(0x99, 0x99, 0x99)},
-       {(char_u *)"gray70",    RGB(0xB3, 0xB3, 0xB3)},
-       {(char_u *)"gray80",    RGB(0xCC, 0xCC, 0xCC)},
-       {(char_u *)"gray90",    RGB(0xE5, 0xE5, 0xE5)},
-       {(char_u *)"green",     RGB(0x00, 0xFF, 0x00)},
-       {(char_u *)"grey",      RGB(0xBE, 0xBE, 0xBE)},
-       {(char_u *)"grey10",    RGB(0x1A, 0x1A, 0x1A)},
-       {(char_u *)"grey20",    RGB(0x33, 0x33, 0x33)},
-       {(char_u *)"grey30",    RGB(0x4D, 0x4D, 0x4D)},
-       {(char_u *)"grey40",    RGB(0x66, 0x66, 0x66)},
-       {(char_u *)"grey50",    RGB(0x7F, 0x7F, 0x7F)},
-       {(char_u *)"grey60",    RGB(0x99, 0x99, 0x99)},
-       {(char_u *)"grey70",    RGB(0xB3, 0xB3, 0xB3)},
-       {(char_u *)"grey80",    RGB(0xCC, 0xCC, 0xCC)},
-       {(char_u *)"grey90",    RGB(0xE5, 0xE5, 0xE5)},
-       {(char_u *)"lightblue", RGB(0xAD, 0xD8, 0xE6)},
-       {(char_u *)"lightcyan", RGB(0xE0, 0xFF, 0xFF)},
-       {(char_u *)"lightgray", RGB(0xD3, 0xD3, 0xD3)},
-       {(char_u *)"lightgreen",        RGB(0x90, 0xEE, 0x90)},
-       {(char_u *)"lightgrey", RGB(0xD3, 0xD3, 0xD3)},
-       {(char_u *)"lightmagenta",      RGB(0xFF, 0x8B, 0xFF)}, /* No X11 */
-       {(char_u *)"lightred",  RGB(0xFF, 0x8B, 0x8B)},         /* No X11 */
-       {(char_u *)"lightyellow",       RGB(0xFF, 0xFF, 0xE0)},
-       {(char_u *)"magenta",   RGB(0xFF, 0x00, 0xFF)},
-       {(char_u *)"orange",    RGB(0xFF, 0xA5, 0x00)},
-       {(char_u *)"purple",    RGB(0xA0, 0x20, 0xF0)},
-       {(char_u *)"red",       RGB(0xFF, 0x00, 0x00)},
-       {(char_u *)"seagreen",  RGB(0x2E, 0x8B, 0x57)},
-       {(char_u *)"slateblue", RGB(0x6A, 0x5A, 0xCD)},
-       {(char_u *)"violet",    RGB(0xEE, 0x82, 0xEE)},
-       {(char_u *)"white",     RGB(0xFF, 0xFF, 0xFF)},
-       {(char_u *)"yellow",    RGB(0xFF, 0xFF, 0x00)},
- };
- 
-     static int
- hex_digit(int c)
- {
-     if (isdigit(c))
-       return c - '0';
-     c = TOLOWER_ASC(c);
-     if (c >= 'a' && c <= 'f')
-       return c - 'a' + 10;
-     return 0x1ffffff;
- }
- 
      guicolor_T
  termtrue_mch_get_color(char_u *name)
  {
!     guicolor_T        color;
!     int               i;
! 
!     if (*name == '#' && strlen((char *) name) == 7)
!     {
!       color = RGB(((hex_digit(name[1])<<4) + hex_digit(name[2])),
!                   ((hex_digit(name[3])<<4) + hex_digit(name[4])),
!                   ((hex_digit(name[5])<<4) + hex_digit(name[6])));
!       if (color > 0xffffff)
!           return INVALCOLOR;
!       return color;
!     }
!     else
!     {
!       /* Check if the name is one of the colors we know */
!       for (i = 0; i < (int)(sizeof(rgb_table) / sizeof(rgb_table[0])); i++)
!           if (STRICMP(name, rgb_table[i].color_name) == 0)
!               return rgb_table[i].color;
!     }
! 
!     /*
!      * Last attempt. Look in the file "$VIM/rgb.txt".
!      */
!     {
! #define LINE_LEN 100
!       FILE    *fd;
!       char    line[LINE_LEN];
!       char_u  *fname;
!       int     r, g, b;
! 
!       fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
!       if (fname == NULL)
!           return INVALCOLOR;
! 
!       fd = fopen((char *)fname, "rt");
!       vim_free(fname);
!       if (fd == NULL)
!           return INVALCOLOR;
! 
!       while (!feof(fd))
!       {
!           int         len;
!           int         pos;
! 
!           (void)fgets(line, LINE_LEN, fd);
!           len = strlen(line);
! 
!           if (len <= 1 || line[len-1] != '\n')
!               continue;
! 
!           line[len-1] = '\0';
! 
!           i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
!           if (i != 3)
!               continue;
! 
!           if (STRICMP(line + pos, name) == 0)
!           {
!               fclose(fd);
!               return (guicolor_T) RGB(r, g, b);
!           }
!       }
!       fclose(fd);
!     }
! 
!     return INVALCOLOR;
  }
  
      guicolor_T
--- 1266,1275 ----
  };    /* end of builtin_termcaps */
  
  #if defined(FEAT_TERMTRUECOLOR) || defined(PROTO)
      guicolor_T
  termtrue_mch_get_color(char_u *name)
  {
!     return gui_get_color_cmn(name);
  }
  
      guicolor_T
***************
*** 6187,6189 ****
--- 6052,6197 ----
      }
  }
  #endif
+ 
+ #if defined(FEAT_GUI) || defined(FEAT_TERMTRUECOLOR) || defined(PROTO)
+     static int
+ hex_digit(int c)
+ {
+     if (isdigit(c))
+       return c - '0';
+     c = TOLOWER_ASC(c);
+     if (c >= 'a' && c <= 'f')
+       return c - 'a' + 10;
+     return 0x1ffffff;
+ }
+ 
+     guicolor_T
+ gui_get_color_cmn(char_u *name)
+ {
+ #define RGB(r, g, b) ((r<<16) | (g<<8) | (b))
+ #define LINE_LEN 100
+     FILE      *fd;
+     char      line[LINE_LEN];
+     char_u    *fname;
+     int               r, g, b, i;
+     guicolor_T  color;
+ 
+     struct rgbcolor_table_S {
+       char_u      *color_name;
+       guicolor_T  color;
+     };
+ 
+     static struct rgbcolor_table_S rgb_table[] = {
+           {(char_u *)"black",         RGB(0x00, 0x00, 0x00)},
+           {(char_u *)"blue",          RGB(0x00, 0x00, 0xFF)},
+           {(char_u *)"brown",         RGB(0xA5, 0x2A, 0x2A)},
+           {(char_u *)"cyan",          RGB(0x00, 0xFF, 0xFF)},
+           {(char_u *)"darkblue",      RGB(0x00, 0x00, 0x8B)},
+           {(char_u *)"darkcyan",      RGB(0x00, 0x8B, 0x8B)},
+           {(char_u *)"darkgray",      RGB(0xA9, 0xA9, 0xA9)},
+           {(char_u *)"darkgreen",     RGB(0x00, 0x64, 0x00)},
+           {(char_u *)"darkgrey",      RGB(0xA9, 0xA9, 0xA9)},
+           {(char_u *)"darkmagenta",   RGB(0x8B, 0x00, 0x8B)},
+           {(char_u *)"darkred",       RGB(0x8B, 0x00, 0x00)},
+           {(char_u *)"darkyellow",    RGB(0x8B, 0x8B, 0x00)}, /* No X11 */
+           {(char_u *)"gray",          RGB(0xBE, 0xBE, 0xBE)},
+           {(char_u *)"gray10",        RGB(0x1A, 0x1A, 0x1A)},
+           {(char_u *)"gray20",        RGB(0x33, 0x33, 0x33)},
+           {(char_u *)"gray30",        RGB(0x4D, 0x4D, 0x4D)},
+           {(char_u *)"gray40",        RGB(0x66, 0x66, 0x66)},
+           {(char_u *)"gray50",        RGB(0x7F, 0x7F, 0x7F)},
+           {(char_u *)"gray60",        RGB(0x99, 0x99, 0x99)},
+           {(char_u *)"gray70",        RGB(0xB3, 0xB3, 0xB3)},
+           {(char_u *)"gray80",        RGB(0xCC, 0xCC, 0xCC)},
+           {(char_u *)"gray90",        RGB(0xE5, 0xE5, 0xE5)},
+           {(char_u *)"green",         RGB(0x00, 0xFF, 0x00)},
+           {(char_u *)"grey",          RGB(0xBE, 0xBE, 0xBE)},
+           {(char_u *)"grey10",        RGB(0x1A, 0x1A, 0x1A)},
+           {(char_u *)"grey20",        RGB(0x33, 0x33, 0x33)},
+           {(char_u *)"grey30",        RGB(0x4D, 0x4D, 0x4D)},
+           {(char_u *)"grey40",        RGB(0x66, 0x66, 0x66)},
+           {(char_u *)"grey50",        RGB(0x7F, 0x7F, 0x7F)},
+           {(char_u *)"grey60",        RGB(0x99, 0x99, 0x99)},
+           {(char_u *)"grey70",        RGB(0xB3, 0xB3, 0xB3)},
+           {(char_u *)"grey80",        RGB(0xCC, 0xCC, 0xCC)},
+           {(char_u *)"grey90",        RGB(0xE5, 0xE5, 0xE5)},
+           {(char_u *)"lightblue",     RGB(0xAD, 0xD8, 0xE6)},
+           {(char_u *)"lightcyan",     RGB(0xE0, 0xFF, 0xFF)},
+           {(char_u *)"lightgray",     RGB(0xD3, 0xD3, 0xD3)},
+           {(char_u *)"lightgreen",    RGB(0x90, 0xEE, 0x90)},
+           {(char_u *)"lightgrey",     RGB(0xD3, 0xD3, 0xD3)},
+           {(char_u *)"lightmagenta",  RGB(0xFF, 0x8B, 0xFF)}, /* No X11 */
+           {(char_u *)"lightred",      RGB(0xFF, 0x8B, 0x8B)}, /* No X11 */
+           {(char_u *)"lightyellow",   RGB(0xFF, 0xFF, 0xE0)},
+           {(char_u *)"magenta",       RGB(0xFF, 0x00, 0xFF)},
+           {(char_u *)"orange",        RGB(0xFF, 0xA5, 0x00)},
+           {(char_u *)"purple",        RGB(0xA0, 0x20, 0xF0)},
+           {(char_u *)"red",           RGB(0xFF, 0x00, 0x00)},
+           {(char_u *)"seagreen",      RGB(0x2E, 0x8B, 0x57)},
+           {(char_u *)"slateblue",     RGB(0x6A, 0x5A, 0xCD)},
+           {(char_u *)"violet",        RGB(0xEE, 0x82, 0xEE)},
+           {(char_u *)"white",         RGB(0xFF, 0xFF, 0xFF)},
+           {(char_u *)"yellow",        RGB(0xFF, 0xFF, 0x00)},
+     };
+ 
+ 
+     if (name[0] == '#' && STRLEN(name) == 7)
+     {
+       /* Name is in "#rrggbb" format */
+       color = RGB(((hex_digit(name[1]) << 4) + hex_digit(name[2])),
+                   ((hex_digit(name[3]) << 4) + hex_digit(name[4])),
+                   ((hex_digit(name[5]) << 4) + hex_digit(name[6])));
+       if (color > 0xffffff)
+           return INVALCOLOR;
+       return color;
+     }
+ 
+     /* Check if the name is one of the colors we know */
+     for (i = 0; i < (int)(sizeof(rgb_table) / sizeof(rgb_table[0])); i++)
+       if (STRICMP(name, rgb_table[i].color_name) == 0)
+           return rgb_table[i].color;
+ 
+     /*
+      * Last attempt. Look in the file "$VIM/rgb.txt".
+      */
+ 
+     fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
+     if (fname == NULL)
+       return INVALCOLOR;
+ 
+     fd = fopen((char *)fname, "rt");
+     vim_free(fname);
+     if (fd == NULL)
+     {
+       if (p_verbose > 1)
+           verb_msg((char_u *)_("Cannot open $VIMRUNTIME/rgb.txt"));
+       return INVALCOLOR;
+     }
+ 
+     while (!feof(fd))
+     {
+       int             len;
+       int             pos;
+ 
+       (void)fgets(line, LINE_LEN, fd);
+       len = strlen(line);
+ 
+       if (len <= 1 || line[len - 1] != '\n')
+           continue;
+ 
+       line[len - 1] = '\0';
+ 
+       i = sscanf(line, "%d %d %d %n", &r, &g, &b, &pos);
+       if (i != 3)
+           continue;
+ 
+       if (STRICMP(line + pos, name) == 0)
+       {
+           fclose(fd);
+           return (guicolor_T) RGB(r, g, b);
+       }
+     }
+     fclose(fd);
+     return INVALCOLOR;
+ }
+ #endif
*** ../vim-7.4.1791/src/version.c       2016-04-26 20:30:03.360916990 +0200
--- src/version.c       2016-04-26 20:49:04.491663839 +0200
***************
*** 755,756 ****
--- 755,758 ----
  {   /* Add new patch number below this line */
+ /**/
+     1792,
  /**/

-- 
TIM: But follow only if you are men of valour.  For the entrance to this cave
     is guarded by a monster, a creature so foul and cruel that no man yet has
     fought with it and lived.  Bones of full fifty men lie strewn about its
     lair ...
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui