commit 3134d2881ca6bf11e017b370fba54705f722a803
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sun Mar 2 04:20:35 2025 +0100

    tex2lyx: factor out lyxcolor parsing
---
 src/tex2lyx/Preamble.cpp                           | 171 +++++----------
 src/tex2lyx/Preamble.h                             |   2 +-
 .../test/box-color-size-space-align.lyx.lyx        |   3 +-
 src/tex2lyx/text.cpp                               | 238 +--------------------
 4 files changed, 69 insertions(+), 345 deletions(-)

diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index 0a595cd8bf..4991912cd5 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -834,11 +834,50 @@ void Preamble::setTextClass(string const & tclass, 
TeX2LyXDocClass & tc)
 }
 
 
-bool Preamble::isCustomColor(string const & col) const
+string Preamble::getLyXColor(string const & col, bool const reg)
 {
+       // Is it a base color (color package)?
+       if (is_known(col, known_basic_colors)) {
+               if (reg)
+                       registerAutomaticallyLoadedPackage("color");
+               return col;
+       }
+       // Or one of the additional basic xcolor colors?
+       if (is_known(col, known_basic_xcolors)) {
+               if (reg)
+                       registerAutomaticallyLoadedPackage("xcolor");
+               return col;
+       }
+       // No? So try the other xcolor types
+       char const * const * where = 0;
+       // svgnames colors get priority with clashing names
+       if (svgnames() && (where = is_known(col, known_svgnames_textcolors))) {
+               if (reg)
+                       registerAutomaticallyLoadedPackage("xcolor");
+               return known_coded_svgnames_textcolors[where - 
known_svgnames_textcolors];
+       }
+       // Consider clashing names as well
+       if (svgnames() && prefixIs(col, "DVIPS") && (where = 
is_known(col.substr(5), known_textcolors))) {
+               string clashname = known_coded_textcolors[where - 
known_textcolors];
+               if (prefixIs(clashname, "dvips:")) {
+                       if (reg)
+                               registerAutomaticallyLoadedPackage("xcolor");
+                       return clashname;
+               }
+               return string();
+       }
+       // check the other xcolor types (dvipsnames, x11names)
+       if ((where = is_known(col, known_textcolors))) {
+               if (reg)
+                       registerAutomaticallyLoadedPackage("xcolor");
+               return known_coded_textcolors[where - known_textcolors];
+       }
+       // If none of the above is true, check if it is a known custom color
        if (h_custom_colors.find(col) != h_custom_colors.end())
-               return true;
-       return false;
+               return col;
+
+       // Nothing known, return empty string (will cause ERT to be used)
+       return string();
 }
 
 
@@ -2840,63 +2879,22 @@ void Preamble::parse(Parser & p, string const & 
forceclass,
                        string const space =
                                (p.hasOpt() ? p.getOpt() : string());
                        string argument = p.getArg('{', '}');
-                       char const * const * where = 0;
-                       // check the case that a standard color is used
-                       if (space.empty() && is_known(argument, 
known_basic_colors)) {
-                               h_fontcolor = argument;
-                               registerAutomaticallyLoadedPackage("color");
-                       } else if (space.empty() && is_known(argument, 
known_basic_xcolors)) {
-                               h_fontcolor = argument;
-                               registerAutomaticallyLoadedPackage("xcolor");
-                       // With xcolor, svgnames colors get priority with 
clashing names
-                       } else if (svgnames() && (where = is_known(argument, 
known_svgnames_textcolors))) {
-                               h_fontcolor = 
known_coded_svgnames_textcolors[where - known_svgnames_textcolors];
-                               registerAutomaticallyLoadedPackage("xcolor");
-                       } else if ((where = is_known(argument, 
known_textcolors))) {
-                               h_fontcolor = known_coded_textcolors[where - 
known_textcolors];
-                               registerAutomaticallyLoadedPackage("xcolor");
-                       } else if (space.empty() && argument == 
"document_fontcolor")
-                               registerAutomaticallyLoadedPackage("color");
-                       // check the case that LyX's document_fontcolor is 
defined
-                       // but not used for \color
-                       else {
+                       if (space.empty())
+                               h_fontcolor = getLyXColor(argument, true);
+                       if (h_fontcolor.empty()) {
                                h_preamble << t.asInput();
                                if (!space.empty())
                                        h_preamble << space;
                                h_preamble << '{' << argument << '}';
-                               // the color might already be set because 
\definecolor
-                               // is parsed before this
-                               h_fontcolor = "";
                        }
                        continue;
                }
 
                if (t.cs() == "pagecolor") {
                        string argument = p.getArg('{', '}');
-                       char const * const * where = 0;
-                       // check the case that a standard color is used
-                       if (is_known(argument, known_basic_colors)) {
-                               h_backgroundcolor = argument;
-                       } else if (is_known(argument, known_basic_xcolors)) {
-                               h_backgroundcolor = argument;
-                               registerAutomaticallyLoadedPackage("xcolor");
-                       // With xcolor, svgnames colors get priority with 
clashing names
-                       } else if (svgnames() && (where = is_known(argument, 
known_svgnames_textcolors))) {
-                               h_backgroundcolor = 
known_coded_svgnames_textcolors[where - known_svgnames_textcolors];
-                               registerAutomaticallyLoadedPackage("xcolor");
-                       } else if ((where = is_known(argument, 
known_textcolors))) {
-                               h_backgroundcolor = 
known_coded_textcolors[where - known_textcolors];
-                               registerAutomaticallyLoadedPackage("xcolor");
-                       } else if (argument == "page_backgroundcolor")
-                               registerAutomaticallyLoadedPackage("color");
-                       // check the case that LyX's page_backgroundcolor is 
defined
-                       // but not used for \pagecolor
-                       else {
+                       h_backgroundcolor = getLyXColor(argument, true);
+                       if (h_backgroundcolor.empty())
                                h_preamble << t.asInput() << '{' << argument << 
'}';
-                               // the color might already be set because 
\definecolor
-                               // is parsed before this
-                               h_backgroundcolor = "";
-                       }
                        continue;
                }
 
@@ -3452,72 +3450,15 @@ void Preamble::parse(Parser & p, string const & 
forceclass,
                if (t.cs() == "colorlet") {
                        string const color1 = p.getArg('{', '}');
                        string const color2 = p.getArg('{', '}');
-                       char const * const * where = 0;
-                       if (color1 == "document_fontcolor") {
-                               // check the case that a standard color is used
-                               if (is_known(color2, known_basic_colors)) {
-                                       h_fontcolor = color2;
-                               } else if (is_known(color2, 
known_basic_xcolors)) {
-                                       h_fontcolor = color2;
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               // With xcolor, svgnames colors get priority 
with clashing names
-                               } else if (svgnames() && (where = 
is_known(color2, known_svgnames_textcolors))) {
-                                       h_fontcolor = 
known_coded_svgnames_textcolors[where - known_svgnames_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if ((where = is_known(color2, 
known_textcolors))) {
-                                       h_fontcolor = 
known_coded_textcolors[where - known_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if (isCustomColor(color2))
-                                       h_fontcolor = color2;
-                       } else if (color1 == "note_fontcolor") {
-                               // check the case that a standard color is used
-                               if (is_known(color2, known_basic_colors)) {
-                                       h_notefontcolor = color2;
-                               } else if (is_known(color2, 
known_basic_xcolors)) {
-                                       h_notefontcolor = color2;
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               // With xcolor, svgnames colors get priority 
with clashing names
-                               } else if (svgnames() && (where = 
is_known(color2, known_svgnames_textcolors))) {
-                                       h_notefontcolor = 
known_coded_svgnames_textcolors[where - known_svgnames_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if ((where = is_known(color2, 
known_textcolors))) {
-                                       h_notefontcolor = 
known_coded_textcolors[where - known_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if (isCustomColor(color2))
-                                       h_notefontcolor = color2;
-                       } else if (color1 == "page_backgroundcolor") {
-                               // check the case that a standard color is used
-                               if (is_known(color2, known_basic_colors)) {
-                                       h_backgroundcolor = color2;
-                               } else if (is_known(color2, 
known_basic_xcolors)) {
-                                       h_backgroundcolor = color2;
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               // With xcolor, svgnames colors get priority 
with clashing names
-                               } else if (svgnames() && (where = 
is_known(color2, known_svgnames_textcolors))) {
-                                       h_backgroundcolor = 
known_coded_svgnames_textcolors[where - known_svgnames_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if ((where = is_known(color2, 
known_textcolors))) {
-                                       h_backgroundcolor = 
known_coded_textcolors[where - known_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if (isCustomColor(color2))
-                                       h_backgroundcolor = color2;
-                       } else if (color1 == "shadecolor") {
-                               // check the case that a standard color is used
-                               if (is_known(color2, known_basic_colors)) {
-                                       h_boxbgcolor = color2;
-                               } else if (is_known(color2, 
known_basic_xcolors)) {
-                                       h_boxbgcolor = color2;
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               // With xcolor, svgnames colors get priority 
with clashing names
-                               } else if (svgnames() && (where = 
is_known(color2, known_svgnames_textcolors))) {
-                                       h_boxbgcolor = 
known_coded_svgnames_textcolors[where - known_svgnames_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if ((where = is_known(color2, 
known_textcolors))) {
-                                       h_boxbgcolor = 
known_coded_textcolors[where - known_textcolors];
-                                       
registerAutomaticallyLoadedPackage("xcolor");
-                               } else if (isCustomColor(color2))
-                                       h_boxbgcolor = color2;
-                       } else {
+                       if (color1 == "document_fontcolor")
+                               h_fontcolor = getLyXColor(color2, true);
+                       else if (color1 == "note_fontcolor")
+                               h_notefontcolor = getLyXColor(color2, true);
+                       else if (color1 == "page_backgroundcolor")
+                               h_backgroundcolor = getLyXColor(color2, true);
+                       else if (color1 == "shadecolor")
+                               h_boxbgcolor = getLyXColor(color2, true);
+                       else {
                                h_preamble << "\\colorlet{" << color1
                                           << "}{" << color2 << '}';
                        }
diff --git a/src/tex2lyx/Preamble.h b/src/tex2lyx/Preamble.h
index e31111b030..e29684f988 100644
--- a/src/tex2lyx/Preamble.h
+++ b/src/tex2lyx/Preamble.h
@@ -53,7 +53,7 @@ public:
        ///
        bool svgnames() const { return h_use_xcolor_svgnames; }
        ///
-       bool isCustomColor(std::string const & col) const;
+       std::string getLyXColor(std::string const & col, bool reg = false);
        ///
        std::string nomenclOpts() const { return h_nomencl_options; }
        /// The document language
diff --git a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx 
b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
index dad583c200..362e3ce3ee 100644
--- a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
+++ b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx
@@ -11,7 +11,7 @@
 
 
 
-\color[rgb]{0,0,0}
+
 
 \usepackage{ifpdf}% part of the hyperref bundle
 \ifpdf % if pdflatex is used
@@ -96,6 +96,7 @@
 \customcolor note_fontcolor 0000ff
 \customcolor page_backgroundcolor ff5500
 \customcolor shadecolor ffff00
+\fontcolor document_fontcolor
 \notefontcolor note_fontcolor
 \backgroundcolor page_backgroundcolor
 \boxbgcolor shadecolor
diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index f5ac43e988..e8aab1b68b 100644
--- a/src/tex2lyx/text.cpp
+++ b/src/tex2lyx/text.cpp
@@ -299,156 +299,6 @@ char const * const known_text_font_shapes[] = { "textit", 
"textsl", "textsc",
 char const * const known_coded_font_shapes[] = { "italic", "slanted",
 "smallcaps", "up", 0};
 
-/// LaTeX names for basic colors
-const char * const known_basic_colors[] = {"black", "blue", "cyan",
-       "green", "magenta", "red", "white", "yellow", 0};
-
-/// LaTeX names for additional basic colors provided by xcolor
-const char * const known_basic_xcolors[] = {"brown", "darkgray", "gray",
-       "lightgray", "lime", "orange", "olive", "pink", "purple",
-       "teal", "violet", 0};
-
-/// LaTeX names for (xcolor) colors beyond the base ones
-char const * const known_textcolors[] = { "Apricot", "Aquamarine", 
"Bittersweet", "Black",
-"Blue", "BlueGreen", "BlueViolet", "BrickRed", "Brown", "BurntOrange", 
"CadetBlue", "CarnationPink",
-"Cerulean", "CornflowerBlue", "Cyan", "Dandelion", "DarkOrchid", "Emerald", 
"ForestGreen", "Fuchsia",
-"Goldenrod", "Gray", "Green", "GreenYellow", "JungleGreen", "Lavender", 
"LimeGreen", "Magenta",
-"Mahogany", "Maroon", "Melon", "MidnightBlue", "Mulberry", "NavyBlue", 
"OliveGreen", "Orange", "OrangeRed",
-"Orchid", "Peach", "Periwinkle", "PineGreen", "Plum", "ProcessBlue", "Purple", 
"RawSienna", "Red", "RedOrange",
-"RedViolet", "Rhodamine", "RoyalBlue", "RoyalPurple", "RubineRed", "Salmon", 
"SeaGreen", "Sepia", "SkyBlue",
-"SpringGreen", "Tan", "TealBlue", "Thistle", "Turquoise", "Violet", 
"VioletRed", "White", "WildStrawberry",
-"Yellow", "YellowGreen", "YellowOrange", "AntiqueWhite1", "AntiqueWhite2", 
"AntiqueWhite3", "AntiqueWhite4", "Aquamarine1",
-"Aquamarine2", "Aquamarine3", "Aquamarine4", "Azure1", "Azure2", "Azure3", 
"Azure4", "Bisque1", "Bisque2", "Bisque3", "Bisque4",
-"Blue1", "Blue2", "Blue3", "Blue4", "Brown1", "Brown2", "Brown3", "Brown4", 
"Burlywood1", "Burlywood2", "Burlywood3", "Burlywood4",
-"CadetBlue1", "CadetBlue2", "CadetBlue3", "CadetBlue4", "Chartreuse1", 
"Chartreuse2", "Chartreuse3", "Chartreuse4", "Chocolate1",
-"Chocolate2", "Chocolate3", "Chocolate4", "Coral1", "Coral2", "Coral3", 
"Coral4", "Cornsilk1", "Cornsilk2", "Cornsilk3", "Cornsilk4",
-"Cyan1", "Cyan2", "Cyan3", "Cyan4", "DarkGoldenrod1", "DarkGoldenrod2", 
"DarkGoldenrod3", "DarkGoldenrod4", "DarkOliveGreen1",
-"DarkOliveGreen2", "DarkOliveGreen3", "DarkOliveGreen4", "DarkOrange1", 
"DarkOrange2", "DarkOrange3", "DarkOrange4", "DarkOrchid1",
-"DarkOrchid2", "DarkOrchid3", "DarkOrchid4", "DarkSeaGreen1", "DarkSeaGreen2", 
"DarkSeaGreen3", "DarkSeaGreen4", "DarkSlateGray1",
-"DarkSlateGray2", "DarkSlateGray3", "DarkSlateGray4", "DeepPink1", 
"DeepPink2", "DeepPink3", "DeepPink4", "DeepSkyBlue1", "DeepSkyBlue2",
-"DeepSkyBlue3", "DeepSkyBlue4", "DodgerBlue1", "DodgerBlue2", "DodgerBlue3", 
"DodgerBlue4", "Firebrick1", "Firebrick2", "Firebrick3",
-"Firebrick4", "Gold1", "Gold2", "Gold3", "Gold4", "Goldenrod1", "Goldenrod2", 
"Goldenrod3", "Goldenrod4", "Green1", "Green2", "Green3",
-"Green4", "Honeydew1", "Honeydew2", "Honeydew3", "Honeydew4", "HotPink1", 
"HotPink2", "HotPink3", "HotPink4", "IndianRed1", "IndianRed2",
-"IndianRed3", "IndianRed4", "Ivory1", "Ivory2", "Ivory3", "Ivory4", "Khaki1", 
"Khaki2", "Khaki3", "Khaki4", "LavenderBlush1", "LavenderBlush2",
-"LavenderBlush3", "LavenderBlush4", "LemonChiffon1", "LemonChiffon2", 
"LemonChiffon3", "LemonChiffon4", "LightBlue1", "LightBlue2", "LightBlue3",
-"LightBlue4", "LightCyan1", "LightCyan2", "LightCyan3", "LightCyan4", 
"LightGoldenrod1", "LightGoldenrod2", "LightGoldenrod3", "LightGoldenrod4",
-"LightPink1", "LightPink2", "LightPink3", "LightPink4", "LightSalmon1", 
"LightSalmon2", "LightSalmon3", "LightSalmon4", "LightSkyBlue1",
-"LightSkyBlue2", "LightSkyBlue3", "LightSkyBlue4", "LightSteelBlue1", 
"LightSteelBlue2", "LightSteelBlue3", "LightSteelBlue4", "LightYellow1",
-"LightYellow2", "LightYellow3", "LightYellow4", "Magenta1", "Magenta2", 
"Magenta3", "Magenta4", "Maroon1", "Maroon2", "Maroon3", "Maroon4",
-"MediumOrchid1", "MediumOrchid2", "MediumOrchid3", "MediumOrchid4", 
"MediumPurple1", "MediumPurple2", "MediumPurple3", "MediumPurple4", 
"MistyRose1",
-"MistyRose2", "MistyRose3", "MistyRose4", "NavajoWhite1", "NavajoWhite2", 
"NavajoWhite3", "NavajoWhite4", "OliveDrab1", "OliveDrab2", "OliveDrab3",
-"OliveDrab4", "Orange1", "Orange2", "Orange3", "Orange4", "OrangeRed1", 
"OrangeRed2", "OrangeRed3", "OrangeRed4", "Orchid1", "Orchid2", "Orchid3",
-"Orchid4", "PaleGreen1", "PaleGreen2", "PaleGreen3", "PaleGreen4", 
"PaleTurquoise1", "PaleTurquoise2", "PaleTurquoise3", "PaleTurquoise4",
-"PaleVioletRed1", "PaleVioletRed2", "PaleVioletRed3", "PaleVioletRed4", 
"PeachPuff1", "PeachPuff2", "PeachPuff3", "PeachPuff4", "Pink1",
-"Pink2", "Pink3", "Pink4", "Plum1", "Plum2", "Plum3", "Plum4", "Purple1", 
"Purple2", "Purple3", "Purple4", "Red1", "Red2", "Red3", "Red4",
-"RosyBrown1", "RosyBrown2", "RosyBrown3", "RosyBrown4", "RoyalBlue1", 
"RoyalBlue2", "RoyalBlue3", "RoyalBlue4", "Salmon1", "Salmon2",
-"Salmon3", "Salmon4", "SeaGreen1", "SeaGreen2", "SeaGreen3", "SeaGreen4", 
"Seashell1", "Seashell2", "Seashell3", "Seashell4", "Sienna1",
-"Sienna2", "Sienna3", "Sienna4", "SkyBlue1", "SkyBlue2", "SkyBlue3", 
"SkyBlue4", "SlateBlue1", "SlateBlue2", "SlateBlue3", "SlateBlue4",
-"SlateGray1", "SlateGray2", "SlateGray3", "SlateGray4", "Snow1", "Snow2", 
"Snow3", "Snow4", "SpringGreen1", "SpringGreen2", "SpringGreen3",
-"SpringGreen4", "SteelBlue1", "SteelBlue2", "SteelBlue3", "SteelBlue4", 
"Tan1", "Tan2", "Tan3", "Tan4", "Thistle1", "Thistle2", "Thistle3",
-"Thistle4", "Tomato1", "Tomato2", "Tomato3", "Tomato4", "Turquoise1", 
"Turquoise2", "Turquoise3", "Turquoise4", "VioletRed1", "VioletRed2",
-"VioletRed3", "VioletRed4", "Wheat1", "Wheat2", "Wheat3", "Wheat4", "Yellow1", 
"Yellow2", "Yellow3", "Yellow4", "Gray0", "Grey0", "Green0", "Maroon0",
-"Purple0", 0};
-
-/// LyX names for (xcolor) colors beyond the base ones (except svgnames)
-char const * const known_coded_textcolors[] = { "dvips:apricot", 
"dvips:aquamarine",
-"dvips:bittersweet", "dvips:black", "dvips:blue", "dvips:bluegreen", 
"dvips:blueviolet",
-"dvips:brickred", "dvips:brown", "dvips:burntorange", "dvips:cadetblue", 
"dvips:carnationpink",
-"dvips:cerulean", "dvips:cornflowerblue", "dvips:cyan", "dvips:dandelion", 
"dvips:darkorchid",
-"dvips:emerald", "dvips:forestgreen", "dvips:fuchsia", "dvips:goldenrod", 
"dvips:gray", "dvips:green",
-"dvips:greenyellow", "dvips:junglegreen", "dvips:lavender", "dvips:limegreen", 
"dvips:magenta",
-"dvips:mahogany", "dvips:maroon", "dvips:melon", "dvips:midnightblue", 
"dvips:mulberry", "dvips:navyblue",
-"dvips:olivegreen", "dvips:orange", "dvips:orangered", "dvips:orchid", 
"dvips:peach", "dvips:periwinkle",
-"dvips:pinegreen", "dvips:plum", "dvips:processblue", "dvips:purple", 
"dvips:rawsienna", "dvips:red",
-"dvips:redorange", "dvips:redviolet", "dvips:rhodamine", "dvips:royalblue", 
"dvips:royalpurple",
-"dvips:rubinered", "dvips:salmon", "dvips:seagreen", "dvips:sepia", 
"dvips:skyblue", "dvips:springgreen",
-"dvips:tan", "dvips:tealblue", "dvips:thistle", "dvips:turquoise", 
"dvips:violet", "dvips:violetred",
-"dvips:white", "dvips:wildstrawberry", "dvips:yellow", "dvips:yellowgreen", 
"dvips:yelloworange",
-"x11:antiquewhite1", "x11:antiquewhite2", "x11:antiquewhite3", 
"x11:antiquewhite4", "x11:aquamarine1",
-"x11:aquamarine2", "x11:aquamarine3", "x11:aquamarine4", "x11:azure1", 
"x11:azure2", "x11:azure3", "x11:azure4", "x11:bisque1",
-"x11:bisque2", "x11:bisque3", "x11:bisque4", "x11:blue1", "x11:blue2", 
"x11:blue3", "x11:blue4", "x11:brown1", "x11:brown2",
-"x11:brown3", "x11:brown4", "x11:burlywood1", "x11:burlywood2", 
"x11:burlywood3", "x11:burlywood4", "x11:cadetblue1", "x11:cadetblue2",
-"x11:cadetblue3", "x11:cadetblue4", "x11:chartreuse1", "x11:chartreuse2", 
"x11:chartreuse3", "x11:chartreuse4", "x11:chocolate1",
-"x11:chocolate2", "x11:chocolate3", "x11:chocolate4", "x11:coral1", 
"x11:coral2", "x11:coral3", "x11:coral4", "x11:cornsilk1",
-"x11:cornsilk2", "x11:cornsilk3", "x11:cornsilk4", "x11:cyan1", "x11:cyan2", 
"x11:cyan3", "x11:cyan4", "x11:darkgoldenrod1",
-"x11:darkgoldenrod2", "x11:darkgoldenrod3", "x11:darkgoldenrod4", 
"x11:darkolivegreen1", "x11:darkolivegreen2", "x11:darkolivegreen3",
-"x11:darkolivegreen4", "x11:darkorange1", "x11:darkorange2", 
"x11:darkorange3", "x11:darkorange4", "x11:darkorchid1", "x11:darkorchid2",
-"x11:darkorchid3", "x11:darkorchid4", "x11:darkseagreen1", 
"x11:darkseagreen2", "x11:darkseagreen3", "x11:darkseagreen4",
-"x11:darkslategray1", "x11:darkslategray2", "x11:darkslategray3", 
"x11:darkslategray4", "x11:deeppink1", "x11:deeppink2", "x11:deeppink3",
-"x11:deeppink4", "x11:deepskyblue1", "x11:deepskyblue2", "x11:deepskyblue3", 
"x11:deepskyblue4", "x11:dodgerblue1", "x11:dodgerblue2",
-"x11:dodgerblue3", "x11:dodgerblue4", "x11:firebrick1", "x11:firebrick2", 
"x11:firebrick3", "x11:firebrick4", "x11:gold1", "x11:gold2",
-"x11:gold3", "x11:gold4", "x11:goldenrod1", "x11:goldenrod2", 
"x11:goldenrod3", "x11:goldenrod4", "x11:green1", "x11:green2", "x11:green3",
-"x11:green4", "x11:honeydew1", "x11:honeydew2", "x11:honeydew3", 
"x11:honeydew4", "x11:hotpink1", "x11:hotpink2", "x11:hotpink3", "x11:hotpink4",
-"x11:indianred1", "x11:indianred2", "x11:indianred3", "x11:indianred4", 
"x11:ivory1", "x11:ivory2", "x11:ivory3", "x11:ivory4", "x11:khaki1",
-"x11:khaki2", "x11:khaki3", "x11:khaki4", "x11:lavenderblush1", 
"x11:lavenderblush2", "x11:lavenderblush3", "x11:lavenderblush4", 
"x11:lemonchiffon1",
-"x11:lemonchiffon2", "x11:lemonchiffon3", "x11:lemonchiffon4", 
"x11:lightblue1", "x11:lightblue2", "x11:lightblue3", "x11:lightblue4",
-"x11:lightcyan1", "x11:lightcyan2", "x11:lightcyan3", "x11:lightcyan4", 
"x11:lightgoldenrod1", "x11:lightgoldenrod2", "x11:lightgoldenrod3",
-"x11:lightgoldenrod4", "x11:lightpink1", "x11:lightpink2", "x11:lightpink3", 
"x11:lightpink4", "x11:lightsalmon1", "x11:lightsalmon2",
-"x11:lightsalmon3", "x11:lightsalmon4", "x11:lightskyblue1", 
"x11:lightskyblue2", "x11:lightskyblue3", "x11:lightskyblue4", 
"x11:lightsteelblue1",
-"x11:lightsteelblue2", "x11:lightsteelblue3", "x11:lightsteelblue4", 
"x11:lightyellow1", "x11:lightyellow2", "x11:lightyellow3",
-"x11:lightyellow4", "x11:magenta1", "x11:magenta2", "x11:magenta3", 
"x11:magenta4", "x11:maroon1", "x11:maroon2", "x11:maroon3", "x11:maroon4",
-"x11:mediumorchid1", "x11:mediumorchid2", "x11:mediumorchid3", 
"x11:mediumorchid4", "x11:mediumpurple1", "x11:mediumpurple2", 
"x11:mediumpurple3",
-"x11:mediumpurple4", "x11:mistyrose1", "x11:mistyrose2", "x11:mistyrose3", 
"x11:mistyrose4", "x11:navajowhite1", "x11:navajowhite2",
-"x11:navajowhite3", "x11:navajowhite4", "x11:olivedrab1", "x11:olivedrab2", 
"x11:olivedrab3", "x11:olivedrab4", "x11:orange1", "x11:orange2",
-"x11:orange3", "x11:orange4", "x11:orangered1", "x11:orangered2", 
"x11:orangered3", "x11:orangered4", "x11:orchid1", "x11:orchid2",
-"x11:orchid3", "x11:orchid4", "x11:palegreen1", "x11:palegreen2", 
"x11:palegreen3", "x11:palegreen4", "x11:paleturquoise1", "x11:paleturquoise2",
-"x11:paleturquoise3", "x11:paleturquoise4", "x11:palevioletred1", 
"x11:palevioletred2", "x11:palevioletred3", "x11:palevioletred4",
-"x11:peachpuff1", "x11:peachpuff2", "x11:peachpuff3", "x11:peachpuff4", 
"x11:pink1", "x11:pink2", "x11:pink3", "x11:pink4", "x11:plum1",
-"x11:plum2", "x11:plum3", "x11:plum4", "x11:purple1", "x11:purple2", 
"x11:purple3", "x11:purple4", "x11:red1", "x11:red2", "x11:red3",
-"x11:red4", "x11:rosybrown1", "x11:rosybrown2", "x11:rosybrown3", 
"x11:rosybrown4", "x11:royalblue1", "x11:royalblue2", "x11:royalblue3",
-"x11:royalblue4", "x11:salmon1", "x11:salmon2", "x11:salmon3", "x11:salmon4", 
"x11:seagreen1", "x11:seagreen2", "x11:seagreen3", "x11:seagreen4",
-"x11:seashell1", "x11:seashell2", "x11:seashell3", "x11:seashell4", 
"x11:sienna1", "x11:sienna2", "x11:sienna3", "x11:sienna4", "x11:skyblue1",
-"x11:skyblue2", "x11:skyblue3", "x11:skyblue4", "x11:slateblue1", 
"x11:slateblue2", "x11:slateblue3", "x11:slateblue4", "x11:slategray1",
-"x11:slategray2", "x11:slategray3", "x11:slategray4", "x11:snow1", 
"x11:snow2", "x11:snow3", "x11:snow4", "x11:springgreen1", "x11:springgreen2",
-"x11:springgreen3", "x11:springgreen4", "x11:steelblue1", "x11:steelblue2", 
"x11:steelblue3", "x11:steelblue4", "x11:tan1", "x11:tan2", "x11:tan3",
-"x11:tan4", "x11:thistle1", "x11:thistle2", "x11:thistle3", "x11:thistle4", 
"x11:tomato1", "x11:tomato2", "x11:tomato3", "x11:tomato4",
-"x11:turquoise1", "x11:turquoise2", "x11:turquoise3", "x11:turquoise4", 
"x11:violetred1", "x11:violetred2", "x11:violetred3", "x11:violetred4",
-"x11:wheat1", "x11:wheat2", "x11:wheat3", "x11:wheat4", "x11:yellow1", 
"x11:yellow2", "x11:yellow3", "x11:yellow4", "x11:gray0", "x11:gray0", 
"x11:green0",
-"x11:maroon0", "x11:purple0", 0};
-
-/// LaTeX names for (xcolor) colors beyond the base ones (svgnames)
-char const * const known_svgnames_textcolors[] = { "AliceBlue", 
"AntiqueWhite", "Aqua", "Aquamarine", "Azure", "Beige",
-"Bisque", "Black", "BlanchedAlmond", "Blue", "BlueViolet", "Brown", 
"BurlyWood", "CadetBlue", "Chartreuse",
-"Chocolate", "Coral", "CornflowerBlue", "Cornsilk", "Crimson", "Cyan", 
"DarkBlue", "DarkCyan", "DarkGoldenrod",
-"DarkGray", "DarkGrey", "DarkGreen", "DarkKhaki", "DarkMagenta", 
"DarkOliveGreen", "DarkOrange", "DarkOrchid", "DarkRed",
-"DarkSalmon", "DarkSeaGreen", "DarkSlateBlue", "DarkSlateGray", 
"DarkSlateGrey", "DarkTurquoise", "DarkViolet", "DeepPink", "DeepSkyBlue",
-"DimGray", "DimGrey", "DodgerBlue", "FireBrick", "FloralWhite", "ForestGreen", 
"Fuchsia", "Gainsboro", "GhostWhite", "Gold",
-"Goldenrod", "Gray", "Grey", "Green", "GreenYellow", "Honeydew", "HotPink", 
"IndianRed", "Indigo", "Ivory", "Khaki", "Lavender",
-"LavenderBlush", "LawnGreen", "LemonChiffon", "LightBlue", "LightCoral", 
"LightCyan", "LightGoldenrod",
-"LightGoldenrodYellow", "LightGray", "LightGray", "LightGreen", "LightPink", 
"LightSalmon", "LightSeaGreen", "LightSkyBlue",
-"LightSlateBlue", "LightSlateGray", "LightSlateGrey", "LightSteelBlue", 
"LightYellow", "Lime", "LimeGreen", "Linen", "Magenta", "Maroon",
-"MediumAquamarine", "MediumBlue", "MediumOrchid", "MediumPurple", 
"MediumSeaGreen", "MediumSlateBlue", "MediumSpringGreen",
-"MediumTurquoise", "MediumVioletRed", "MidnightBlue", "MintCream", 
"MistyRose", "Moccasin", "NavajoWhite", "Navy", "NavyBlue",
-"OldLace", "Olive", "OliveDrab", "Orange", "OrangeRed", "Orchid", 
"PaleGoldenrod", "PaleGreen", "PaleTurquoise",
-"PaleVioletRed", "PapayaWhip", "PeachPuff", "Peru", "Pink", "Plum", 
"PowderBlue", "Purple", "Red", "RosyBrown", "RoyalBlue",
-"SaddleBrown", "Salmon", "SandyBrown", "SeaGreen", "Seashell", "Sienna", 
"Silver", "SkyBlue", "SlateBlue", "SlateGray", "SlateGrey", "Snow",
-"SpringGreen", "SteelBlue", "Tan", "Teal", "Thistle", "Tomato", "Turquoise", 
"Violet", "VioletRed", "Wheat", "White",
-"WhiteSmoke", "Yellow", "YellowGreen", 0 };
-
-/// LyX names for (xcolor) colors beyond the base ones (svgnames)
-char const * const known_coded_svgnames_textcolors[] = { "svg:aliceblue",
-"svg:antiquewhite", "svg:aqua", "svg:aquamarine", "svg:azure", "svg:beige", 
"svg:bisque", "svg:black",
-"svg:blanchedalmond", "svg:blue", "svg:blueviolet", "svg:brown", 
"svg:burlywood", "svg:cadetblue", "svg:chartreuse",
-"svg:chocolate", "svg:coral", "svg:cornflowerblue", "svg:cornsilk", 
"svg:crimson", "svg:cyan", "svg:darkblue",
-"svg:darkcyan", "svg:darkgoldenrod", "svg:darkgray", "svg:darkgray", 
"svg:darkgreen", "svg:darkkhaki", "svg:darkmagenta",
-"svg:darkolivegreen", "svg:darkorange", "svg:darkorchid", "svg:darkred", 
"svg:darksalmon", "svg:darkseagreen",
-"svg:darkslateblue", "svg:darkslategray", "svg:darkslategray", 
"svg:darkturquoise", "svg:darkviolet", "svg:deeppink", "svg:deepskyblue",
-"svg:dimgray", "svg:dimgray", "svg:dodgerblue", "svg:firebrick", 
"svg:floralwhite", "svg:forestgreen", "svg:fuchsia", "svg:gainsboro",
-"svg:ghostwhite", "svg:gold", "svg:goldenrod", "svg:gray", "svg:gray", 
"svg:green", "svg:greenyellow", "svg:honeydew", "svg:hotpink",
-"svg:indianred", "svg:indigo", "svg:ivory", "svg:khaki", "svg:lavender", 
"svg:lavenderblush", "svg:lawngreen",
-"svg:lemonchiffon", "svg:lightblue", "svg:lightcoral", "svg:lightcyan", 
"svg:lightgoldenrod", "svg:lightgoldenrodyellow",
-"svg:lightgray", "svg:lightgray", "svg:lightgreen", "svg:lightpink", 
"svg:lightsalmon", "svg:lightseagreen", "svg:lightskyblue",
-"svg:lightslateblue", "svg:lightslategray", "svg:lightslategray", 
"svg:lightsteelblue", "svg:lightyellow", "svg:lime", "svg:limegreen",
-"svg:linen", "svg:magenta", "svg:maroon", "svg:mediumaquamarine", 
"svg:mediumblue", "svg:mediumorchid", "svg:mediumpurple",
-"svg:mediumseagreen", "svg:mediumslateblue", "svg:mediumspringgreen", 
"svg:mediumturquoise", "svg:mediumvioletred", "svg:midnightblue",
-"svg:mintcream", "svg:mistyrose", "svg:moccasin", "svg:navajowhite", 
"svg:navyblue", "svg:navyblue", "svg:oldlace", "svg:olive", "svg:olivedrab",
-"svg:orange", "svg:orangered", "svg:orchid", "svg:palegoldenrod", 
"svg:palegreen", "svg:paleturquoise", "svg:palevioletred",
-"svg:papayawhip", "svg:peachpuff", "svg:peru", "svg:pink", "svg:plum", 
"svg:powderblue", "svg:purple", "svg:red", "svg:rosybrown",
-"svg:royalblue", "svg:saddlebrown", "svg:salmon", "svg:sandybrown", 
"svg:seagreen", "svg:seashell", "svg:sienna", "svg:silver",
-"svg:skyblue", "svg:slateblue", "svg:slategray", "svg:slategray", "svg:snow", 
"svg:springgreen", "svg:steelblue", "svg:tan", "svg:teal", "svg:thistle",
-"svg:tomato", "svg:turquoise", "svg:violet", "svg:violetred", "svg:wheat", 
"svg:white", "svg:whitesmoke", "svg:yellow",
-"svg:yellowgreen", 0 };
-
 /// Known special characters which need skip_spaces_braces() afterwards
 char const * const known_special_chars[] = {"ldots",
 "lyxarrow", "textcompwordmark",
@@ -1278,43 +1128,16 @@ void parse_box(Parser & p, ostream & os, unsigned 
outer_flags,
                shadowsize = shadow_size;
        else
                shadowsize = "4pt";
+
        string framecolor = "black";
        string backgroundcolor = "none";
-       char const * const * where = 0;
-       if (!frame_color.empty()) {
+       if (!frame_color.empty())
                // check the case that a standard color is used
-               if (is_known(frame_color, known_basic_colors)) {
-                       framecolor = frame_color;
-               } else if (is_known(frame_color, known_basic_xcolors)) {
-                       framecolor = frame_color;
-                       preamble.registerAutomaticallyLoadedPackage("xcolor");
-               // With xcolor, svgnames colors get priority with clashing names
-               } else if (preamble.svgnames() && (where = 
is_known(frame_color, known_svgnames_textcolors))) {
-                       framecolor = known_coded_svgnames_textcolors[where - 
known_svgnames_textcolors];
-                       preamble.registerAutomaticallyLoadedPackage("xcolor");
-               } else if ((where = is_known(frame_color, known_textcolors))) {
-                       framecolor = known_coded_textcolors[where - 
known_textcolors];
-                       preamble.registerAutomaticallyLoadedPackage("xcolor");
-               } else if (preamble.isCustomColor(frame_color))
-                       framecolor = frame_color;
-       }
-       if (!background_color.empty()) {
+               framecolor = preamble.getLyXColor(frame_color, true);
+       if (!background_color.empty())
                // check the case that a standard color is used
-               if (is_known(background_color, known_basic_colors)) {
-                       backgroundcolor = background_color;
-               } else if (is_known(background_color, known_basic_xcolors)) {
-                       backgroundcolor = background_color;
-                       preamble.registerAutomaticallyLoadedPackage("xcolor");
-               // With xcolor, svgnames colors get priority with clashing names
-               } else if (preamble.svgnames() && (where = 
is_known(background_color, known_svgnames_textcolors))) {
-                       backgroundcolor = known_coded_svgnames_textcolors[where 
- known_svgnames_textcolors];
-                       preamble.registerAutomaticallyLoadedPackage("xcolor");
-               } else if ((where = is_known(background_color, 
known_textcolors))) {
-                       backgroundcolor = known_coded_textcolors[where - 
known_textcolors];
-                       preamble.registerAutomaticallyLoadedPackage("xcolor");
-               } else if (preamble.isCustomColor(background_color))
-                       backgroundcolor = background_color;
-       }
+               backgroundcolor = preamble.getLyXColor(background_color, true);
+
        // if there is a color box around the \begin statements have not yet 
been parsed
        // so do this now
        if (!frame_color.empty() || !background_color.empty()) {
@@ -4467,56 +4290,15 @@ void parse_text(Parser & p, ostream & os, unsigned 
flags, bool outer,
                if (t.cs() == "textcolor") {
                        // scheme is \textcolor{color name}{text}
                        string const color = p.verbatim_item();
-                       // we support the predefined colors of the color  and 
the xcolor package
-                       if (is_known(color, known_basic_colors)) {
-                                       context.check_layout(os);
-                                       os << "\n\\color " << color << "\n";
-                                       parse_text_snippet(p, os, FLAG_ITEM, 
outer, context);
-                                       context.check_layout(os);
-                                       os << "\n\\color inherit\n";
-                                       
preamble.registerAutomaticallyLoadedPackage("color");
-                       } else if (is_known(color, known_basic_xcolors)) {
-                                       context.check_layout(os);
-                                       os << "\n\\color " << color << "\n";
-                                       parse_text_snippet(p, os, FLAG_ITEM, 
outer, context);
-                                       context.check_layout(os);
-                                       os << "\n\\color inherit\n";
-                                       
preamble.registerAutomaticallyLoadedPackage("xcolor");
-                       // With xcolor, svgnames colors get priority with 
clashing names
-                       } else if (preamble.svgnames() && (where = 
is_known(color, known_svgnames_textcolors))) {
-                                       context.check_layout(os);
-                                       os << "\n\\color " << 
known_coded_svgnames_textcolors[where - known_svgnames_textcolors] << "\n";
-                                       parse_text_snippet(p, os, FLAG_ITEM, 
outer, context);
-                                       context.check_layout(os);
-                                       os << "\n\\color inherit\n";
-                                       
preamble.registerAutomaticallyLoadedPackage("xcolor");
-                       // now check for the other xcolor named colors
-                       } else if ((where = is_known(color, known_textcolors))) 
{
-                                       context.check_layout(os);
-                                       os << "\n\\color " << 
known_coded_textcolors[where - known_textcolors] << "\n";
-                                       parse_text_snippet(p, os, FLAG_ITEM, 
outer, context);
-                                       context.check_layout(os);
-                                       os << "\n\\color inherit\n";
-                                       
preamble.registerAutomaticallyLoadedPackage("xcolor");
-                       // these are the colors we generate for dvipsnames when 
they clash with svgnames
-                       } else if (preamble.svgnames() && prefixIs(color, 
"DVIPS")
-                                  && (where = is_known(color.substr(5), 
known_textcolors))) {
-                                       context.check_layout(os);
-                                       os << "\n\\color " << 
known_coded_textcolors[where - known_textcolors] << "\n";
-                                       parse_text_snippet(p, os, FLAG_ITEM, 
outer, context);
-                                       context.check_layout(os);
-                                       os << "\n\\color inherit\n";
-                                       
preamble.registerAutomaticallyLoadedPackage("xcolor");
-                       // custom colors
-                       } else if (preamble.isCustomColor(color)) {
+                       // we support the predefined colors of the color and 
the xcolor package
+                       string const lyxcolor = preamble.getLyXColor(color, 
true);
+                       if (!lyxcolor.empty()) {
                                context.check_layout(os);
-                               os << "\n\\color " << color << "\n";
+                               os << "\n\\color " << lyxcolor << "\n";
                                parse_text_snippet(p, os, FLAG_ITEM, outer, 
context);
                                context.check_layout(os);
                                os << "\n\\color inherit\n";
-                               
preamble.registerAutomaticallyLoadedPackage("color");
                        } else
-                               // remaining (unknown) colors
                                output_ert_inset(os, t.asInput() + "{" + color 
+ "}", context);
                        continue;
                }
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to