commit 3134d2881ca6bf11e017b370fba54705f722a803
Author: Juergen Spitzmueller <[email protected]>
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
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs