commit 87397d2c29c603045d7cec83abb7a95cbc47dd59
Author: Juergen Spitzmueller <[email protected]>
Date: Sun Feb 23 10:17:09 2025 +0100
tex2lyx support for nw textcolors
Also some further color parsing improvements
---
src/tex2lyx/Preamble.cpp | 29 +++++++++++++++++++++---
src/tex2lyx/text.cpp | 57 ++++++++++++++++++++++++++++++++++++++----------
2 files changed, 72 insertions(+), 14 deletions(-)
diff --git a/src/tex2lyx/Preamble.cpp b/src/tex2lyx/Preamble.cpp
index 3267a96a89..f453f993b5 100644
--- a/src/tex2lyx/Preamble.cpp
+++ b/src/tex2lyx/Preamble.cpp
@@ -185,9 +185,14 @@ const char * const known_if_commands[] = {"if",
"ifarydshln", "ifbraket",
"ifcancel", "ifcolortbl", "ifeurosym", "ifmarginnote", "ifmmode", "ifpdf",
"ifsidecap", "ifupgreek", 0};
-const char * const known_basic_colors[] = {"black", "blue", "brown", "cyan",
- "darkgray", "gray", "green", "lightgray", "lime", "magenta", "orange",
"olive",
- "pink", "purple", "red", "teal", "violet", "white", "yellow", 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",
@@ -2635,6 +2640,9 @@ void Preamble::parse(Parser & p, string const &
forceclass,
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];
@@ -2664,6 +2672,9 @@ void Preamble::parse(Parser & p, string const &
forceclass,
// 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];
@@ -3233,6 +3244,9 @@ void Preamble::parse(Parser & p, string const &
forceclass,
// 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];
@@ -3246,6 +3260,9 @@ void Preamble::parse(Parser & p, string const &
forceclass,
// 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];
@@ -3259,6 +3276,9 @@ void Preamble::parse(Parser & p, string const &
forceclass,
// 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];
@@ -3272,6 +3292,9 @@ void Preamble::parse(Parser & p, string const &
forceclass,
// 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];
diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index fd7aa4e1e4..b6a36e758d 100644
--- a/src/tex2lyx/text.cpp
+++ b/src/tex2lyx/text.cpp
@@ -299,6 +299,15 @@ 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",
@@ -1271,10 +1280,41 @@ void parse_box(Parser & p, ostream & os, unsigned
outer_flags,
shadowsize = "4pt";
string framecolor = "black";
string backgroundcolor = "none";
- if (!frame_color.empty())
- framecolor = frame_color;
- if (!background_color.empty())
- backgroundcolor = background_color;
+ char const * const * where = 0;
+ 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()) {
+ // check the case that a standard color is used
+ if (is_known(background_color, known_basic_colors)) {
+ backgroundcolor = background_color;
+ } else if (is_known(frame_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;
+ }
// 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()) {
@@ -4428,19 +4468,14 @@ void parse_text(Parser & p, ostream & os, unsigned
flags, bool outer,
// 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 (color == "black" || color == "blue" || color ==
"cyan"
- || color == "green" || color == "magenta" ||
color == "red"
- || color == "white" || color == "yellow") {
+ 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 (color == "brown" || color == "darkgray" ||
color == "gray"
- || color == "lightgray" || color == "lime" ||
color == "olive"
- || color == "orange" || color == "pink" ||
color == "purple"
- || color == "teal" || color == "violet") {
+ } 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);
--
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs