From bb669917488dc9c559ccaac25bb66a30e133707b Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 18 Feb 2021 22:17:56 +0000 Subject: l3 (18feb21) git-svn-id: svn://tug.org/texlive/trunk@57789 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/l3backend/l3backend-dvipdfmx.def | 64 +- .../tex/latex/l3backend/l3backend-dvips.def | 2 +- .../tex/latex/l3backend/l3backend-dvisvgm.def | 2 +- .../tex/latex/l3backend/l3backend-luatex.def | 64 +- .../tex/latex/l3backend/l3backend-pdftex.def | 64 +- .../tex/latex/l3backend/l3backend-xetex.def | 64 +- .../l3experimental/l3benchmark/l3benchmark.sty | 2 +- .../tex/latex/l3experimental/l3bitset/l3bitset.sty | 2 +- .../tex/latex/l3experimental/l3color/l3color.sty | 1448 --------------- .../tex/latex/l3experimental/l3draw/l3draw.sty | 3 +- .../latex/l3experimental/l3graphics/l3graphics.sty | 2 +- .../tex/latex/l3experimental/l3pdf/l3pdf.sty | 118 -- .../latex/l3experimental/l3str/l3str-format.sty | 2 +- .../l3experimental/l3sys-shell/l3sys-shell.sty | 2 +- .../tex/latex/l3experimental/xcoffins/xcoffins.sty | 2 +- .../tex/latex/l3experimental/xgalley/l3galley.sty | 2 +- .../tex/latex/l3experimental/xgalley/xgalley.sty | 2 +- .../texmf-dist/tex/latex/l3kernel/expl3-code.tex | 1874 ++++++++++++++++++-- .../tex/latex/l3kernel/expl3-generic.tex | 2 +- Master/texmf-dist/tex/latex/l3kernel/expl3.ltx | 2 +- Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 2 +- 21 files changed, 1844 insertions(+), 1881 deletions(-) delete mode 100644 Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty delete mode 100644 Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def index 97821be3cea..b05710c7175 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def @@ -26,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvipdfmx.def}{2021-02-06}{} + {l3backend-dvipdfmx.def}{2021-02-18}{} {L3 backend support: dvipdfmx} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -128,7 +128,7 @@ } \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { - \cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 + \cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2 { \__kernel_backend_literal:x { @@ -137,8 +137,8 @@ push ~ (#2) } } - \cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } - \cs_new_protected:Npn \__color_backend_stack_pop:n #1 + \cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx } + \cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1 { \__kernel_backend_literal:x { @@ -160,11 +160,11 @@ { \tl_set:Nn \l__color_backend_fill_tl {#1} \tl_set:Nn \l__color_backend_stroke_tl {#2} - \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__color_backend_stack_pop:n \l__color_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \l__color_backend_stack_int } \int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1 @@ -182,7 +182,7 @@ \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { - \pdf_object_now:nx { dict } + \pdf_object_unnamed_write:nx { dict } { /FunctionType ~ 2 /Domain ~ [0 ~ 1] @@ -194,21 +194,22 @@ { /Separation ~ / \str_convert_pdfname:n {#1} ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } } \cs_new_protected:Npn \__color_backend_separation_init:n #1 { - \pdf_object_now:nx { array } {#1} + \pdf_object_unnamed_write:nx { array } {#1} } \cs_new_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { @@ -232,14 +233,14 @@ { 100 ~ 0 ~ 0 } {#3} } -\cs_if_exist:NF \pdf_object_now:nn +\cs_if_exist:NF \pdf_object_unnamed_write:nn { \cs_gset_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { } } \cs_new_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { - \pdf_object_now:nx { stream } + \pdf_object_unnamed_write:nx { stream } { { /FunctionType ~ 4 ~ @@ -266,18 +267,19 @@ /DeviceN ~ [ ~ #1 ~ ] ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { } } \cs_new:Npn \__color_backend_devicen_init:w #1 ~ #2 \s__color_stop { + 1 @@ -300,7 +302,7 @@ \cs_new_protected:Npn \__color_backend_fill:n #1 { \tl_set:Nn \l__color_backend_fill_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ \l__color_backend_stroke_tl } \group_insert_after:N \__color_backend_reset: } @@ -313,7 +315,7 @@ \cs_new_protected:Npn \__color_backend_stroke:n #1 { \tl_set:Nn \l__color_backend_stroke_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { \l__color_backend_fill_tl \c_space_tl #1 } \group_insert_after:N \__color_backend_reset: } @@ -902,7 +904,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity #1 } { << /ca ~ #1 /CA ~ #1 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity #1 ~ gs } \group_insert_after:N \__opacity_backend_reset: } @@ -911,7 +913,7 @@ \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } } \cs_new_protected:Npn \__opacity_backend_reset: - { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \c__opacity_backend_stack_int } \cs_new_protected:Npn \__opacity_backend_fill:n #1 { \__opacity_backend_fill_stroke:xx @@ -937,7 +939,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity.stroke #1 } { << /CA ~ #2 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } \group_insert_after:N \__opacity_backend_reset: } diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def index c5002b58b6a..1e47603f763 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def @@ -26,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvips.def}{2021-02-06}{} + {l3backend-dvips.def}{2021-02-18}{} {L3 backend support: dvips} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def index 759c1531eef..078970ec7c9 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def @@ -26,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-dvisvgm.def}{2021-02-06}{} + {l3backend-dvisvgm.def}{2021-02-18}{} {L3 backend support: dvisvgm} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def index 049a216db17..235eaa023e3 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def @@ -26,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-luatex.def}{2021-02-06}{} + {l3backend-luatex.def}{2021-02-18}{} {L3 backend support: PDF output (LuaTeX)} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -114,13 +114,13 @@ {#3} } } -\cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 +\cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2 { \tex_pdfextension:D colorstack ~ \int_eval:n {#1} ~ push ~ {#2} } -\cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } -\cs_new_protected:Npn \__color_backend_stack_pop:n #1 +\cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx } +\cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1 { \tex_pdfextension:D colorstack ~ \int_eval:n {#1} ~ pop \scan_stop: @@ -137,17 +137,17 @@ { \tl_set:Nn \l__color_backend_fill_tl {#1} \tl_set:Nn \l__color_backend_stroke_tl {#2} - \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__color_backend_stack_pop:n \l__color_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \l__color_backend_stack_int } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { - \pdf_object_now:nx { dict } + \pdf_object_unnamed_write:nx { dict } { /FunctionType ~ 2 /Domain ~ [0 ~ 1] @@ -159,21 +159,22 @@ { /Separation ~ / \str_convert_pdfname:n {#1} ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } } \cs_new_protected:Npn \__color_backend_separation_init:n #1 { - \pdf_object_now:nx { array } {#1} + \pdf_object_unnamed_write:nx { array } {#1} } \cs_new_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { @@ -197,14 +198,14 @@ { 100 ~ 0 ~ 0 } {#3} } -\cs_if_exist:NF \pdf_object_now:nn +\cs_if_exist:NF \pdf_object_unnamed_write:nn { \cs_gset_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { } } \cs_new_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { - \pdf_object_now:nx { stream } + \pdf_object_unnamed_write:nx { stream } { { /FunctionType ~ 4 ~ @@ -231,18 +232,19 @@ /DeviceN ~ [ ~ #1 ~ ] ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { } } \cs_new:Npn \__color_backend_devicen_init:w #1 ~ #2 \s__color_stop { + 1 @@ -259,7 +261,7 @@ \cs_new_protected:Npn \__color_backend_fill:n #1 { \tl_set:Nn \l__color_backend_fill_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ \l__color_backend_stroke_tl } \group_insert_after:N \__color_backend_reset: } @@ -272,7 +274,7 @@ \cs_new_protected:Npn \__color_backend_stroke:n #1 { \tl_set:Nn \l__color_backend_stroke_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { \l__color_backend_fill_tl \c_space_tl #1 } \group_insert_after:N \__color_backend_reset: } @@ -773,7 +775,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity #1 } { << /ca ~ #1 /CA ~ #1 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity #1 ~ gs } \group_insert_after:N \__opacity_backend_reset: } @@ -782,7 +784,7 @@ \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } } \cs_new_protected:Npn \__opacity_backend_reset: - { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \c__opacity_backend_stack_int } \cs_new_protected:Npn \__opacity_backend_fill:n #1 { \__opacity_backend_fill_stroke:xx @@ -808,7 +810,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity.stroke #1 } { << /CA ~ #2 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } \group_insert_after:N \__opacity_backend_reset: } diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def index e7f4ad30113..93ba0c8ef3d 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def @@ -26,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-pdftex.def}{2021-02-06}{} + {l3backend-pdftex.def}{2021-02-18}{} {L3 backend support: PDF output (pdfTeX)} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -114,13 +114,13 @@ {#3} } } -\cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 +\cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2 { \tex_pdfcolorstack:D \int_eval:n {#1} ~ push ~ {#2} } -\cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } -\cs_new_protected:Npn \__color_backend_stack_pop:n #1 +\cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx } +\cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1 { \tex_pdfcolorstack:D \int_eval:n {#1} ~ pop \scan_stop: @@ -137,17 +137,17 @@ { \tl_set:Nn \l__color_backend_fill_tl {#1} \tl_set:Nn \l__color_backend_stroke_tl {#2} - \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__color_backend_stack_pop:n \l__color_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \l__color_backend_stack_int } \cs_new_protected:Npn \__color_backend_select_separation:nn #1#2 { \__color_backend_select:nn { /#1 ~ cs ~ #2 ~ scn } { /#1 ~ CS ~ #2 ~ SCN } } \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { - \pdf_object_now:nx { dict } + \pdf_object_unnamed_write:nx { dict } { /FunctionType ~ 2 /Domain ~ [0 ~ 1] @@ -159,21 +159,22 @@ { /Separation ~ / \str_convert_pdfname:n {#1} ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } } \cs_new_protected:Npn \__color_backend_separation_init:n #1 { - \pdf_object_now:nx { array } {#1} + \pdf_object_unnamed_write:nx { array } {#1} } \cs_new_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { @@ -197,14 +198,14 @@ { 100 ~ 0 ~ 0 } {#3} } -\cs_if_exist:NF \pdf_object_now:nn +\cs_if_exist:NF \pdf_object_unnamed_write:nn { \cs_gset_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { } } \cs_new_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { - \pdf_object_now:nx { stream } + \pdf_object_unnamed_write:nx { stream } { { /FunctionType ~ 4 ~ @@ -231,18 +232,19 @@ /DeviceN ~ [ ~ #1 ~ ] ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { } } \cs_new:Npn \__color_backend_devicen_init:w #1 ~ #2 \s__color_stop { + 1 @@ -259,7 +261,7 @@ \cs_new_protected:Npn \__color_backend_fill:n #1 { \tl_set:Nn \l__color_backend_fill_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ \l__color_backend_stroke_tl } \group_insert_after:N \__color_backend_reset: } @@ -272,7 +274,7 @@ \cs_new_protected:Npn \__color_backend_stroke:n #1 { \tl_set:Nn \l__color_backend_stroke_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { \l__color_backend_fill_tl \c_space_tl #1 } \group_insert_after:N \__color_backend_reset: } @@ -773,7 +775,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity #1 } { << /ca ~ #1 /CA ~ #1 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity #1 ~ gs } \group_insert_after:N \__opacity_backend_reset: } @@ -782,7 +784,7 @@ \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } } \cs_new_protected:Npn \__opacity_backend_reset: - { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \c__opacity_backend_stack_int } \cs_new_protected:Npn \__opacity_backend_fill:n #1 { \__opacity_backend_fill_stroke:xx @@ -808,7 +810,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity.stroke #1 } { << /CA ~ #2 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } \group_insert_after:N \__opacity_backend_reset: } diff --git a/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def b/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def index d236bcfc8a7..b4603d6f1b2 100644 --- a/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def +++ b/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def @@ -26,7 +26,7 @@ %% %% File: l3backend-basics.dtx \ProvidesExplFile - {l3backend-xetex.def}{2021-02-06}{} + {l3backend-xetex.def}{2021-02-18}{} {L3 backend support: XeTeX} \cs_if_exist:NTF \__kernel_dependency_version_check:nn { @@ -128,7 +128,7 @@ } \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { - \cs_new_protected:Npn \__color_backend_stack_push:nn #1#2 + \cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2 { \__kernel_backend_literal:x { @@ -137,8 +137,8 @@ push ~ (#2) } } - \cs_generate_variant:Nn \__color_backend_stack_push:nn { nx } - \cs_new_protected:Npn \__color_backend_stack_pop:n #1 + \cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx } + \cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1 { \__kernel_backend_literal:x { @@ -160,11 +160,11 @@ { \tl_set:Nn \l__color_backend_fill_tl {#1} \tl_set:Nn \l__color_backend_stroke_tl {#2} - \__color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ #2 } \group_insert_after:N \__color_backend_reset: } \cs_new_protected:Npn \__color_backend_reset: - { \__color_backend_stack_pop:n \l__color_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \l__color_backend_stack_int } \int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 } { \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1 @@ -182,7 +182,7 @@ \cs_new_eq:NN \__color_backend_select_devicen:nn \__color_backend_select_separation:nn \cs_new_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { - \pdf_object_now:nx { dict } + \pdf_object_unnamed_write:nx { dict } { /FunctionType ~ 2 /Domain ~ [0 ~ 1] @@ -194,21 +194,22 @@ { /Separation ~ / \str_convert_pdfname:n {#1} ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_separation_init:nnnnn #1#2#3#4#5 { } } \cs_new_protected:Npn \__color_backend_separation_init:n #1 { - \pdf_object_now:nx { array } {#1} + \pdf_object_unnamed_write:nx { array } {#1} } \cs_new_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { @@ -232,14 +233,14 @@ { 100 ~ 0 ~ 0 } {#3} } -\cs_if_exist:NF \pdf_object_now:nn +\cs_if_exist:NF \pdf_object_unnamed_write:nn { \cs_gset_protected:Npn \__color_backend_separation_init_CIELAB:nnn #1#2#3 { } } \cs_new_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { - \pdf_object_now:nx { stream } + \pdf_object_unnamed_write:nx { stream } { { /FunctionType ~ 4 ~ @@ -266,18 +267,19 @@ /DeviceN ~ [ ~ #1 ~ ] ~ #2 ~ - \pdf_object_last: + \pdf_object_ref_last: } - \use:x + \cs_if_exist:NT \pdfmanagement_add:nnn { - \pdfmanagement_add:nnn - { Page / Resources / ColorSpace } - { color \int_use:N \g__color_model_int } - { \pdf_object_last: } + \use:x + { + \pdfmanagement_add:nnn + { Page / Resources / ColorSpace } + { color \int_use:N \g__color_model_int } + { \pdf_object_ref_last: } + } } } -\cs_if_exist:NF \pdf_object_now:nn - { \cs_gset_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { } } \cs_new:Npn \__color_backend_devicen_init:w #1 ~ #2 \s__color_stop { + 1 @@ -300,7 +302,7 @@ \cs_new_protected:Npn \__color_backend_fill:n #1 { \tl_set:Nn \l__color_backend_fill_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { #1 ~ \l__color_backend_stroke_tl } \group_insert_after:N \__color_backend_reset: } @@ -313,7 +315,7 @@ \cs_new_protected:Npn \__color_backend_stroke:n #1 { \tl_set:Nn \l__color_backend_stroke_tl {#1} - \__color_backend_stack_push:nn \l__color_backend_stack_int + \__kernel_color_backend_stack_push:nn \l__color_backend_stack_int { \l__color_backend_fill_tl \c_space_tl #1 } \group_insert_after:N \__color_backend_reset: } @@ -948,7 +950,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity #1 } { << /ca ~ #1 /CA ~ #1 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity #1 ~ gs } \group_insert_after:N \__opacity_backend_reset: } @@ -957,7 +959,7 @@ \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1 { } } \cs_new_protected:Npn \__opacity_backend_reset: - { \__opacity_backend_stack_pop:n \c__opacity_backend_stack_int } + { \__kernel_color_backend_stack_pop:n \c__opacity_backend_stack_int } \cs_new_protected:Npn \__opacity_backend_fill:n #1 { \__opacity_backend_fill_stroke:xx @@ -983,7 +985,7 @@ \pdfmanagement_add:nnn { Page / Resources / ExtGState } { opacity.stroke #1 } { << /CA ~ #2 >> } - \__opacity_backend_stack_push:nn \c__opacity_backend_stack_int + \__kernel_color_backend_stack_push:nn \c__opacity_backend_stack_int { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs } \group_insert_after:N \__opacity_backend_reset: } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index 953430df265..113dfeaf344 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty @@ -20,7 +20,7 @@ %% %% File: l3benchmark.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3benchmark}{2021-02-06}{} +\ProvidesExplPackage{l3benchmark}{2021-02-18}{} {L3 Experimental benchmarking} \sys_if_engine_luatex:TF { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty b/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty index 38db17c6827..9d04de5f276 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3bitset.dtx -\ProvidesExplPackage{l3bitset}{2021-02-06}{} +\ProvidesExplPackage{l3bitset}{2021-02-18}{} {L3 Experimental bitset support} \cs_new_protected:Npn \bitset_new:N #1 { 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~=~ } - \\ \\ - 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~=~ } - \\ \\ - 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~=~ } - \\ \\ - 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~=~ } - \\ \\ - 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~=~ } - \\ \\ - 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~=~ } - \\ \\ - 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'. diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty index 5b8be0a04c8..a990d35197b 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty @@ -28,9 +28,8 @@ %% %% File: l3draw.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3draw}{2021-02-06}{} +\ProvidesExplPackage{l3draw}{2021-02-18}{} {L3 Experimental core drawing support} -\RequirePackage { l3color } \scan_new:N \s__draw_mark \scan_new:N \s__draw_stop \quark_new:N \q__draw_recursion_tail diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty index 9d8e1512009..01c53319537 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}{2021-02-06}{} +\ProvidesExplPackage{l3graphics}{2021-02-18}{} {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 deleted file mode 100644 index 2d34f95aa9a..00000000000 --- a/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty +++ /dev/null @@ -1,118 +0,0 @@ -%% -%% This is file `l3pdf.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% l3pdf.dtx (with options: `package') -%% -%% Copyright (C) 2019-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 "l3pdf bundle" (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% File: l3pdf.dtx -\RequirePackage{expl3} -\ProvidesExplPackage{l3pdf}{2021-02-06}{} - {L3 Experimental core PDF support} -\scan_new:N \s__pdf_stop -\bool_new:N \g__pdf_init_bool -\cs_if_exist:NT \documentclass - { - \AtBeginDocument - { \bool_gset_true:N \g__pdf_init_bool } - } -\cs_new_protected:Npn \pdf_uncompress: - { - \bool_if:NF \g__pdf_init_bool - { - \__pdf_backend_compresslevel:n { 0 } - \__pdf_backend_compress_objects:n { \c_false_bool } - } - } -\cs_new_protected:Npn \pdf_object_new:nn #1#2 - { \__pdf_backend_object_new:nn {#1} {#2} } -\prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF } - { - \int_if_exist:cTF { c__pdf_backend_object_ \tl_to_str:n {#1} _int } - { \prg_return_true: } - { \prg_return_false:} - } -\cs_new_protected:Npn \pdf_object_write:nn #1#2 - { \__pdf_backend_object_write:nn {#1} {#2} } -\cs_generate_variant:Nn \pdf_object_write:nn { nx } -\cs_new:Npn \pdf_object_ref:n #1 { \__pdf_backend_object_ref:n {#1} } -\cs_new_protected:Npn \pdf_object_now:nn #1#2 - { \__pdf_backend_object_now:nn {#1} {#2} } -\cs_generate_variant:Nn \pdf_object_now:nn { nx } -\cs_new:Npn \pdf_object_last: { \__pdf_backend_object_last: } -\prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF } - { \use:c { __pdf_version_compare_ #1 :w } #2 . . \s__pdf_stop } -\cs_new:cpn { __pdf_version_compare_=:w } #1 . #2 . #3 \s__pdf_stop - { - \bool_lazy_and:nnTF - { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} } - { \int_compare_p:nNn \__pdf_backend_version_minor: = {#2} } - { \prg_return_true: } - { \prg_return_false: } - } -\cs_new:cpn { __pdf_version_compare_<:w } #1 . #2 . #3 \s__pdf_stop - { - \bool_lazy_or:nnTF - { \int_compare_p:nNn \__pdf_backend_version_major: < {#1} } - { - \bool_lazy_and_p:nn - { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} } - { \int_compare_p:nNn \__pdf_backend_version_minor: < {#2} } - } - { \prg_return_true: } - { \prg_return_false: } - } -\cs_new:cpn { __pdf_version_compare_>:w } #1 . #2 . #3 \s__pdf_stop - { - \bool_lazy_or:nnTF - { \int_compare_p:nNn \__pdf_backend_version_major: > {#1} } - { - \bool_lazy_and_p:nn - { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} } - { \int_compare_p:nNn \__pdf_backend_version_minor: > {#2} } - } - { \prg_return_true: } - { \prg_return_false: } - } -\cs_new_protected:Npn \pdf_version_gset:n #1 - { \__pdf_version_gset:w #1 . . \s__pdf_stop } -\cs_new_protected:Npn \pdf_version_min_gset:n #1 - { - \pdf_version_compare:NnT < {#1} - { \__pdf_version_gset:w #1 . . \s__pdf_stop } - } -\cs_new_protected:Npn \__pdf_version_gset:w #1 . #2 . #3\s__pdf_stop - { - \bool_if:NF \g__pdf_init_bool - { - \__pdf_backend_version_major_gset:n {#1} - \__pdf_backend_version_minor_gset:n {#2} - } - } -\cs_new:Npn \pdf_version: - { \__pdf_backend_version_major: . \__pdf_backend_version_minor: } -\cs_new:Npn \pdf_version_major: { \__pdf_backend_version_major: } -\cs_new:Npn \pdf_version_minor: { \__pdf_backend_version_minor: } -\cs_new_protected:Npn \pdf_destination:nn #1 #2 - { \__pdf_backend_destination:nn {#1}{#2} } -\cs_new_protected:Npn \pdf_destination:nnnn #1 #2 #3 #4 - { - \hbox_to_zero:n - { \__pdf_backend_destination:nnnn {#1} {#2} {#3} {#4} } - } -%% -%% -%% End of file `l3pdf.sty'. 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 b6bf7d37245..48e81a6f571 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}{2021-02-06}{} +\ProvidesExplPackage{l3str-format}{2021-02-18}{} {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 a898f8c3486..fce658def23 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}{2021-02-06}{} +\ProvidesExplPackage{l3sys-shell}{2021-02-18}{} {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 d03ce8a0c48..6b7e5dd3d68 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: xcoffins.dtx -\ProvidesExplPackage{xcoffins}{2021-02-06}{} +\ProvidesExplPackage{xcoffins}{2021-02-18}{} {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 00fdfa75051..cb3484818c0 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}{2021-02-06}{} +\ProvidesExplPackage{l3galley}{2021-02-18}{} {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 d1f2dd701cb..4fd8c31ac42 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: xgalley.dtx -\ProvidesExplPackage{xgalley}{2021-02-06}{} +\ProvidesExplPackage{xgalley}{2021-02-18}{} {L3 Experimental galley} \RequirePackage{xtemplate,l3galley} \clist_new:N \l__galley_tmpa_clist diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 12b32317d6f..52982c3fe50 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -45,7 +45,8 @@ %% l3tl-analysis.dtx (with options: `package') %% l3regex.dtx (with options: `package') %% l3box.dtx (with options: `package') -%% l3color-base.dtx (with options: `package') +%% l3color.dtx (with options: `package') +%% l3pdf.dtx (with options: `package') %% l3coffins.dtx (with options: `package') %% l3luatex.dtx (with options: `package,tex') %% l3unicode.dtx (with options: `package') @@ -69,7 +70,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-02-06}% +\def\ExplFileDate{2021-02-18}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -21146,6 +21147,17 @@ \prop_gput:Nnn \g__str_alias_prop { utf32le } { utf32 } \prop_gput:Nnn \g__str_alias_prop { utf32be } { utf32 } \prop_gput:Nnn \g__str_alias_prop { hexadecimal } { hex } +\bool_lazy_any:nTF + { + \sys_if_engine_luatex_p: + \sys_if_engine_xetex_p: + } + { + \prop_gput:Nnn \g__str_alias_prop { default } { } + } + { + \prop_gput:Nnn \g__str_alias_prop { default } { utf8 } + } \bool_new:N \g__str_error_bool \flag_new:n { str_byte } \flag_new:n { str_error } @@ -26497,6 +26509,9 @@ missing~right~ \int_compare:nTF { #1 = 1 } { parenthesis } { parentheses } . } +\__kernel_msg_new:nnnn { kernel } { backwards-quantifier } + { Quantifer~"{#1,#2}"~is~backwards. } + { The~values~given~in~a~quantifier~must~be~in~order. } \__kernel_msg_new:nnn { kernel } { show-regex } { >~Compiled~regex~ @@ -27218,7 +27233,7 @@ } } } -%% File: l3color-base.dtx +%% File: l3color.dtx \cs_new_eq:NN \color_group_begin: \group_begin: \cs_new_eq:NN \color_group_end: \group_end: \cs_new_protected:Npn \color_ensure_current: @@ -27233,215 +27248,1742 @@ { \use:c { __color_backend_select_ #1 :n } {#2} } \tl_new:N \l__color_current_tl \tl_set:Nn \l__color_current_tl { { gray } { 0 } } -%% File: l3coffins.dtx -\box_new:N \l__coffin_internal_box -\dim_new:N \l__coffin_internal_dim -\tl_new:N \l__coffin_internal_tl -\prop_const_from_keyval:Nn \c__coffin_corners_prop + +\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 } { - tl = { 0pt } { 0pt } , - tr = { 0pt } { 0pt } , - bl = { 0pt } { 0pt } , - br = { 0pt } { 0pt } , + \prop_if_exist:cTF { l__color_named_ #1 _prop } + \prg_return_true: + \prg_return_false: } -\prop_const_from_keyval:Nn \c__coffin_poles_prop +\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 { - l = { 0pt } { 0pt } { 0pt } { 1000pt } , - hc = { 0pt } { 0pt } { 0pt } { 1000pt } , - r = { 0pt } { 0pt } { 0pt } { 1000pt } , - b = { 0pt } { 0pt } { 1000pt } { 0pt } , - vc = { 0pt } { 0pt } { 1000pt } { 0pt } , - t = { 0pt } { 0pt } { 1000pt } { 0pt } , - B = { 0pt } { 0pt } { 1000pt } { 0pt } , - H = { 0pt } { 0pt } { 1000pt } { 0pt } , - T = { 0pt } { 0pt } { 1000pt } { 0pt } , + \tl_set_eq:Nc #2 { l__color_named_ #1 _tl } + \prop_get:cVN { l__color_named_ #1 _prop } #2 #3 } -\fp_new:N \l__coffin_slope_A_fp -\fp_new:N \l__coffin_slope_B_fp -\bool_new:N \l__coffin_error_bool -\dim_new:N \l__coffin_offset_x_dim -\dim_new:N \l__coffin_offset_y_dim -\tl_new:N \l__coffin_pole_a_tl -\tl_new:N \l__coffin_pole_b_tl -\dim_new:N \l__coffin_x_dim -\dim_new:N \l__coffin_y_dim -\dim_new:N \l__coffin_x_prime_dim -\dim_new:N \l__coffin_y_prime_dim -\cs_new_eq:NN \__coffin_to_value:N \tex_number:D -\prg_new_conditional:Npnn \coffin_if_exist:N #1 { p , T , F , TF } +\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 { - \cs_if_exist:NTF #1 + \tl_set:Nx #4 { - \cs_if_exist:cTF { coffin ~ \__coffin_to_value:N #1 ~ poles } - { \prg_return_true: } - { \prg_return_false: } + \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 } } } - { \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \coffin_if_exist:N - { c } { p , T , F , TF } -\cs_new_protected:Npn \__coffin_if_exist:NT #1#2 +\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 { - \coffin_if_exist:NTF #1 - { #2 } - { - \__kernel_msg_error:nnx { kernel } { unknown-coffin } - { \token_to_str:N #1 } - } + \exp_args:Nf \__color_convert_rgb_cmyk:nnnn + { \fp_eval:n { min ( 1 - #1 , 1 - #2 , 1 - #3 ) } } {#1} {#2} {#3} } -\cs_new_protected:Npn \coffin_clear:N #1 +\cs_new:Npn \__color_convert_rgb_cmyk:nnnn #1#2#3#4 { - \__coffin_if_exist:NT #1 - { - \box_clear:N #1 - \__coffin_reset_structure:N #1 + \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_generate_variant:Nn \coffin_clear:N { c } -\cs_new_protected:Npn \coffin_gclear:N #1 +\cs_new_protected:Npn \__color_parse:Nw #1#2 ! #3 \s__color_stop { - \__coffin_if_exist:NT #1 + \__color_if_defined:nTF {#2} { - \box_gclear:N #1 - \__coffin_greset_structure:N #1 + \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_generate_variant:Nn \coffin_gclear:N { c } -\cs_new_protected:Npn \coffin_new:N #1 +\cs_new_protected:Npn \__color_parse_loop_init:Nnn #1#2#3 { - \box_new:N #1 - \debug_suspend: - \prop_gclear_new:c { coffin ~ \__coffin_to_value:N #1 ~ corners } - \prop_gclear_new:c { coffin ~ \__coffin_to_value:N #1 ~ poles } - \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ corners } - \c__coffin_corners_prop - \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ poles } - \c__coffin_poles_prop - \debug_resume: + \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_generate_variant:Nn \coffin_new:N { c } -\cs_new_protected:Npn \hcoffin_set:Nn #1#2 +\cs_new_protected:Npn \__color_parse_loop:w #1 ! #2 ! #3 ! #4 ! #5 \s__color_stop { - \__coffin_if_exist:NT #1 + \bool_lazy_or:nnF + { \tl_if_blank_p:n {#1} } + { \int_compare_p:nNn {#1} = { 100 } } { - \hbox_set:Nn #1 + \int_compare:nNnTF {#1} = { 0 } { - \color_ensure_current: - #2 + \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} } + } } - \__coffin_update:N #1 } + \tl_if_blank:nF {#3} + { \__color_parse_loop:w #3 ! #4 ! #5 \s__color_stop } + \__color_parse_end: } -\cs_generate_variant:Nn \hcoffin_set:Nn { c } -\cs_new_protected:Npn \hcoffin_gset:Nn #1#2 +\cs_new_protected:Npn \__color_parse_loop:nn #1#2 { - \__coffin_if_exist:NT #1 + \__color_if_defined:nTF {#2} { - \hbox_gset:Nn #1 + \__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 { - \color_ensure_current: - #2 + \str_if_eq:VnTF \l__color_model_tl { gray } + { \__color_parse_gray:n {#2} } + { \__color_parse_std:n {#2} } } - \__coffin_gupdate:N #1 + \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_generate_variant:Nn \hcoffin_gset:Nn { c } -\cs_new_protected:Npn \vcoffin_set:Nnn #1#2#3 +\cs_new_protected:Npn \__color_parse_gray:n #1 { - \__coffin_set_vertical:NnnNN #1 {#2} {#3} - \vbox_set:Nn \__coffin_update:N + \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_generate_variant:Nn \vcoffin_set:Nnn { c } -\cs_new_protected:Npn \vcoffin_gset:Nnn #1#2#3 +\cs_new_protected:Npn \__color_parse_std:n #1 { - \__coffin_set_vertical:NnnNN #1 {#2} {#3} - \vbox_gset:Nn \__coffin_gupdate:N + \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_generate_variant:Nn \vcoffin_gset:Nnn { c } -\cs_new_protected:Npn \__coffin_set_vertical:NnnNN #1#2#3#4#5 +\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 { - \__coffin_if_exist:NT #1 + \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 { - #4 #1 + \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 } { - \dim_set:Nn \tex_hsize:D {#2} - \__coffin_set_vertical_aux: - #3 + \__color_parse_model_wave_auxii:nn + { 4 - \__color_parse_model_wave_rho:n { (#1 - 440) / 50 } } + {#2} } - #5 #1 - \vbox_set_top:Nn \l__coffin_internal_box { \vbox_unpack:N #1 } - \__coffin_set_pole:Nnx #1 { T } { - { 0pt } - { - \dim_eval:n - { \box_ht:N #1 - \box_ht:N \l__coffin_internal_box } - } - { 1000pt } - { 0pt } + \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} } + } + } } - \box_clear:N \l__coffin_internal_box } } -\cs_new_protected:Npx \__coffin_set_vertical_aux: +\cs_new:Npn \__color_parse_model_wave_auxii:nn #1#2 { - \bool_lazy_and:nnT - { \cs_if_exist_p:N \fmtname } - { \str_if_eq_p:Vn \fmtname { LaTeX2e } } + \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 { - \dim_set_eq:NN \exp_not:N \linewidth \tex_hsize:D - \dim_set_eq:NN \exp_not:N \columnwidth \tex_hsize:D + \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 \hcoffin_set:Nw #1 +\cs_new_protected:Npn \__color_check_model:nn #1#2 { - \__coffin_if_exist:NT #1 + \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 } { - \hbox_set:Nw #1 \color_ensure_current: - \cs_set_protected:Npn \hcoffin_set_end: - { - \hbox_set_end: - \__coffin_update:N #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_generate_variant:Nn \hcoffin_set:Nw { c } -\cs_new_protected:Npn \hcoffin_gset:Nw #1 +\cs_new_protected:Npn \__color_select:nnN #1#2#3 { - \__coffin_if_exist:NT #1 + \cs_if_exist:cTF { __color_parse_model_ #1 :w } { - \hbox_gset:Nw #1 \color_ensure_current: - \cs_set_protected:Npn \hcoffin_gset_end: - { - \hbox_gset_end: - \__coffin_gupdate:N #1 - } + \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_generate_variant:Nn \hcoffin_gset:Nw { c } -\cs_new_protected:Npn \hcoffin_set_end: { } -\cs_new_protected:Npn \hcoffin_gset_end: { } -\cs_new_protected:Npn \vcoffin_set:Nnw #1#2 +\cs_new_protected:Npn \__color_select_swap:Nnn #1#2#3 { - \__coffin_set_vertical:NnNNNNw #1 {#2} \vbox_set:Nw - \vcoffin_set_end: - \vbox_set_end: \__coffin_update:N + \__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_generate_variant:Nn \vcoffin_set:Nnw { c } -\cs_new_protected:Npn \vcoffin_gset:Nnw #1#2 +\cs_new_protected:Npn \color_fill:n #1 { - \__coffin_set_vertical:NnNNNNw #1 {#2} \vbox_gset:Nw - \vcoffin_gset_end: - \vbox_gset_end: \__coffin_gupdate:N + \__color_parse:nN {#1} \l__color_current_tl + \exp_after:wN \__color_draw:nnn \l__color_current_tl { fill } } -\cs_generate_variant:Nn \vcoffin_gset:Nnw { c } -\cs_new_protected:Npn \__coffin_set_vertical:NnNNNNw #1#2#3#4#5#6 +\cs_new_protected:Npn \color_stroke:n #1 { - \__coffin_if_exist:NT #1 - { - #3 #1 - \dim_set:Nn \tex_hsize:D {#2} - \__coffin_set_vertical_aux: + \__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~=~ } + \\ \\ + 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~=~ } + \\ \\ + 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~=~ } + \\ \\ + 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~=~ } + \\ \\ + 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~=~ } + \\ \\ + 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~=~ } + \\ \\ + 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 } + } +%% File: l3pdf.dtx +\scan_new:N \s__pdf_stop +\bool_new:N \g__pdf_init_bool +\bool_lazy_and:nnT + { \str_if_eq_p:Vn \fmtname { LaTeX2e } } + { \tl_if_exist_p:N \@expl@finalise@setup@@ } + { + \tl_gput_right:Nn \@expl@finalise@setup@@ + { + \tl_gput_right:Nn \@kernel@after@begindocument + { \bool_gset_true:N \g__pdf_init_bool } + } + } +\cs_new_protected:Npn \pdf_uncompress: + { + \bool_if:NF \g__pdf_init_bool + { + \__pdf_backend_compresslevel:n { 0 } + \__pdf_backend_compress_objects:n { \c_false_bool } + } + } +\cs_new_protected:Npn \pdf_object_new:nn #1#2 + { \__pdf_backend_object_new:nn {#1} {#2} } +\prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF } + { + \int_if_exist:cTF { c__pdf_backend_object_ \tl_to_str:n {#1} _int } + { \prg_return_true: } + { \prg_return_false:} + } +\cs_new_protected:Npn \pdf_object_write:nn #1#2 + { + \__pdf_backend_object_write:nn {#1} {#2} + \bool_gset_true:N \g__pdf_init_bool + } +\cs_generate_variant:Nn \pdf_object_write:nn { nx } +\cs_new:Npn \pdf_object_ref:n #1 { \__pdf_backend_object_ref:n {#1} } +\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2 + { + \__pdf_backend_object_now:nn {#1} {#2} + \bool_gset_true:N \g__pdf_init_bool + } +\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { nx } +\cs_new:Npn \pdf_object_ref_last: { \__pdf_backend_object_last: } +\cs_new:Npn \pdf_pageobject_ref:n #1 + { \__pdf_backend_pageobject_ref:n {#1} } +\prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF } + { \use:c { __pdf_version_compare_ #1 :w } #2 . . \s__pdf_stop } +\cs_new:cpn { __pdf_version_compare_=:w } #1 . #2 . #3 \s__pdf_stop + { + \bool_lazy_and:nnTF + { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} } + { \int_compare_p:nNn \__pdf_backend_version_minor: = {#2} } + { \prg_return_true: } + { \prg_return_false: } + } +\cs_new:cpn { __pdf_version_compare_<:w } #1 . #2 . #3 \s__pdf_stop + { + \bool_lazy_or:nnTF + { \int_compare_p:nNn \__pdf_backend_version_major: < {#1} } + { + \bool_lazy_and_p:nn + { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} } + { \int_compare_p:nNn \__pdf_backend_version_minor: < {#2} } + } + { \prg_return_true: } + { \prg_return_false: } + } +\cs_new:cpn { __pdf_version_compare_>:w } #1 . #2 . #3 \s__pdf_stop + { + \bool_lazy_or:nnTF + { \int_compare_p:nNn \__pdf_backend_version_major: > {#1} } + { + \bool_lazy_and_p:nn + { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} } + { \int_compare_p:nNn \__pdf_backend_version_minor: > {#2} } + } + { \prg_return_true: } + { \prg_return_false: } + } +\cs_new_protected:Npn \pdf_version_gset:n #1 + { \__pdf_version_gset:w #1 . . \s__pdf_stop } +\cs_new_protected:Npn \pdf_version_min_gset:n #1 + { + \pdf_version_compare:NnT < {#1} + { \__pdf_version_gset:w #1 . . \s__pdf_stop } + } +\cs_new_protected:Npn \__pdf_version_gset:w #1 . #2 . #3\s__pdf_stop + { + \bool_if:NF \g__pdf_init_bool + { + \__pdf_backend_version_major_gset:n {#1} + \__pdf_backend_version_minor_gset:n {#2} + } + } +\cs_new:Npn \pdf_version: + { \__pdf_backend_version_major: . \__pdf_backend_version_minor: } +\cs_new:Npn \pdf_version_major: { \__pdf_backend_version_major: } +\cs_new:Npn \pdf_version_minor: { \__pdf_backend_version_minor: } +\cs_new_protected:Npn \pdf_destination:nn #1#2 + { \__pdf_backend_destination:nn {#1} {#2} } +\cs_new_protected:Npn \pdf_destination:nnnn #1#2#3#4 + { + \hbox_to_zero:n + { \__pdf_backend_destination:nnnn {#1} {#2} {#3} {#4} } + } +%% File: l3coffins.dtx +\box_new:N \l__coffin_internal_box +\dim_new:N \l__coffin_internal_dim +\tl_new:N \l__coffin_internal_tl +\prop_const_from_keyval:Nn \c__coffin_corners_prop + { + tl = { 0pt } { 0pt } , + tr = { 0pt } { 0pt } , + bl = { 0pt } { 0pt } , + br = { 0pt } { 0pt } , + } +\prop_const_from_keyval:Nn \c__coffin_poles_prop + { + l = { 0pt } { 0pt } { 0pt } { 1000pt } , + hc = { 0pt } { 0pt } { 0pt } { 1000pt } , + r = { 0pt } { 0pt } { 0pt } { 1000pt } , + b = { 0pt } { 0pt } { 1000pt } { 0pt } , + vc = { 0pt } { 0pt } { 1000pt } { 0pt } , + t = { 0pt } { 0pt } { 1000pt } { 0pt } , + B = { 0pt } { 0pt } { 1000pt } { 0pt } , + H = { 0pt } { 0pt } { 1000pt } { 0pt } , + T = { 0pt } { 0pt } { 1000pt } { 0pt } , + } +\fp_new:N \l__coffin_slope_A_fp +\fp_new:N \l__coffin_slope_B_fp +\bool_new:N \l__coffin_error_bool +\dim_new:N \l__coffin_offset_x_dim +\dim_new:N \l__coffin_offset_y_dim +\tl_new:N \l__coffin_pole_a_tl +\tl_new:N \l__coffin_pole_b_tl +\dim_new:N \l__coffin_x_dim +\dim_new:N \l__coffin_y_dim +\dim_new:N \l__coffin_x_prime_dim +\dim_new:N \l__coffin_y_prime_dim +\cs_new_eq:NN \__coffin_to_value:N \tex_number:D +\prg_new_conditional:Npnn \coffin_if_exist:N #1 { p , T , F , TF } + { + \cs_if_exist:NTF #1 + { + \cs_if_exist:cTF { coffin ~ \__coffin_to_value:N #1 ~ poles } + { \prg_return_true: } + { \prg_return_false: } + } + { \prg_return_false: } + } +\prg_generate_conditional_variant:Nnn \coffin_if_exist:N + { c } { p , T , F , TF } +\cs_new_protected:Npn \__coffin_if_exist:NT #1#2 + { + \coffin_if_exist:NTF #1 + { #2 } + { + \__kernel_msg_error:nnx { kernel } { unknown-coffin } + { \token_to_str:N #1 } + } + } +\cs_new_protected:Npn \coffin_clear:N #1 + { + \__coffin_if_exist:NT #1 + { + \box_clear:N #1 + \__coffin_reset_structure:N #1 + } + } +\cs_generate_variant:Nn \coffin_clear:N { c } +\cs_new_protected:Npn \coffin_gclear:N #1 + { + \__coffin_if_exist:NT #1 + { + \box_gclear:N #1 + \__coffin_greset_structure:N #1 + } + } +\cs_generate_variant:Nn \coffin_gclear:N { c } +\cs_new_protected:Npn \coffin_new:N #1 + { + \box_new:N #1 + \debug_suspend: + \prop_gclear_new:c { coffin ~ \__coffin_to_value:N #1 ~ corners } + \prop_gclear_new:c { coffin ~ \__coffin_to_value:N #1 ~ poles } + \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ corners } + \c__coffin_corners_prop + \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ poles } + \c__coffin_poles_prop + \debug_resume: + } +\cs_generate_variant:Nn \coffin_new:N { c } +\cs_new_protected:Npn \hcoffin_set:Nn #1#2 + { + \__coffin_if_exist:NT #1 + { + \hbox_set:Nn #1 + { + \color_ensure_current: + #2 + } + \__coffin_update:N #1 + } + } +\cs_generate_variant:Nn \hcoffin_set:Nn { c } +\cs_new_protected:Npn \hcoffin_gset:Nn #1#2 + { + \__coffin_if_exist:NT #1 + { + \hbox_gset:Nn #1 + { + \color_ensure_current: + #2 + } + \__coffin_gupdate:N #1 + } + } +\cs_generate_variant:Nn \hcoffin_gset:Nn { c } +\cs_new_protected:Npn \vcoffin_set:Nnn #1#2#3 + { + \__coffin_set_vertical:NnnNN #1 {#2} {#3} + \vbox_set:Nn \__coffin_update:N + } +\cs_generate_variant:Nn \vcoffin_set:Nnn { c } +\cs_new_protected:Npn \vcoffin_gset:Nnn #1#2#3 + { + \__coffin_set_vertical:NnnNN #1 {#2} {#3} + \vbox_gset:Nn \__coffin_gupdate:N + } +\cs_generate_variant:Nn \vcoffin_gset:Nnn { c } +\cs_new_protected:Npn \__coffin_set_vertical:NnnNN #1#2#3#4#5 + { + \__coffin_if_exist:NT #1 + { + #4 #1 + { + \dim_set:Nn \tex_hsize:D {#2} + \__coffin_set_vertical_aux: + #3 + } + #5 #1 + \vbox_set_top:Nn \l__coffin_internal_box { \vbox_unpack:N #1 } + \__coffin_set_pole:Nnx #1 { T } + { + { 0pt } + { + \dim_eval:n + { \box_ht:N #1 - \box_ht:N \l__coffin_internal_box } + } + { 1000pt } + { 0pt } + } + \box_clear:N \l__coffin_internal_box + } + } +\cs_new_protected:Npx \__coffin_set_vertical_aux: + { + \bool_lazy_and:nnT + { \cs_if_exist_p:N \fmtname } + { \str_if_eq_p:Vn \fmtname { LaTeX2e } } + { + \dim_set_eq:NN \exp_not:N \linewidth \tex_hsize:D + \dim_set_eq:NN \exp_not:N \columnwidth \tex_hsize:D + } + } +\cs_new_protected:Npn \hcoffin_set:Nw #1 + { + \__coffin_if_exist:NT #1 + { + \hbox_set:Nw #1 \color_ensure_current: + \cs_set_protected:Npn \hcoffin_set_end: + { + \hbox_set_end: + \__coffin_update:N #1 + } + } + } +\cs_generate_variant:Nn \hcoffin_set:Nw { c } +\cs_new_protected:Npn \hcoffin_gset:Nw #1 + { + \__coffin_if_exist:NT #1 + { + \hbox_gset:Nw #1 \color_ensure_current: + \cs_set_protected:Npn \hcoffin_gset_end: + { + \hbox_gset_end: + \__coffin_gupdate:N #1 + } + } + } +\cs_generate_variant:Nn \hcoffin_gset:Nw { c } +\cs_new_protected:Npn \hcoffin_set_end: { } +\cs_new_protected:Npn \hcoffin_gset_end: { } +\cs_new_protected:Npn \vcoffin_set:Nnw #1#2 + { + \__coffin_set_vertical:NnNNNNw #1 {#2} \vbox_set:Nw + \vcoffin_set_end: + \vbox_set_end: \__coffin_update:N + } +\cs_generate_variant:Nn \vcoffin_set:Nnw { c } +\cs_new_protected:Npn \vcoffin_gset:Nnw #1#2 + { + \__coffin_set_vertical:NnNNNNw #1 {#2} \vbox_gset:Nw + \vcoffin_gset_end: + \vbox_gset_end: \__coffin_gupdate:N + } +\cs_generate_variant:Nn \vcoffin_gset:Nnw { c } +\cs_new_protected:Npn \__coffin_set_vertical:NnNNNNw #1#2#3#4#5#6 + { + \__coffin_if_exist:NT #1 + { + #3 #1 + \dim_set:Nn \tex_hsize:D {#2} + \__coffin_set_vertical_aux: \cs_set_protected:Npn #4 { #5 @@ -28276,26 +29818,6 @@ \tl_set:Nn \l__coffin_display_font_tl { \sffamily \tiny } } -\cs_new_protected:Npn \__coffin_color:n #1 {#1} -\bool_lazy_and:nnT - { \cs_if_exist_p:N \fmtname } - { \str_if_eq_p:Vn \fmtname { LaTeX2e } } - { - \cs_gset_protected:Npn \__coffin_color:n - { - \cs_gset_protected:Npx \__coffin_color:n - { - \cs_if_exist:NTF \color_select:n - { \color_select:n } - { - \cs_if_exist:NTF \color - { \exp_not:N \color } - { \exp_not:N \use_none:n } - } - } - \__coffin_color:n - } - } \cs_new_protected:Npn \__coffin_rule:nn #1#2 { \mode_leave_vertical: @@ -28305,14 +29827,14 @@ { \hcoffin_set:Nn \l__coffin_display_pole_coffin { - \__coffin_color:n {#4} + \color_select:n {#4} \__coffin_rule:nn { 1pt } { 1pt } } \__coffin_attach_mark:NnnNnnnn #1 {#2} {#3} \l__coffin_display_pole_coffin { hc } { vc } { 0pt } { 0pt } \hcoffin_set:Nn \l__coffin_display_coord_coffin { - \__coffin_color:n {#4} + \color_select:n {#4} \l__coffin_display_font_tl ( \tl_to_str:n { #2 , #3 } ) } @@ -28350,7 +29872,7 @@ { \hcoffin_set:Nn \l__coffin_display_pole_coffin { - \__coffin_color:n {#2} + \color_select:n {#2} \__coffin_rule:nn { 1pt } { 1pt } } \prop_set_eq:Nc \l__coffin_display_poles_prop @@ -28385,7 +29907,7 @@ { 0pt } { 0pt } \hcoffin_set:Nn \l__coffin_display_coord_coffin { - \__coffin_color:n {#6} + \color_select:n {#6} \l__coffin_display_font_tl ( \tl_to_str:n { #1 , ##1 } ) } diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 70187f40fed..2ef8b11ca39 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-02-06}% +\def\ExplFileDate{2021-02-18}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx index a48a7176333..e28a59c89d8 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-02-06}% +\def\ExplFileDate{2021-02-18}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index a02edb0c28c..01e190e9176 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-02-06}% +\def\ExplFileDate{2021-02-18}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% -- cgit v1.2.3