diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/l3doc.cls')
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3doc.cls | 322 |
1 files changed, 187 insertions, 135 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls index 33821fa37f4..e01b5752fd5 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls @@ -52,7 +52,7 @@ \let \filedateOld \ExplFileDate \let \fileversionOld \ExplFileVersion \let \filedescriptionOld \ExplFileDescription -\GetIdInfo$Id: l3doc.dtx 3255 2012-01-28 20:31:12Z joseph $ +\GetIdInfo$Id: l3doc.dtx 3464 2012-02-26 15:30:29Z bruno $ {L3 Experimental documentation class} \ProvidesExplClass {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -125,7 +125,22 @@ \ProcessOptions \LoadClass{article} \RequirePackage{doc} -\RequirePackage{array,alphalph,booktabs,color,colortbl,fixltx2e,enumitem,pifont,textcomp,trace,underscore,csquotes,fancyvrb} +\RequirePackage + { + array, + alphalph, + booktabs, + color, + colortbl, + fixltx2e, + enumitem, + pifont, + textcomp, + trace, + underscore, + csquotes, + fancyvrb + } \raggedbottom \fvset{gobble=2} \cs_set_eq:NN \verbatim \Verbatim @@ -302,15 +317,14 @@ \coffin_clear:N \l_doc_syntax_coffin \coffin_clear:N \l_doc_names_coffin - \bool_gset_false:N \l_doc_meta_TF_bool - \bool_gset_false:N \l_doc_meta_pTF_bool - \bool_gset_false:N \l_doc_meta_EXP_bool - \bool_gset_false:N \l_doc_meta_rEXP_bool + \bool_set_false:N \l_doc_meta_TF_bool + \bool_set_false:N \l_doc_meta_pTF_bool + \bool_set_false:N \l_doc_meta_EXP_bool + \bool_set_false:N \l_doc_meta_rEXP_bool \keys_set:nn { l3doc/function } {#1} - \char_set_catcode_active:N \< - \cs_set_eq:NN < \doc_open_meta:n + \char_set_active_eq:NN < \doc_open_meta:w \group_begin: \MakePrivateLetters @@ -324,10 +338,6 @@ } { \vcoffin_set_end: - \hcoffin_set:Nn \l_doc_names_coffin - { - \exp_args:NV \function_typeset:n \l_doc_function_input_tl - } \bool_if:NTF \l_doc_long_name_bool { \coffin_join:NnnNnnnn @@ -387,40 +397,20 @@ } \cs_gset_nopar:Npn \function_typeset:n #1 { - - \cs_set_nopar:Npn \nextnewline{\cs_gset_nopar:Npn\nextnewline{\\}} \tl_gclear:N \g_doc_macro_tl - \prop_clear:N \l_doc_functions_block_prop - + % populate "\l_doc_functions_block_prop" with info on the functions present: \clist_map_function:nN {#1} \doc_parse_functions:n \small\ttfamily \begin{tabular}{ @{} l @{} r @{} } \toprule - \prop_map_function:NN \l_doc_functions_block_prop \doc_show_functions:nn - \\ - - \bool_if:nF { \tl_if_empty_p:N \l_doc_date_added_tl && - \tl_if_empty_p:N \l_doc_date_updated_tl } - { \midrule } - - \tl_if_empty:NF \l_doc_date_added_tl - { - \multicolumn{2}{@{}r@{}} - { \scriptsize New:\,\l_doc_date_added_tl } \\ - } - - \tl_if_empty:NF \l_doc_date_updated_tl - { - \multicolumn{2}{@{}r@{}} - { \scriptsize Updated:\,\l_doc_date_updated_tl } \\ - } + \prop_map_function:NN \l_doc_functions_block_prop \doc_typeset_functions:nn + \doc_typeset_dates: \bottomrule \end{tabular} \normalfont\normalsize } - \prop_new:N \l_doc_functions_block_prop \cs_generate_variant:Nn \prop_put:Nnn {Nxx} \cs_new:Nn \doc_parse_functions:n @@ -429,10 +419,10 @@ { \tl_gset_eq:NN \l_doc_function_name_prefix_tl \@backslashchar % for the weird functions named "\::N" and so on: -\exp_args:Nx \tl_if_head_eq_charcode:nNTF { \cs_to_str:N #1 } {:} +\exp_args:Nx \tl_if_head_eq_charcode:nNTF { \cs_to_str:N #1 } { : } { % again, no variants: -\prop_put:Nxx \l_doc_functions_block_prop { \cs_to_str:N #1 } { } +\prop_put:Nxx \l_doc_functions_block_prop { \cs_to_str:N #1 } { {-1} {} } } { % finally, for regular old csnames: @@ -442,12 +432,19 @@ { \prop_put:Nxx \l_doc_functions_block_prop { \cs_get_function_name:N #1 } -{ \l_doc_tmp_tl , \cs_get_function_signature:N #1 } +{ + \l_doc_tmp_tl , + {\cs_get_arg_count_from_signature:N #1} + {\cs_get_function_signature:N #1} +} } { \prop_put:Nxx \l_doc_functions_block_prop { \cs_get_function_name:N #1 } -{ \cs_get_function_signature:N #1 } +{ + {\cs_get_arg_count_from_signature:N #1} + {\cs_get_function_signature:N #1} +} } } } @@ -455,105 +452,121 @@ { % for now don't bother splitting into variants: \tl_gclear:N \l_doc_function_name_prefix_tl -\prop_put:Nxx \l_doc_functions_block_prop { #1 } { } +\prop_put:Nxx \l_doc_functions_block_prop { #1 } { {-1} {} } } } -\cs_new:Nn \doc_show_functions:nn +\cs_new:Nn \doc_typeset_functions:nn { \clist_gset:Nn \l_doc_variants_clist {#2} \clist_gpop:NN \l_doc_variants_clist \l_doc_tmp_tl - \exp_args:Nx \doc_showmacro:n - { \exp_not:c {#1 \tl_if_empty:NF \l_doc_tmp_tl { : \l_doc_tmp_tl } } } + \exp_args:Nc \doc_typeset_functions_aux:N + { + #1 + \int_compare:nT { \exp_after:wN \use_i:nn \l_doc_tmp_tl > -1 } {:} + \int_compare:nT { \exp_after:wN \use_i:nn \l_doc_tmp_tl > 0 } + { \exp_after:wN \use_ii:nn \l_doc_tmp_tl } + } + \\ } -\cs_new_nopar:Nn \doc_showmacro:n { +\cs_new_nopar:Nn \doc_typeset_functions_aux:N +{ \bool_if:NT \l_doc_meta_pTF_bool { \tl_set:Nx \l_doc_pTF_name_tl { \doc_predicate_from_base:N #1 } - \doc_special_main_index:o { \token_to_str:N \l_doc_pTF_name_tl } - \seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:N \l_doc_pTF_name_tl } + \doc_special_main_index:o { \tl_to_str:N \l_doc_pTF_name_tl } + \seq_gput_right:Nx \g_doc_functions_seq { \l_doc_function_name_prefix_tl \l_doc_pTF_name_tl } } \bool_if:NTF \l_doc_meta_TF_bool { \doc_special_main_index:o { \token_to_str:N #1 TF } - \seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:n { #1 TF } } - \seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:n { #1 T } } - \seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:n { #1 F } } + \seq_gput_right:Nx \g_doc_functions_seq { \token_to_str:N #1 TF } }{ \doc_special_main_index:o { \token_to_str:N #1 } - \seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:n { #1 } } + \seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:n {#1} } } \bool_if:NTF \l_doc_meta_pTF_bool { + \bool_gset_false:N \l_doc_meta_TF_bool - \exp_args:Nc \doc_showmacro_aux_ii:N \l_doc_pTF_name_tl + \exp_args:Nc \doc_typeset_function_block:N { \l_doc_pTF_name_tl } \bool_gset_true:N \l_doc_meta_TF_bool - \exp_args:Nc \doc_showmacro_aux_ii:N { \cs_to_str:N #1 } + + \\ + \doc_typeset_function_block:N #1 + }{ \exp_args:Nx \tl_if_head_eq_charcode:nNTF { \exp_after:wN \use_none:n \token_to_str:N #1 } {:} - { \doc_showmacro_aux_iii:N #1 } - { \doc_showmacro_aux_ii:N #1 } + { \doc_show_macro_unusual:N #1 } + { \doc_typeset_function_block:N #1 } } } -\cs_set_nopar:Nn \doc_showmacro_aux_ii:N { - \nextnewline +\cs_set_nopar:Nn \doc_typeset_function_block:N { \tl_gset:Nx \l_doc_function_name_tl { \cs_get_function_name:N #1 } \tl_gset:Nx \l_doc_function_sig_tl { \cs_get_function_signature:N #1 } \tl_gset:Nx \g_doc_macro_tl { \l_doc_function_name_prefix_tl \l_doc_function_name_tl } - \g_doc_macro_tl - \int_compare:nT { \cs_get_arg_count_from_signature:N #1 >= 0 } - { : \l_doc_function_sig_tl } - + \doc_typeset_function_basename:N #1 \bool_if:NT \l_doc_meta_TF_bool { \doc_typeset_TF: } + \doc_typeset_expandability: + \clist_if_empty:NF \l_doc_variants_clist { \doc_typeset_variants: } + \bool_if:NT \g_doc_full_bool { \doc_label_function: } - & - \bool_if:NT \l_doc_meta_EXP_bool { - \hspace{\tabcolsep} - \hyperlink{expstar} {$\star$} - } - \bool_if:NT \l_doc_meta_rEXP_bool { - \hspace{\tabcolsep} - \hyperlink{rexpstar} {\ding{73}} % hollow star - } - - \clist_if_empty:NF \l_doc_variants_clist - { - \\ - \doc_typeset_aux:n \g_doc_macro_tl : - \int_compare:nTF { \clist_length:N \l_doc_variants_clist == 1 } - { \l_doc_variants_clist } - { - \textrm( - \clist_pop:NN \l_doc_variants_clist \l_doc_tmp_tl - \l_doc_tmp_tl - \clist_map_inline:Nn \l_doc_variants_clist {\textrm|##1} - \textrm) - } - \bool_if:NT \l_doc_meta_TF_bool { \doc_typeset_TF: } - & - \bool_if:NT \l_doc_meta_EXP_bool { - \hspace{\tabcolsep} - \hyperlink{expstar} {$\star$} +} +\cs_set:Nn \doc_typeset_function_basename:N + { + \g_doc_macro_tl + \int_compare:nT { \cs_get_arg_count_from_signature:N #1 > -1 } { : } + \int_compare:nT { \cs_get_arg_count_from_signature:N #1 > 0 } + { \l_doc_function_sig_tl } } - \bool_if:NT \l_doc_meta_rEXP_bool { - \hspace{\tabcolsep} - \hyperlink{rexpstar} {\ding{73}} % hollow star +\cs_set:Nn \doc_typeset_expandability: + { + & + \bool_if:NT \l_doc_meta_EXP_bool { + \hspace{\tabcolsep} + \hyperlink{expstar} {$\star$} + } + \bool_if:NT \l_doc_meta_rEXP_bool { + \hspace{\tabcolsep} + \hyperlink{rexpstar} {\ding{73}} % hollow star + } } +\cs_set:Nn \doc_typeset_variants: + { + \\ + \doc_typeset_aux:n \g_doc_macro_tl : + \int_compare:nTF { \clist_length:N \l_doc_variants_clist == 1 } + { \exp_after:wN \use_ii:nn \l_doc_variants_clist } + { + \textrm( + \clist_pop:NN \l_doc_variants_clist \l_doc_tmp_tl + \exp_after:wN \use_ii:nn \l_doc_tmp_tl + \clist_map_inline:Nn \l_doc_variants_clist {\textrm| \use_ii:nn ##1} + \textrm) + } + \bool_if:NT \l_doc_meta_TF_bool { \doc_typeset_TF: } + & + \bool_if:NT \l_doc_meta_EXP_bool { + \hspace{\tabcolsep} + \hyperlink{expstar} {$\star$} } - - \exp_args:NNf \tl_replace_all:Nnn \g_doc_macro_tl {\token_to_str:N _} {/} - \exp_args:NNf \tl_replace_all:Nnn \g_doc_macro_tl {\@backslashchar} {} - \bool_if:NT \g_doc_full_bool { + \bool_if:NT \l_doc_meta_rEXP_bool { + \hspace{\tabcolsep} + \hyperlink{rexpstar} {\ding{73}} % hollow star + } + } +\cs_set:Nn \doc_label_function: + { + \exp_args:NNf \tl_replace_all:Nnn \g_doc_macro_tl {\token_to_str:N _} {/} + \exp_args:NNf \tl_replace_all:Nnn \g_doc_macro_tl {\@backslashchar} {} \exp_args:Nx \label { doc/function//\g_doc_macro_tl \tl_if_empty:NF \l_doc_function_sig_tl { : \l_doc_function_sig_tl } } } -} -\cs_set_nopar:Nn \doc_showmacro_aux_iii:N { - \nextnewline +\cs_set_nopar:Nn \doc_show_macro_unusual:N { \tl_gset:Nx \g_doc_macro_tl { \token_to_str:N #1} \token_to_str:N #1 & @@ -563,6 +576,24 @@ \exp_args:Nx \label { doc/function//\g_doc_macro_tl } } } +\cs_set:Nn \doc_typeset_dates: + { + \bool_if:nF { \tl_if_empty_p:N \l_doc_date_added_tl && + \tl_if_empty_p:N \l_doc_date_updated_tl } + { \midrule } + + \tl_if_empty:NF \l_doc_date_added_tl + { + \multicolumn{2}{@{}r@{}} + { \scriptsize New:\,\l_doc_date_added_tl } \\ + } + + \tl_if_empty:NF \l_doc_date_updated_tl + { + \multicolumn{2}{@{}r@{}} + { \scriptsize Updated:\,\l_doc_date_updated_tl } \\ + } + } \newenvironment{syntax}{ \small\ttfamily \bool_if:NTF \l_doc_long_name_bool @@ -591,44 +622,62 @@ \coffin_gset_eq:NN \l_doc_syntax_coffin \l_doc_syntax_coffin \ignorespacesafterend } -\tl_map_inline:nn {0123456789} { \cs_gset_eq:cN {char_other_#1} #1 } -\group_begin: - \tl_map_inline:nn {0123456789} { \char_set_catcode_active:N #1 } - \cs_new:Npn \doc_open_meta:n { +\cs_new:Npn \doc_ensuremath_sb:n #1 + { + \ensuremath{\sb{#1}} + } +\cs_set_eq:NN \doc_meta:n \meta +\cs_set:Npn \meta + { \group_begin: - \tl_map_function:nN {0123456789} \doc_assign_num:n + \char_set_active_eq:NN _ \doc_ensuremath_sb:n + \doc_close_meta:n + } +\cs_new:Npn \doc_open_meta:w + { + \group_begin: + \char_set_active_eq:NN _ \doc_ensuremath_sb:n \doc_close_meta:w } - \cs_new:Npn \Arg { +\cs_new:Npn \Arg + { \texttt{ \char`\{ } \group_begin: - \tl_map_function:nN {0123456789} \doc_assign_num:n + \char_set_active_eq:NN _ \doc_ensuremath_sb:n \doc_close_Arg:n } -\group_end: -\cs_new_nopar:Npn \doc_close_meta:w #1> { \meta {#1} \group_end: } +\cs_new_nopar:Npn \doc_close_meta:n #1 { \doc_meta:n {#1} \group_end: } +\cs_new_nopar:Npn \doc_close_meta:w #1> { \doc_meta:n {#1} \group_end: } \cs_new_nopar:Npn \doc_close_Arg:n #1 { - \meta {#1} + \doc_meta:n {#1} \group_end: \texttt{ \char`\} } } -\cs_new_nopar:Npn \doc_assign_num:n #1 { - \cs_set_eq:cc { \string #1 } { char_other_\string #1 } - \char_set_catcode_active:N #1 - \cs_set_nopar:Npn #1 { \unskip \, $ {} \sb { \use:c { char_other_\string #1 } } $ } -} +\keys_define:nn { l3doc/macro } + { + aux .code:n = + { \bool_set_true:N \l_doc_macro_aux_bool } , + internal .code:n = + { \bool_set_true:N \l_doc_macro_internal_bool } , + var .code:n = + { \bool_set_true:N \l_doc_macro_var_bool } , + TF .code:n = + { \bool_set_true:N \l_doc_macro_TF_bool } , + pTF .code:n = + { \bool_set_true:N \l_doc_macro_pTF_bool } , + } \renewcommand \macro [1][] { \int_compare:nNnTF \currentgrouplevel=2 { \int_gzero:N \g_doc_nested_macro_int } { \int_incr:N \g_doc_nested_macro_int } - \bool_set_false:N \l_doc_macro_aux_bool - \bool_set_false:N \l_doc_macro_internal_bool - \bool_set_false:N \l_doc_macro_TF_bool - \bool_set_false:N \l_doc_macro_pTF_bool - \bool_set_false:N \l_doc_macro_var_bool - \bool_set_false:N \l_doc_tested_bool + \bool_gset_false:N \l_doc_macro_aux_bool + \bool_gset_false:N \l_doc_macro_internal_bool + \bool_gset_false:N \l_doc_macro_TF_bool + \bool_gset_false:N \l_doc_macro_pTF_bool + \bool_gset_false:N \l_doc_macro_var_bool + \bool_gset_false:N \l_doc_tested_bool \cs_set_eq:NN \doc_macroname_prefix:n \use:n \cs_set_eq:NN \doc_macroname_suffix: \c_empty_tl @@ -668,24 +717,23 @@ { \clist_map_inline:Nn \l_doc_macro_input_clist { - \exp_args:Nf \doc_macro_single { \doc_predicate_from_base:w ##1 } + \exp_args:Nx \doc_macro_single:n { \doc_predicate_from_base:w ##1 \q_nil } } \bool_set_true:N \l_doc_macro_TF_bool - \clist_map_function:NN \l_doc_macro_input_clist \doc_macro_single + \clist_map_function:NN \l_doc_macro_input_clist \doc_macro_single:n \bool_set_false:N \l_doc_macro_TF_bool } - { \clist_map_function:NN \l_doc_macro_input_clist \doc_macro_single } + { \clist_map_function:NN \l_doc_macro_input_clist \doc_macro_single:n } } -\cs_set_nopar:Npn \doc_macro_opt_aux: { \bool_set_true:N \l_doc_macro_aux_bool } -\cs_set_nopar:Npn \doc_macro_opt_internal: { \bool_set_true:N \l_doc_macro_internal_bool } -\cs_set_nopar:Npn \doc_macro_opt_TF: { \bool_set_true:N \l_doc_macro_TF_bool } -\cs_set_nopar:Npn \doc_macro_opt_pTF: { \bool_set_true:N \l_doc_macro_pTF_bool } -\cs_set_nopar:Npn \doc_macro_opt_var: { \bool_set_true:N \l_doc_macro_var_bool } \cs_set:Nn \doc_predicate_from_base:N { \cs_get_function_name:N #1 _p: \cs_get_function_signature:N #1 } -\cs_set_nopar:Npn \doc_macro_single #1 { +\cs_set:Npn \doc_predicate_from_base:w #1 : #2 \q_nil + { + #1 _p: #2 + } +\cs_set_nopar:Npn \doc_macro_single:n #1 { \int_incr:N \l_doc_macro_int \tl_set:Nx \saved@macroname { \token_to_str:N #1 } \topsep\MacroTopsep @@ -815,34 +863,38 @@ } { \prop_gput:NVn \g_doc_missing_tests_prop \l_doc_macro_input_clist {#1} } } +\cs_set:Nn \doc_macro_wrap:n + { + #1 \bool_if:NT \l_doc_macro_TF_bool {TF} + } \cs_set:Nn \doc_texttt_comma:n {\,,~\texttt{#1}} \cs_set:Npn \endmacro { \int_compare:nT {\g_doc_nested_macro_int<1} { - \par\nobreak{\footnotesize(\emph{ + \par\nobreak\noindent{\footnotesize(\emph{ End~ definition~ for~ \prg_case_int:nnn { \clist_length:N \l_doc_macro_input_clist } { - {1} { \texttt{ \clist_use:N \l_doc_macro_input_clist }. } + {1} { \texttt{ \doc_macro_wrap:n { \clist_use:N \l_doc_macro_input_clist } }. } {2} { \tl_set:Nx \l_clist_first_tl { \clist_item:Nn \l_doc_macro_input_clist {0} } \tl_set:Nx \l_clist_last_tl { \clist_item:Nn \l_doc_macro_input_clist {1} } - \texttt{\l_clist_first_tl}\,~ and~ \texttt{\l_clist_last_tl}\,. + \texttt{\doc_macro_wrap:n\l_clist_first_tl}\,~ and~ \texttt{\doc_macro_wrap:n\l_clist_last_tl}\,. } {3} { \tl_set:Nx \l_clist_first_tl { \clist_item:Nn \l_doc_macro_input_clist {0} } \tl_set:Nx \l_clist_mid_tl { \clist_item:Nn \l_doc_macro_input_clist {1} } \tl_set:Nx \l_clist_last_tl { \clist_item:Nn \l_doc_macro_input_clist {2} } - \texttt{\l_clist_first_tl}\,,~ - \texttt{\l_clist_mid_tl}\,,~ - and~ \texttt{\l_clist_last_tl}\,. + \texttt{\doc_macro_wrap:n\l_clist_first_tl}\,,~ + \texttt{\doc_macro_wrap:n\l_clist_mid_tl}\,,~ + and~ \texttt{\doc_macro_wrap:n\l_clist_last_tl}\,. } } { \tl_set:Nx \l_clist_first_tl { \clist_item:Nn \l_doc_macro_input_clist {0} } - \texttt{\l_clist_first_tl}\,~and~others. + \texttt{\doc_macro_wrap:n\l_clist_first_tl}\,~and~others. } \bool_if:nT { !\l_doc_macro_aux_bool && |