diff options
author | Norbert Preining <norbert@preining.info> | 2022-02-27 03:01:13 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-02-27 03:01:13 +0000 |
commit | a911d39178540078c8ff5bc880418478d7433c40 (patch) | |
tree | f23b6a0f6bf9f548e7e43cf2405e864eba99b21e /macros/latex/contrib/stex/source/stex/features.dtx | |
parent | 740a11f29a3551babe3d7edbb57ac3baa2280a3f (diff) |
CTAN sync 202202270301
Diffstat (limited to 'macros/latex/contrib/stex/source/stex/features.dtx')
-rw-r--r-- | macros/latex/contrib/stex/source/stex/features.dtx | 784 |
1 files changed, 0 insertions, 784 deletions
diff --git a/macros/latex/contrib/stex/source/stex/features.dtx b/macros/latex/contrib/stex/source/stex/features.dtx deleted file mode 100644 index 851af04984..0000000000 --- a/macros/latex/contrib/stex/source/stex/features.dtx +++ /dev/null @@ -1,784 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for Semantic Macros and Module Scoping -% Copyright (c) 2019 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The original of this file is in the public repository at -% http://github.com/sLaTeX/sTeX/ -% -% TODO update copyright -% -%<*driver> -\providecommand\bibfolder{../../lib/bib} -\input{../../doc/docheader} - -\begin{document} - \DocInput{\jobname.dtx} -\end{document} -%</driver> -% \fi -% -% \title{ \sTeX-Structural Features -% \thanks{Version {\fileversion} (last revised {\filedate})} -% } -% -% \author{Michael Kohlhase, Dennis Müller\\ -% FAU Erlangen-Nürnberg\\ -% \url{http://kwarc.info/} -% } -% -% \maketitle -% -%\ifinfulldoc\else -% This is the documentation for the \pkg{stex-features} package. -% For a more high-level introduction, -% see \href{\basedocurl/manual.pdf}{the \sTeX Manual} or the -% \href{\basedocurl/stex.pdf}{full \sTeX documentation}. -% -% \input{../../doc/packages/features} -% \fi -% -% \begin{documentation}\label{pkg:features:doc} -% -% Code related to structural features -% -% \section{Macros and Environments}\label{pkg:features:doc:macros} -% -% \subsection{Structures} -% -% \begin{environment}{mathstructure} -% TODO -% \end{environment} -% -% \end{documentation} -% -% \begin{implementation}\label{pkg:features:impl} -% -% \section{\sTeX-Structural Features Implementation} -% -% \begin{macrocode} -%<*package> - -%%%%%%%%%%%%% features.dtx %%%%%%%%%%%%% - -%<@@=stex_features> -% \end{macrocode} -% -% Warnings and error messages -% -% \begin{macrocode} -\msg_new:nnn{stex}{error/copymodule/notallowed}{ - Symbol~#1~can~not~be~assigned~in~copymodule~#2 -} -\msg_new:nnn{stex}{error/interpretmodule/nodefiniens}{ - Symbol~#1~not~assigned~in~interpretmodule~#2 -} - -% \end{macrocode} -% -% \subsection{Imports with modification} -% -% \begin{macrocode} -\cs_new_protected:Nn \stex_get_symbol_in_copymodule:n { - \tl_if_head_eq_catcode:nNTF { #1 } \relax { - \_@@_get_symbol_from_cs:n { #1 } - }{ - % argument is a string - % is it a command name? - \cs_if_exist:cTF { #1 }{ - \cs_set_eq:Nc \l_tmpa_tl { #1 } - \str_set:Nx \l_tmpa_str { \cs_argument_spec:N \l_tmpa_tl } - \str_if_empty:NTF \l_tmpa_str { - \exp_args:Nx \cs_if_eq:NNTF { - \tl_head:N \l_tmpa_tl - } \stex_invoke_symbol:n { - \exp_args:No \_@@_get_symbol_from_cs:n { \use:c { #1 } } - }{ - \_@@_get_symbol_from_string:n { #1 } - } - } { - \_@@_get_symbol_from_string:n { #1 } - } - }{ - % argument is not a command name - \_@@_get_symbol_from_string:n { #1 } - % \l_stex_all_symbols_seq - } - } -} - -\cs_new_protected:Nn \_@@_get_symbol_from_string:n { - \str_set:Nn \l_tmpa_str { #1 } - \bool_set_false:N \l_tmpa_bool - \bool_if:NF \l_tmpa_bool { - \tl_set:Nn \l_tmpa_tl { - \msg_set:nnn{stex}{error/unknownsymbol}{ - No~symbol~#1~found! - } - \msg_error:nn{stex}{error/unknownsymbol} - } - \str_set:Nn \l_tmpa_str { #1 } - \int_set:Nn \l_tmpa_int { \str_count:N \l_tmpa_str } - \seq_map_inline:Nn \l_@@_copymodule_fields_seq { - \str_set:Nn \l_tmpb_str { ##1 } - \str_if_eq:eeT { \l_tmpa_str } { - \str_range:Nnn \l_tmpb_str { -\l_tmpa_int } { -1 } - } { - \seq_map_break:n { - \tl_set:Nn \l_tmpa_tl { - \str_set:Nn \l_stex_get_symbol_uri_str { - ##1 - } - \_@@_get_symbol_check: - } - } - } - } - \l_tmpa_tl - } -} - -\cs_new_protected:Nn \_@@_get_symbol_from_cs:n { - \exp_args:NNx \tl_set:Nn \l_tmpa_tl - { \tl_tail:N \l_tmpa_tl } - \tl_if_single:NTF \l_tmpa_tl { - \exp_args:No \tl_if_head_is_group:nTF \l_tmpa_tl { - \exp_after:wN \str_set:Nn \exp_after:wN - \l_stex_get_symbol_uri_str \l_tmpa_tl - \_@@_get_symbol_check: - }{ - % TODO - % tail is not a single group - } - }{ - % TODO - % tail is not a single group - } -} - -\cs_new_protected:Nn \_@@_get_symbol_check: { - \exp_args:NNno \seq_set_split:Nnn \l_tmpa_seq {?} \l_stex_get_symbol_uri_str - \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} = 3 { - \seq_pop_right:NN \l_tmpa_seq \l_tmpb_str - \str_set:Nx \l_tmpa_str {\seq_use:Nn \l_tmpa_seq ?} - \seq_if_in:NoF \l_@@_copymodule_modules_seq \l_tmpa_str { - \msg_error:nnxx{stex}{error/copymodule/notallowed}{\l_stex_get_symbol_uri_str}{ - \l_stex_current_copymodule_name_str\\Allowed:~\seq_use:Nn \l_@@_copymodule_modules_seq {,~} - } - } - }{ - \msg_error:nnxx{stex}{error/copymodule/notallowed}{\l_stex_get_symbol_uri_str}{ - \l_stex_current_copymodule_name_str~(inexplicably) - } - } -} - -\cs_new_protected:Nn \stex_copymodule_start:nnnn { - \stex_import_module_uri:nn { #1 } { #2 } - \str_set:Nx \l_stex_current_copymodule_name_str {#3} - \stex_import_require_module:nnnn - { \l_stex_import_ns_str } { \l_stex_import_archive_str } - { \l_stex_import_path_str } { \l_stex_import_name_str } - \stex_collect_imports:n {\l_stex_import_ns_str ?\l_stex_import_name_str } - \seq_set_eq:NN \l_@@_copymodule_modules_seq \l_stex_collect_imports_seq - \seq_clear:N \l_@@_copymodule_fields_seq - \seq_map_inline:Nn \l_@@_copymodule_modules_seq { - \seq_map_inline:cn {c_stex_module_##1_constants}{ - \exp_args:NNx \seq_put_right:Nn \l_@@_copymodule_fields_seq { - ##1 ? ####1 - } - } - } - \seq_clear:N \l_tmpa_seq - \exp_args:NNx \prop_set_from_keyval:Nn \l_stex_current_copymodule_prop { - name = \l_stex_current_copymodule_name_str , - module = \l_stex_current_module_str , - from = \l_stex_import_ns_str ?\l_stex_import_name_str , - includes = \l_tmpa_seq , - fields = \l_tmpa_seq - } - \stex_debug:nn{copymodule}{#4~for~module~{\l_stex_import_ns_str ?\l_stex_import_name_str} - as~\l_stex_current_module_str?\l_stex_current_copymodule_name_str} - \stex_debug:nn{copymodule}{modules:\seq_use:Nn \l_@@_copymodule_modules_seq {,~}} - \stex_debug:nn{copymodule}{fields:\seq_use:Nn \l_@@_copymodule_fields_seq {,~}} - \stex_if_smsmode:F { - \begin{stex_annotate_env} {#4} { - \l_stex_current_module_str?\l_stex_current_copymodule_name_str - } - \stex_annotate_invisible:nnn{from}{\l_stex_import_ns_str ?\l_stex_import_name_str}{} - } - \bool_set_eq:NN \l_@@_oldhtml_bool \_stex_html_do_output_bool - \bool_set_false:N \_stex_html_do_output_bool -} -\cs_new_protected:Nn \stex_copymodule_end:n { - \def \l_tmpa_cs ##1 ##2 {#1} - \bool_set_eq:NN \_stex_html_do_output_bool \l_@@_oldhtml_bool - \tl_clear:N \l_tmpa_tl - \tl_clear:N \l_tmpb_tl - \prop_get:NnN \l_stex_current_copymodule_prop {fields} \l_tmpa_seq - \seq_map_inline:Nn \l_@@_copymodule_modules_seq { - \seq_map_inline:cn {c_stex_module_##1_constants}{ - \tl_clear:N \l_tmpc_tl - \l_tmpa_cs{##1}{####1} - \str_if_exist:cTF {l_@@_copymodule_##1?####1_name_str} { - \tl_put_right:Nx \l_tmpa_tl { - \prop_set_from_keyval:cn { - l_stex_symdecl_\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}_prop - }{ - \exp_after:wN \prop_to_keyval:N \csname - l_stex_symdecl_\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}_prop - \endcsname - } - \seq_clear:c { - l_stex_symdecl_ - \l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str} - _notations - } - } - \tl_put_right:Nx \l_tmpc_tl { - \stex_copy_notations:nn {\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}}{##1?####1} - \stex_annotate_invisible:nnn{alias}{\use:c{l_@@_copymodule_##1?####1_name_str}}{} - } - \seq_put_right:Nx \l_tmpa_seq {\l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str}} - \str_if_exist:cT {l_@@_copymodule_##1?####1_macroname_str} { - \tl_put_right:Nx \l_tmpc_tl { - \stex_annotate_invisible:nnn{macroname}{\use:c{l_@@_copymodule_##1?####1_macroname_str}}{} - } - \tl_put_right:Nx \l_tmpa_tl { - \tl_set:cx {\use:c{l_@@_copymodule_##1?####1_macroname_str}}{ - \stex_invoke_symbol:n { - \l_stex_current_module_str ? \use:c{l_@@_copymodule_##1?####1_name_str} - } - } - } - } - }{ - \tl_put_right:Nx \l_tmpc_tl { - \stex_copy_notations:nn {\l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1 }{##1?####1} - } - \prop_set_eq:Nc \l_tmpa_prop {l_stex_symdecl_ ##1?####1 _prop} - \prop_put:Nnx \l_tmpa_prop { name }{ \l_stex_current_copymodule_name_str / ####1 } - \prop_put:Nnx \l_tmpa_prop { module }{ \l_stex_current_module_str } - \tl_put_right:Nx \l_tmpa_tl { - \prop_set_from_keyval:cn { - l_stex_symdecl_\l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1_prop - }{ - \prop_to_keyval:N \l_tmpa_prop - } - \seq_clear:c { - l_stex_symdecl_ - \l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1 - _notations - } - } - \seq_put_right:Nx \l_tmpa_seq {\l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1 } - \str_if_exist:cT {l_@@_copymodule_##1?####1_macroname_str} { - \tl_put_right:Nx \l_tmpc_tl { - \stex_annotate_invisible:nnn{macroname}{\use:c{l_@@_copymodule_##1?####1_macroname_str}}{} - } - \tl_put_right:Nx \l_tmpa_tl { - \tl_set:cx {\use:c{l_@@_copymodule_##1?####1_macroname_str}}{ - \stex_invoke_symbol:n { - \l_stex_current_module_str ? \l_stex_current_copymodule_name_str / ####1 - } - } - } - } - } - \tl_if_exist:cT {l_@@_copymodule_##1?####1_def_tl}{ - \tl_put_right:Nx \l_tmpc_tl { - \stex_annotate_invisible:nnn{definiens}{}{$\use:c{l_@@_copymodule_##1?####1_def_tl}$} - } - } - \tl_put_right:Nx \l_tmpb_tl { - \stex_annotate:nnn{assignment} {##1?####1} { \l_tmpc_tl } - } - } - } - \prop_put:Nno \l_stex_current_copymodule_prop {fields} \l_tmpa_seq - \tl_put_left:Nx \l_tmpa_tl { - \prop_set_from_keyval:cn { - l_stex_copymodule_ \l_stex_current_module_str?\l_stex_current_copymodule_name_str _prop - }{ - \prop_to_keyval:N \l_stex_current_copymodule_prop - } - } - \exp_args:No \stex_add_to_current_module:n \l_tmpa_tl - \stex_debug:nn{copymodule}{result:\meaning \l_tmpa_tl} - \exp_args:Nx \stex_do_up_to_module:n { - \exp_args:No \exp_not:n \l_tmpa_tl - } - \l_tmpb_tl - \stex_if_smsmode:F { - \end{stex_annotate_env} - } -} - -\NewDocumentEnvironment {copymodule} { O{} m m}{ - \stex_copymodule_start:nnnn { #1 }{ #2 }{ #3 }{ structure } - \stex_deactivate_macro:Nn \symdecl {module~environments} - \stex_deactivate_macro:Nn \symdef {module~environments} - \stex_deactivate_macro:Nn \notation {module~environments} - \stex_reactivate_macro:N \assign - \stex_reactivate_macro:N \renamedecl - \stex_reactivate_macro:N \donotcopy - \stex_smsmode_do: -}{ - \stex_copymodule_end:n {} -} - -\NewDocumentEnvironment {interpretmodule} { O{} m m}{ - \stex_copymodule_start:nnnn { #1 }{ #2 }{ #3 }{ realization } - \stex_deactivate_macro:Nn \symdecl {module~environments} - \stex_deactivate_macro:Nn \symdef {module~environments} - \stex_deactivate_macro:Nn \notation {module~environments} - \stex_reactivate_macro:N \assign - \stex_reactivate_macro:N \renamedecl - \stex_reactivate_macro:N \donotcopy - \stex_smsmode_do: -}{ - \stex_copymodule_end:n { - \tl_if_exist:cF { - l_@@_copymodule_##1?##2_def_tl - }{ - \msg_error:nnxx{stex}{error/interpretmodule/nodefiniens}{ - ##1?##2 - }{\l_stex_current_copymodule_name_str} - } - } -} - -\NewDocumentCommand \donotcopy { O{} m}{ - \stex_import_module_uri:nn { #1 } { #2 } - \stex_collect_imports:n {\l_stex_import_ns_str ?\l_stex_import_name_str } - \seq_map_inline:Nn \l_stex_collect_imports_seq { - \seq_remove_all:Nn \l_@@_copymodule_modules_seq { ##1 } - \seq_map_inline:cn {c_stex_module_##1_constants}{ - \seq_remove_all:Nn \l_@@_copymodule_fields_seq { ##1 ? ####1 } - \bool_lazy_any_p:nT { - { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_name_str}} - { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_macroname_str}} - { \cs_if_exist_p:c {l_@@_copymodule_##1?####1_def_tl}} - }{ - % TODO throw error - } - } - } - - \prop_get:NnN \l_stex_current_copymodule_prop { includes } \l_tmpa_seq - \seq_put_right:Nx \l_tmpa_seq {\l_stex_import_ns_str ?\l_stex_import_name_str } - \prop_put:Nnx \l_stex_current_copymodule_prop {includes} \l_tmpa_seq -} - -\NewDocumentCommand \assign { m m }{ - \stex_get_symbol_in_copymodule:n {#1} - \stex_debug:nn{assign}{defining~{\l_stex_get_symbol_uri_str}~as~\detokenize{#2}} - \tl_set:cn {l_@@_copymodule_\l_stex_get_symbol_uri_str _def_tl}{#2} -} - -\keys_define:nn { stex / renamedecl } { - name .str_set_x:N = \l_stex_renamedecl_name_str -} -\cs_new_protected:Nn \_@@_renamedecl_args:n { - \str_clear:N \l_stex_renamedecl_name_str - - \keys_set:nn { stex / renamedecl } { #1 } -} - -\NewDocumentCommand \renamedecl { O{} m m}{ - \_@@_renamedecl_args:n { #1 } - \stex_get_symbol_in_copymodule:n {#2} - \stex_debug:nn{renamedecl}{renaming~{\l_stex_get_symbol_uri_str}~to~#3} - \str_set:cx {l_@@_copymodule_\l_stex_get_symbol_uri_str _macroname_str}{#3} - \str_if_empty:NTF \l_stex_renamedecl_name_str { - \tl_set:cx { #3 }{ \stex_invoke_symbol:n { - \l_stex_get_symbol_uri_str - } } - } { - \str_set:cx {l_@@_copymodule_\l_stex_get_symbol_uri_str _name_str}{\l_stex_renamedecl_name_str} - \stex_debug:nn{renamedecl}{@~\l_stex_current_module_str ? \l_stex_renamedecl_name_str} - \prop_set_eq:cc {l_stex_symdecl_ - \l_stex_current_module_str ? \l_stex_renamedecl_name_str - _prop - }{l_stex_symdecl_ \l_stex_get_symbol_uri_str _prop} - \seq_set_eq:cc {l_stex_symdecl_ - \l_stex_current_module_str ? \l_stex_renamedecl_name_str - _notations - }{l_stex_symdecl_ \l_stex_get_symbol_uri_str _notations} - \prop_put:cnx {l_stex_symdecl_ - \l_stex_current_module_str ? \l_stex_renamedecl_name_str - _prop - }{ name }{ \l_stex_renamedecl_name_str } - \prop_put:cnx {l_stex_symdecl_ - \l_stex_current_module_str ? \l_stex_renamedecl_name_str - _prop - }{ module }{ \l_stex_current_module_str } - \exp_args:NNx \seq_put_left:Nn \l_@@_copymodule_fields_seq { - \l_stex_current_module_str ? \l_stex_renamedecl_name_str - } - \tl_set:cx { #3 }{ \stex_invoke_symbol:n { - \l_stex_current_module_str ? \l_stex_renamedecl_name_str - } } - } -} - -\stex_deactivate_macro:Nn \assign {copymodules} -\stex_deactivate_macro:Nn \renamedecl {copymodules} -\stex_deactivate_macro:Nn \donotcopy {copymodules} - - -% \end{macrocode} -% -% -% -% \begin{macrocode} -\seq_new:N \l_stex_implicit_morphisms_seq -\NewDocumentCommand \implicitmorphism { O{} m m}{ - \stex_import_module_uri:nn { #1 } { #2 } - \stex_debug:nn{implicits}{ - Implicit~morphism:~ - \l_stex_module_ns_str ? \l_@@_name_str - } - \exp_args:NNx \seq_if_in:NnT \l_stex_all_modules_seq { - \l_stex_module_ns_str ? \l_@@_name_str - }{ - \msg_error:nnn{stex}{error/conflictingmodules}{ - \l_stex_module_ns_str ? \l_@@_name_str - } - } - - % TODO - - - - \seq_put_right:Nx \l_stex_implicit_morphisms_seq { - \l_stex_module_ns_str ? \l_@@_name_str - } -} - -% \end{macrocode} -% -% -% \subsection{The feature environment} -% -% \begin{environment}{structural@feature} -% \begin{macrocode} - -\NewDocumentEnvironment{structural@feature}{ m m m }{ - \stex_if_in_module:F { - \msg_set:nnn{stex}{error/nomodule}{ - Structural~Feature~has~to~occur~in~a~module:\\ - Feature~#2~of~type~#1\\ - In~File:~\stex_path_to_string:N \g_stex_currentfile_seq - } - \msg_error:nn{stex}{error/nomodule} - } - - \str_set:Nx \l_stex_module_name_str { - \prop_item:Nn \l_stex_current_module_prop - { name } / #2 - feature - } - - \str_set:Nx \l_stex_module_ns_str { - \prop_item:Nn \l_stex_current_module_prop - { ns } - } - - - \str_clear:N \l_tmpa_str - \seq_clear:N \l_tmpa_seq - \tl_clear:N \l_tmpa_tl - \exp_args:NNx \prop_set_from_keyval:Nn \l_stex_current_module_prop { - origname = #2, - name = \l_stex_module_name_str , - ns = \l_stex_module_ns_str , - imports = \exp_not:o { \l_tmpa_seq } , - constants = \exp_not:o { \l_tmpa_seq } , - content = \exp_not:o { \l_tmpa_tl } , - file = \exp_not:o { \g_stex_currentfile_seq } , - lang = \l_stex_module_lang_str , - sig = \l_tmpa_str , - meta = \l_tmpa_str , - feature = #1 , - } - - \stex_if_smsmode:F { - \begin{stex_annotate_env}{ feature:#1 }{} - \stex_annotate_invisible:nnn{header}{}{ #3 } - } -}{ - \str_set:Nx \l_tmpa_str { - c_stex_feature_ - \prop_item:Nn \l_stex_current_module_prop { ns } ? - \prop_item:Nn \l_stex_current_module_prop { name } - _prop - } - \prop_gset_eq:cN { \l_tmpa_str } \l_stex_current_module_prop - \prop_gset_eq:NN \g_stex_last_feature_prop \l_stex_current_module_prop - \stex_if_smsmode:F { - \end{stex_annotate_env} - } -} - -% \end{macrocode} -% \end{environment} -% -% -% \subsection{Features} -% -% \begin{environment}{structure} -% \begin{macrocode} - -\prop_new:N \l_stex_all_structures_prop - -\keys_define:nn { stex / features / structure } { - name .str_set_x:N = \l_@@_structure_name_str , -} - -\cs_new_protected:Nn \_@@_structure_args:n { - \str_clear:N \l_@@_structure_name_str - \keys_set:nn { stex / features / structure } { #1 } -} - -\NewDocumentEnvironment{mathstructure}{ O{} m }{ - \_@@_structure_args:n { #1 } - \str_if_empty:NT \l_@@_structure_name_str { - \str_set:Nx \l_@@_structure_name_str { #2 } - } - \exp_args:Nnnx - \begin{structural@feature}{ structure } - { \l_@@_structure_name_str }{} - \seq_clear:N \l_tmpa_seq - \prop_put:Nno \l_stex_current_module_prop { fields } \l_tmpa_seq - \stex_smsmode_do: -}{ - \prop_get:NnN \l_stex_current_module_prop { constants } \l_tmpa_seq - \prop_get:NnN \l_stex_current_module_prop { fields } \l_tmpb_seq - \str_set:Nx \l_tmpa_str { - \prop_item:Nn \l_stex_current_module_prop { ns } ? - \prop_item:Nn \l_stex_current_module_prop { name } - } - \seq_map_inline:Nn \l_tmpa_seq { - \exp_args:NNx \seq_put_right:Nn \l_tmpb_seq { \l_tmpa_str ? ##1 } - } - \prop_put:Nno \l_stex_current_module_prop { fields } { \l_tmpb_seq } - \exp_args:Nnx - \AddToHookNext { env / mathstructure / after }{ - \symdecl{ #2 }[type = \exp_not:N\collection,def={\STEXsymbol{module-type}{ - \_stex_term_math_oms:nnnn { \l_tmpa_str }{}{0}{} - }}, name = \prop_item:Nn \l_stex_current_module_prop { origname }] - \STEXexport { - \prop_put:Nno \exp_not:N \l_stex_all_structures_prop - {\prop_item:Nn \l_stex_current_module_prop { origname }} - {\l_tmpa_str} - \prop_put:Nno \exp_not:N \l_stex_all_structures_prop - {#2}{\l_tmpa_str} -% \seq_put_right:Nn \exp_not:N \l_stex_all_structures_seq { -% \prop_item:Nn \l_stex_current_module_prop { origname }, -% \l_tmpa_str -% } -% \seq_put_right:Nn \exp_not:N \l_stex_all_structures_seq { -% #2,\l_tmpa_str -% } -% \tl_set:cx { #2 } { -% \stex_invoke_structure:n { \l_tmpa_str } - } - } - - \end{structural@feature} - % \g_stex_last_feature_prop -} -% \end{macrocode} -% \end{environment} -% -% -% \begin{macro}{\instantiate} -% \begin{macrocode} -\seq_new:N \l_@@_structure_field_seq -\str_new:N \l_@@_structure_field_str -\str_new:N \l_@@_structure_def_tl -\prop_new:N \l_@@_structure_prop -\NewDocumentCommand \instantiate { m O{} m }{ - \prop_get:NnN \l_stex_all_structures_prop {#1} \l_tmpa_str - \prop_set_eq:Nc \l_@@_structure_prop { - c_stex_feature_\l_tmpa_str _prop - } - \seq_set_from_clist:Nn \l_@@_structure_field_seq { #2 } - \seq_map_inline:Nn \l_@@_structure_field_seq { - \seq_set_split:Nnn \l_tmpa_seq{=}{ ##1 } - \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} > 1 { - \seq_get_left:NN \l_tmpa_seq \l_tmpa_tl - \exp_args:NNno \seq_set_split:Nnn \l_tmpb_seq - {!} \l_tmpa_tl - \int_compare:nNnTF {\seq_count:N \l_tmpb_seq} > 1 { - \str_set:Nx \l_@@_structure_field_str {\seq_item:Nn \l_tmpb_seq 1} - \seq_get_right:NN \l_tmpb_seq \l_tmpb_tl - \seq_get_right:NN \l_tmpa_seq \l_tmpa_tl - }{ - \str_set:Nx \l_@@_structure_field_str \l_tmpa_tl - \seq_get_right:NN \l_tmpa_seq \l_tmpa_tl - \exp_args:NNno \seq_set_split:Nnn \l_tmpb_seq{!} - \l_tmpa_tl - \int_compare:nNnTF {\seq_count:N \l_tmpb_seq} > 1 { - \seq_get_left:NN \l_tmpb_seq \l_tmpa_tl - \seq_get_right:NN \l_tmpb_seq \l_tmpb_tl - }{ - \tl_clear:N \l_tmpb_tl - } - } - }{ - \seq_set_split:Nnn \l_tmpa_seq{!}{ ##1 } - \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} > 1 { - \str_set:Nx \l_@@_structure_field_str {\seq_item:Nn \l_tmpa_seq 1} - \seq_get_right:NN \l_tmpa_seq \l_tmpb_tl - \tl_clear:N \l_tmpa_tl - }{ - % TODO throw error - } - } - % \l_tmpa_str: name - % \l_tmpa_tl: definiens - % \l_tmpb_tl: notation - \tl_if_empty:NT \l_@@_structure_field_str { - % TODO throw error - } - \str_clear:N \l_tmpb_str - - \prop_get:NnN \l_@@_structure_prop { fields } \l_tmpa_seq - \seq_map_inline:Nn \l_tmpa_seq { - \seq_set_split:Nnn \l_tmpb_seq ? { ####1 } - \seq_get_right:NN \l_tmpb_seq \l_tmpb_str - \str_if_eq:NNT \l_@@_structure_field_str \l_tmpb_str { - \seq_map_break:n { - \str_set:Nn \l_tmpb_str { ####1 } - } - } - } - \prop_get:cnN { l_stex_symdecl_ \l_tmpb_str _prop } {args} - \l_tmpb_str - - \tl_if_empty:NTF \l_tmpb_tl { - \tl_if_empty:NF \l_tmpa_tl { - \exp_args:Nx \use:n { - \symdecl{#3/\l_@@_structure_field_str}[args=\l_tmpb_str,def={\exp_args:No\exp_not:n{\l_tmpa_tl}}] - } - } - }{ - \tl_if_empty:NTF \l_tmpa_tl { - \exp_args:Nx \use:n { - \symdef{#3/\l_@@_structure_field_str}[args=\l_tmpb_str]\exp_after:wN\exp_not:n\exp_after:wN{\l_tmpb_tl} - } - - }{ - \exp_args:Nx \use:n { - \symdef{#3/\l_@@_structure_field_str}[args=\l_tmpb_str,def={\exp_args:No\exp_not:n{\l_tmpa_tl}}] - \exp_after:wN\exp_not:n\exp_after:wN{\l_tmpb_tl} - } - } - } -% \par \prop_item:Nn \l_stex_current_module_prop {ns} ? -% \prop_item:Nn \l_stex_current_module_prop {name} ? -% #3/\l_@@_structure_field_str -% \par -% \expandafter\present\csname -% l_stex_symdecl_ -% \prop_item:Nn \l_stex_current_module_prop {ns} ? -% \prop_item:Nn \l_stex_current_module_prop {name} ? -% #3/\l_@@_structure_field_str -% _prop -% \endcsname - } - - \tl_clear:N \l_@@_structure_def_tl - - \prop_get:NnN \l_@@_structure_prop { fields } \l_tmpa_seq - \seq_map_inline:Nn \l_tmpa_seq { - \seq_set_split:Nnn \l_tmpb_seq ? { ##1 } - \seq_get_right:NN \l_tmpb_seq \l_tmpa_str - \exp_args:Nx \use:n { - \tl_put_right:Nn \exp_not:N \l_@@_structure_def_tl { - - } - } - - \prop_if_exist:cF { - l_stex_symdecl_ - \prop_item:Nn \l_stex_current_module_prop {ns} ? - \prop_item:Nn \l_stex_current_module_prop {name} ? - #3/\l_tmpa_str - _prop - }{ - \prop_get:cnN { l_stex_symdecl_ ##1 _prop } {args} - \l_tmpb_str - \exp_args:Nx \use:n { - \symdecl{#3/\l_tmpa_str}[args=\l_tmpb_str] - } - } - } - - \symdecl*{#3}[type={\STEXsymbol{module-type}{ - \_stex_term_math_oms:nnnn { - \prop_item:Nn \l_@@_structure_prop {ns} ? - \prop_item:Nn \l_@@_structure_prop {name} - }{}{0}{} - }}] - - % TODO: -> sms file - - \tl_set:cx{ #3 }{ - \stex_invoke_structure:nnn { - \prop_item:Nn \l_stex_current_module_prop {ns} ? - \prop_item:Nn \l_stex_current_module_prop {name} ? #3 - } { - \prop_item:Nn \l_@@_structure_prop {ns} ? - \prop_item:Nn \l_@@_structure_prop {name} - } - } - \stex_smsmode_do: -} -% \end{macrocode} -% \end{macro} -% -% -% -% \begin{macro}{\stex_invoke_structure:nnn} -% \begin{macrocode} -% #1: URI of the instance -% #2: URI of the instantiated module -\cs_new_protected:Nn \stex_invoke_structure:nnn { - \tl_if_empty:nTF{ #3 }{ - \prop_set_eq:Nc \l_@@_structure_prop { - c_stex_feature_ #2 _prop - } - \tl_clear:N \l_tmpa_tl - \prop_get:NnN \l_@@_structure_prop { fields } \l_tmpa_seq - \seq_map_inline:Nn \l_tmpa_seq { - \seq_set_split:Nnn \l_tmpb_seq ? { ##1 } - \seq_get_right:NN \l_tmpb_seq \l_tmpa_str - \cs_if_exist:cT { - stex_notation_ #1/\l_tmpa_str \c_hash_str\c_hash_str _cs - }{ - \tl_if_empty:NF \l_tmpa_tl { - \tl_put_right:Nn \l_tmpa_tl {,} - } - \tl_put_right:Nx \l_tmpa_tl { - \stex_invoke_symbol:n {#1/\l_tmpa_str}! - } - } - } - \exp_args:No \mathstruct \l_tmpa_tl - }{ - \stex_invoke_symbol:n{#1/#3} - } -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</package> -% \end{macrocode} -% -% \end{implementation} -% -% \PrintIndex |