summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/l3doc.cls')
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3doc.cls322
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 &&