diff options
author | Karl Berry <karl@freefriends.org> | 2022-08-03 20:34:01 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-08-03 20:34:01 +0000 |
commit | cd5d4632250be6513612605c679b3cb12aca0541 (patch) | |
tree | 74f69a42d2a4eec9c44ed2b68fb1ff62bd26a1ce /Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty | |
parent | 1d60eab9a00326e0417cdc69780c5b71c44d3944 (diff) |
lt3rawobjects (3aug22)
git-svn-id: svn://tug.org/texlive/trunk@64038 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty | 353 |
1 files changed, 280 insertions, 73 deletions
diff --git a/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty b/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty index e213d3d4530..ad7283daaef 100644 --- a/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty +++ b/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty @@ -26,7 +26,7 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3}[2022-04-10] -\ProvidesExplPackage{lt3rawobjects}{2022/07/11}{ 1.1.1 }{Objects and proxies in LaTeX3} +\ProvidesExplPackage{lt3rawobjects}{2022/08/03}{ 2.0 }{Objects and proxies in LaTeX3} \str_const:Nn \c_object_local_str {loc} \str_const:Nn \c_object_global_str {glo} \str_const:Nn \c_object_public_str {pub} @@ -107,35 +107,38 @@ \prg_new_conditional:Nnn \object_if_global:n {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_scovar:n {#1} } \c_object_global_str - { - \prg_return_true: - } - { - \prg_return_false: - } + \str_if_eq:cNTF { \__rawobjects_object_scovar:n {#1} } + \c_object_global_str + { + \prg_return_true: + } + { + \prg_return_false: + } } \prg_new_conditional:Nnn \object_if_public:n {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_visvar:n { #1 } } \c_object_public_str - { - \prg_return_true: - } - { - \prg_return_false: - } + \str_if_eq:cNTF { \__rawobjects_object_visvar:n { #1 } } + \c_object_public_str + { + \prg_return_true: + } + { + \prg_return_false: + } } \prg_new_conditional:Nnn \object_if_private:n {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_visvar:n {#1} } \c_object_private_str - { - \prg_return_true: - } - { - \prg_return_false: - } + \str_if_eq:cNTF { \__rawobjects_object_visvar:n {#1} } + \c_object_private_str + { + \prg_return_true: + } + { + \prg_return_false: + } } \prg_generate_conditional_variant:Nnn \object_if_local:n { V } @@ -149,9 +152,9 @@ \cs_new:Nn \__rawobjects_scope:n { - \object_if_global:nTF { #1 } + \object_if_local:nTF { #1 } { - g + l } { \str_if_eq:cNTF { \__rawobjects_object_scovar:n { #1 } } @@ -160,14 +163,19 @@ c } { - l + g } } } -\cs_new:Nn \object_member_adr:nnn +\cs_new:Nn \__rawobjects_scope_pfx:n + { + \object_if_local:nF { #1 } + { g } + } + +\cs_new:Nn \__rawobjects_vis_var:n { - \__rawobjects_scope:n { #1 } \object_if_private:nTF { #1 } { __ @@ -175,6 +183,20 @@ { _ } + } + +\cs_new:Nn \__rawobjects_vis_fun:n + { + \object_if_private:nT { #1 } + { + __ + } + } + +\cs_new:Nn \object_member_adr:nnn + { + \__rawobjects_scope:n { #1 } + \__rawobjects_vis_var:n { #1 } #1 \tl_to_str:n { _ MEMBER _ #2 _ #3 } } @@ -184,7 +206,7 @@ { \object_member_adr:nnv { #1 }{ #2 } { - \object_member_adr:vnn { \__rawobjects_object_pxyvar:n { #1 } } + \object_rcmember_adr:nnn { #1 } { #2 _ type }{ str } } } @@ -193,7 +215,7 @@ \cs_new:Nn \object_member_type:nn { - \object_member_use:vnn { \__rawobjects_object_pxyvar:n { #1 } } + \object_rcmember_use:nnn { #1 } { #2 _ type }{ str } } @@ -216,6 +238,41 @@ } +\prg_new_conditional:Nnn \object_member_if_exist:nnn {p, T, F, TF } + { + \cs_if_exist:cTF + { + \object_member_adr:nnn { #1 }{ #2 }{ #3 } + } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + +\prg_new_conditional:Nnn \object_member_if_exist:nn {p, T, F, TF } + { + \cs_if_exist:cTF + { + \object_member_adr:nn { #1 }{ #2 } + } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + +\prg_generate_conditional_variant:Nnn \object_member_if_exist:nnn + { Vnn }{ p, T, F, TF } +\prg_generate_conditional_variant:Nnn \object_member_if_exist:nn + { Vn }{ p, T, F, TF } + + + \cs_new_protected:Nn \object_new_member:nnn { \__rawobjects_force_scope:n { #1 } @@ -240,7 +297,7 @@ { \object_member_use:nnv { #1 }{ #2 } { - \object_member_adr:vnn { \__rawobjects_object_pxyvar:n { #1 } } + \object_rcmember_adr:nnn { #1 } { #2 _ type }{ str } } } @@ -254,7 +311,7 @@ \__rawobjects_force_scope:n { #1 } \cs_if_exist_use:cT { - #3 _ \object_if_global:nT { #1 }{ g } set _ eq:cN + #3 _ \__rawobjects_scope_pfx:n { #1 } set _ eq:cN } { { \object_member_adr:nnn { #1 }{ #2 }{ #3 } } #4 @@ -267,7 +324,7 @@ { \object_member_set_eq:nnvN { #1 }{ #2 } { - \object_member_adr:vnn { \__rawobjects_object_pxyvar:n { #1 } } + \object_rcmember_adr:nnn { #1 } { #2 _ type }{ str } } #3 } @@ -275,46 +332,80 @@ \cs_generate_variant:Nn \object_member_set_eq:nnN { VnN, nnc, Vnc } -\cs_new:Nn \object_nconst_adr:nnn +\cs_new:Nn \object_ncmember_adr:nnn { c _ #1 \tl_to_str:n { _ CONST _ #2 _ #3 } } -\cs_generate_variant:Nn \object_member_adr:nnn { Vnn, vnn } +\cs_generate_variant:Nn \object_ncmember_adr:nnn { Vnn, vnn } -\cs_new:Nn \object_rconst_adr:nnn +\cs_new:Nn \object_rcmember_adr:nnn { - \object_nconst_adr:vnn { \__rawobjects_object_pxyvar:n { #1 } } + \object_ncmember_adr:vnn { \__rawobjects_object_pxyvar:n { #1 } } { #2 }{ #3 } } -\cs_generate_variant:Nn \object_member_adr:nnn { Vnn } +\cs_generate_variant:Nn \object_rcmember_adr:nnn { Vnn } + +\prg_new_conditional:Nnn \object_ncmember_if_exist:nnn {p, T, F, TF } + { + \cs_if_exist:cTF + { + \object_ncmember_adr:nnn { #1 }{ #2 }{ #3 } + } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + +\prg_new_conditional:Nnn \object_rcmember_if_exist:nnn {p, T, F, TF } + { + \cs_if_exist:cTF + { + \object_rcmember_adr:nnn { #1 }{ #2 }{ #3 } + } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + +\prg_generate_conditional_variant:Nnn \object_ncmember_if_exist:nnn + { Vnn }{ p, T, F, TF } +\prg_generate_conditional_variant:Nnn \object_rcmember_if_exist:nnn + { Vnn }{ p, T, F, TF } + -\cs_new:Nn \object_nconst_use:nnn +\cs_new:Nn \object_ncmember_use:nnn { \cs_if_exist_use:cT { #3 _ use:c } { - { \object_nconst_adr:nnn { #1 }{ #2 }{ #3 } } + { \object_ncmember_adr:nnn { #1 }{ #2 }{ #3 } } } } -\cs_new:Nn \object_rconst_use:nnn +\cs_new:Nn \object_rcmember_use:nnn { \cs_if_exist_use:cT { #3 _ use:c } { - { \object_rconst_adr:nnn { #1 }{ #2 }{ #3 } } + { \object_rcmember_adr:nnn { #1 }{ #2 }{ #3 } } } } -\cs_generate_variant:Nn \object_nconst_use:nnn { Vnn } -\cs_generate_variant:Nn \object_rconst_use:nnn { Vnn } +\cs_generate_variant:Nn \object_ncmember_use:nnn { Vnn } +\cs_generate_variant:Nn \object_rcmember_use:nnn { Vnn } \cs_new_protected:Nn \__rawobjects_const_create:nnnn { \use:c { #1 _ const:cn } { - \object_nconst_adr:nnn { #2 }{ #3 }{ #1 } + \object_ncmember_adr:nnn { #2 }{ #3 }{ #1 } } { #4 } } @@ -361,7 +452,7 @@ { \seq_const_from_clist:cn { - \object_nconst_adr:nnn { #1 }{ #2 }{ seq } + \object_ncmember_adr:nnn { #1 }{ #2 }{ seq } } { #3 } } @@ -373,13 +464,99 @@ { \prop_const_from_keyval:cn { - \object_nconst_adr:nnn { #1 }{ #2 }{ prop } + \object_ncmember_adr:nnn { #1 }{ #2 }{ prop } } { #3 } } \cs_generate_variant:Nn \object_newconst_prop_from_keyval:nnn { Vnn } + +\cs_new:Nn \object_ncmethod_adr:nnn + { + #1 \tl_to_str:n { _ CMETHOD _ #2 : #3 } + } + +\cs_generate_variant:Nn \object_ncmethod_adr:nnn { Vnn , vnn } + +\cs_new:Nn \object_rcmethod_adr:nnn + { + \object_ncmethod_adr:vnn + { + \__rawobjects_object_pxyvar:n { #1 } + } + { #2 }{ #3 } + } + +\cs_generate_variant:Nn \object_ncmethod_adr:nnn { Vnn , vnn } +\cs_generate_variant:Nn \object_rcmethod_adr:nnn { Vnn } + + +\prg_new_conditional:Nnn \object_ncmethod_if_exist:nnn {p, T, F, TF } + { + \cs_if_exist:cTF + { + \object_ncmethod_adr:nnn { #1 }{ #2 }{ #3 } + } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + +\prg_new_conditional:Nnn \object_rcmethod_if_exist:nnn {p, T, F, TF } + { + \cs_if_exist:cTF + { + \object_rcmethodr_adr:nnn { #1 }{ #2 }{ #3 } + } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + +\prg_generate_conditional_variant:Nnn \object_ncmethod_if_exist:nnn + { Vnn }{ p, T, F, TF } +\prg_generate_conditional_variant:Nnn \object_rcmethod_if_exist:nnn + { Vnn }{ p, T, F, TF } + + +\cs_new_protected:Nn \object_new_cmethod:nnnn + { + \cs_new:cn + { + \object_ncmethod_adr:nnn { #1 }{ #2 }{ #3 } + } + { #4 } + } + +\cs_generate_variant:Nn \object_new_cmethod:nnnn { Vnnn } + + +\cs_new:Nn \object_ncmethod_call:nnn + { + \use:c + { + \object_ncmethod_adr:nnn { #1 }{ #2 }{ #3 } + } + } + +\cs_new:Nn \object_rcmethod_call:nnn + { + \use:c + { + \object_rcmethod_adr:nnn { #1 }{ #2 }{ #3 } + } + } + +\cs_generate_variant:Nn \object_ncmethod_call:nnn { Vnn } +\cs_generate_variant:Nn \object_rcmethod_call:nnn { Vnn } + \str_const:Nx \c_proxy_address_str { \object_address:nn { rawobjects }{ proxy } } \str_const:cn { \__rawobjects_object_modvar:V \c_proxy_address_str } @@ -391,24 +568,46 @@ \str_const:cV { \__rawobjects_object_visvar:V \c_proxy_address_str } \c_object_public_str -\cs_generate_variant:Nn \seq_const_from_clist:Nn { cx } - \seq_const_from_clist:cn { \object_member_adr:Vnn \c_proxy_address_str { varlist }{ seq } } { varlist } -\str_const:cn +\object_newconst_str:Vnn \c_proxy_address_str { varlist_type }{ seq } + + +\prg_new_conditional:Nnn \object_if_proxy:n {p, T, F, TF} { - \object_member_adr:Vnn \c_proxy_address_str { varlist_type }{ str } + \object_test_proxy:nNTF { #1 } + \c_proxy_address_str + { + \prg_return_true: + } + { + \prg_return_false: + } } - { seq } -\prg_new_conditional:Nnn \object_if_proxy:n {p, T, F, TF} + +\prg_generate_conditional_variant:Nnn \str_if_eq:nn { ve }{ TF } + +\prg_new_conditional:Nnn \object_test_proxy:nn {p, T, F, TF} + { + \str_if_eq:veTF { \__rawobjects_object_pxyvar:n { #1 } } + { #2 } + { + \prg_return_true: + } + { + \prg_return_false: + } + } + +\prg_new_conditional:Nnn \object_test_proxy:nN {p, T, F, TF} { \str_if_eq:cNTF { \__rawobjects_object_pxyvar:n { #1 } } - \c_proxy_address_str + #2 { \prg_return_true: } @@ -417,6 +616,11 @@ } } +\prg_generate_conditional_variant:Nnn \object_test_proxy:nn + { Vn }{p, T, F, TF} +\prg_generate_conditional_variant:Nnn \object_test_proxy:nN + { VN }{p, T, F, TF} + \msg_new:nnn { aa }{ mess }{ #1 } @@ -450,7 +654,7 @@ { \object_new_member:nnv { #2 }{ ##1 } { - \object_member_adr:nnn { #1 }{ ##1 _ type }{ str } + \object_ncmember_adr:nnn { #1 }{ ##1 _ type }{ str } } } } @@ -474,22 +678,30 @@ } \cs_generate_variant:Nn \object_create:nnnNN { VnnNN } -\cs_generate_variant:Nn \object_create_set:NnnnNN { NVnnNN } -\cs_generate_variant:Nn \object_create_gset:NnnnNN { NVnnNN } +\cs_generate_variant:Nn \object_create_set:NnnnNN { NVnnNN, NnnfNN } +\cs_generate_variant:Nn \object_create_gset:NnnnNN { NVnnNN, NnnfNN } -\cs_new:Nn \__rawobjects_combine:nn +\cs_new:Nn \__rawobjects_combine_aux:nnn { - anon . #2 . #1 + anon . #3 . #2 . #1 } -\cs_generate_variant:Nn \__rawobjects_combine:nn { Vn } +\cs_generate_variant:Nn \__rawobjects_combine_aux:nnn { Vnf } + +\cs_new:Nn \__rawobjects_combine:Nn + { + \__rawobjects_combine_aux:Vnf #1 { #2 } + { + \cs_to_str:N #1 + } + } \cs_new_protected:Nn \object_allocate_incr:NNnnNN { - \object_create_set:NnnnNN #1 { #3 }{ #4 } + \object_create_set:NnnfNN #1 { #3 }{ #4 } { - \__rawobjects_combine:Vn #2 { #3 } + \__rawobjects_combine:Nn #2 { #3 } } #5 #6 @@ -498,9 +710,9 @@ \cs_new_protected:Nn \object_gallocate_incr:NNnnNN { - \object_create_gset:NnnnNN #1 { #3 }{ #4 } + \object_create_gset:NnnfNN #1 { #3 }{ #4 } { - \__rawobjects_combine:Vn #2 { #3 } + \__rawobjects_combine:Nn #2 { #3 } } #5 #6 @@ -513,9 +725,9 @@ \cs_new_protected:Nn \object_allocate_gincr:NNnnNN { - \object_create_set:NnnnNN #1 { #3 }{ #4 } + \object_create_set:NnnfNN #1 { #3 }{ #4 } { - \__rawobjects_combine:Vn #2 { #3 } + \__rawobjects_combine:Nn #2 { #3 } } #5 #6 @@ -524,9 +736,9 @@ \cs_new_protected:Nn \object_gallocate_gincr:NNnnNN { - \object_create_gset:NnnnNN #1 { #3 }{ #4 } + \object_create_gset:NnnfNN #1 { #3 }{ #4 } { - \__rawobjects_combine:Vn #2 { #3 } + \__rawobjects_combine:Nn #2 { #3 } } #5 #6 @@ -559,12 +771,7 @@ \cs_new_protected:Nn \proxy_push_member:nnn { \__rawobjects_force_scope:n { #1 } - \object_new_member:nnn { #1 }{ #2 _ type }{ str } - \str_set:cn - { - \object_member_adr:nnn { #1 }{ #2 _ type }{ str } - } - { #3 } + \object_newconst_str:nnn { #1 }{ #2 _ type }{ #3 } \seq_gput_left:cn { \object_member_adr:nnn { #1 }{ varlist }{ seq } |