diff options
author | Karl Berry <karl@freefriends.org> | 2023-03-21 16:47:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-03-21 16:47:21 +0000 |
commit | 9402d4bfa4a12794ccec97745691022509975072 (patch) | |
tree | 4683465fdb5c0b1f1638c93909331e96282422cd /Master/texmf-dist/tex/latex/lt3rawobjects | |
parent | 0cde5db5dc139ef2532052bc6eb5695fa4e85a74 (diff) |
lt3rawobjects (17mar23)
git-svn-id: svn://tug.org/texlive/trunk@66619 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/lt3rawobjects')
-rw-r--r-- | Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty | 1172 |
1 files changed, 896 insertions, 276 deletions
diff --git a/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty b/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty index 2c9e25dcce3..a22f1f0ea62 100644 --- a/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty +++ b/Master/texmf-dist/tex/latex/lt3rawobjects/lt3rawobjects.sty @@ -26,13 +26,66 @@ %% \NeedsTeXFormat{LaTeX2e} \RequirePackage{expl3}[2022-04-10] -\ProvidesExplPackage{lt3rawobjects}{2022/12/09}{ 2.2 }{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} -\str_const:Nn \c_object_private_str {pri} +\ProvidesExplPackage{lt3rawobjects}{2023/03/17}{ 2.3 }{Objects and proxies in LaTeX3} + +\msg_new:nnn { rawobjects }{ deprecate } + { + Command ~ #1 ~ is ~ deprecated. ~ Use ~ instead ~ #2 + } + +\cs_new_protected:Nn \__rawobjects_launch_deprecate:NN + { + \msg_warning:nnnn{ rawobjects }{ deprecate }{ #1 }{ #2 } + } + + +\cs_new:Nn \rwobj_address_f:n + { + \exp_args:Nc \cs_to_str:N { #1 } + } + +\str_const:Nn \c_object_local_str {l} +\str_const:Nn \c_object_global_str {g} +\str_const:Nn \c_object_public_str {_} +\str_const:Nn \c_object_private_str {__} + +\cs_new:Nn \__rawobjects_scope:N + { + \str_use:N #1 + } + +\cs_new:Nn \__rawobjects_scope_pfx:N + { + \str_if_eq:NNF #1 \c_object_local_str + { g } + } + +\cs_generate_variant:Nn \__rawobjects_scope_pfx:N { c } + +\cs_new:Nn \__rawobjects_scope_pfx_cl:n + { + \__rawobjects_scope_pfx:c{ + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn { #1 }{ /_I_/ } +} +{ S }{ str } +} + } + +\cs_new:Nn \__rawobjects_vis_var:N + { + \str_use:N #1 + } + +\cs_new:Nn \__rawobjects_vis_fun:N + { + \str_if_eq:NNT #1 \c_object_private_str + { + __ + } + } -\str_const:Nn \c__rawobjects_const_str {con} \cs_new:Nn \object_address:nn { \tl_to_str:n { #1 _ #2 } } @@ -53,32 +106,16 @@ \str_gset:Nn #1 { #2 _ #3 } } -\cs_new:Nn \__rawobjects_object_modvar:n{ - c __ #1 _ MODULE _ str -} - -\cs_new:Nn \__rawobjects_object_pxyvar:n{ - c __ #1 _ PROXY _ str -} - -\cs_new:Nn \__rawobjects_object_scovar:n{ - c __ #1 _ SCOPE _ str -} - -\cs_new:Nn \__rawobjects_object_visvar:n{ - c __ #1 _ VISIB _ str -} - -\cs_generate_variant:Nn \__rawobjects_object_modvar:n { V } -\cs_generate_variant:Nn \__rawobjects_object_pxyvar:n { V } -\cs_generate_variant:Nn \__rawobjects_object_scovar:n { V } -\cs_generate_variant:Nn \__rawobjects_object_visvar:n { V } \prg_new_conditional:Nnn \object_if_exist:n { p, T, F, TF } { \cs_if_exist:cTF { - \__rawobjects_object_modvar:n { #1 } + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { S }{ str } } { \prg_return_true: @@ -92,17 +129,32 @@ { p, T, F, TF } \cs_new:Nn \object_get_module:n { - \str_use:c { \__rawobjects_object_modvar:n { #1 } } + \object_ncmember_use:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { M }{ str } } \cs_new:Nn \object_get_proxy_adr:n { - \str_use:c { \__rawobjects_object_pxyvar:n { #1 } } + \object_ncmember_use:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { P }{ str } } \cs_generate_variant:Nn \object_get_module:n { V } \cs_generate_variant:Nn \object_get_proxy_adr:n { V } \prg_new_conditional:Nnn \object_if_local:n {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_scovar:n {#1} } + \str_if_eq:cNTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { S }{ str } + } \c_object_local_str { \prg_return_true: @@ -114,7 +166,14 @@ \prg_new_conditional:Nnn \object_if_global:n {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_scovar:n {#1} } + \str_if_eq:cNTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { S }{ str } + } \c_object_global_str { \prg_return_true: @@ -126,7 +185,14 @@ \prg_new_conditional:Nnn \object_if_public:n {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_visvar:n { #1 } } + \str_if_eq:cNTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { V }{ str } + } \c_object_public_str { \prg_return_true: @@ -138,7 +204,14 @@ \prg_new_conditional:Nnn \object_if_private:n {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_visvar:n {#1} } + \str_if_eq:cNTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { V }{ str } + } \c_object_private_str { \prg_return_true: @@ -175,225 +248,626 @@ \cs_generate_variant:Nn \object_macro_use:nn{ Vn } -\cs_new:Nn \__rawobjects_scope:n +\cs_new:Nn \__rawobjects_member_adr:nnnNN { - \object_if_local:nTF { #1 } - { - l - } + \__rawobjects_scope:N #4 + \__rawobjects_vis_var:N #5 + #1 \tl_to_str:n { _ MEMBER _ #2 _ #3 } + } + +\cs_generate_variant:Nn \__rawobjects_member_adr:nnnNN { VnnNN, nnncc } + + +\cs_new:Nn \object_member_adr:nnn + { + \__rawobjects_member_adr:nnncc { #1 }{ #2 }{ #3 } { - \str_if_eq:cNTF { \__rawobjects_object_scovar:n { #1 } } - \c__rawobjects_const_str + \object_ncmember_adr:nnn { - c + \object_embedded_adr:nn{ #1 }{ /_I_/ } } + { S }{ str } + } + { + \object_ncmember_adr:nnn { - g + \object_embedded_adr:nn{ #1 }{ /_I_/ } } + { V }{ str } } } -\cs_new:Nn \__rawobjects_scope_pfx:n - { - \object_if_local:nF { #1 } - { g } - } +\cs_generate_variant:Nn \object_member_adr:nnn { Vnn, vnn, nnv, nnf } + -\cs_new:Nn \__rawobjects_vis_var:n +\prg_new_conditional:Nnn \object_member_if_exist:nnn {p, T, F, TF } { - \object_if_private:nTF { #1 } + \cs_if_exist:cTF { - __ + \object_member_adr:nnn { #1 }{ #2 }{ #3 } + } + { + \prg_return_true: } { - _ + \prg_return_false: } } -\cs_new:Nn \__rawobjects_vis_fun:n +\prg_generate_conditional_variant:Nnn \object_member_if_exist:nnn + { Vnn }{ p, T, F, TF } + + +\prg_new_conditional:Nnn \object_member_if_tracked:nn {p, T, F, TF } { - \object_if_private:nT { #1 } + \cs_if_exist:cTF { - __ + \object_rcmember_adr:nnn + { #1 }{ #2 _ type }{ str } + } + { + \prg_return_true: + } + { + \cs_if_exist:cTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn { #1 }{ /_T_/ } + } + { #2 _ type }{ str } + } + { + \prg_return_true: + } + { + \prg_return_false: + } } } -\cs_new:Nn \object_member_adr:nnn +\prg_generate_conditional_variant:Nnn \object_member_if_tracked:nn + { Vn }{ p, T, F, TF } + +\prg_new_eq_conditional:NNn \object_member_if_exist:nn + \object_member_if_tracked:nn { p, T, F, TF } +\prg_new_eq_conditional:NNn \object_member_if_exist:Vn + \object_member_if_tracked:Vn { p, T, F, TF } + + +\cs_new:Nn \object_member_type:nn { - \__rawobjects_scope:n { #1 } - \__rawobjects_vis_var:n { #1 } - #1 \tl_to_str:n { _ MEMBER _ #2 _ #3 } + \cs_if_exist:cTF + { + \object_rcmember_adr:nnn + { #1 }{ #2 _ type }{ str } + } + { + \object_rcmember_use:nnn + { #1 }{ #2 _ type }{ str } + } + { + \cs_if_exist:cT + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn { #1 }{ /_T_/ } + } + { #2 _ type }{ str } + } + { + \object_ncmember_use:nnn + { + \object_embedded_adr:nn { #1 }{ /_T_/ } + } + { #2 _ type }{ str } + } + } } -\cs_generate_variant:Nn \object_member_adr:nnn { Vnn, vnn, nnv } \cs_new:Nn \object_member_adr:nn { - \object_member_adr:nnv { #1 }{ #2 } + \object_member_adr:nnf { #1 }{ #2 } { - \object_rcmember_adr:nnn { #1 } - { #2 _ type }{ str } + \object_member_type:nn { #1 }{ #2 } } } \cs_generate_variant:Nn \object_member_adr:nn { Vn } -\cs_new:Nn \object_member_type:nn +\cs_new:Nn \__rawobjects_par_trans:N + { + \str_case:nnF { #1 } + { + { N }{ N } + { V }{ N } + { n }{ n } + { v }{ n } + { f }{ n } + { x }{ n } + { e }{ n } + { o }{ n } + { ~ }{} + } + { #1 } + } + +\cs_new:Nn \__rawobjects_par_trans:n { - \object_rcmember_use:nnn { #1 } - { #2 _ type }{ str } + \str_map_function:nN { #1 } \__rawobjects_par_trans:N } +\str_new:N \l__rawobjects_tmp_fa_str -\msg_new:nnnn { rawobjects }{ scoperr }{ Nonstandard ~ scope } +\cs_new_protected:Nn \__rawobjects_save_dat:n { - Operation ~ not ~ permitted ~ on ~ object ~ #1 ~ - ~ since ~ it ~ wasn't ~ declared ~ local ~ or ~ global + \str_set:Nx \l__rawobjects_tmp_fa_str + { \str_tail:n{ #1 } } } +\cs_new_protected:Nn \__rawobjects_save_dat:nnN + { + \str_set:Nx \l__rawobjects_tmp_fa_str + { \str_tail:n{ #2 } } + } +\cs_new_protected:Nn \__rawobjects_save_dat_aux:n + { + \__rawobjects_save_dat:nnN #1 + } +\cs_generate_variant:Nn \__rawobjects_save_dat_aux:n { f } -\cs_new_protected:Nn \__rawobjects_force_scope:n +\cs_new_protected:Nn \__rawobjects_save_fun:N { - \bool_if:nF + \__rawobjects_save_dat_aux:f { \cs_split_function:N #1 } + } + +\cs_new:Nn \__rawobjects_use_dat:nn + { + #1 : #2 \str_use:N \l__rawobjects_tmp_fa_str + } + + +\cs_new_protected:Nn \__rawobjects_mgen:nN + { + \__rawobjects_save_fun:N #2 + \cs_new:cpn { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - \object_if_local_p:n { #1 } || \object_if_global_p:n { #1 } + #2 + { + \object_member_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } } + \cs_new:cpn { #1 : nn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2 { - \msg_error:nnx { rawobjects }{ scoperr }{ #1 } + #2 + { + \object_member_adr:nn{ ##1 }{ ##2 } + } + } + } +\cs_new_protected:Nn \__rawobjects_mgen_pr:nN + { + \__rawobjects_save_fun:N #2 + \cs_new_protected:cpn + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 + { + #2 + { + \object_member_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } + } + \cs_new_protected:cpn + { #1 : nn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2 + { + #2 + { + \object_member_adr:nn{ ##1 }{ ##2 } + } } } - -\prg_new_conditional:Nnn \object_member_if_exist:nnn {p, T, F, TF } +\cs_new_protected:Nn \__rawobjects_mgen:nnn { - \cs_if_exist:cTF + \__rawobjects_save_dat:n { #3 } + + \cs_new:cpn { __rawobjects_auxfun_#1 :nn } ##1##2 { - \object_member_adr:nnn { #1 }{ #2 }{ #3 } + \use:c{ #2 : #3 } } + \cs_generate_variant:cn { __rawobjects_auxfun_#1 :nn }{ nf, ff } + + \cs_new:cpn { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - \prg_return_true: + \use:c { __rawobjects_auxfun_#1 :nf } + { ##3 } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_member_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } } + \cs_new:cpn { #1 : nn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2 { - \prg_return_false: + \use:c { __rawobjects_auxfun_#1 :ff } + { + \object_member_type:nn { ##1 }{ ##2 } + } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_member_adr:nn{ ##1 }{ ##2 } + } } } - -\prg_new_conditional:Nnn \object_member_if_exist:nn {p, T, F, TF } +\cs_new_protected:Nn \__rawobjects_mgen_pr:nnn { - \cs_if_exist:cTF + \__rawobjects_save_dat:n { #3 } + + \cs_new:cpn { __rawobjects_auxfun_#1 :nn } ##1##2 { - \object_member_adr:nn { #1 }{ #2 } + \use:c{ #2 : #3 } } + \cs_generate_variant:cn { __rawobjects_auxfun_#1 :nn }{ nf, ff } + + \cs_new_protected:cpn + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - \prg_return_true: + \use:c { __rawobjects_auxfun_#1 :nf } + { ##3 } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_member_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } } + \cs_new_protected:cpn + { #1 : nn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2 { - \prg_return_false: + \use:c { __rawobjects_auxfun_#1 :ff } + { + \object_member_type:nn { ##1 }{ ##2 } + } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_member_adr:nn{ ##1 }{ ##2 } + } } } -\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_generate_variant:Nn \__rawobjects_mgen:nN { fN } +\cs_generate_variant:Nn \__rawobjects_mgen:nnn { fnn } +\cs_generate_variant:Nn \__rawobjects_mgen_pr:nN { fN } +\cs_generate_variant:Nn \__rawobjects_mgen_pr:nnn { fnn } +\cs_new_protected:Nn \object_member_generate:NN + { + \__rawobjects_mgen:fN { \cs_to_str:N #1 } #2 + } -\cs_new_protected:Nn \object_new_member:nnn +\cs_new_protected:Nn \object_member_generate_inline:Nnn { - \__rawobjects_force_scope:n { #1 } - \cs_if_exist_use:cT { #3 _ new:c } - { - { \object_member_adr:nnn { #1 }{ #2 }{ #3 } } - } + \__rawobjects_mgen:fnn { \cs_to_str:N #1 }{ #2 }{ #3 } + } +\cs_new_protected:Nn \object_member_generate_protected:NN + { + \__rawobjects_mgen_pr:fN { \cs_to_str:N #1 } #2 } -\cs_generate_variant:Nn \object_new_member:nnn { Vnn, nnv } +\cs_new_protected:Nn \object_member_generate_protected_inline:Nnn + { + \__rawobjects_mgen_pr:fnn { \cs_to_str:N #1 }{ #2 }{ #3 } + } -\cs_new:Nn \object_member_use:nnn +\cs_new_protected:Nn \__rawobjects_ncgen:nN { - \cs_if_exist_use:cT { #3 _ use:c } + \__rawobjects_save_fun:N #2 + \cs_new:cpn { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - { \object_member_adr:nnn { #1 }{ #2 }{ #3 } } + #2 + { + \object_ncmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } } } - -\cs_new:Nn \object_member_use:nn +\cs_new_protected:Nn \__rawobjects_ncgen_pr:nN { - \object_member_use:nnv { #1 }{ #2 } + \__rawobjects_save_fun:N #2 + \cs_new_protected:cpn + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - \object_rcmember_adr:nnn { #1 } - { #2 _ type }{ str } + #2 + { + \object_ncmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } } } -\cs_generate_variant:Nn \object_member_use:nnn { Vnn, vnn, nnv } -\cs_generate_variant:Nn \object_member_use:nn { Vn } +\cs_new_protected:Nn \__rawobjects_ncgen:nnn + { + \__rawobjects_save_dat:n { #3 } + \cs_new:cpn { __rawobjects_auxfun_#1 :nn } ##1##2 + { + \use:c{ #2 : #3 } + } + \cs_generate_variant:cn { __rawobjects_auxfun_#1 :nn }{ nf } -\cs_new_protected:Nn \object_member_set:nnnn + \cs_new:cpn { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 + { + \use:c { __rawobjects_auxfun_#1 :nf } + { ##3 } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_ncmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } + } + } +\cs_new_protected:Nn \__rawobjects_ncgen_pr:nnn { - \__rawobjects_force_scope:n { #1 } - \cs_if_exist_use:cT + \__rawobjects_save_dat:n { #3 } + + \cs_new:cpn { __rawobjects_auxfun_#1 :nn } ##1##2 { - #3 _ \__rawobjects_scope_pfx:n { #1 } set:cn + \use:c{ #2 : #3 } } + \cs_generate_variant:cn { __rawobjects_auxfun_#1 :nn }{ nf } + + \cs_new_protected:cpn + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - { \object_member_adr:nnn { #1 }{ #2 }{ #3 } } { #4 } + \use:c { __rawobjects_auxfun_#1 :nf } + { ##3 } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_ncmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } } } -\cs_generate_variant:Nn \object_member_set:nnnn { Vnnn, nnvn } +\cs_generate_variant:Nn \__rawobjects_ncgen:nN { fN } +\cs_generate_variant:Nn \__rawobjects_ncgen:nnn { fnn } +\cs_generate_variant:Nn \__rawobjects_ncgen_pr:nN { fN } +\cs_generate_variant:Nn \__rawobjects_ncgen_pr:nnn { fnn } + +\cs_new_protected:Nn \object_ncmember_generate:NN + { + \__rawobjects_ncgen:fN { \cs_to_str:N #1 } #2 + } + +\cs_new_protected:Nn \object_ncmember_generate_inline:Nnn + { + \__rawobjects_ncgen:fnn { \cs_to_str:N #1 }{ #2 }{ #3 } + } +\cs_new_protected:Nn \object_ncmember_generate_protected:NN + { + \__rawobjects_ncgen_pr:fN { \cs_to_str:N #1 } #2 + } -\cs_new_protected:Nn \object_member_set:nnn +\cs_new_protected:Nn \object_ncmember_generate_protected_inline:Nnn { - \object_member_set:nnvn { #1 }{ #2 } + \__rawobjects_ncgen_pr:fnn { \cs_to_str:N #1 }{ #2 }{ #3 } + } + + +\cs_new_protected:Nn \__rawobjects_rcgen:nN + { + \__rawobjects_save_fun:N #2 + \cs_new:cpn { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - \object_rcmember_adr:nnn { #1 } - { #2 _ type }{ str } - } { #3 } + #2 + { + \object_rcmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } + } + } +\cs_new_protected:Nn \__rawobjects_rcgen_pr:nN + { + \__rawobjects_save_fun:N #2 + \cs_new_protected:cpn + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 + { + #2 + { + \object_rcmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } + } } -\cs_generate_variant:Nn \object_member_set:nnn { Vnn } +\cs_new_protected:Nn \__rawobjects_rcgen:nnn + { + \__rawobjects_save_dat:n { #3 } + \cs_new:cpn { __rawobjects_auxfun_#1 :nn } ##1##2 + { + \use:c{ #2 : #3 } + } + \cs_generate_variant:cn { __rawobjects_auxfun_#1 :nn }{ nf } -\cs_new_protected:Nn \object_member_set_eq:nnnN + \cs_new:cpn { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 + { + \use:c { __rawobjects_auxfun_#1 :nf } + { ##3 } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_rcmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } + } + } +\cs_new_protected:Nn \__rawobjects_rcgen_pr:nnn { - \__rawobjects_force_scope:n { #1 } - \cs_if_exist_use:cT + \__rawobjects_save_dat:n { #3 } + + \cs_new:cpn { __rawobjects_auxfun_#1 :nn } ##1##2 { - #3 _ \__rawobjects_scope_pfx:n { #1 } set _ eq:cN + \use:c{ #2 : #3 } } + \cs_generate_variant:cn { __rawobjects_auxfun_#1 :nn }{ nf } + + \cs_new_protected:cpn + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } ##1##2##3 { - { \object_member_adr:nnn { #1 }{ #2 }{ #3 } } #4 + \use:c { __rawobjects_auxfun_#1 :nf } + { ##3 } + { + \__rawobjects_scope_pfx_cl:n{ ##1 } + } + { + \object_rcmember_adr:nnn{ ##1 }{ ##2 }{ ##3 } + } } } -\cs_generate_variant:Nn \object_member_set_eq:nnnN { VnnN, nnnc, Vnnc, nnvN } +\cs_generate_variant:Nn \__rawobjects_rcgen:nN { fN } +\cs_generate_variant:Nn \__rawobjects_rcgen:nnn { fnn } +\cs_generate_variant:Nn \__rawobjects_rcgen_pr:nN { fN } +\cs_generate_variant:Nn \__rawobjects_rcgen_pr:nnn { fnn } + +\cs_new_protected:Nn \object_rcmember_generate:NN + { + \__rawobjects_rcgen:fN { \cs_to_str:N #1 } #2 + } + +\cs_new_protected:Nn \object_rcmember_generate_inline:Nnn + { + \__rawobjects_rcgen:fnn { \cs_to_str:N #1 }{ #2 }{ #3 } + } +\cs_new_protected:Nn \object_rcmember_generate_protected:NN + { + \__rawobjects_rcgen_pr:fN { \cs_to_str:N #1 } #2 + } + +\cs_new_protected:Nn \object_rcmember_generate_protected_inline:Nnn + { + \__rawobjects_rcgen_pr:fnn { \cs_to_str:N #1 }{ #2 }{ #3 } + } + -\cs_new_protected:Nn \object_member_set_eq:nnN +\cs_generate_variant:Nn \cs_generate_variant:Nn { cx } + +\cs_new_protected:Nn \__rawobjects_genmem_int:nnn + { + \__rawobjects_mgen:nnn { #1 }{ #2 }{ #3 } + \cs_generate_variant:cx + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } + { Vnn \str_use:N \l__rawobjects_tmp_fa_str, nnv \str_use:N \l__rawobjects_tmp_fa_str } + \cs_generate_variant:cx + { #1 : nn \str_use:N \l__rawobjects_tmp_fa_str } + { Vn \str_use:N \l__rawobjects_tmp_fa_str } + } +\cs_new_protected:Nn \__rawobjects_genmem_pr_int:nnn { - \object_member_set_eq:nnvN { #1 }{ #2 } + \__rawobjects_mgen_pr:nnn { #1 }{ #2 }{ #3 } + \cs_generate_variant:cx + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } + { Vnn \str_use:N \l__rawobjects_tmp_fa_str, nnv \str_use:N \l__rawobjects_tmp_fa_str } + \cs_generate_variant:cx + { #1 : nn \str_use:N \l__rawobjects_tmp_fa_str } + { Vn \str_use:N \l__rawobjects_tmp_fa_str } + } + +\cs_new_protected:Nn \__rawobjects_genncm_int:nnn + { + \__rawobjects_ncgen:nnn { #1 }{ #2 }{ #3 } + \cs_generate_variant:cx + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } + { Vnn \str_use:N \l__rawobjects_tmp_fa_str } + } +\cs_new_protected:Nn \__rawobjects_genncm_pr_int:nnn + { + \__rawobjects_ncgen_pr:nnn { #1 }{ #2 }{ #3 } + \cs_generate_variant:cx + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } + { Vnn \str_use:N \l__rawobjects_tmp_fa_str } + } + +\cs_new_protected:Nn \__rawobjects_genrcm_int:nnn + { + \__rawobjects_rcgen:nnn { #1 }{ #2 }{ #3 } + \cs_generate_variant:cx + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } + { Vnn \str_use:N \l__rawobjects_tmp_fa_str } + } +\cs_new_protected:Nn \__rawobjects_genrcm_pr_int:nnn + { + \__rawobjects_rcgen_pr:nnn { #1 }{ #2 }{ #3 } + \cs_generate_variant:cx + { #1 : nnn \str_use:N \l__rawobjects_tmp_fa_str } + { Vnn \str_use:N \l__rawobjects_tmp_fa_str } + } + + +\msg_new:nnnn { rawobjects }{ noerr }{ Unspecified ~ scope } + { + Object ~ #1 ~ hasn't ~ a ~ scope ~ variable + } + + +\__rawobjects_genmem_pr_int:nnn { object_new_member }{ #1 _ new }{ c } + +\cs_new_protected:Nn \object_new_member_tracked:nnn + { + \object_new_member:nnn { #1 }{ #2 }{ #3 } + + \str_const:cn { - \object_rcmember_adr:nnn { #1 } + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn { #1 }{ /_T_/ } + } { #2 _ type }{ str } - } #3 + } + { #3 } } -\cs_generate_variant:Nn \object_member_set_eq:nnN { VnN, nnc, Vnc } +\cs_generate_variant:Nn \object_new_member_tracked:nnn { Vnn, nnv } + + +\__rawobjects_genmem_int:nnn {object_member_use}{ #1_use }{c} + +\cs_generate_variant:Nn \object_member_use:nnn {vnn} + + +\__rawobjects_genmem_pr_int:nnn {object_member_set}{ #1_#2 set }{ cn } + + +\__rawobjects_genmem_pr_int:nnn { object_member_set_eq }{ #1 _ #2 set_eq }{ cN } + +\cs_generate_variant:Nn \object_member_set_eq:nnnN { nnnc, Vnnc } + +\cs_generate_variant:Nn \object_member_set_eq:nnN { nnc, Vnc } \cs_new:Nn \object_ncmember_adr:nnn { - c _ #1 \tl_to_str:n { _ CONST _ #2 _ #3 } + \tl_to_str:n{ c _ } #1 \tl_to_str:n { _ CONST _ #2 _ #3 } } \cs_generate_variant:Nn \object_ncmember_adr:nnn { Vnn, vnn } + \cs_new:Nn \object_rcmember_adr:nnn { - \object_ncmember_adr:vnn { \__rawobjects_object_pxyvar:n { #1 } } + \object_ncmember_adr:vnn + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { P }{ str } + } { #2 }{ #3 } } @@ -433,34 +907,12 @@ { Vnn }{ p, T, F, TF } -\cs_new:Nn \object_ncmember_use:nnn - { - \cs_if_exist_use:cT { #3 _ use:c } - { - { \object_ncmember_adr:nnn { #1 }{ #2 }{ #3 } } - } - } +\__rawobjects_genncm_int:nnn { object_ncmember_use }{ #1_use}{ c } -\cs_new:Nn \object_rcmember_use:nnn - { - \cs_if_exist_use:cT { #3 _ use:c } - { - { \object_rcmember_adr:nnn { #1 }{ #2 }{ #3 } } - } - } +\__rawobjects_genrcm_int:nnn { object_rcmember_use }{ #1_use}{ c } -\cs_generate_variant:Nn \object_ncmember_use:nnn { Vnn } -\cs_generate_variant:Nn \object_rcmember_use:nnn { Vnn } - -\cs_new_protected:Nn \object_newconst:nnnn - { - \use:c { #3 _ const:cn } - { - \object_ncmember_adr:nnn { #1 }{ #2 }{ #3 } - } - { #4 } - } +\__rawobjects_genncm_pr_int:nnn { object_newconst }{ #1 _ const }{ cn } \cs_new_protected:Nn \object_newconst_tl:nnn @@ -500,6 +952,9 @@ \cs_generate_variant:Nn \object_newconst_skip:nnn { Vnn } \cs_generate_variant:Nn \object_newconst_fp:nnn { Vnn } +\cs_generate_variant:Nn \object_newconst_str:nnn { nnx } +\cs_generate_variant:Nn \object_newconst_str:nnn { nnV } + \cs_new_protected:Nn \object_newconst_seq_from_clist:nnn { @@ -536,7 +991,11 @@ { \object_ncmethod_adr:vnn { - \__rawobjects_object_pxyvar:n { #1 } + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { P }{ str } } { #2 }{ #3 } } @@ -610,40 +1069,50 @@ \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 } - { rawobjects } -\str_const:cV { \__rawobjects_object_pxyvar:V \c_proxy_address_str } - \c_proxy_address_str -\str_const:cV { \__rawobjects_object_scovar:V \c_proxy_address_str } - \c__rawobjects_const_str -\str_const:cV { \__rawobjects_object_visvar:V \c_proxy_address_str } - \c_object_public_str -\seq_const_from_clist:cn +\cs_new_protected:Nn \__rawobjects_initproxy:nnn { - \object_member_adr:Vnn \c_proxy_address_str { varlist }{ seq } + \object_newconst:nnnn + { + \object_embedded_adr:nn{ #3 }{ /_I_/ } + } + { ifprox }{ bool }{ \c_true_bool } } - { varlist, objlist } +\cs_generate_variant:Nn \__rawobjects_initproxy:nnn { VnV } -\object_newconst_str:Vnn \c_proxy_address_str { varlist_type }{ seq } -\object_newconst_str:Vnn \c_proxy_address_str { objlist_type }{ seq } -\seq_const_from_clist:cn +\cs_new:Nn \__rawobjects_bol_com:N { - \object_member_adr:Vnn \c_proxy_address_str { objlist }{ seq } + \cs_if_exist_p:N #1 && \bool_if_p:N #1 } - {} +\cs_generate_variant:Nn \__rawobjects_bol_com:N { c } \prg_new_conditional:Nnn \object_if_proxy:n {p, T, F, TF} { - \object_test_proxy:nNTF { #1 } - \c_proxy_address_str + \cs_if_exist:cTF { - \prg_return_true: + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { ifprox }{ bool } + } + { + \bool_if:cTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { ifprox }{ bool } + } + { + \prg_return_true: + } + { + \prg_return_false: + } } { \prg_return_false: @@ -655,7 +1124,14 @@ \prg_new_conditional:Nnn \object_test_proxy:nn {p, T, F, TF} { - \str_if_eq:veTF { \__rawobjects_object_pxyvar:n { #1 } } + \str_if_eq:veTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { P }{ str } + } { #2 } { \prg_return_true: @@ -667,7 +1143,14 @@ \prg_new_conditional:Nnn \object_test_proxy:nN {p, T, F, TF} { - \str_if_eq:cNTF { \__rawobjects_object_pxyvar:n { #1 } } + \str_if_eq:cNTF + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { P }{ str } + } #2 { \prg_return_true: @@ -683,8 +1166,6 @@ { VN }{p, T, F, TF} -\msg_new:nnn { aa }{ mess }{ #1 } - \msg_new:nnnn { rawobjects }{ notproxy }{ Fake ~ proxy } { Object ~ #1 ~ is ~ not ~ a ~ proxy. @@ -700,20 +1181,38 @@ \cs_new_protected:Nn \__rawobjects_create_anon:nnnNN { + \tl_if_empty:nF{ #1 } + { \__rawobjects_force_proxy:n { #1 } - \str_const:cn { \__rawobjects_object_modvar:n { #2 } }{ #3 } - \str_const:cx { \__rawobjects_object_pxyvar:n { #2 } }{ #1 } - \str_const:cV { \__rawobjects_object_scovar:n { #2 } } #4 - \str_const:cV { \__rawobjects_object_visvar:n { #2 } } #5 + \object_newconst_str:nnn + { + \object_embedded_adr:nn{ #3 }{ /_I_/ } + } + { M }{ #2 } + \object_newconst_str:nnn + { + \object_embedded_adr:nn{ #3 }{ /_I_/ } + } + { P }{ #1 } + \object_newconst_str:nnV + { + \object_embedded_adr:nn{ #3 }{ /_I_/ } + } + { S } #4 + \object_newconst_str:nnV + { + \object_embedded_adr:nn{ #3 }{ /_I_/ } + } + { V } #5 \seq_map_inline:cn { \object_member_adr:nnn { #1 }{ varlist }{ seq } } { - \object_new_member:nnv { #2 }{ ##1 } + \object_new_member:nnv { #3 }{ ##1 } { \object_ncmember_adr:nnn { #1 }{ ##1 _ type }{ str } } @@ -725,22 +1224,35 @@ } { \embedded_create:nvn - { #2 } + { #3 } { \object_ncmember_adr:nnn { #1 }{ ##1 _ proxy }{ str } } { ##1 } } + + \tl_map_inline:cn + { + \object_member_adr:nnn { #1 }{ init }{ tl } + } + { + ##1 { #1 }{ #2 }{ #3 } + } + + } } -\cs_generate_variant:Nn \__rawobjects_create_anon:nnnNN { nnvcc } +\cs_generate_variant:Nn \__rawobjects_create_anon:nnnNN { xnxNN, xvxcc } \cs_new_protected:Nn \object_create:nnnNN { - \__rawobjects_create_anon:nnnNN { #1 }{ \object_address:nn { #2 }{ #3 } } - { #2 } #4 #5 + \__rawobjects_create_anon:xnxNN { #1 }{ #2 } + { \object_address:nn { #2 }{ #3 } } + #4 #5 } +\cs_generate_variant:Nn \object_create:nnnNN { VnnNN } + \cs_new_protected:Nn \object_create_set:NnnnNN { \object_create:nnnNN { #2 }{ #3 }{ #4 } #5 #6 @@ -753,28 +1265,207 @@ \str_gset:Nx #1 { \object_address:nn { #3 }{ #4 } } } +\cs_generate_variant:Nn \object_create_set:NnnnNN { NVnnNN, NnnfNN } +\cs_generate_variant:Nn \object_create_gset:NnnnNN { NVnnNN, NnnfNN } + +\cs_new_protected:Nn \object_create:nnnN + { + \object_create:nnnNN { #1 }{ #2 }{ #3 } #4 \c_object_public_str + } + +\cs_generate_variant:Nn \object_create:nnnN { VnnN } + +\cs_new_protected:Nn \object_create_set:NnnnN + { + \object_create_set:NnnnNN #1 { #2 }{ #3 }{ #4 } #5 \c_object_public_str + } + +\cs_new_protected:Nn \object_create_gset:NnnnN + { + \object_create_gset:NnnnNN #1 { #2 }{ #3 }{ #4 } #5 \c_object_public_str + } + +\cs_generate_variant:Nn \object_create_set:NnnnN { NVnnN } +\cs_generate_variant:Nn \object_create_gset:NnnnN { NVnnN } + +\cs_new_protected:Nn \object_create:nnn + { + \object_create:nnnNN { #1 }{ #2 }{ #3 } + \c_object_global_str \c_object_public_str + } + +\cs_generate_variant:Nn \object_create:nnn { Vnn } + +\cs_new_protected:Nn \object_create_set:Nnnn + { + \object_create_set:NnnnNN #1 { #2 }{ #3 }{ #4 } + \c_object_global_str \c_object_public_str + } + +\cs_new_protected:Nn \object_create_gset:Nnnn + { + \object_create_gset:NnnnNN #1 { #2 }{ #3 }{ #4 } + \c_object_global_str \c_object_public_str + } + +\cs_generate_variant:Nn \object_create_set:Nnnn { NVnn } +\cs_generate_variant:Nn \object_create_gset:Nnnn { NVnn } + \cs_new_protected:Nn \embedded_create:nnn { - \__rawobjects_create_anon:nnvcc { #2 } + \__rawobjects_create_anon:xvxcc { #2 } + { + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { M }{ str } + } { \object_embedded_adr:nn { #1 }{ #3 } } { - \__rawobjects_object_modvar:n{ #1 } + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { S }{ str } } { - \__rawobjects_object_scovar:n{ #1 } + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { V }{ str } } + } + +\cs_generate_variant:Nn \embedded_create:nnn { nvn, Vnn } + + +\cs_new_protected:Nn \proxy_create:nn + { + \object_create:VnnNN \c_proxy_address_str { #1 }{ #2 } + \c_object_global_str \c_object_public_str + } + +\cs_new_protected:Nn \proxy_create_set:Nnn + { + \object_create_set:NVnnNN #1 \c_proxy_address_str { #2 }{ #3 } + \c_object_global_str \c_object_public_str + } + +\cs_new_protected:Nn \proxy_create_gset:Nnn + { + \object_create_gset:NVnnNN #1 \c_proxy_address_str { #2 }{ #3 } + \c_object_global_str \c_object_public_str + } + +\cs_new_protected:Nn \proxy_create:nnN + { + \__rawobjects_launch_deprecate:NN \proxy_create:nnN \proxy_create:nn + \object_create:VnnNN \c_proxy_address_str { #1 }{ #2 } + \c_object_global_str #3 + } + +\cs_new_protected:Nn \proxy_create_set:NnnN + { + \__rawobjects_launch_deprecate:NN \proxy_create_set:NnnN \proxy_create_set:Nnn + \object_create_set:NVnnNN #1 \c_proxy_address_str { #2 }{ #3 } + \c_object_global_str #4 + } + +\cs_new_protected:Nn \proxy_create_gset:NnnN + { + \__rawobjects_launch_deprecate:NN \proxy_create_gset:NnnN \proxy_create_gset:Nnn + \object_create_gset:NVnnNN #1 \c_proxy_address_str { #2 }{ #3 } + \c_object_global_str #4 + } + + +\cs_new_protected:Nn \proxy_push_member:nnn + { + \object_newconst_str:nnn { #1 }{ #2 _ type }{ #3 } + \seq_gput_left:cn { - \__rawobjects_object_visvar:n{ #1 } + \object_member_adr:nnn { #1 }{ varlist }{ seq } } + { #2 } } -\cs_generate_variant:Nn \object_create:nnnNN { VnnNN } -\cs_generate_variant:Nn \object_create_set:NnnnNN { NVnnNN, NnnfNN } -\cs_generate_variant:Nn \object_create_gset:NnnnNN { NVnnNN, NnnfNN } -\cs_generate_variant:Nn \embedded_create:nnn { nvn, Vnn } +\cs_generate_variant:Nn \proxy_push_member:nnn { Vnn } + + +\cs_new_protected:Nn \proxy_push_embedded:nnn + { + \object_newconst_str:nnx { #1 }{ #2 _ proxy }{ #3 } + \seq_gput_left:cn + { + \object_member_adr:nnn { #1 }{ objlist }{ seq } + } + { #2 } + } + +\cs_generate_variant:Nn \proxy_push_embedded:nnn { Vnn } + + +\cs_new_protected:Nn \proxy_add_initializer:nN + { + \tl_gput_right:cn + { + \object_member_adr:nnn { #1 }{ init }{ tl } + } + { #2 } + } + +\cs_generate_variant:Nn \proxy_add_initializer:nN { VN } + + +\str_const:Nx \c_proxy_address_str + { \object_address:nn { rawobjects }{ proxy } } + +\object_newconst_str:nnn + { + \object_embedded_adr:Vn \c_proxy_address_str { /_I_/ } + } + { M }{ rawobjects } + +\object_newconst_str:nnV + { + \object_embedded_adr:Vn \c_proxy_address_str { /_I_/ } + } + { P } \c_proxy_address_str + +\object_newconst_str:nnV + { + \object_embedded_adr:Vn \c_proxy_address_str { /_I_/ } + } + { S } \c_object_global_str + +\object_newconst_str:nnV + { + \object_embedded_adr:Vn \c_proxy_address_str { /_I_/ } + } + { V } \c_object_public_str + +\__rawobjects_initproxy:VnV \c_proxy_address_str { rawobjects } \c_proxy_address_str + +\object_new_member:Vnn \c_proxy_address_str { init }{ tl } + +\object_new_member:Vnn \c_proxy_address_str { varlist }{ seq } + +\object_new_member:Vnn \c_proxy_address_str { objlist }{ seq } + +\proxy_push_member:Vnn \c_proxy_address_str + { init }{ tl } +\proxy_push_member:Vnn \c_proxy_address_str + { varlist }{ seq } +\proxy_push_member:Vnn \c_proxy_address_str + { objlist }{ seq } + +\proxy_add_initializer:VN \c_proxy_address_str + \__rawobjects_initproxy:nnn \cs_new:Nn \__rawobjects_combine_aux:nnn @@ -844,61 +1535,17 @@ \cs_generate_variant:Nn \object_gallocate_gincr:NNnnNN { NNVnNN } - -\cs_new_protected:Nn \proxy_create:nnN - { - \object_create:VnnNN \c_proxy_address_str { #1 }{ #2 } - \c_object_global_str #3 - } - -\cs_new_protected:Nn \proxy_create_set:NnnN - { - \object_create_set:NVnnNN #1 \c_proxy_address_str { #2 }{ #3 } - \c_object_global_str #4 - } - -\cs_new_protected:Nn \proxy_create_gset:NnnN - { - \object_create_gset:NVnnNN #1 \c_proxy_address_str { #2 }{ #3 } - \c_object_global_str #4 - } - -\cs_new_protected:Nn \proxy_push_member:nnn - { - \__rawobjects_force_scope:n { #1 } - \object_newconst_str:nnn { #1 }{ #2 _ type }{ #3 } - \seq_gput_left:cn - { - \object_member_adr:nnn { #1 }{ varlist }{ seq } - } - { #2 } - } - -\cs_generate_variant:Nn \proxy_push_member:nnn { Vnn } - - -\cs_generate_variant:Nn \object_newconst_str:nnn { nnx } - -\cs_new_protected:Nn \proxy_push_embedded:nnn - { - \__rawobjects_force_scope:n { #1 } - \object_newconst_str:nnx { #1 }{ #2 _ proxy }{ #3 } - \seq_gput_left:cn - { - \object_member_adr:nnn { #1 }{ objlist }{ seq } - } - { #2 } - } - -\cs_generate_variant:Nn \proxy_push_embedded:nnn { Vnn } - \cs_new_protected:Nn \object_assign:nn { \seq_map_inline:cn { \object_member_adr:vnn { - \__rawobjects_object_pxyvar:n { #1 } + \object_ncmember_adr:nnn + { + \object_embedded_adr:nn{ #1 }{ /_I_/ } + } + { P }{ str } } { varlist }{ seq } } @@ -912,33 +1559,6 @@ \cs_generate_variant:Nn \object_assign:nn { nV, Vn, VV } -\cs_new_protected:Nn \rawobjects_fwl_inst:n - { - \object_if_exist:nF - { - \object_address:nn { rawobjects }{ fwl ! #1 } - } - { - \proxy_create:nnN { rawobjects }{ fwl ! #1 } \c_object_private_str - \proxy_push_member - { - \object_address:nn { rawobjects }{ fwl ! #1 } - } - { next }{ str } - } - } - -\cs_new_protected:Nn \rawobjects_fwl_newnode:nnnNN - { - \rawobjects_fwl_inst:n { #1 } - \object_create:nnnNN - { - \object_address:nn { rawobjects }{ fwl ! #1 } - } - { #2 }{ #3 } #4 #5 - } - - \endinput %% %% End of file `lt3rawobjects.sty'. |