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