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.sty1448
1 files changed, 0 insertions, 1448 deletions
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
deleted file mode 100644
index ad80915625b..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
+++ /dev/null
@@ -1,1448 +0,0 @@
-%%
-%% This is file `l3color.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3color.dtx (with options: `package')
-%%
-%% Copyright (C) 2017-2021 The LaTeX Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3color.dtx
-\RequirePackage{expl3}
-\ProvidesExplPackage{l3color}{2021-02-06}{}
- {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 }
- {
- \prop_if_exist:cTF { l__color_named_ #1 _prop }
- \prg_return_true:
- \prg_return_false:
- }
-\cs_new:Npn \__color_model:N #1 { \exp_after:wN \use_i:nn #1 }
-\cs_new:Npn \__color_values:N #1 { \exp_after:wN \use_ii:nn #1 }
-\cs_new_protected:Npn \__color_extract:nNN #1#2#3
- {
- \tl_set_eq:Nc #2 { l__color_named_ #1 _tl }
- \prop_get:cVN { l__color_named_ #1 _prop } #2 #3
- }
-\cs_generate_variant:Nn \__color_extract:nNN { V }
-\cs_new_protected:Npn \__color_convert:nnN #1#2#3
- { \__color_convert:nnVN {#1} {#2} #3 #3 }
-\cs_generate_variant:Nn \__color_convert:nnN { VV }
-\cs_new_protected:Npn \__color_convert:nnnN #1#2#3#4
- {
- \tl_set:Nx #4
- {
- \cs_if_exist:cTF { __color_convert_ #1 _ #2 :w }
- { \use:c { __color_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s__color_stop }
- { \use:c { c__color_fallback_ #2 _tl } }
- }
- }
-\cs_generate_variant:Nn \__color_convert:nnnN { nV , nnV }
-\cs_new:Npn \__color_convert_gray_rgb:w #1 ~ #2 \s__color_stop
- { #1 ~ #1 ~ #1 }
-\cs_new:Npn \__color_convert_gray_cmyk:w #1 ~ #2 \s__color_stop
- { 0 ~ 0 ~ 0 ~ \fp_eval:n { 1 - #1 } }
-\cs_new:Npn \__color_convert_rgb_gray:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
- { \fp_eval:n { 0.3 * #1 + 0.59 * #2 + 0.11 * #3 } }
-\cs_new:Npn \__color_convert_rgb_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop
- {
- \exp_args:Nf \__color_convert_rgb_cmyk:nnnn
- { \fp_eval:n { min ( 1 - #1 , 1 - #2 , 1 - #3 ) } } {#1} {#2} {#3}
- }
-\cs_new:Npn \__color_convert_rgb_cmyk:nnnn #1#2#3#4
- {
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #2 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #3 - #1 ) ) } \c_space_tl
- \fp_eval:n { min ( 1 , max ( 0 , 1 - #4 - #1 ) ) } \c_space_tl
- #1
- }
-\cs_new:Npn \__color_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s__color_stop
- { \fp_eval:n { 1 - min ( 1 , 0.3 * #1 + 0.59 * #2 + 0.11 * #3 + #4 ) } }
-\cs_new:Npn \__color_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s__color_stop
- {
- \fp_eval:n { 1 - min ( 1 , #1 + #4 ) } \c_space_tl
- \fp_eval:n { 1 - min ( 1 , #2 + #4 ) } \c_space_tl
- \fp_eval:n { 1 - min ( 1 , #3 + #4 ) }
- }
-\tl_new:N \l__color_model_tl
-\tl_new:N \l__color_value_tl
-\tl_new:N \l__color_next_model_tl
-\tl_new:N \l__color_next_value_tl
-\cs_new_protected:Npx \__color_parse:nN #1#2
- {
- \exp_not:N \__color_backend_pickup:N \exp_not:N \l__color_current_tl
- \tl_set:Nx \exp_not:c { l__color_named_ . _tl }
- { \exp_not:N \__color_model:N \exp_not:N \l__color_current_tl }
- \prop_put:NVx \exp_not:c { l__color_named_ . _prop }
- \exp_not:c { l__color_named_ . _tl }
- { \exp_not:N \__color_values:N \exp_not:N \l__color_current_tl }
- \exp_not:N \exp_args:Ne \exp_not:N \__color_parse_aux:nN
- { \exp_not:N \tl_to_str:n {#1} } #2
- }
-\cs_new_protected:Npn \__color_parse_aux:nN #1#2
- {
- \tl_if_exist:cTF { l__color_named_ #1 _prop }
- { \__color_parse_set_eq:Nn #2 {#1} }
- { \__color_parse:Nw #2#1 ! \s__color_stop }
- \__color_check_model:N #2
- }
-\cs_new_protected:Npn \__color_parse_set_eq:Nn #1#2
- {
- \tl_if_empty:NTF \l_color_fixed_model_tl
- { \exp_args:Nv \__color_parse_set_eq:nNn { l__color_named_ #2 _tl } }
- { \exp_args:NV \__color_parse_set_eq:nNn \l_color_fixed_model_tl }
- #1 {#2}
- }
-\cs_new_protected:Npn \__color_parse_set_eq:nNn #1#2#3
- {
- \prop_get:cnNTF
- { l__color_named_ #3 _prop } {#1}
- \l__color_value_tl
- { \tl_set:Nx #2 { {#1} { \l__color_value_tl } } }
- {
- \tl_set_eq:Nc \l__color_model_tl { l__color_named_ #3 _tl }
- \prop_get:cVN { l__color_named_ #3 _prop } \l__color_model_tl
- \l__color_value_tl
- \__color_convert:nnN
- \l__color_model_tl {#1} \l__color_value_tl
- \tl_set:Nx #2
- {
- {#1}
- { \l__color_value_tl }
- }
- }
- }
-\cs_new_protected:Npn \__color_parse:Nw #1#2 ! #3 \s__color_stop
- {
- \__color_if_defined:nTF {#2}
- {
- \tl_if_blank:nTF {#3}
- { \__color_parse_set_eq:Nn #1 {#2} }
- { \__color_parse_loop_init:Nnn #1 {#2} {#3} }
- }
- {
- \__kernel_msg_error:nnn { color } { unknown-color } {#2}
- \tl_set:Nn \l__color_current_tl { { gray } { 0 } }
- }
- }
-\cs_new_protected:Npn \__color_parse_loop_init:Nnn #1#2#3
- {
- \group_begin:
- \__color_extract:nNN {#2} \l__color_model_tl \l__color_value_tl
- \__color_parse_loop:w #3 ! ! ! ! \s__color_stop
- \tl_set:Nx \l__color_internal_tl
- { { \l__color_model_tl } { \l__color_value_tl } }
- \exp_args:NNNV \group_end:
- \tl_set:Nn #1 \l__color_internal_tl
- }
-\cs_new_protected:Npn \__color_parse_loop:w #1 ! #2 ! #3 ! #4 ! #5 \s__color_stop
- {
- \bool_lazy_or:nnF
- { \tl_if_blank_p:n {#1} }
- { \int_compare_p:nNn {#1} = { 100 } }
- {
- \int_compare:nNnTF {#1} = { 0 }
- {
- \tl_if_blank:nTF {#2}
- { \__color_extract:nNN { white } }
- { \__color_extract:nNN {#2} }
- \l__color_model_tl \l__color_value_tl
- }
- {
- \use:x
- {
- \__color_parse_loop:nn {#1}
- { \tl_if_blank:nTF {#2} { white } {#2} }
- }
- }
- }
- \tl_if_blank:nF {#3}
- { \__color_parse_loop:w #3 ! #4 ! #5 \s__color_stop }
- \__color_parse_end:
- }
-\cs_new_protected:Npn \__color_parse_loop:nn #1#2
- {
- \__color_if_defined:nTF {#2}
- {
- \__color_extract:nNN {#2} \l__color_next_model_tl \l__color_next_value_tl
- \tl_if_eq:NNF \l__color_model_tl \l__color_next_model_tl
- {
- \str_if_eq:VnTF \l__color_model_tl { gray }
- { \__color_parse_gray:n {#2} }
- { \__color_parse_std:n {#2} }
- }
- \tl_set:Nx \l__color_value_tl
- {
- \__color_parse_mix:NVVn
- \l__color_model_tl \l__color_value_tl \l__color_next_value_tl {#1}
- }
- }
- {
- \__kernel_msg_error:nnn { color } { unknown-color } {#2}
- \__color_extract:nNN { black } \l__color_model_tl \l__color_value_tl
- \__color_parse_break:w
- }
- }
-\cs_new_protected:Npn \__color_parse_gray:n #1
- {
- \tl_set_eq:NN \l__color_model_tl \l__color_next_model_tl
- \tl_set:Nn \l__color_next_model_tl { gray }
- \exp_args:NnV \__color_convert:nnN { gray } \l__color_model_tl
- \l__color_value_tl
- \prop_get:cVN { l__color_named_ #1 _prop } \l__color_model_tl
- \l__color_next_value_tl
- }
-\cs_new_protected:Npn \__color_parse_std:n #1
- {
- \prop_get:cVNF { l__color_named_ #1 _prop }
- \l__color_model_tl
- \l__color_next_value_tl
- {
- \__color_convert:VVN
- \l__color_next_model_tl
- \l__color_model_tl
- \l__color_next_value_tl
- }
- }
-\cs_new_protected:Npn \__color_parse_break:w #1 \__color_parse_end: { }
-\cs_new_protected:Npn \__color_parse_end: { }
-\cs_new:Npn \__color_parse_mix:Nnnn #1#2#3#4
- {
- \exp_args:Nf \__color_parse_mix:nNnn
- { \fp_eval:n { #4 / 100 } }
- #1 {#2} {#3}
- }
-\cs_generate_variant:Nn \__color_parse_mix:Nnnn { NVV }
-\cs_new:Npn \__color_parse_mix:nNnn #1#2#3#4
- {
- \use:c { __color_parse_mix_ #2 :nw } {#1}
- #3 \s__color_mark #4 \s__color_stop
- }
-\cs_new:Npn \__color_parse_mix_gray:nw #1#2 \s__color_mark #3 \s__color_stop
- { \fp_eval:n { #2 * #1 + #3 * ( 1 - #1 ) } }
-\cs_new:Npn \__color_parse_mix_rgb:nw
- #1#2 ~ #3 ~ #4 \s__color_mark #5 ~ #6 ~ #7 \s__color_stop
- {
- \fp_eval:n { #2 * #1 + #5 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #3 * #1 + #6 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #4 * #1 + #7 * ( 1 - #1 ) }
- }
-\cs_new:Npn \__color_parse_mix_cmyk:nw
- #1#2 ~ #3 ~ #4 ~ #5 \s__color_mark #6 ~ #7 ~ #8 ~ #9 \s__color_stop
- {
- \fp_eval:n { #2 * #1 + #6 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #3 * #1 + #7 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #4 * #1 + #8 * ( 1 - #1 ) } \c_space_tl
- \fp_eval:n { #5 * #1 + #9 * ( 1 - #1 ) }
- }
-\cs_new:Npn \__color_parse_model_gray:w #1 , #2 \s__color_stop
- { { gray } { \__color_parse_number:n {#1} } }
-\cs_new:Npn \__color_parse_model_rgb:w #1 , #2 , #3 , #4 \s__color_stop
- {
- { rgb }
- {
- \__color_parse_number:n {#1} ~
- \__color_parse_number:n {#2} ~
- \__color_parse_number:n {#3}
- }
- }
-\cs_new:Npn \__color_parse_model_cmyk:w #1 , #2 , #3 , #4 , #5 \s__color_stop
- {
- { cmyk }
- {
- \__color_parse_number:n {#1} ~
- \__color_parse_number:n {#2} ~
- \__color_parse_number:n {#3} ~
- \__color_parse_number:n {#4}
- }
- }
-\cs_new:Npn \__color_parse_number:n #1
- { \__color_parse_number:w #1 . 0 . \s__color_stop }
-\cs_new:Npn \__color_parse_number:w #1 . #2 . #3 \s__color_stop
- { \tl_if_blank:nTF {#1} { 0 } {#1} . #2 }
-\cs_new:Npn \__color_parse_model_Gray:w #1 , #2 \s__color_stop
- { { gray } { \fp_eval:n { #1 / 15 } } }
-\cs_new:Npn \__color_parse_model_hsb:w #1 , #2 , #3 , #4 \s__color_stop
- { \__color_parse_model_hsb:nnn {#1} {#2} {#3} }
-\cs_new:Npn \__color_parse_model_Hsb:w #1 , #2 , #3 , #4 \s__color_stop
- {
- \exp_args:Ne \__color_parse_model_hsb:nnn { \fp_eval:n { #1 / 360 } }
- {#2} {#3}
- }
-\cs_new:Npn \__color_parse_model_hsb:nnn #1#2#3
- {
- { rgb }
- {
- \exp_args:Ne \__color_parse_model_hsb_aux:nnn
- { \fp_eval:n { 6 * #1 } } {#2} {#3}
- }
- }
-\cs_new:Npn \__color_parse_model_hsb_aux:nnn #1#2#3
- {
- \exp_args:Nee \__color_parse_model_hsb_aux:nnnn
- { \fp_eval:n { floor(#1) } } { \fp_eval:n { #1 - floor(#1) } }
- {#2} {#3}
- }
-\cs_new:Npn \__color_parse_model_hsb_aux:nnnn #1#2#3#4
- {
- \use:e
- {
- \exp_not:N \__color_parse_model_hsb_aux:nnnnn
- { \__color_parse_number:n {#4} }
- { \fp_eval:n { round(#4 * (1 - #3) ,5) } }
- { \fp_eval:n { round(#4 * ( 1 - #3 * #2 ) ,5) } }
- { \fp_eval:n { round(#4 * ( 1 - #3 * (1 - #2) ) ,5) } }
- {#1}
- }
- }
-\cs_new:Npn \__color_parse_model_hsb_aux:nnnnn #1#2#3#4#5
- { \use:c { __color_parse_model_hsb_ #5 :nnnn } {#1} {#2} {#3} {#4} }
-\cs_new:cpn { __color_parse_model_hsb_0:nnnn } #1#2#3#4 { #1 ~ #4 ~ #2 }
-\cs_new:cpn { __color_parse_model_hsb_1:nnnn } #1#2#3#4 { #3 ~ #1 ~ #2 }
-\cs_new:cpn { __color_parse_model_hsb_2:nnnn } #1#2#3#4 { #2 ~ #1 ~ #4 }
-\cs_new:cpn { __color_parse_model_hsb_3:nnnn } #1#2#3#4 { #2 ~ #3 ~ #1 }
-\cs_new:cpn { __color_parse_model_hsb_4:nnnn } #1#2#3#4 { #4 ~ #2 ~ #1 }
-\cs_new:cpn { __color_parse_model_hsb_5:nnnn } #1#2#3#4 { #1 ~ #2 ~ #3 }
-\cs_new:cpn { __color_parse_model_hsb_6:nnnn } #1#2#3#4 { #1 ~ #2 ~ #2 }
-\cs_new:Npn \__color_parse_model_HSB:w #1 , #2 , #3 , #4 \s__color_stop
- {
- \exp_args:Neee \__color_parse_model_hsb:nnn
- { \fp_eval:n {#1 / 240} }
- { \fp_eval:n {#2 / 240} }
- { \fp_eval:n {#3 / 240} }
- }
-\cs_new:Npn \__color_parse_model_HTML:w #1 , #2 \s__color_stop
- { \__color_parse_model_HTML_aux:w #1 0 0 0 0 0 0 \s__color_stop }
-\cs_new:Npn \__color_parse_model_HTML_aux:w #1#2#3#4#5#6#7 \s__color_stop
- {
- { rgb }
- {
- \fp_eval:n { round(\int_from_hex:n {#1#2} / 255,5) } ~
- \fp_eval:n { round(\int_from_hex:n {#3#4} / 255,5) } ~
- \fp_eval:n { round(\int_from_hex:n {#5#6} / 255,5) }
- }
- }
-\cs_new:Npn \__color_parse_model_RGB:w #1 , #2 , #3 , #4 \s__color_stop
- {
- { rgb }
- {
- \fp_eval:n { round(#1 / 255,5) } ~
- \fp_eval:n { round(#2 / 255,5) } ~
- \fp_eval:n { round(#3 / 255,5) }
- }
- }
-\cs_new:Npn \__color_parse_model_wave:w #1 , #2 \s__color_stop
- {
- { rgb }
- {
- \fp_compare:nNnTF {#1} < { 420 }
- { \__color_parse_model_wave_auxi:nn {#1} { 0.3 + 0.7 * (#1 - 380) / 40 }
- }
- {
- \fp_compare:nNnTF {#1} > { 700 }
- { \__color_parse_model_wave_auxi:nn {#1} { 0.3 + 0.7 * (#1 - 780) / -80 } }
- { \__color_parse_model_wave_auxi:nn {#1} { 1 } }
- }
- }
- }
-\cs_new:Npn \__color_parse_model_wave_auxi:nn #1#2
- {
- \fp_compare:nNnTF {#1} < { 440 }
- {
- \__color_parse_model_wave_auxii:nn
- { 4 + \__color_parse_model_wave_rho:n { (#1 - 440) / -60 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 490 }
- {
- \__color_parse_model_wave_auxii:nn
- { 4 - \__color_parse_model_wave_rho:n { (#1 - 440) / 50 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 510 }
- {
- \__color_parse_model_wave_auxii:nn
- { 2 + \__color_parse_model_wave_rho:n { (#1 - 510) / -20 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 580 }
- {
- \__color_parse_model_wave_auxii:nn
- { 2 - \__color_parse_model_wave_rho:n { (#1 - 510) / 70 } }
- {#2}
- }
- {
- \fp_compare:nNnTF {#1} < { 645 }
- {
- \__color_parse_model_wave_auxii:nn
- { \__color_parse_model_wave_rho:n { (#1 - 645) / -65 } }
- {#2}
- }
- { \__color_parse_model_wave_auxii:nn { 0 } {#2} }
- }
- }
- }
- }
- }
-\cs_new:Npn \__color_parse_model_wave_auxii:nn #1#2
- {
- \exp_args:Neee \__color_parse_model_hsb_aux:nnn
- { \fp_eval:n {#1} }
- { 1 }
- { \__color_parse_model_wave_rho:n {#2} }
- }
-\cs_new:Npn \__color_parse_model_wave_rho:n #1
- { \fp_eval:n { min(1, max(0,#1) ) } }
-\tl_new:N \l_color_fixed_model_tl
-\cs_new_protected:Npn \__color_check_model:N #1
- {
- \tl_if_empty:NF \l_color_fixed_model_tl
- {
- \exp_after:wN \__color_check_model:nn #1
- \tl_if_eq:NNF \l__color_model_tl \l_color_fixed_model_tl
- {
- \__color_convert:VVN \l__color_model_tl \l_color_fixed_model_tl
- \l__color_value_tl
- }
- \tl_set:Nx #1
- { { \l_color_fixed_model_tl } { \l__color_value_tl } }
- }
- }
-\cs_new_protected:Npn \__color_check_model:nn #1#2
- {
- \tl_set:Nn \l__color_model_tl {#1}
- \tl_set:Nn \l__color_value_tl {#2}
- }
-\cs_new_protected:Npx \__color_select:
- {
- \tl_set:Nx \exp_not:c { l__color_named_ . _tl }
- { \exp_not:N \__color_model:N \exp_not:N \l__color_current_tl }
- \prop_clear:N \exp_not:c { l__color_named_ . _prop }
- \prop_put:NVx \exp_not:c { l__color_named_ . _prop }
- \exp_not:c { l__color_named_ . _tl }
- { \exp_not:N \__color_values:N \exp_not:N \l__color_current_tl }
- \__color_select:N \exp_not:N \l__color_current_tl
- }
-\cs_new_protected:Npn \color_select:n #1
- {
- \__color_parse:nN {#1} \l__color_current_tl
- \__color_select:
- }
-\cs_new_protected:Npn \color_select:nn #1#2
- {
- \__color_select_main:Nw \l__color_current_tl
- #1 / / \s__color_mark #2 / / \s__color_stop
- \__color_select:
- }
-\cs_new_protected:Npn \__color_select_main:Nw
- #1 #2 / #3 / #4 \s__color_mark #5 / #6 / #7 \s__color_stop
- {
- \__color_select:nnN {#2} {#5} #1
- \bool_lazy_or:nnF
- { \tl_if_empty_p:N \l_color_fixed_model_tl }
- { \str_if_eq_p:nV {#2} \l_color_fixed_model_tl }
- { \__color_select_loop:Nw #1 #3 / #4 \s__color_mark #6 / #7 \s__color_stop }
- }
-\cs_new_protected:Npn \__color_select_loop:Nw
- #1 #2 / #3 \s__color_mark #4 / #5 \s__color_stop
- {
- \str_if_eq:nVTF {#2} \l_color_fixed_model_tl
- { \__color_select:nnN {#2} {#4} #1 }
- {
- \tl_if_blank:nTF {#2}
- { \exp_after:wN \__color_select_swap:Nnn \exp_after:wN #1 #1 }
- { \__color_select_loop:Nw #1 #3 \s__color_mark #5 \s__color_stop }
- }
- }
-\cs_new_protected:Npn \__color_select:nnN #1#2#3
- {
- \cs_if_exist:cTF { __color_parse_model_ #1 :w }
- {
- \tl_set:Nx #3
- { \use:c { __color_parse_model_ #1 :w } #2 , 0 , 0 , 0 , 0 \s__color_stop }
- }
- { \__kernel_msg_error:nnn { color } { unknown-model } {#1} }
- }
-\cs_new_protected:Npn \__color_select_swap:Nnn #1#2#3
- {
- \__color_convert:nVnN {#2} \l_color_fixed_model_tl {#3} \l__color_value_tl
- \tl_set:Nx #1
- { { \l_color_fixed_model_tl } { \l__color_value_tl } }
- }
-\cs_new_protected:Npn \color_fill:n #1
- {
- \__color_parse:nN {#1} \l__color_current_tl
- \exp_after:wN \__color_draw:nnn \l__color_current_tl { fill }
- }
-\cs_new_protected:Npn \color_stroke:n #1
- {
- \__color_parse:nN {#1} \l__color_current_tl
- \exp_after:wN \__color_draw:nnn \l__color_current_tl { stroke }
- }
-\cs_new_protected:Npn \color_fill:nn #1#2
- {
- \__color_select_main:Nw \l__color_current_tl
- #1 / / \s__color_mark #2 / / \s__color_stop
- \exp_after:wN \__color_draw:nnn \l__color_current_tl { fill }
- }
-\cs_new_protected:Npn \color_stroke:nn #1#2
- {
- \__color_select_main:Nw \l__color_current_tl
- #1 / / \s__color_mark #2 / / \s__color_stop
- \exp_after:wN \__color_draw:nnn \l__color_current_tl { stroke }
- }
-\cs_new_protected:Npn \__color_draw:nnn #1#2#3
- { \use:c { __color_backend_ #3 _ #1 :n } {#2} }
-\tl_new:N \l__color_named_tl
-\cs_new_protected:Npn \color_set:nn #1#2
- {
- \exp_args:NV \__color_set:nnn
- \l_color_fixed_model_tl {#1} {#2}
- }
-\cs_new_protected:Npn \__color_set:nnn #1#2#3
- {
- \tl_clear:N \l_color_fixed_model_tl
- \__color_set:nn {#2} {#3}
- \tl_set:Nn \l_color_fixed_model_tl {#1}
- }
-\cs_new_protected:Npn \__color_set:nn #1#2
- {
- \str_if_eq:nnF {#1} { . }
- {
- \__color_parse:nN {#2} \l__color_named_tl
- \tl_clear_new:c { l__color_named_ #1 _tl }
- \tl_set:cx { l__color_named_ #1 _tl }
- { \__color_model:N \l__color_named_tl }
- \prop_clear_new:c { l__color_named_ #1 _prop }
- \prop_put:cvx { l__color_named_ #1 _prop } { l__color_named_ #1 _tl }
- { \__color_values:N \l__color_named_tl }
- \__color_set:nnw {#1} {#2} #2 ! \s__color_stop
- }
- }
-\cs_new_protected:Npn \__color_set:nnw #1#2#3 ! #4 \s__color_stop
- {
- \clist_map_inline:nn { cmyk , gray , rgb }
- {
- \prop_get:cnNT { l__color_named_ #3 _prop } {##1} \l__color_internal_tl
- {
- \prop_if_in:cnF { l__color_named_ #1 _prop } {##1}
- {
- \group_begin:
- \tl_set:cn { l__color_named_ #3 _tl } {##1}
- \__color_parse:nN {#2} \l__color_internal_tl
- \exp_args:NNNV \group_end:
- \tl_set:Nn \l__color_internal_tl \l__color_internal_tl
- \prop_put:cxx { l__color_named_ #1 _prop }
- { \__color_model:N \l__color_internal_tl }
- { \__color_values:N \l__color_internal_tl }
- }
- }
- }
- }
-\cs_new_protected:Npx \color_set:nnn #1#2#3
- {
- \exp_not:N \str_if_eq:nnF {#1} { . }
- {
- \tl_clear_new:c { l__color_named_ #1 _tl }
- \prop_clear_new:c { l__color_named_ #1 _prop }
- \exp_not:N \__color_set_colon:nnw {#1} {#3}
- #2 \c_colon_str \c_colon_str \exp_not:N \s__color_stop
- }
- }
-\use:x
- {
- \cs_new_protected:Npn \exp_not:N \__color_set_colon:nnw
- ##1##2 ##3 \c_colon_str ##4 \c_colon_str
- ##5 \exp_not:N \s__color_stop
- }
- {
- \tl_if_blank:nTF {#4}
- { \__color_set_loop:nw {#1} #3 }
- { \__color_set_loop:nw {#1} #4 }
- / / \s__color_mark #2 / / \s__color_stop
- }
-\cs_new_protected:Npn \__color_set_loop:nw
- #1#2 / #3 \s__color_mark #4 / #5 \s__color_stop
- {
- \tl_if_blank:nF {#2}
- {
- \__color_select:nnN {#2} {#4} \l__color_named_tl
- \tl_set:Nx \l__color_internal_tl { \__color_model:N \l__color_named_tl }
- \tl_if_empty:cT { l__color_named_ #1 _tl }
- { \tl_set_eq:cN { l__color_named_ #1 _tl } \l__color_internal_tl }
- \prop_put:cVx { l__color_named_ #1 _prop } \l__color_internal_tl
- { \__color_values:N \l__color_named_tl }
- \__color_set_loop:nw {#1} #3 \s__color_mark #5 \s__color_stop
- }
- }
-\cs_new_protected:Npn \color_set_eq:nn #1#2
- {
- \__color_if_defined:nTF {#2}
- {
- \tl_clear_new:c { l__color_named_ #1 _tl }
- \prop_clear_new:c { l__color_named_ #1 _prop }
- \str_if_eq:nnTF {#2} { . }
- {
- \tl_set:cx { l__color_named_ #1 _tl }
- { \__color_model:N \l__color_current_tl }
- \prop_put:cvx { l__color_named_ #1 _prop } { l__color_named_ #1 _tl }
- { \__color_values:N \l__color_current_tl }
- }
- {
- \tl_set_eq:cc { l__color_named_ #1 _tl } { l__color_named_ #2 _tl }
- \prop_set_eq:cc { l__color_named_ #1 _prop } { l__color_named_ #2 _prop }
- }
- }
- {
- \__kernel_msg_error:nnn { color } { unknown-color } {#2}
- }
- }
-\color_set:nnn { black } { gray } { 0 }
-\color_set:nnn { white } { gray } { 1 }
-\color_set:nnn { cyan } { cmyk } { 1 , 0 , 0 , 0 }
-\color_set:nnn { magenta } { cmyk } { 0 , 1 , 0 , 0 }
-\color_set:nnn { yellow } { cmyk } { 0 , 0 , 1 , 0 }
-\color_set:nnn { red } { rgb } { 1 , 0 , 0 }
-\color_set:nnn { green } { rgb } { 0 , 1 , 0 }
-\color_set:nnn { blue } { rgb } { 0 , 0 , 1 }
-\prop_new:c { l__color_named_._prop }
-\tl_new:c { l__color_named_._tl }
-\tl_set:cx { l__color_named_._tl } { \__color_model:N \l__color_current_tl }
-\cs_new_protected:Npn \color_export:nnN #1#2#3
- {
- \group_begin:
- \tl_if_exist:cT { c__color_export_ #2 _tl }
- { \tl_set_eq:Nc \l_color_fixed_model_tl { c__color_export_ #2 _tl } }
- \__color_parse:nN {#1} #3
- \__color_export:nN {#2} #3
- \exp_args:NNNV \group_end:
- \tl_set:Nn #3 #3
- }
-\cs_new_protected:Npn \color_export:nnnN #1#2#3#4
- {
- \__color_select_main:Nw #4
- #1 / / \s__color_mark #2 / / \s__color_stop
- \__color_export:nN {#3} #4
- }
-\cs_new_protected:Npn \__color_export:nN #1#2
- { \exp_after:wN \__color_export:nnnN #2 {#1} #2 }
-\cs_new:Npn \__color_export:nnnN #1#2#3#4
- {
- \cs_if_exist_use:cF { __color_export_format_ #3 :nnN }
- {
- \__kernel_msg_error:nnn { color } { unknown-export-format } {#3}
- \use_none:nnn
- }
- {#1} {#2} #4
- }
-\cs_new_protected:Npn \__color_export_format_backend:nnN #1#2#3
- { \tl_set:Nn #3 { {#1} {#2} } }
-\cs_new_protected:Npn \__color_export:nnnNN #1#2#3#4#5
- {
- \str_if_eq:nnTF {#2} {#1}
- { #5 #4 #3 \s__color_stop }
- {
- \__color_convert:nnnN {#2} {#1} {#3} #4
- \exp_after:wN #5 \exp_after:wN #4
- #4 \s__color_stop
- }
- }
-\tl_const:Nn \c__color_export_HTML_tl { rgb }
-\tl_const:cn { c__color_export_space-sep-cmyk_tl } { cmyk }
-\tl_const:cn { c__color_export_space-sep-rgb_tl } { rgb }
-\cs_new_protected:cpx { __color_export_format_space-sep-cmyk:nnN } #1#2#3
- {
- \exp_not:N \__color_export:nnnNN { cmyk } {#1} {#2} #3
- \exp_not:c { __color_export_space-sep-cmyk:Nw }
- }
-\cs_new_protected:cpn { __color_export_space-sep-cmyk:Nw } #1#2 \s__color_stop
- { \tl_set:Nx #1 {#2} }
-\cs_new_protected:Npn \__color_export_format_HTML:nnN #1#2#3
- { \__color_export:nnnNN { rgb } {#1} {#2}#3 \__color_export_HTML:Nw }
-\cs_new_protected:cpx { __color_export_format_space-sep-rgb:nnN } #1#2#3
- {
- \exp_not:N \__color_export:nnnNN { rgb } {#1} {#2} #3
- \exp_not:c { __color_export_space-sep-rgb:Nw }
- }
-\cs_new_protected:Npn \__color_export_HTML:Nw #1#2 ~ #3 ~ #4 \s__color_stop
- {
- \tl_set:Nx #1
- {
- \__color_export_HTML:n {#2}
- \__color_export_HTML:n {#3}
- \__color_export_HTML:n {#4}
- }
- }
-\cs_new:Npn \__color_export_HTML:n #1
- {
- \fp_compare:nNnTF {#1} = { 0 }
- { 00 }
- { \int_to_Hex:n { \fp_to_int:n { #1 * 255 } } }
- }
-\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_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 }
-\tl_const:cn { c__color_model_whitepoint_CIELAB_d50_tl } { 0.9642 ~ 1 ~ 0.8251 }
-\tl_const:cn { c__color_model_whitepoint_CIELAB_d55_tl } { 0.9568 ~ 1 ~ 0.9214 }
-\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
- { \tl_to_str:n {#1} }
- { \str_foldcase:n {#2} } {#3}
- }
-\cs_new_protected:Npn \__color_model_new:nnn #1#2#3
- {
- \cs_if_exist:cTF { __color_parse_model_ #1 :w }
- {
- \__kernel_msg_error:nnn { color } { model-already-defined } {#1}
- }
- {
- \cs_if_exist:cTF { __color_model_ #2 :n }
- {
- \prop_set_from_keyval:Nn \l__color_internal_prop {#3}
- \use:c { __color_model_ #2 :n } {#1}
- }
- {
- \__kernel_msg_error:nnn { color } { unknown-model-type } {#2}
- }
- }
- }
-\cs_new_protected:Npn \__color_model_separation:n #1
- {
- \prop_get:NnNTF \l__color_internal_prop { name }
- \l__color_internal_tl
- {
- \exp_args:NV \__color_model_separation:nn
- \l__color_internal_tl {#1}
- }
- {
- \__kernel_msg_error:nnn { color }
- { separation-requires-name } {#1}
- }
- }
-\cs_new_protected:Npn \__color_model_separation:nn #1#2
- {
- \prop_get:NnNTF \l__color_internal_prop { alternative-model }
- \l__color_internal_tl
- {
- \exp_args:NV \__color_model_separation:nnn
- \l__color_internal_tl {#2} {#1}
- }
- {
- \__kernel_msg_error:nnn { color }
- { separation-alternative-model } {#2}
- }
- }
-\cs_new_protected:Npn \__color_model_separation:nnn #1#2#3
- {
- \cs_if_exist:cTF { __color_model_separation_ #1 :nnnnnn }
- {
- \prop_get:NnNTF \l__color_internal_prop { alternative-values }
- \l__color_internal_tl
- {
- \exp_after:wN \__color_model_separation:w \l__color_internal_tl
- , 0 , 0 , 0 , 0 \s__color_stop {#2} {#3} {#1}
- }
- {
- \__kernel_msg_error:nnn { color }
- { separation-alternative-values } {#2}
- }
- }
- {
- \__kernel_msg_error:nnn { color }
- { unknown-alternative-model } {#1}
- }
- }
-\cs_new_protected:Npn \__color_model_separation:w
- #1 , #2 , #3 , #4 , #5 \s__color_stop #6#7#8
- {
- \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
- { {#6} { \__color_parse_number:n {##1} } }
- \clist_map_inline:nn { fill , stroke , select }
- {
- \cs_new_protected:cpx { __color_backend_ ##1 _ #6 :n } ####1
- {
- \exp_not:c { __color_backend_ ##1 _ separation:nn }
- { 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 }
- \exp_not:N \int_compare:nNnF { \tex_currentgrouplevel:D } = 0
- { \group_insert_after:N \exp_not:c { __color_model_ #6 _ white: } }
- }
- \use:c { __color_model_ #6 _white: }
- }
-\cs_new_protected:Npn \__color_model_separation_cmyk:nnnnnn #1#2#3#4#5#6
- {
- \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop
- {
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #4} ~
- \fp_eval:n {##1 * #5} ~
- \fp_eval:n {##1 * #6}
- }
- \__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 }
- }
-\cs_new_protected:Npn \__color_model_separation_rgb:nnnnnn #1#2#3#4#5#6
- {
- \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop
- {
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #4} ~
- \fp_eval:n {##1 * #5}
- }
- \__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 }
- }
-\cs_new_protected:Npn \__color_model_separation_gray:nnnnnn #1#2#3#4#5#6
- {
- \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop
- {
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #3} ~
- \fp_eval:n {##1 * #3}
- }
- \cs_new:cpn { __color_convert_ #1 _gray:w } ##1 ~ ##2 \s__color_stop
- { \fp_eval:n {##1 * #3} }
- \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop
- {
- \fp_eval:n {##1 * #3} ~
- \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
- {
- \cs_new:cpx { __color_convert_ #1 _ #3 :w } ##1 ~ ##2 \s__color_stop
- {
- \exp_not:N \exp_args:NNe \exp_not:N \use:nn
- \exp_not:c { __color_convert_ #2 _ #3 :w }
- { \exp_not:c { __color_convert_ #1 _ #2 :w } ##1 ~ ##2 \s__color_stop }
- \c_space_tl \exp_not:N \s__color_stop
- }
- }
-\cs_new_protected:Npn \__color_model_separation_CIELAB:nnnnnn #1#2#3#4#5#6
- {
- \prop_get:NnNF \l__color_internal_prop { illuminant }
- \l__color_internal_tl
- {
- \__kernel_msg_error:nnn { color }
- { CIELAB-requires-illuminant } {#1}
- \tl_set:Nn \l__color_internal_tl { d50 }
- }
- \exp_args:NV \__color_model_separation_CIELAB:nnnnnnn
- \l__color_internal_tl {#1} {#2} {#3} {#4} {#5} {#6}
- }
-\cs_new_protected:Npn \__color_model_separation_CIELAB:nnnnnnn #1#2#3#4#5#6#7
- {
- \tl_if_exist:cTF { c__color_model_whitepoint_CIELAB_ #1 _tl }
- {
- \__color_backend_separation_init_CIELAB:nnn {#1} {#3} { #4 ~ #5 ~ #6 }
- \cs_new:cpn { __color_convert_ #2 _cmyk:w } ##1 ~ ##2 \s__color_stop
- { 0 ~ 0 ~ 0 ~ 1 }
- \cs_new:cpn { __color_convert_ #2 _rgb:w } ##1 ~ ##2 \s__color_stop
- { 1 ~ 1 ~ 1 }
- \cs_new:cpn { __color_convert_ #2 _gray:w } ##1 ~ ##2 \s__color_stop
- { 1 }
- }
- {
- \__kernel_msg_error:nnn { color }
- { 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 }
- {#1}
- {
- \__color_if_defined:nT {#1}
- {
- \exp_args:Nv \__color_show:n { l__color_named_ #1 _tl }
- \prop_map_function:cN
- { l__color_named_ #1 _prop }
- \msg_show_item_unbraced:nn
- }
- }
- { }
- { }
- }
-\cs_new:Npn \__color_show:n #1
- {
- \msg_show_item_unbraced:nn { model } {#1}
- }
-\__kernel_msg_new:nnnn { color } { CIELAB-requires-illuminant }
- { CIELAB~color~space~'#1'~require~an~illuminant. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space~using~
- CIELAB~specifications,~but~no~\\ \\
- \iow_indent:n { illuminant~=~<basis> }
- \\ \\
- key~was~given~with~the~correct~information.~LaTeX~will~use~illuminant~
- 'd50'~for~recovery.
- }
-\__kernel_msg_new:nnnn { color } { conversion-not-available }
- { No~model~conversion~available~from~'#1'~to~'#2'. }
- {
- 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. }
- {
- LaTeX~was~asked~to~define~a~new~color~model~called~'#1',~but~
- this~color~model~already~exists.
- }
-\__kernel_msg_new:nnnn { color } { separation-alternative-model }
- { Separation~color~space~'#1'~require~an~alternative~model. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~no~\\ \\
- \iow_indent:n { alternative-model~=~<model> }
- \\ \\
- key~was~given~with~the~correct~information.
- }
-\__kernel_msg_new:nnnn { color } { separation-alternative-values }
- { Separation~color~space~'#1'~require~values~for~the~alternative~space. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~no~\\ \\
- \iow_indent:n { alternative-values~=~<model> }
- \\ \\
- key~was~given~with~the~correct~information.
- }
-\__kernel_msg_new:nnnn { color } { separation-requires-name }
- { Separation~color~space~'#1'~require~a~formal~name. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~no~\\ \\
- \iow_indent:n { name~=~<formal~name> }
- \\ \\
- key~was~given~with~the~correct~information.
- }
-\__kernel_msg_new:nnnn { color } { unknown-color }
- { Unknown~color~'#1'. }
- {
- LaTeX~has~been~asked~to~use~a~color~named~'#1',~
- but~this~has~never~been~defined.
- }
-\__kernel_msg_new:nnnn { color } { unknown-alternative-model }
- { Separation~color~space~'#1'~require~an~valid~alternative~space. }
- {
- LaTeX~has~been~asked~to~create~a~separation~color~space,~
- but~the~model~given~as\\ \\
- \iow_indent:n { alternative-model~=~<model> }
- \\ \\
- is~unknown.
- }
-\__kernel_msg_new:nnnn { color } { unknown-export-format }
- { Unknown~export~format~'#1'. }
- {
- LaTeX~has~been~asked~to~export~a~color~in~format~'#1',~
- but~this~has~never~been~defined.
- }
-\__kernel_msg_new:nnnn { color } { unknown-CIELAB-illuminant }
- { Unknown~illuminant~model~'#1'. }
- {
- LaTeX~has~been~asked~to~use~create~a~color~space~using~CIELAB~
- illuminant~'#1',~but~this~does~not~exist.
- }
-\__kernel_msg_new:nnnn { color } { unknown-model }
- { Unknown~color~model~'#1'. }
- {
- LaTeX~has~been~asked~to~use~a~color~model~called~'#1',~
- but~this~model~is~not~set~up.
- }
-\__kernel_msg_new:nnnn { color } { unknown-model-type }
- { Unknown~color~model~type~'#1'. }
- {
- LaTeX~has~been~asked~to~create~a~new~color~model~called~'#1',~
- but~this~type~of~model~was~never~set~up.
- }
-\__kernel_msg_new:nnn { color } { show }
- {
- The~color~#1~
- \tl_if_empty:nTF {#2}
- { is~undefined. }
- { has~the~properties: #2 }
- }
-%%
-%%
-%% End of file `l3color.sty'.