[latex3-commits] [l3svn] 02/02: Rework colour support
noreply at latex-project.org
noreply at latex-project.org
Thu Jun 15 12:03:02 CEST 2017
This is an automated email from the git hooks/post-receive script.
joseph pushed a commit to branch master
in repository l3svn.
commit 38014e7de69cf30329690f8f5e6fcd3b55800c1e
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Thu Jun 15 10:59:12 2017 +0100
Rework colour support
This moves more of the code to l3color rather than l3drivers.
Most notably, the colour data is now stored in a driver-independent form.
That requires some work to pick up LaTeX2e data.
---
l3kernel/l3color.dtx | 33 +++++++++++-
l3kernel/l3drivers.dtx | 87 ++++++++++++++++++++++++-------
l3kernel/testfiles/m3expl001.luatex.tlg | 6 ++-
l3kernel/testfiles/m3expl001.ptex.tlg | 2 +-
l3kernel/testfiles/m3expl001.tlg | 6 ++-
l3kernel/testfiles/m3expl001.uptex.tlg | 2 +-
l3kernel/testfiles/m3expl001.xetex.tlg | 2 +-
l3kernel/testfiles/m3expl003.luatex.tlg | 6 ++-
l3kernel/testfiles/m3expl003.ptex.tlg | 2 +-
l3kernel/testfiles/m3expl003.tlg | 6 ++-
l3kernel/testfiles/m3expl003.uptex.tlg | 2 +-
l3kernel/testfiles/m3expl003.xetex.tlg | 2 +-
12 files changed, 127 insertions(+), 29 deletions(-)
diff --git a/l3kernel/l3color.dtx b/l3kernel/l3color.dtx
index 7201aac..15daa96 100644
--- a/l3kernel/l3color.dtx
+++ b/l3kernel/l3color.dtx
@@ -51,6 +51,25 @@
% material here is mainly intended to support a small number of low-level
% requirements in other \pkg{l3kernel} modules.
%
+% \begin{variable}[added = 2017-06-15]{\l_color_current_tl}
+% The color currently active for foreground (text, \emph{etc.}) material.
+% This is stored in the form of a color model followed by one or more
+% values in the range $[0,1]$: these determine the color. The model and
+% applicable data format must be one of the following:
+% \begin{itemize}
+% \item \texttt{gray \meta{gray}} Grayscale color with the \meta{gray}
+% value running from $0$ (fully black) to $1$ (fully white)
+% \item \texttt{cmyk \meta{cyan} \meta{magenta} \meta{yellow} \meta{black}}
+% \item \texttt{rgb \meta{red} \meta{green} \meta{blue}}
+% \end{itemize}
+% Notice that the value are separated by spaces.
+% \begin{texnote}
+% This format is the native one for \texttt{dvips} color specials:
+% other drivers are expected to convert to their own format when
+% writing color data to output.
+% \end{texnote}
+% \end{function}
+%
% \section{Color in boxes}
%
% Controlling the color of text in boxes requires a small number of control
@@ -105,10 +124,22 @@
% current color \enquote{now}.
% \begin{macrocode}
\cs_new_protected:Npn \color_ensure_current:
- { \__driver_color_ensure_current: }
+ {
+ \__driver_color_ensure_current:
+ \group_insert_after:N \__driver_color_reset:
+ }
% \end{macrocode}
% \end{macro}
%
+% \begin{variable}{\l_color_current_tl}
+% The current color: the format here is taken from \texttt{dvips} but it
+% is easy enough to convert to \texttt{pdfmode} as required.
+% \begin{macrocode}
+\tl_new:N \l_color_current_tl
+\tl_set:Nn \l_color_current_tl { gray~0 }
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/l3kernel/l3drivers.dtx b/l3kernel/l3drivers.dtx
index 1f29099..f5a78a7 100644
--- a/l3kernel/l3drivers.dtx
+++ b/l3kernel/l3drivers.dtx
@@ -510,21 +510,22 @@
%<*dvisvgm|dvipdfmx|dvips|xdvipdfmx>
% \end{macrocode}
%
-% \begin{variable}{\l_@@_color_current_tl}
-% The current color in driver-dependent format.
+% \begin{macro}[aux]{\@@_color_pickup:}
+% Allow for \LaTexe{}.
% \begin{macrocode}
-\tl_new:N \l_@@_color_current_tl
-\tl_set:Nn \l_@@_color_current_tl { gray~0 }
%<*package>
\AtBeginDocument
{
\@ifpackageloaded { color }
- { \tl_set:Nn \l_@@_color_current_tl { \current at color } }
- { }
+ {
+ \cs_new_protected:Npn \@@_color_pickup:
+ { \tl_set_eq:NN \l_color_current_tl \current at color }
+ }
+ { \cs_new_protected:Npn \@@_color_pickup: { } }
}
%</package>
% \end{macrocode}
-% \end{variable}
+% \end{macro}
%
% \begin{macro}[int]{\@@_color_ensure_current:}
% \begin{macro}[aux]{\@@_color_reset:}
@@ -532,8 +533,10 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_color_ensure_current:
{
- \tex_special:D { color~push~\l_@@_color_current_tl }
- \group_insert_after:N \@@_color_reset:
+%<*package>
+ \@@_color_pickup:
+%</package>
+ \tex_special:D { color~push~\l_color_current_tl }
}
\cs_new_protected:Npn \@@_color_reset:
{ \tex_special:D { color~pop } }
@@ -551,22 +554,46 @@
%<*pdfmode>
% \end{macrocode}
%
-% \begin{variable}{\l_@@_color_current_tl}
+% \begin{macro}[aux]{\@@_color_pickup:}
+% \begin{macro}[aux]{\@@_color_pickup_aux:}
% The current color in driver-dependent format: pick up the package-mode
-% data if available.
+% data if available. We end up converting back and forward in this route as
+% we store our color data in \texttt{dvips} format.
% \begin{macrocode}
-\tl_new:N \l_@@_color_current_tl
-\tl_set:Nn \l_@@_color_current_tl { 0~g~0~G }
%<*package>
\AtBeginDocument
{
\@ifpackageloaded { color }
- { \tl_set:Nn \l_@@_color_current_tl { \current at color } }
- { }
+ {
+ \cs_new_protected:Npn \@@_color_pickup:
+ {
+ \tl_set:Nx \l_color_current_tl
+ {
+ \exp_after:wN \@@_color_pickup_aux:w
+ \l_color_current_tl ~ 0 ~ 0 ~ 0 \q_stop
+ }
+ }
+ \cs_new:Npn \@@_color_pickup_aux:w #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \q_stop
+ {
+ \str_if_eq:nnTF {#2} { g }
+ { gray ~ #1 }
+ {
+ \str_if_eq:nnTF {#4} { rg }
+ { rgb ~ #1 ~ #2 ~ #3 }
+ {
+ \str_if_eq:nnTF {#5} { k }
+ { cmyk ~ #1 ~ #2 ~ #3 ~ #4 }
+ { gray ~ #1 }
+ }
+ }
+ }
+ }
+ { \cs_new_protected:Npn \@@_color_pickup: { } }
}
%</package>
% \end{macrocode}
-% \end{variable}
+% \end{macro}
+% \end{macro}
%
% \begin{variable}{\l_@@_color_stack_int}
% \pdfTeX{} and \LuaTeX{} have multiple stacks available, and to track
@@ -577,19 +604,42 @@
% \end{variable}
%
% \begin{macro}[int]{\@@_color_ensure_current:}
+% \begin{macro}[aux, EXP]
+% {
+% \@@_color_convert:w, \@@_color_convert_gray:w,
+% \@@_color_convert_cmyk:w, \@@_color_convert_rgb:w
+% }
% \begin{macro}[aux]{\@@_color_reset:}
% There is a dedicated primitive/primitive interface for setting colors.
% As with scoping, this approach is not suitable for cached operations.
+% Since we are using the \texttt{dvips} format to store color, there is a
+% bit of work to correctly place it in the output.
% \begin{macrocode}
\cs_new_protected:Npx \@@_color_ensure_current:
{
+%<*package>
+ \exp_not:N \@@_color_pickup:
+%</package>
\cs_if_exist:NTF \luatex_pdfextension:D
{ \luatex_pdfextension:D colorstack }
{ \pdftex_pdfcolorstack:D }
\exp_not:N \l_@@_color_stack_int push
- { \exp_not:N \l_@@_color_current_tl }
- \group_insert_after:N \exp_not:N \@@_color_reset:
+ {
+ \exp_not:N \exp_after:wN
+ \exp_not:N \@@_color_convert:w
+ \exp_not:N \l_color_current_tl
+ \c_space_tl 0 ~ 0 ~ 0
+ \exp_not:N \q_stop
+ }
}
+\cs_new:Npn \@@_color_convert:w #1 ~
+ { \use:c { @@_color_convert_ #1 :w } }
+\cs_new:Npn \@@_color_convert_gray:w #1 ~ #2 \q_stop
+ { #1 ~ g ~ #1 ~ G }
+\cs_new:Npn \@@_color_convert_cmyk:w #1 ~ #2 ~ #3 ~ #4 \q_stop
+ { #1 ~ #2 ~ #3 ~ rg ~ #1 ~ #2 ~ #3 ~ RG }
+\cs_new:Npn \@@_color_convert_rgb:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \q_stop
+ { #1 ~ #2 ~ #3 ~ #4 ~ k ~ #1 ~ #2 ~ #3 ~ #4 ~ K }
\cs_new_protected:Npx \@@_color_reset:
{
\cs_if_exist:NTF \luatex_pdfextension:D
@@ -600,6 +650,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macrocode}
%</pdfmode>
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index e9556a7..730b63e 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -5294,6 +5294,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5651,10 +5652,13 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3pdfmode.def
-Defining \l__driver_color_current_tl on line ...
Defining \l__driver_color_stack_int on line ...
\l__driver_color_stack_int=\count192
Defining \__driver_color_ensure_current: on line ...
+Defining \__driver_color_convert:w on line ...
+Defining \__driver_color_convert_gray:w on line ...
+Defining \__driver_color_convert_cmyk:w on line ...
+Defining \__driver_color_convert_rgb:w on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
Defining \__driver_scope_begin: on line ...
diff --git a/l3kernel/testfiles/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg
index 0bdb6ef..427ba49 100644
--- a/l3kernel/testfiles/m3expl001.ptex.tlg
+++ b/l3kernel/testfiles/m3expl001.ptex.tlg
@@ -5284,6 +5284,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5642,7 +5643,6 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3dvipdfmx.def
-Defining \l__driver_color_current_tl on line ...
Defining \__driver_color_ensure_current: on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index 7501329..6486a60 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -5284,6 +5284,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5843,10 +5844,13 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3pdfmode.def
-Defining \l__driver_color_current_tl on line ...
Defining \l__driver_color_stack_int on line ...
\l__driver_color_stack_int=\count194
Defining \__driver_color_ensure_current: on line ...
+Defining \__driver_color_convert:w on line ...
+Defining \__driver_color_convert_gray:w on line ...
+Defining \__driver_color_convert_cmyk:w on line ...
+Defining \__driver_color_convert_rgb:w on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
Defining \__driver_scope_begin: on line ...
diff --git a/l3kernel/testfiles/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg
index ba6d092..8632ddb 100644
--- a/l3kernel/testfiles/m3expl001.uptex.tlg
+++ b/l3kernel/testfiles/m3expl001.uptex.tlg
@@ -5282,6 +5282,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5841,7 +5842,6 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3dvipdfmx.def
-Defining \l__driver_color_current_tl on line ...
Defining \__driver_color_ensure_current: on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 5d19c72..fe2c035 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -5272,6 +5272,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5625,7 +5626,6 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3xdvipdfmx.def
-Defining \l__driver_color_current_tl on line ...
Defining \__driver_color_ensure_current: on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index 0176dba..f2c56f7 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -5295,6 +5295,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5652,10 +5653,13 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3pdfmode.def
-Defining \l__driver_color_current_tl on line ...
Defining \l__driver_color_stack_int on line ...
\l__driver_color_stack_int=\count192
Defining \__driver_color_ensure_current: on line ...
+Defining \__driver_color_convert:w on line ...
+Defining \__driver_color_convert_gray:w on line ...
+Defining \__driver_color_convert_cmyk:w on line ...
+Defining \__driver_color_convert_rgb:w on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
Defining \__driver_scope_begin: on line ...
diff --git a/l3kernel/testfiles/m3expl003.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg
index 240a638..77762c0 100644
--- a/l3kernel/testfiles/m3expl003.ptex.tlg
+++ b/l3kernel/testfiles/m3expl003.ptex.tlg
@@ -5285,6 +5285,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5643,7 +5644,6 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3dvipdfmx.def
-Defining \l__driver_color_current_tl on line ...
Defining \__driver_color_ensure_current: on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg
index e861aab..a273b8b 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -5285,6 +5285,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5844,10 +5845,13 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3pdfmode.def
-Defining \l__driver_color_current_tl on line ...
Defining \l__driver_color_stack_int on line ...
\l__driver_color_stack_int=\count194
Defining \__driver_color_ensure_current: on line ...
+Defining \__driver_color_convert:w on line ...
+Defining \__driver_color_convert_gray:w on line ...
+Defining \__driver_color_convert_cmyk:w on line ...
+Defining \__driver_color_convert_rgb:w on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
Defining \__driver_scope_begin: on line ...
diff --git a/l3kernel/testfiles/m3expl003.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg
index d8582e3..d49cc73 100644
--- a/l3kernel/testfiles/m3expl003.uptex.tlg
+++ b/l3kernel/testfiles/m3expl003.uptex.tlg
@@ -5283,6 +5283,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5842,7 +5843,6 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3dvipdfmx.def
-Defining \l__driver_color_current_tl on line ...
Defining \__driver_color_ensure_current: on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index aa63090..2b02731 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -5273,6 +5273,7 @@ Defining message LaTeX/kernel/show-coffin on line ...
Defining \color_group_begin: on line ...
Defining \color_group_end: on line ...
Defining \color_ensure_current: on line ...
+Defining \l_color_current_tl on line ...
Defining \c_sys_jobname_str on line ...
Defining \c_sys_minute_int on line ...
Defining \c_sys_hour_int on line ...
@@ -5626,7 +5627,6 @@ Defining key expl/log-functions/true on line ...
Defining key expl/log-functions/false on line ...
Defining \c__expl_def_ext_tl on line ...
(l3xdvipdfmx.def
-Defining \l__driver_color_current_tl on line ...
Defining \__driver_color_ensure_current: on line ...
Defining \__driver_color_reset: on line ...
Defining \__driver_literal:n on line ...
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the latex3-commits
mailing list