summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty')
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty449
1 files changed, 445 insertions, 4 deletions
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
index 0d6d0ca16c6..8c291e4f258 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
@@ -20,8 +20,9 @@
%%
%% File: l3color.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3color}{2020-09-11}{}
+\ProvidesExplPackage{l3color}{2020-09-24}{}
{L3 Experimental color support}
+\int_new:N \l__color_internal_int
\tl_new:N \l__color_internal_tl
\scan_new:N \s__color_mark
\prg_new_conditional:Npnn \__color_if_defined:n #1 { T, F, TF }
@@ -698,7 +699,19 @@
\cs_new_protected:cpn { __color_export_space-sep-rgb:Nw } #1#2 \s__color_stop
{ \tl_set:Nx #1 {#2} }
\prop_new:N \l__color_internal_prop
-\int_new:N \g__color_separation_int
+\int_new:N \g__color_model_int
+\tl_const:Nn \c__color_fallback_cmyk_tl { 0 ~ 0 ~ 0 ~ 1 }
+\tl_const:Nn \c__color_fallback_gray_tl { 1 }
+\tl_const:Nn \c__color_fallback_rgb_tl { 1 ~ 1 ~ 1 }
+\prop_new:N \g__color_colorants_prop
+\prop_gput:Nnn \g__color_colorants_prop { black } { Black }
+\prop_gput:Nnn \g__color_colorants_prop { blue } { Blue }
+\prop_gput:Nnn \g__color_colorants_prop { cyan } { Cyan }
+\prop_gput:Nnn \g__color_colorants_prop { green } { Green }
+\prop_gput:Nnn \g__color_colorants_prop { magenta } { Magenta }
+\prop_gput:Nnn \g__color_colorants_prop { none } { None }
+\prop_gput:Nnn \g__color_colorants_prop { red } { Red }
+\prop_gput:Nnn \g__color_colorants_prop { yellow } { Yellow }
\tl_const:Nn \c__color_model_whitepoint_CIELAB_a_tl { 1.0985 ~ 1 ~ 0.3558 }
\tl_const:Nn \c__color_model_whitepoint_CIELAB_b_tl { 0.9807 ~ 1 ~ 1.1822 }
\tl_const:Nn \c__color_model_whitepoint_CIELAB_e_tl { 1 ~ 1 ~ 1 }
@@ -707,6 +720,19 @@
\tl_const:cn { c__color_model_whitepoint_CIELAB_d65_tl } { 0.9504 ~ 1 ~ 1.0888 }
\tl_const:cn { c__color_model_whitepoint_CIELAB_d75_tl } { 0.9497 ~ 1 ~ 1.2261 }
\tl_const:Nn \c__color_model_range_CIELAB_tl { 0 ~ 100 ~ -128 ~ 127 ~ -128 ~ 127 }
+\prop_new:N \g__color_alternative_model_prop
+\clist_map_inline:nn { cyan , magenta , yellow , black }
+ { \prop_gput:Nnn \g__color_alternative_model_prop {#1} { cmyk } }
+\clist_map_inline:nn { red , green , blue }
+ { \prop_gput:Nnn \g__color_alternative_model_prop {#1} { rgb } }
+\prop_new:N \g__color_alternative_values_prop
+\prop_gput:Nnn \g__color_alternative_values_prop { cyan } { 1 , 0 , 0 , 0 }
+\prop_gput:Nnn \g__color_alternative_values_prop { magenta } { 0 , 1 , 0 , 0 }
+\prop_gput:Nnn \g__color_alternative_values_prop { yellow } { 0 , 0 , 1 , 0 }
+\prop_gput:Nnn \g__color_alternative_values_prop { black } { 0 , 0 , 0 , 1 }
+\prop_gput:Nnn \g__color_alternative_values_prop { red } { 1 , 0 , 0 }
+\prop_gput:Nnn \g__color_alternative_values_prop { green } { 0 , 1 , 0 }
+\prop_gput:Nnn \g__color_alternative_values_prop { blue } { 0 , 0 , 1 }
\cs_new_protected:Npn \color_model_new:nnn #1#2#3
{
\exp_args:Nee \__color_model_new:nnn
@@ -779,7 +805,7 @@
\cs_new_protected:Npn \__color_model_separation:w
#1 , #2 , #3 , #4 , #5 \s__color_stop #6#7#8
{
- \int_gincr:N \g__color_separation_int
+ \int_gincr:N \g__color_model_int
\tl_const:cn { c__color_fallback_ #6 _tl } { 1 }
\cs_new_eq:cN { __color_parse_mix_ #6 :nw } \__color_parse_mix_gray:nw
\cs_new:cpn { __color_parse_model_ #6 :w } ##1 , ##2 \s__color_stop
@@ -789,11 +815,14 @@
\cs_new_protected:cpx { __color_backend_ ##1 _ #6 :n } ####1
{
\exp_not:c { __color_backend_ ##1 _ separation:nn }
- { color \int_use:N \g__color_separation_int } {####1}
+ { color \int_use:N \g__color_model_int } {####1}
}
}
\use:c { __color_model_separation_ #8 :nnnnnn }
{#6} {#7} {#1} {#2} {#3} {#4}
+ \prop_gput:Nnn \g__color_alternative_model_prop {#6} {#8}
+ \prop_gput:Nnx \g__color_colorants_prop {#6}
+ { \str_convert_pdfname:n {#7} }
\cs_new_protected:cpx { __color_model_ #6 _white: }
{
\prop_put:Nnn \exp_not:N \l__color_named_white_prop {#6} { 0 }
@@ -813,6 +842,7 @@
}
\__color_model_convert:nnn {#1} { cmyk } { rgb }
\__color_model_convert:nnn {#1} { cmyk } { gray }
+ \prop_gput:Nnn \g__color_alternative_values_prop {#1} { #3 , #4 , #5 , #6 }
\__color_backend_separation_init:nnnnn {#2} { /DeviceCMYK } { }
{ 0 ~ 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 ~ #6 }
}
@@ -826,6 +856,7 @@
}
\__color_model_convert:nnn {#1} { rgb } { cmyk }
\__color_model_convert:nnn {#1} { rgb } { gray }
+ \prop_gput:Nnn \g__color_alternative_values_prop {#1} { #3 , #4 , #5 }
\__color_backend_separation_init:nnnnn {#2} { /DeviceRGB } { }
{ 0 ~ 0 ~ 0 } { #3 ~ #4 ~ #5 }
}
@@ -846,6 +877,7 @@
\fp_eval:n {##1 * #3} ~
\fp_eval:n {##1 * #3}
}
+ \prop_gput:Nnn \g__color_alternative_values_prop {#1} {#3}
\__color_backend_separation_init:nnnnn {#2} { /DeviceGray } { } { 0 } {#3}
}
\cs_new_protected:Npn \__color_model_convert:nnn #1#2#3
@@ -887,6 +919,393 @@
{ unknown-CIELAB-illuminant } {#1}
}
}
+\cs_new_protected:Npn \__color_model_devicen:n #1
+ {
+ \prop_get:NnNTF \l__color_internal_prop { names }
+ \l__color_internal_tl
+ {
+ \exp_args:NV \__color_model_devicen:nn
+ \l__color_internal_tl {#1}
+ }
+ {
+ \__kernel_msg_error:nnn { color }
+ { DeviceN-requires-names } {#1}
+ }
+ }
+\cs_new_protected:Npn \__color_model_devicen:nn #1#2
+ {
+ \tl_clear:N \l__color_model_tl
+ \clist_map_inline:nn {#1}
+ {
+ \prop_get:NnNTF \g__color_alternative_model_prop {##1}
+ \l__color_internal_tl
+ {
+ \tl_if_empty:NTF \l__color_model_tl
+ { \tl_set_eq:NN \l__color_model_tl \l__color_internal_tl }
+ {
+ \str_if_eq:VVF \l__color_model_tl \l__color_internal_tl
+ {
+ \__kernel_msg_error:nnn { color }
+ { DeviceN-inconsistent-alternative }
+ {#2}
+ \clist_map_break:n { \use_none:nnnn }
+ }
+ }
+ }
+ {
+ \str_if_eq:nnF {##1} { none }
+ {
+ \__kernel_msg_error:nnn { color }
+ { DeviceN-no-alternative }
+ {#2}
+ }
+ }
+ }
+ \tl_if_empty:NTF \l__color_model_tl
+ {
+ \__kernel_msg_error:nnn { color }
+ { DeviceN-no-alternative } {#2}
+ }
+ { \exp_args:NV \__color_model_devicen:nnn \l__color_model_tl {#1} {#2} }
+ }
+\cs_new_protected:Npn \__color_model_devicen:nnn #1#2#3
+ {
+ \exp_args:Nx \__color_model_devicen:nnnn
+ { \clist_count:n {#2} } {#1} {#2} {#3}
+ }
+\cs_new_protected:Npn \__color_model_devicen:nnnn #1#2#3#4
+ {
+ \int_gincr:N \g__color_model_int
+ \tl_const:cx { c__color_fallback_ #4 _tl }
+ { \prg_replicate:nn {#1} { 1 ~ } }
+ \cs_if_exist_use:cF { __color_model_devicen_parse_ #1 :nn }
+ { \__color_model_devicen_parse_generic:nn }
+ {#4} {#1}
+ \clist_map_inline:nn { fill , stroke , select }
+ {
+ \cs_new_protected:cpx { __color_backend_ ##1 _ #4 :n } ####1
+ {
+ \exp_not:c { __color_backend_ ##1 _ devicen:nn }
+ { color \int_use:N \g__color_model_int } {####1}
+ }
+ }
+ \cs_new_protected:cpx { __color_model_ #4 _white: }
+ {
+ \prop_put:Nnn \exp_not:N \l__color_named_white_prop {#4}
+ { \prg_replicate:nn {#1} { 0 ~ } }
+ \exp_not:N \int_compare:nNnF { \tex_currentgrouplevel:D } = 0
+ { \group_insert_after:N \exp_not:c { __color_model_ #4 _ white: } }
+ }
+ \use:c { __color_model_ #4 _white: }
+ \__color_model_devicen_init:nnn {#1} {#2} {#3}
+ \__color_model_devicen_convert:nnn {#4} {#2} {#3}
+ }
+\cs_new_protected:cpn { __color_model_devicen_parse_1:nn } #1#2
+ {
+ \cs_new:cpn { __color_parse_model_ #1 :w } ##1 , ##2 \s__color_stop
+ { {#1} { \__color_parse_number:n {##1} } }
+ \cs_new_eq:cN { __color_parse_mix_ #1 :nw } \__color_parse_mix_gray:nw
+ }
+\cs_new_protected:cpn { __color_model_devicen_parse_2:nn } #1#2
+ {
+ \cs_new:cpn { __color_parse_model_ #1 :w } ##1 , ##2 , ##3 \s__color_stop
+ { {#1} { \__color_parse_number:n {##1} ~ \__color_parse_number:n {##2} } }
+ \cs_new:cpn { __color_parse_mix_ #1 :nw }
+ ##1##2 ~ ##3 \s__color_mark ##4 ~ ##5 \s__color_stop
+ {
+ \fp_eval:n { ##2 * ##1 + ##4 * ( 1 - ##1 ) } \c_space_tl
+ \fp_eval:n { ##3 * ##1 + ##5 * ( 1 - ##1 ) }
+ }
+ }
+\cs_new_protected:cpn { __color_model_devicen_parse_3:nn } #1#2
+ {
+ \cs_new:cpn { __color_parse_model_ #1 :w } ##1 , ##2 , ##3 , ##4 \s__color_stop
+ {
+ {#1}
+ {
+ \__color_parse_number:n {##1} ~
+ \__color_parse_number:n {##2} ~
+ \__color_parse_number:n {##3}
+ }
+ }
+ \cs_new_eq:cN { __color_parse_mix_ #1 :nw } \__color_parse_mix_rgb:nw
+ }
+\cs_new_protected:cpn { __color_model_devicen_parse_4:nn } #1#2
+ {
+ \cs_new:cpn { __color_parse_model_ #1 :w }
+ ##1 , ##2 , ##3 , ##4 , ##5 \s__color_stop
+ {
+ {#1}
+ {
+ \__color_parse_number:n {##1} ~
+ \__color_parse_number:n {##2} ~
+ \__color_parse_number:n {##3} ~
+ \__color_parse_number:n {##4}
+ }
+ }
+ \cs_new_eq:cN { __color_parse_mix_ #1 :nw } \__color_parse_mix_cmyk:nw
+ }
+\cs_new_protected:Npn \__color_model_devicen_parse_generic:nn #1#2
+ {
+ \cs_new:cpn { __color_parse_model_ #1 :w } ##1 , ##2 \s__color_stop
+ {
+ {#1}
+ { \__color_model_devicen_parse:nw {#2} ##1 , ##2 , \q_nil , \s__color_stop }
+ }
+ \cs_new:cpx { __color_parse_mix_ #1 :nw }
+ ##1 ##2 \s__color_mark ##3 \s__color_stop
+ {
+ \exp_not:N \__color_model_devicen_mix:nw {##1}
+ ##2 \c_space_tl \exp_not:N \q_nil \c_space_tl \exp_not:N \s__color_mark
+ ##3 \c_space_tl \exp_not:N \q_nil \c_space_tl \exp_not:N \s__color_stop
+ }
+ }
+\cs_new:Npn \__color_model_devicen_parse:nw #1#2 , #3 \s__color_stop
+ {
+ \int_compare:nNnT {#1} > 0
+ {
+ \quark_if_nil:nTF {#2}
+ { \prg_replicate:nn {#1} { 0 ~ } }
+ {
+ \__color_parse_number:n {#2}
+ \int_compare:nNnT {#1} > 1 { ~ }
+ \exp_args:Nf \__color_model_devicen_parse:nw
+ { \int_eval:n { #1 - 1 } } #3 \s__color_stop
+ }
+ }
+ }
+\cs_new:Npn \__color_model_devicen_mix:nw #1#2 ~ #3 \s__color_mark #4 ~ #5 \s__color_stop
+ {
+ \fp_eval:n { #2 * #1 + #4 * ( 1 - #1 ) }
+ \quark_if_nil:oF { \tl_head:w #3 \q_stop }
+ {
+ \c_space_tl
+ \__color_model_devicen_mix:nw {#1} #3 \s__color_mark #5 \s__color_stop
+ }
+ }
+\cs_new_protected:Npn \__color_model_devicen_init:nnn #1#2#3
+ {
+ \exp_args:Ne \__color_model_devicen_init:nnnn
+ {
+ \str_case:nn {#2}
+ {
+ { cmyk } { 4 }
+ { gray } { 1 }
+ { rgb } { 3 }
+ }
+ }
+ {#1} {#2} {#3}
+ }
+\cs_new_protected:Npn \__color_model_devicen_init:nnnn #1#2#3#4
+ {
+ \tl_set:Nx \l__color_internal_tl
+ { \prg_replicate:nn {#1} { 1.0 ~ } }
+ \int_zero:N \l__color_internal_int
+ \clist_map_inline:nn {#4}
+ {
+ \int_incr:N \l__color_internal_int
+ \prop_get:NnN \g__color_alternative_values_prop {##1}
+ \l__color_value_tl
+ \exp_after:wN \__color_model_devicen_transform:w
+ \l__color_value_tl , 0 , 0 , 0 \s__color_stop {#1} {#2}
+ }
+ \tl_put_right:Nx \l__color_internal_tl
+ {
+ \prg_replicate:nn {#1}
+ { neg ~ 1.0 ~ add ~ #1 ~ -1 ~ roll ~ }
+ \int_eval:n { #2 + 4 } ~ 4 ~ roll
+ \prg_replicate:nn {#2} { ~ pop }
+ }
+ \use:x
+ {
+ \__color_backend_devicen_init:nnn
+ {
+ \clist_map_function:nN {#4}
+ \__color_model_devicen_colorant:n
+ }
+ {
+ \str_case:nn {#3}
+ {
+ { cmyk } { /DeviceCMYK }
+ { gray } { /DeviceGray }
+ { rgb } { /DeviceRGB }
+ }
+ }
+ { \exp_not:V \l__color_internal_tl }
+ }
+ }
+\cs_new_protected:Npn \__color_model_devicen_transform:w
+ #1 , #2 , #3 , #4 , #5 \s__color_stop #6#7
+ {
+ \use:c { __color_model_devicen_transform_ #6 :nnnnn }
+ {#1} {#2} {#3} {#4} {#7}
+ }
+\cs_new_protected:cpn { __color_model_devicen_transform_1:nnnnn } #1#2#3#4#5
+ { \__color_model_devicen_transform:nnn {#5} { 1 } {#1} }
+\cs_new_protected:cpn { __color_model_devicen_transform_3:nnnnn } #1#2#3#4#5
+ {
+ \clist_map_inline { #1 , #2 , #3 }
+ { \__color_model_devicen_transform:nnn {#5} { 3 } {##1} }
+ }
+\cs_new_protected:cpn { __color_model_devicen_transform_4:nnnnn } #1#2#3#4#5
+ {
+ \clist_map_inline:nn { #1 , #2 , #3 , #4 }
+ { \__color_model_devicen_transform:nnn {#5} { 4 } {##1} }
+ }
+\cs_new_protected:Npn \__color_model_devicen_transform:nnn #1#2#3
+ {
+ \tl_put_right:Nx \l__color_internal_tl
+ {
+ \fp_compare:nNnF {#3} = \c_zero_fp
+ {
+ \int_eval:n { #1 - \l__color_internal_int + #2 } ~ index ~
+ #3 ~ neg ~ mul ~ 1.0 ~ add ~ mul ~
+ }
+ #2 ~ -1 ~ roll ~
+ }
+ }
+\cs_new:Npn \__color_model_devicen_colorant:n #1
+ {
+ / \prop_item:Nn \g__color_colorants_prop {#1} ~
+ }
+\cs_new_protected:Npn \__color_model_devicen_convert:nnn #1#2#3
+ {
+ \use:c { __color_model_devicen_convert_ #2 :nn } {#1} {#3}
+ }
+\cs_new_protected:Npn \__color_model_devicen_convert_cmyk:nn #1#2
+ {
+ \__color_model_convert:nnn {#1} { cmyk } { gray }
+ \__color_model_convert:nnn {#1} { cmyk } { rgb }
+ \__color_model_devicen_convert:nnnn {#1} { cmyk } { 4 } {#2}
+ }
+\cs_new_protected:Npn \__color_model_devicen_convert_gray:nn #1#2
+ {
+ \__color_model_convert:nnn {#1} { gray } { cmyk }
+ \__color_model_convert:nnn {#1} { gray } { rgb }
+ \__color_model_devicen_convert:nnnn {#1} { gray } { 1 } {#2}
+ }
+\cs_new_protected:Npn \__color_model_devicen_convert_rgb:nn #1#2
+ {
+ \__color_model_convert:nnn {#1} { rgb } { cmyk }
+ \__color_model_convert:nnn {#1} { rgb } { gray }
+ \__color_model_devicen_convert:nnnn {#1} { rgb } { 3 } {#2}
+ }
+\cs_new_protected:Npn \__color_model_devicen_convert:nnnn #1#2#3#4
+ {
+ \cs_new:cpx { __color_convert_ #1 _ #2 :w } ##1 \s__color_stop
+ {
+ \exp_not:c { __color_convert_devicen_ #2 : \prg_replicate:nn {#3} { n } w }
+ \prg_replicate:nn {#3} { { 1 } }
+ ##1 \exp_not:N \s__color_mark
+ \clist_map_function:nN {#4} \__color_model_devicen_convert:n
+ \exp_not:N \s__color_stop
+ }
+ }
+\cs_new:Npn \__color_model_devicen_convert:n #1
+ {
+ {
+ \exp_args:Ne \__color_model_devicen_convert_aux:n
+ { \prop_item:Nn \g__color_alternative_values_prop {#1} }
+ }
+ }
+\cs_new:Npn \__color_model_devicen_convert_aux:n #1
+ { \__color_model_devicen_convert_aux:w #1 , , , , \s__color_stop }
+\cs_new:Npn \__color_model_devicen_convert_aux:w #1 , #2 , #3 , #4 , #5 \s__color_stop
+ {
+ {#1}
+ \tl_if_blank:nF {#2}
+ {
+ {#2}
+ \tl_if_blank:nF {#3}
+ {
+ {#3}
+ \tl_if_blank:nF {#4} { {#4} }
+ }
+ }
+ }
+\cs_new:Npn \__color_convert_devicen_cmyk:nnnnw
+ #1#2#3#4#5 ~ #6 \s__color_mark #7#8 \s__color_stop
+ {
+ \__color_convert_devicen_cmyk:nnnnnnnnn {#5} {#1} {#2} {#3} {#4} #7
+ #6 \s__color_mark #8 \s__color_stop
+ }
+\cs_new:Npn \__color_convert_devicen_cmyk:nnnnnnnnn #1#2#3#4#5#6#7#8#9
+ {
+ \use:e
+ {
+ \exp_not:N \__color_convert_devicen_cmyk_aux:nnnnw
+ { \fp_eval:n { #2 * (1 - (#1 * #6)) } }
+ { \fp_eval:n { #3 * (1 - (#1 * #7)) } }
+ { \fp_eval:n { #4 * (1 - (#1 * #8)) } }
+ { \fp_eval:n { #5 * (1 - (#1 * #9)) } }
+ }
+ }
+\cs_new:Npn \__color_convert_devicen_cmyk_aux:nnnnw
+ #1#2#3#4 #5 \s__color_mark #6 \s__color_stop
+ {
+ \tl_if_blank:nTF {#5}
+ {
+ \fp_eval:n { 1 - #1 } ~
+ \fp_eval:n { 1 - #2 } ~
+ \fp_eval:n { 1 - #3 } ~
+ \fp_eval:n { 1 - #4 }
+ }
+ {
+ \__color_convert_devicen_cmyk:nnnnw {#1} {#2} {#3} {#4}
+ #5 \s__color_mark #6 \s__color_stop
+ }
+ }
+\cs_new:Npn \__color_convert_devicen_gray:nw
+ #1#2 ~ #3 \s__color_mark #4#5 \s__color_stop
+ {
+ \__color_convert_devicen_gray:nnn {#2} {#1} #4
+ #3 \s__color_mark #5 \s__color_stop
+ }
+\cs_new:Npn \__color_convert_devicen_gray:nnn #1#2#3
+ {
+ \exp_arsgs:Ne \__color_convert_devicen_gray_aux:nw
+ { \fp_eval:n { #2 * (1 - (#1 * #3)) } }
+ }
+\cs_new:Npn \__color_convert_devicen_gray_aux:nw
+ #1 #2 \s__color_mark #3 \s__color_stop
+ {
+ \tl_if_blank:nTF {#2}
+ { \fp_eval:n { 1 - #1 } }
+ {
+ \__color_convert_devicen_gray:nw {#1}
+ #2 \s__color_mark #3 \s__color_stop
+ }
+ }
+\cs_new:Npn \__color_convert_devicen_rgb:nnnw
+ #1#2#3#4 ~ #5 \s__color_mark #6#7 \s__color_stop
+ {
+ \__color_convert_devicen_cmyk:nnnnnn {#4} {#1} {#2} {#3} #6
+ #5 \s__color_mark #7 \s__color_stop
+ }
+\cs_new:Npn \__color_convert_devicen_rgb:nnnnnnn #1#2#3#4#5#6#7
+ {
+ \use:e
+ {
+ \exp_not:N \__color_convert_devicen_rgb_aux:nnnw
+ { \fp_eval:n { #2 * (1 - (#1 * #5)) } }
+ { \fp_eval:n { #3 * (1 - (#1 * #6)) } }
+ { \fp_eval:n { #4 * (1 - (#1 * #7)) } }
+ }
+ }
+\cs_new:Npn \__color_convert_devicen_rgb_aux:nnnw
+ #1#2#3 #4 \s__color_mark #5 \s__color_stop
+ {
+ \tl_if_blank:nTF {#4}
+ {
+ \fp_eval:n { 1 - #1 } ~
+ \fp_eval:n { 1 - #2 } ~
+ \fp_eval:n { 1 - #3 }
+ }
+ {
+ \__color_convert_devicen_rgb:nnnw {#1} {#2} {#3}
+ #4 \s__color_mark #5 \s__color_stop
+ }
+ }
\cs_new_protected:Npn \color_show:n #1
{
\msg_show:nnxxxx { LaTeX / color } { show }
@@ -923,6 +1342,28 @@
LaTeX~has~been~asked~to~convert~a~color~from~model~'#1'~
to~model'#2',~but~there~is~no~method~available~to~do~that.
}
+\__kernel_msg_new:nnnn { color } { DeviceN-inconsistent-alternative }
+ { DeviceN~color~spaces~require~a~single~alternative~space. }
+ {
+ LaTeX~has~been~asked~to~create~a~DeviceN~color~space~'#1',~
+ but~the~constituent~colors~do~not~have~a~common~alternative~
+ color.
+ }
+\__kernel_msg_new:nnnn { color } { DeviceN-no-alternative }
+ { DeviceN~color~spaces~require~an~alternative~space. }
+ {
+ LaTeX~has~been~asked~to~create~a~DeviceN~color~space~'#1',~
+ but~the~constituent~colors~do~not~all~have~a~device-based~alternative.
+ }
+\__kernel_msg_new:nnnn { color } { DeviceN-requires-names }
+ { DeviceN~color~space~'#1'~require~a~list~of~names. }
+ {
+ LaTeX~has~been~asked~to~create~a~DeviceN~color~space,~
+ but~no~\\ \\
+ \iow_indent:n { names~=~<names> }
+ \\ \\
+ key~was~given~with~the~correct~information.
+ }
\__kernel_msg_new:nnnn { color } { model-already-defined }
{ Color~model~'#1'~already~defined. }
{