diff options
author | Karl Berry <karl@freefriends.org> | 2020-09-24 20:46:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-09-24 20:46:14 +0000 |
commit | 2e1f687d46764061ec8df089e40b9ac1aece2761 (patch) | |
tree | b633d8a205fd529be57878fc2502e2c07a4c5efc /Master/texmf-dist/tex/latex/l3experimental | |
parent | c0e73acce7eb5e03fceb4e011fa579a5706460c2 (diff) |
l3 (24sep20)
git-svn-id: svn://tug.org/texlive/trunk@56424 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3experimental')
10 files changed, 475 insertions, 15 deletions
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index 25891307496..c037a40a41e 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty @@ -20,12 +20,31 @@ %% %% File: l3benchmark.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3benchmark}{2020-09-11}{} +\ProvidesExplPackage{l3benchmark}{2020-09-24}{} {L3 Experimental benchmarking} \sys_if_engine_luatex:TF { + \cs_new:Npn \__sys_elapsedtime: { } + \cs_new:Npn \__sys_resettimer: { } + \lua_now:n + { + local~gettimeofday = os.gettimeofday~ + local~epoch = gettimeofday() - os.clock()~ + local~write = tex.write~ + local~tointeger = math.tointeger~ + local~id = luatexbase.new_luafunction'__sys_elapsedtime:' + lua.get_functions_table()[id] = function() + write(tointeger((gettimeofday() - epoch)*65536 // 1)) + end~ + token.set_lua('__sys_elapsedtime:', id, 'global') + id = luatexbase.new_luafunction'__sys_resettimer:' + lua.get_functions_table()[id] = function() + epoch = gettimeofday() + end~ + token.set_lua('__sys_resettimer:', id, 'global', 'protected') + } \cs_new:Npn \sys_timer: - { \lua_now:n { l3kernel.elapsedtime() } } + { \__sys_elapsedtime: } } { \cs_if_exist:NT \tex_elapsedtime:D @@ -41,7 +60,7 @@ \sys_if_engine_luatex:TF { \cs_new_protected:Npn \sys_gzero_timer: - { \lua_now:n { l3kernel.resettimer() } } + { \__sys_resettimer: } } { \cs_new_protected:Npn \sys_gzero_timer: { \tex_resettimer:D } } } 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. } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty index 292d4fe6f35..cb5bc61d7cf 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty @@ -28,7 +28,7 @@ %% %% File: l3draw.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3draw}{2020-09-11}{} +\ProvidesExplPackage{l3draw}{2020-09-24}{} {L3 Experimental core drawing support} \RequirePackage { l3color } \scan_new:N \s__draw_mark diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty index 797321a00dc..7a4f5a08c31 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty @@ -20,7 +20,7 @@ %% %% File: l3graphics.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3graphics}{2020-09-11}{} +\ProvidesExplPackage{l3graphics}{2020-09-24}{} {L3 Experimental graphics inclusion support} \ior_new:N \l__graphics_tmp_ior \tl_new:N \l__graphics_tmp_tl diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty index 018102c7a98..28d449e24c3 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty @@ -20,7 +20,7 @@ %% %% File: l3pdf.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3pdf}{2020-09-11}{} +\ProvidesExplPackage{l3pdf}{2020-09-24}{} {L3 Experimental core PDF support} \scan_new:N \s__pdf_stop \bool_new:N \g__pdf_init_bool diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index bee09eb299b..78c53b18789 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -20,7 +20,7 @@ %% %% File: l3str-format.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3str-format}{2020-09-11}{} +\ProvidesExplPackage{l3str-format}{2020-09-24}{} {L3 Experimental string formatting} \cs_generate_variant:Nn \use:nn { nf } \cs_generate_variant:Nn \use:nnn { fnf } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty index 97e8ba69c8f..016256ce53e 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty @@ -20,7 +20,7 @@ %% %% File: l3sys-shell.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3sys-shell}{2020-09-11}{} +\ProvidesExplPackage{l3sys-shell}{2020-09-24}{} {L3 Experimental system shell functions} \scan_new:N \s__sys_stop \quark_new:N \q__sys_nil diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty index f745fb21f8f..3f0b8650e6e 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -20,7 +20,7 @@ %% %% File: xcoffins.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xcoffins}{2020-09-11}{} +\ProvidesExplPackage{xcoffins}{2020-09-24}{} {L3 Experimental design level coffins} \keys_define:nn { coffin } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index 9e66d0a8cd1..9c939bef3d5 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3galley}{2020-09-11}{} +\ProvidesExplPackage{l3galley}{2020-09-24}{} {L3 Experimental galley code} \int_new:N \l__galley_tmp_int \seq_new:N \g__galley_tmpa_seq diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty index 5a074a0d7ac..2dd1b612023 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -20,7 +20,7 @@ %% %% File: xgalley.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xgalley}{2020-09-11}{} +\ProvidesExplPackage{xgalley}{2020-09-24}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} \clist_new:N \l__galley_tmpa_clist |