diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/acro/acro.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/acro/acro.sty | 1644 |
1 files changed, 592 insertions, 1052 deletions
diff --git a/Master/texmf-dist/tex/latex/acro/acro.sty b/Master/texmf-dist/tex/latex/acro/acro.sty index 03d0121d5f2..98425268c15 100644 --- a/Master/texmf-dist/tex/latex/acro/acro.sty +++ b/Master/texmf-dist/tex/latex/acro/acro.sty @@ -8,7 +8,7 @@ % Web: https://bitbucket.org/cgnieder/acro/ % E-Mail: contact@mychemistry.eu % -------------------------------------------------------------------------- -% Copyright 2011--2019 Clemens Niederberger +% Copyright 2011--2020 Clemens Niederberger % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -23,17 +23,39 @@ % The Current Maintainer of this work is Clemens Niederberger. % -------------------------------------------------------------------------- % The acro package consists of the files -% - acro.sty, acro_en.tex, acro_en.pdf, acro.history, README +% - acro.sty, acro.definitions.tex, acro.cfg +% - acro-manual.tex, acro-manual.pdf, acro-manual.cls +% - acro.history, README % -------------------------------------------------------------------------- % If you have any ideas, questions, suggestions or bugs to report, please % feel free to contact me. % -------------------------------------------------------------------------- -\RequirePackage{expl3,xparse,l3keys2e,xtemplate,etoolbox} +\RequirePackage{expl3,xparse,xtemplate,l3keys2e} +\RequirePackage{etoolbox} % for the document hooks + +\ExplSyntaxOn + +\tl_const:Nn \c_acro_date_tl {2020/01/11} +\tl_const:Nn \c_acro_version_major_number_tl {2} +\tl_const:Nn \c_acro_version_minor_number_tl {11} +\tl_const:Nn \c_acro_version_subrelease_tl {} +\tl_const:Nx \c_acro_version_number_tl + { + \c_acro_version_major_number_tl . + \c_acro_version_minor_number_tl + } +\tl_const:Nx \c_acro_version_tl + { + \c_acro_version_number_tl + \c_acro_version_subrelease_tl + } +\tl_const:Nn \c_acro_info_tl {Typeset~ Acronyms} + \ProvidesExplPackage {acro} - {2019/12/30} - {2.10d} - {Typeset Acronyms} + {\c_acro_date_tl} + {\c_acro_version_tl} + {\c_acro_info_tl} % -------------------------------------------------------------------------- % warning and error messages: @@ -108,6 +130,195 @@ } % -------------------------------------------------------------------------- +% temporary variables +\tl_new:N \l__acro_tmpa_tl +\tl_new:N \l__acro_tmpb_tl +\tl_new:N \l__acro_tmpc_tl +\prop_new:N \l__acro_tmpa_prop +\prop_new:N \l__acro_tmpb_prop +\seq_new:N \l__acro_tmpa_seq +\seq_new:N \l__acro_tmpb_seq +\int_new:N \l__acro_tmpa_int +\int_new:N \l__acro_tmpb_int +\int_new:N \l__acro_tmpc_int +\int_new:N \l__acro_tmpd_int + +% -------------------------------------------------------------------------- +% variants of kernel commands +\cs_generate_variant:Nn \quark_if_no_value:nTF {V} +\cs_generate_variant:Nn \tl_put_right:Nn {NV,Nv} +\cs_generate_variant:Nn \tl_if_eq:nnT {V} +\cs_generate_variant:Nn \tl_if_eq:nnF {V} +\cs_generate_variant:Nn \seq_use:Nnnn {c} +\cs_generate_variant:Nn \seq_gset_split:Nnn {c} +\cs_generate_variant:Nn \seq_set_split:Nnn {NnV} +\cs_generate_variant:Nn \seq_if_in:NnT {NV} +\cs_generate_variant:Nn \seq_if_in:NnTF {Ne} +\cs_generate_variant:Nn \prop_put:Nnn {NnV,cnx,cnv} +\cs_generate_variant:Nn \prop_get:NnNTF {cnc} +\cs_generate_variant:Nn \prop_get:NnNF {cn,cnc} +\cs_generate_variant:Nn \prop_get:NnN {cnc} +\cs_generate_variant:Nn \cs_generate_variant:Nn {c} +\cs_generate_variant:Nn \str_case:nn {V} + +% -------------------------------------------------------------------------- +% variables: +\bool_new:N \l__acro_acc_supp_bool +\bool_new:N \l__acro_addto_index_bool +\bool_new:N \l__acro_capitalize_list_bool +\bool_new:N \g__acro_case_sensitive_bool +\bool_new:N \l__acro_citation_all_bool +\bool_new:N \l__acro_citation_first_bool +\bool_set_true:N \l__acro_citation_first_bool +\bool_new:N \l__acro_create_macros_bool +\bool_new:N \l__acro_custom_alt_format_bool +\bool_new:N \l__acro_custom_long_format_bool +\bool_new:N \l__acro_custom_short_format_bool +\bool_new:N \l__acro_extra_punct_bool +\bool_new:N \l__acro_extra_use_brackets_bool +\bool_new:N \g__acro_first_acronym_declared_bool +\bool_new:N \l__acro_first_instance_bool +\bool_new:N \l__acro_first_only_short_bool +\bool_new:N \l__acro_first_only_long_bool +\bool_new:N \l__acro_first_reversed_bool +\bool_new:N \l__acro_first_switched_bool +\bool_new:N \l__acro_first_use_brackets_bool +\bool_new:N \l__acro_first_upper_bool +\bool_new:N \l__acro_following_page_bool +\bool_new:N \l__acro_following_pages_bool +\bool_new:N \l__acro_foreign_bool +\bool_set_true:N \l__acro_foreign_bool +\bool_new:N \l__acro_group_citation_bool +\bool_new:N \l__acro_hyperref_loaded_bool +\bool_new:N \l__acro_hyperref_use_bool +\bool_new:N \l__acro_include_endings_format_bool +\bool_new:N \l__acro_indefinite_bool +\bool_new:N \l__acro_in_list_bool +\bool_new:N \l__acro_is_included_bool +\bool_new:N \l__acro_is_excluded_bool +\bool_new:N \l__acro_list_all_pages_bool +\bool_set_true:N \l__acro_list_all_pages_bool +\bool_new:N \l__acro_list_reverse_long_extra_bool +\bool_new:N \l__acro_log_acronyms_bool +\bool_new:N \l__acro_log_acronyms_verbose_bool +\bool_new:N \l__acro_mark_as_used_bool +\bool_new:N \g__acro_mark_first_as_used_bool +\bool_new:N \l__acro_override_list_format_bool +\bool_new:N \l__acro_page_brackets_bool +\bool_new:N \l__acro_page_display_bool +\bool_new:N \l__acro_page_punct_bool +\bool_new:N \l__acro_place_label_bool +\bool_new:N \l__acro_print_only_used_bool +\bool_set_true:N \l__acro_print_only_used_bool +\bool_new:N \g__acro_rerun_bool +\bool_new:N \g__acro_reset_at_barrier_bool +\bool_new:N \l__acro_silence_bool +\bool_new:N \l__acro_single_use_bool +\bool_new:N \l__acro_sort_bool +\bool_set_true:N \l__acro_sort_bool +\bool_new:N \l__acro_strict_bool +\bool_new:N \l__acro_trailing_tokens_bool +\bool_new:N \l__acro_tooltip_bool +\bool_new:N \l__acro_tooltip_inside_bool +\bool_new:N \l__acro_upper_indefinite_bool +\bool_new:N \l__acro_upper_short_bool +\bool_new:N \l__acro_use_acronyms_bool +\bool_set_true:N \l__acro_use_acronyms_bool +\bool_new:N \l__acro_use_barrier_bool +\bool_new:N \g__acro_use_barriers_bool +\bool_new:N \l__acro_use_ending_form_bool +\bool_new:N \l__acro_use_note_bool +\bool_new:N \l__acro_xspace_bool + +\str_new:N \l__acro_current_id_str + +\tl_new:N \l__acro_list_entries_tl +\tl_new:N \l__acro_endings_tl +\tl_new:N \l__acro_trailing_tokens_tl +\tl_new:N \l__acro_included_classes_tl +\tl_new:N \l__acro_excluded_classes_tl +\tl_new:N \l__acro_ignore_tl +\tl_new:N \l__acro_default_indefinite_tl +\tl_set:Nn \l__acro_default_indefinite_tl {a} +\tl_new:N \l__acro_foreign_sep_tl +\tl_new:N \l__acro_extra_instance_tl +\tl_set:Nn \l__acro_extra_instance_tl {default} +\tl_new:N \l__acro_page_instance_tl +\tl_set:Nn \l__acro_page_instance_tl {none} +\tl_new:N \l__acro_page_name_tl +\tl_new:N \l__acro_pages_name_tl +\tl_new:N \l__acro_next_page_tl +\tl_new:N \l__acro_next_pages_tl +\tl_new:N \l__acro_list_instance_tl +\tl_set:Nn \l__acro_list_instance_tl {description} +\tl_new:N \l__acro_list_type_tl +\tl_new:N \l__acro_list_heading_cmd_tl +\tl_set:Nn \l__acro_list_heading_cmd_tl {section*} +\tl_new:N \l__acro_list_name_tl +\tl_new:N \l__acro_list_before_tl +\tl_new:N \l__acro_list_after_tl +\tl_new:N \l__acro_custom_short_format_tl +\tl_new:N \l__acro_first_between_tl +\tl_new:N \l__acro_citation_connect_tl +\tl_new:N \l__acro_between_group_connect_citation_tl +\tl_new:N \l__acro_extra_brackets_tl +\tl_new:N \l__acro_extra_punct_tl +\tl_new:N \l__acro_first_brackets_tl +\tl_new:N \l__acro_page_punct_tl +\tl_new:N \l__acro_page_brackets_tl +\tl_new:N \l__acro_last_page_tl +\tl_new:N \l__acro_current_page_tl +\tl_new:N \l__acro_list_table_tl +\tl_new:N \l__acro_list_table_spec_tl +\tl_new:N \l__acro_acc_supp_tl +\tl_new:N \l__acro_acc_supp_options_tl +\tl_new:N \l__acro_label_prefix_tl +\tl_set:Nn \l__acro_label_prefix_tl {ac:} +\tl_new:N \l__acro_index_short_tl +\tl_new:N \l__acro_first_instance_tl +\tl_set:Nn \l__acro_first_instance_tl {default} +\tl_new:N \l__acro_short_tl +\tl_new:N \l__acro_short_format_tl +\tl_new:N \l__acro_list_short_format_tl +\tl_new:N \l__acro_alt_tl +\tl_new:N \l__acro_alt_format_tl +\tl_new:N \l__acro_long_tl +\tl_new:N \l__acro_long_format_tl +\tl_new:N \l__acro_list_long_format_tl +\tl_new:N \l__acro_single_form_tl +\tl_set:Nn \l__acro_single_form_tl {long} +\tl_new:N \l__acro_extra_format_tl +\tl_new:N \l__acro_foreign_format_tl +\tl_new:N \l__acro_foreign_list_format_tl +\tl_set:Nn \l__acro_foreign_list_format_tl { \acroenparen } +\tl_new:N \l__acro_index_format_tl + +\skip_new:N \l__acro_page_space_skip + +\dim_new:N \l__acro_short_width_dim +\dim_set:Nn \l__acro_short_width_dim {3em} + +\int_new:N \g__acro_barrier_int + +\seq_new:N \l__acro_endings_seq +\seq_new:N \l__acro_actions_seq +\seq_new:N \g__acro_declared_acronyms_seq + +\prop_new:N \l__acro_citation_prop +\prop_new:N \l__acro_citation_pre_prop +\prop_new:N \l__acro_citation_post_prop +\prop_new:N \l__acro_pdfstring_alt_prop +\prop_new:N \l__acro_pdfstring_short_prop +\prop_new:N \g__acro_properties_prop +\prop_new:N \l__acro_trailing_tokens_prop +\prop_new:N \l__acro_trailing_actions_prop +\prop_new:N \l__acro_list_styles_prop +\prop_new:N \l__acro_list_headings_prop +\prop_new:N \l__acro_first_styles_prop +\prop_new:N \l__acro_extra_styles_prop +\prop_new:N \l__acro_page_styles_prop + +% -------------------------------------------------------------------------- % logging: \prg_new_conditional:Npnn \acro_if_log: {p,T,F,TF} { @@ -116,9 +327,6 @@ { \prg_return_false: } } -\bool_new:N \l__acro_log_acronyms_bool -\bool_new:N \l__acro_log_acronyms_verbose_bool - \keys_define:nn {acro} { log .choice: , @@ -138,7 +346,7 @@ \cs_new:Npn \__acro_write_log:nn #1#2 { \ \ \ #1 ~ = ~ {#2} } \cs_new:Npn \__acro_write_log_property:nnn #1#2#3 - { \__acro_write_log:nn {#2} { \__acro_get_property:nn {#3} {#1} } } + { \__acro_write_log:nn {#2} { \__acro_property_get:nn {#3} {#1} } } \cs_new:Npn \__acro_ending_log_entry:nn #1#2 { @@ -159,10 +367,10 @@ | ~ \msg_info_text:n {acro}~ --~ defining~ new~ acronym: \\ | \__acro_write_log:nn {ID} {#1} \\ | \__acro_write_log_property:nnn {#1} {short} {short} \\ - | \__acro_write_log_property:nnn {#1}{long} {long} \\ - | \__acro_write_log_property:nnn {#1}{alt} {alt} \\ - | \__acro_write_log_property:nnn {#1}{sort} {sort} \\ - | \__acro_write_log_property:nnn {#1}{class} {class} \\ + | \__acro_write_log_property:nnn {#1} {long} {long} \\ + | \__acro_write_log_property:nnn {#1} {alt} {alt} \\ + | \__acro_write_log_property:nnn {#1} {sort} {sort} \\ + | \__acro_write_log_property:nnn {#1} {class} {class} \\ | \__acro_write_log_property:nnn {#1} {list} {list} \\ | \__acro_write_log_property:nnn {#1} {extra} {extra} \\ | \__acro_write_log_property:nnn {#1} {foreign} {foreign} \\ @@ -183,6 +391,8 @@ | \__acro_write_log_property:nnn {#1} {foreign-lang} {foreign_lang} \\ | \\ | \__acro_write_log_property:nnn {#1} {cite} {citation} \\ + | \__acro_write_log_property:nnn {#1} {before-citation} {before_citation} \\ + | \__acro_write_log_property:nnn {#1} {after-citation} {after_citation} \\ | \__acro_write_log_property:nnn {#1} {index} {index} \\ | \__acro_write_log_property:nnn {#1} {index-sort} {index_sort} \\ | \\ @@ -207,7 +417,6 @@ | \__acro_write_log_property:nnn {#1} {list} {list} \\ | \__acro_write_log_property:nnn {#1} {extra} {extra} \\ | \__acro_write_log_property:nnn {#1} {foreign} {foreign} \\ - | \__acro_write_log_property:nnn {#1} {pdfstring} {pdfstring} \\ | \__acro_write_log_property:nnn {#1} {cite} {citation} \\ ================================================= } @@ -274,172 +483,6 @@ } % -------------------------------------------------------------------------- -% temporary variables -\tl_new:N \l__acro_tmpa_tl -\tl_new:N \l__acro_tmpb_tl -\tl_new:N \l__acro_tmpc_tl -\prop_new:N \l__acro_tmpa_prop -\prop_new:N \l__acro_tmpb_prop -\seq_new:N \l__acro_tmpa_seq -\seq_new:N \l__acro_tmpb_seq -\int_new:N \l__acro_tmpa_int -\int_new:N \l__acro_tmpb_int -\int_new:N \l__acro_tmpc_int -\int_new:N \l__acro_tmpd_int - -% -------------------------------------------------------------------------- -% variants of kernel commands -\cs_generate_variant:Nn \quark_if_no_value:nTF { V } -\cs_generate_variant:Nn \tl_put_right:Nn { NV, Nv } -\cs_generate_variant:Nn \tl_if_eq:nnT { V } -\cs_generate_variant:Nn \tl_if_eq:nnF { V } -\cs_generate_variant:Nn \seq_use:Nnnn { c } -\cs_generate_variant:Nn \seq_gset_split:Nnn { c } -\cs_generate_variant:Nn \seq_set_split:Nnn { NnV } -\cs_generate_variant:Nn \seq_if_in:NnT { NV } -\cs_generate_variant:Nn \prop_put:Nnn { NnV, cnx, cnv } -\cs_generate_variant:Nn \prop_get:NnNTF { cnc } -\cs_generate_variant:Nn \prop_get:NnNF { cn, cnc } -\cs_generate_variant:Nn \prop_get:NnN { cnc } -\cs_generate_variant:Nn \cs_generate_variant:Nn { c } -\cs_generate_variant:Nn \str_case:nn { V } - -% -------------------------------------------------------------------------- -% variables: -\bool_new:N \l__acro_silence_bool -\bool_new:N \l__acro_mark_as_used_bool -\bool_new:N \g__acro_mark_first_as_used_bool -\bool_new:N \l__acro_use_single_bool -\bool_new:N \l__acro_print_only_used_bool -\bool_set_true:N \l__acro_print_only_used_bool -\bool_new:N \l__acro_hyperref_loaded_bool -\bool_new:N \l__acro_use_hyperref_bool -\bool_new:N \l__acro_xspace_bool -\bool_new:N \l__acro_custom_short_format_bool -\bool_new:N \l__acro_custom_alt_format_bool -\bool_new:N \l__acro_custom_long_format_bool -\bool_new:N \l__acro_override_list_format_bool -\bool_new:N \l__acro_strict_bool -\bool_new:N \l__acro_create_macros_bool -\bool_new:N \l__acro_first_upper_bool -\bool_new:N \l__acro_upper_short_bool -\bool_new:N \l__acro_indefinite_bool -\bool_new:N \l__acro_upper_indefinite_bool -\bool_new:N \l__acro_foreign_bool -\bool_set_true:N \l__acro_foreign_bool -\bool_new:N \l__acro_sort_bool -\bool_set_true:N \l__acro_sort_bool -\bool_new:N \l__acro_capitalize_list_bool -\bool_new:N \l__acro_citation_all_bool -\bool_new:N \l__acro_citation_first_bool -\bool_set_true:N \l__acro_citation_first_bool -\bool_new:N \l__acro_group_citation_bool -\bool_new:N \l__acro_acc_supp_bool -\bool_new:N \l__acro_tooltip_bool -\bool_new:N \l__acro_inside_tooltip_bool -\bool_new:N \l__acro_following_page_bool -\bool_new:N \l__acro_following_pages_bool -\bool_new:N \l__acro_addto_index_bool -\bool_new:N \l__acro_is_excluded_bool -\bool_new:N \l__acro_is_included_bool -\bool_new:N \l__acro_page_punct_bool -\bool_new:N \l__acro_page_brackets_bool -\bool_new:N \l__acro_page_display_bool -\bool_new:N \l__acro_new_page_numbering_bool -\bool_new:N \l__acro_first_use_brackets_bool -\bool_new:N \l__acro_first_only_short_bool -\bool_new:N \l__acro_first_only_long_bool -\bool_new:N \l__acro_first_reversed_bool -\bool_new:N \l__acro_first_switched_bool -\bool_new:N \l__acro_use_note_bool -\bool_new:N \l__acro_extra_punct_bool -\bool_new:N \l__acro_extra_use_brackets_bool -\bool_new:N \l__acro_in_list_bool -\bool_new:N \l__acro_place_label_bool -\bool_new:N \l__acro_list_all_pages_bool -\bool_set_true:N \l__acro_list_all_pages_bool -\bool_new:N \g__acro_first_acronym_declared_bool -\bool_new:N \l__acro_include_endings_format_bool -\bool_new:N \l__acro_list_reverse_long_extra_bool -\bool_new:N \l__acro_use_acronyms_bool -\bool_set_true:N \l__acro_use_acronyms_bool - -\tl_new:N \l__acro_ignore_tl -\tl_new:N \l__acro_default_indefinite_tl -\tl_set:Nn \l__acro_default_indefinite_tl {a} -\tl_new:N \l__acro_foreign_sep_tl -\tl_new:N \l__acro_extra_instance_tl -\tl_set:Nn \l__acro_extra_instance_tl {default} -\tl_new:N \l__acro_page_instance_tl -\tl_set:Nn \l__acro_page_instance_tl {none} -\tl_new:N \l__acro_page_name_tl -\tl_new:N \l__acro_pages_name_tl -\tl_new:N \l__acro_next_page_tl -\tl_new:N \l__acro_next_pages_tl -\tl_new:N \l__acro_list_instance_tl -\tl_set:Nn \l__acro_list_instance_tl {description} -\tl_new:N \l__acro_list_type_tl -% \tl_new:N \l__acro_list_tl -\tl_new:N \l__acro_list_heading_cmd_tl -\tl_set:Nn \l__acro_list_heading_cmd_tl {section*} -\tl_new:N \l__acro_list_name_tl -\tl_new:N \l__acro_list_before_tl -\tl_new:N \l__acro_list_after_tl -\tl_new:N \l__acro_custom_short_format_tl -\tl_new:N \l__acro_first_between_tl -\tl_new:N \l__acro_citation_connect_tl -\tl_new:N \l__acro_between_group_connect_citation_tl -\tl_new:N \l__acro_extra_brackets_tl -\tl_new:N \l__acro_extra_punct_tl -\tl_new:N \l__acro_first_brackets_tl -\tl_new:N \l__acro_page_punct_tl -\tl_new:N \l__acro_page_brackets_tl -\tl_new:N \l__acro_last_page_tl -\tl_new:N \l__acro_current_page_tl -\tl_new:N \l__acro_list_table_tl -\tl_new:N \l__acro_list_table_spec_tl -\tl_new:N \l__acro_acc_supp_tl -\tl_new:N \l__acro_acc_supp_options_tl -\tl_new:N \l__acro_label_prefix_tl -\tl_set:Nn \l__acro_label_prefix_tl { ac: } -\tl_new:N \l__acro_index_short_tl -\tl_new:N \l__acro_first_instance_tl -\tl_set:Nn \l__acro_first_instance_tl {default} - -\tl_new:N \l__acro_short_tl -\tl_new:N \l__acro_short_format_tl -\tl_new:N \l__acro_list_short_format_tl - -\tl_new:N \l__acro_alt_tl -\tl_new:N \l__acro_alt_format_tl - -\tl_new:N \l__acro_long_tl -\tl_new:N \l__acro_list_long_format_tl - -\tl_new:N \l__acro_single_form_tl -\tl_set:Nn \l__acro_single_form_tl {long} - -\tl_new:N \l__acro_extra_format_tl - -\tl_new:N \l__acro_foreign_format_tl -\tl_new:N \l__acro_foreign_list_format_tl -\tl_set:Nn \l__acro_foreign_list_format_tl { \acroenparen } - -\tl_new:N \l__acro_index_format_tl - - -\skip_new:N \l__acro_page_space_skip - -\dim_new:N \l__acro_short_width_dim -\dim_set:Nn \l__acro_short_width_dim {3em} - -\prop_new:N \l__acro_list_styles_prop -\prop_new:N \l__acro_list_headings_prop -\prop_new:N \l__acro_first_styles_prop -\prop_new:N \l__acro_extra_styles_prop -\prop_new:N \l__acro_page_styles_prop - -% -------------------------------------------------------------------------- % small commands for use at various places \cs_new:Npn \acro_no_break: { \tex_penalty:D 10000 \scan_stop: } @@ -450,10 +493,13 @@ \cs_new_eq:NN \acro_first_upper_case:n \__acro_first_upper_case:n -\NewDocumentCommand \acfirstupper {m} - { \acro_first_upper_case:n {#1} } - % -------------------------------------------------------------------------- +\tl_new:N \l_acro_config_file_name_tl +\tl_new:N \l_acro_config_file_extension_tl + +\tl_set:Nn \l_acro_config_file_name_tl {acro} +\tl_set:Nn \l_acro_config_file_extension_tl {cfg} + % options: \keys_define:nn {acro} { @@ -463,6 +509,10 @@ messages / loud .code:n = \bool_set_false:N \l__acro_silence_bool , messages .value_required:n = true , + config-file-name .tl_set:N = \l_acro_config_file_name_tl , + config-file-name .initial:n = acro , + config-file-extension .tl_set:N = \l_acro_config_file_extension_tl , + config-file-extension .initial:n = cfg , accsupp .bool_set:N = \l__acro_acc_supp_bool , accsupp-options .tl_set:N = \l__acro_acc_supp_options_tl , tooltip .bool_set:N = \l__acro_tooltip_bool , @@ -472,6 +522,8 @@ xspace .bool_set:N = \l__acro_xspace_bool , % xspace .code:n = \acro_option_deprecated:nn {xspace} {} , strict .bool_set:N = \l__acro_strict_bool , + case-sensitive .bool_set:N = \g__acro_case_sensitive_bool , + case-sensitive .initial:n = true , sort .bool_set:N = \l__acro_sort_bool , short-format .code:n = \tl_set:Nn \l__acro_short_format_tl {#1} @@ -506,7 +558,7 @@ override-list-format .initial:n = true , extra-format .tl_set:N = \l__acro_extra_format_tl , extra-format .value_required:n = true , - single .bool_set:N = \l__acro_use_single_bool , + single .bool_set:N = \l__acro_single_use_bool , single-form .tl_set:N = \l__acro_single_form_tl , single-form .value_required:n = true , first-style .code:n = \acro_set_first_style:n {#1} , @@ -547,7 +599,7 @@ list-heading .value_required:n = true , list-name .tl_set:N = \l__acro_list_name_tl , list-name .value_required:n = true , - hyperref .bool_set:N = \l__acro_use_hyperref_bool , + hyperref .bool_set:N = \l__acro_hyperref_use_bool , only-used .bool_set:N = \l__acro_print_only_used_bool , mark-as-used .choice: , mark-as-used / first .code:n = @@ -604,11 +656,6 @@ } % -------------------------------------------------------------------------- -% setup command: -\NewDocumentCommand \acsetup { m } - { \keys_set:nn {acro} {#1} \ignorespaces } - -% -------------------------------------------------------------------------- % we use xtemplate for different object types and with a different number of % arguments; let's declare functions for usage later so we don't have to % bother @@ -633,7 +680,7 @@ \cs_new_protected:Npn \acro_first_instance:nn #1#2 { - \acro_if_property:nnTF {#1} {first-style} + \acro_property_if_set:nnTF {#1} {first-style} { \tl_set_eq:NN \l__acro_tmpa_tl @@ -663,7 +710,9 @@ \cs_new_protected:Npn \acro_activate_hyperref_support: { - \bool_if:nT { \l__acro_hyperref_loaded_bool && \l__acro_use_hyperref_bool } + \bool_lazy_and:nnT + { \l__acro_hyperref_loaded_bool } + { \l__acro_hyperref_use_bool } { \sys_if_engine_xetex:TF { @@ -680,8 +729,9 @@ % #2: text \cs_new_protected:Npn \__acro_make_link:nn #1#2 { - \bool_if:nTF - { \l__acro_use_hyperref_bool && \l__acro_hyperref_loaded_bool } + \bool_lazy_and:nnTF + { \l__acro_hyperref_use_bool } + { \l__acro_hyperref_loaded_bool } { \acro_hyper_link:nn {#1} { \phantom {#2} } \acro_if_is_single:nTF {#1} @@ -690,7 +740,6 @@ } {#2} } -\cs_generate_variant:Nn \__acro_make_link:Nnn {NnV} \cs_new:Npn \acro_color_link:n #1 { @@ -730,22 +779,18 @@ \str_case:nn {#1} { {long} { - \bool_if:nT - { - \l__acro_first_only_long_bool || - !\l__acro_first_only_short_bool - } + \bool_lazy_or:nnT + { \l__acro_first_only_long_bool } + { !\l__acro_first_only_short_bool } { \acro_write_indefinite:nn {#2} {long} \acro_write_expanded:nnn {#2} {first-long} {#3} } } {short} { - \bool_if:nT - { - !\l__acro_first_only_long_bool || - \l__acro_first_only_short_bool - } + \bool_lazy_or:nnT + { !\l__acro_first_only_long_bool } + { \l__acro_first_only_short_bool } { \acro_soft_upper: \acro_write_indefinite:nn {#2} {short} @@ -758,11 +803,9 @@ \cs_new_protected:Npn \__acro_open_bracket: { - \bool_if:nT - { - !\l__acro_first_only_long_bool && - !\l__acro_first_only_short_bool - } + \bool_lazy_and:nnT + { !\l__acro_first_only_long_bool } + { !\l__acro_first_only_short_bool } { \acro_space: \tl_if_blank:VF \l__acro_first_between_tl @@ -777,11 +820,11 @@ \cs_new_protected:Npn \__acro_close_bracket: { - \bool_if:nT + \bool_lazy_all:nT { - \l__acro_first_use_brackets_bool && - !\l__acro_first_only_short_bool && - !\l__acro_first_only_long_bool + { \l__acro_first_use_brackets_bool } + { !\l__acro_first_only_short_bool } + { !\l__acro_first_only_long_bool } } { \tl_tail:N \l__acro_first_brackets_tl } } @@ -794,11 +837,9 @@ \str_case:nn {#1} { {long} { - \bool_if:nT - { - \l__acro_first_only_long_bool || - !\l__acro_first_only_short_bool - } + \bool_lazy_or:nnT + { \l__acro_first_only_long_bool } + { !\l__acro_first_only_short_bool } { \group_begin: \bool_set_false:N \l__acro_first_upper_bool @@ -807,11 +848,9 @@ } } {short} { - \bool_if:nT - { - !\l__acro_first_only_long_bool || - \l__acro_first_only_short_bool - } + \bool_lazy_or:nnT + { !\l__acro_first_only_long_bool } + { \l__acro_first_only_short_bool } { \group_begin: \bool_set_false:N \l__acro_first_upper_bool @@ -825,11 +864,11 @@ % #1: id \cs_new_protected:Npn \__acro_foreign_sep:n #1 { - \bool_if:nT + \bool_lazy_all:nT { - \l__acro_foreign_bool && - !\l__acro_first_only_short_bool && - !\l__acro_first_only_long_bool + { \l__acro_foreign_bool } + { !\l__acro_first_only_short_bool } + { !\l__acro_first_only_long_bool } } { \acro_if_foreign:nT {#1} { \tl_use:N \l__acro_foreign_sep_tl } } } @@ -839,11 +878,11 @@ { \acro_if_foreign:nT {#1} { - \bool_if:nT + \bool_lazy_all:nT { - \l__acro_foreign_bool && - !\l__acro_first_only_short_bool && - !\l__acro_first_only_long_bool + { \l__acro_foreign_bool } + { !\l__acro_first_only_short_bool } + { !\l__acro_first_only_long_bool } } { \acro_write_foreign:n {#1} @@ -861,9 +900,9 @@ \cs_new_protected:Npn \__acro_finalize_first:n #1 { \bool_if:NF \l__acro_group_citation_bool - { \acro_cite_if:nn { \l__acro_citation_first_bool } {#1} } - \acro_index_if:nn { \l__acro_addto_index_bool } {#1} - \acro_get_property:nnT {#1} {post} + { \acro_cite_if:Nn \l__acro_citation_first_bool {#1} } + \acro_index_if:Nn \l__acro_addto_index_bool {#1} + \acro_property_get:nnT {#1} {post} { \tl_use:N \l__acro_post_tl } } @@ -919,11 +958,6 @@ \__acro_finalize_first:n {#1} } } - -\bool_new:N \l__acro_first_instance_bool - -\NewExpandableDocumentCommand \aciffirst {+m+m} - { \bool_if:NTF \l__acro_first_instance_bool {#1} {#2} } % template for footnotes, sidenotes, ... \cs_new:Npn \__acro_note_command:n #1 {#1} @@ -983,12 +1017,6 @@ \prop_put:Nnn \l__acro_first_styles_prop {#1} {#2} } -% #1: name -% #2: template -% #3: settings -\NewDocumentCommand \DeclareAcroFirstStyle {mmm} - { \acro_declare_first_style:nnn {#1} {#2} {#3} } - % set a list style \cs_new_protected:Npn \acro_set_first_style:n #1 { @@ -1046,12 +1074,6 @@ \prop_put:Nnn \l__acro_etxra_styles_prop {#1} {#2} } -% #1: name -% #2: template -% #3: settings -\NewDocumentCommand \DeclareAcroExtraStyle {mmm} - { \acro_declare_extra_style:nnn {#1} {#2} {#3} } - % set an extra style \cs_new_protected:Npn \acro_set_extra_style:n #1 { @@ -1191,13 +1213,14 @@ { \acro_get_abspage_from:N \l__acro_last_page_tl } \int_set:Nn \l__acro_tmpd_int { \acro_get_page_number_from:N \l__acro_last_page_tl } - \bool_if:nTF + \bool_lazy_and:nnTF { \int_compare_p:nNn { \l__acro_tmpa_int - \l__acro_tmpc_int } = { \l__acro_tmpb_int - \l__acro_tmpd_int } - && + } + { \int_compare_p:nNn { \l__acro_tmpb_int - \l__acro_tmpd_int } = {1} } @@ -1243,7 +1266,7 @@ \seq_put_right:Nn #1 {#3} } } -\cs_generate_variant:Nn \acro_determine_page_ranges:NNn { NNV } +\cs_generate_variant:Nn \acro_determine_page_ranges:NNn {NNV} % -------------------------------------------------------------------------- \DeclareObjectType {acro-page-number} {1} @@ -1291,12 +1314,6 @@ \prop_put:Nnn \l__acro_page_styles_prop {#1} {#2} } -% #1: name -% #2: template -% #3: settings -\NewDocumentCommand \DeclareAcroPageStyle {mmm} - { \acro_declare_page_style:nnn {#1} {#2} {#3} } - % set a page style \cs_new_protected:Npn \acro_set_page_style:n #1 { @@ -1348,12 +1365,7 @@ } \cs_new_protected:Npn \__acro_set_list_heading:n #1 - { - \tl_set:Nn \l__acro_list_heading_cmd_tl {#1} - % \prop_get:NnN \l__acro_list_headings_prop - % {#1} - % \l__acro_list_heading_cmd_tl - } + { \tl_set:Nn \l__acro_list_heading_cmd_tl {#1} } \cs_new_protected:Npn \acro_declare_list_heading:nn #1#2 { @@ -1362,9 +1374,6 @@ { name-format = #2 {##1} } } -\NewDocumentCommand \DeclareAcroListHeading {mm} - { \acro_declare_list_heading:nn {#1} {#2} } - % -------------------------------------------------------------------------- % typesetting the acronym list \DeclareObjectType {acro-list} {2} @@ -1376,11 +1385,11 @@ \bool_set_false:N \l__acro_is_excluded_bool \tl_if_blank:nF {#2} { - \clist_map_inline:nn {#2} + \acro_property_get:nnT {#1} {class} { - \prop_get:NnNT \l__acro_class_prop {#1} \l__acro_tmpa_tl + \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_class_tl + \clist_map_inline:nn {#2} { - \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_tmpa_tl \seq_if_in:NnT \l__acro_tmpa_seq {##1} { \bool_set_true:N \l__acro_is_excluded_bool } } @@ -1399,11 +1408,11 @@ \tl_if_blank:nTF {#2} { \bool_set_true:N \l__acro_is_included_bool } { - \clist_map_inline:nn {#2} + \acro_property_get:nnT {#1} {class} { - \prop_get:NnNT \l__acro_class_prop {#1} \l__acro_tmpa_tl + \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_class_tl + \clist_map_inline:nn {#2} { - \seq_set_split:NnV \l__acro_tmpa_seq {,} \l__acro_tmpa_tl \seq_if_in:NnT \l__acro_tmpa_seq {##1} { \bool_set_true:N \l__acro_is_included_bool } } @@ -1425,14 +1434,12 @@ \acro_acc_supp:nn {#1} { - \bool_if:nTF - { - \l__acro_custom_short_format_bool && - \l__acro_override_list_format_bool - } + \bool_lazy_and:nnTF + { \l__acro_custom_short_format_bool } + { \l__acro_override_list_format_bool } { \l__acro_custom_short_format_tl } { \l__acro_list_short_format_tl } - { \__acro_get_property:nn {short} {#1} } + { \__acro_property_get:nn {short} {#1} } } } \group_end: @@ -1447,30 +1454,30 @@ \acro_write_long:Vf \l__acro_list_long_format_tl { \prop_if_in:NnTF \l__acro_list_prop {#1} - { \__acro_get_property:nn {list} {#1} } - { \__acro_get_property:nn {long} {#1} } + { \__acro_property_get:nn {list} {#1} } + { \__acro_property_get:nn {long} {#1} } } \group_end: \bool_if:NT \l__acro_foreign_bool { \acro_get_foreign:n {#1} } - \acro_cite_if:nn { \l__acro_citation_all_bool } {#1} + \acro_cite_if:Nn \l__acro_citation_all_bool {#1} } % #1: id \cs_new_protected:Npn \__acro_list_entry_extra:n #1 { - \prop_get:NnNT \l__acro_extra_prop {#1} \l__acro_tmpa_tl + \acro_property_get:nnT {#1} {extra} { \acro_extra_instance:VV \l__acro_extra_instance_tl - \l__acro_tmpa_tl + \l__acro_extra_tl } } % #1: id \cs_new_protected:Npn \__acro_list_entry_page:n #1 { - \bool_if:nT { \cs_if_exist_p:c { acro@#1@once } } + \cs_if_exist:cT {acro@#1@once} { \acro_page_number_instance:Vn \l__acro_page_instance_tl @@ -1490,7 +1497,7 @@ {extra} { \__acro_list_entry_extra:n {#2} } {page} { \__acro_list_entry_page:n {#2} } } - { \__acro_get_property:nn {#1} {#2} } + { \__acro_property_get:nn {#1} {#2} } } % this macro may/should be redefined in templates: @@ -1513,20 +1520,31 @@ % #3: excluded classes \prg_new_protected_conditional:Npnn \acro_if_entry:nnn #1#2#3 {T,F,TF} { - \bool_if:nTF + \bool_lazy_or:nnTF + { + \bool_lazy_and_p:nn + { !\l__acro_single_use_bool } + { !\l__acro_print_only_used_bool } + } { - \bool_if_p:c { g__acro_#1_in_list_bool } && - ( - ( \l__acro_use_single_bool && \cs_if_exist_p:c { acro@#1@twice } ) - || - ( - !\l__acro_use_single_bool && - \cs_if_exist_p:c { acro@#1@once } && - \l__acro_print_only_used_bool - ) - ) - || - ( !\l__acro_use_single_bool && !\l__acro_print_only_used_bool ) + \bool_lazy_and_p:nn + { \bool_if_p:c {g__acro_#1_in_list_bool} } + { + \bool_lazy_or_p:nn + { + \bool_lazy_and_p:nn + { \l__acro_single_use_bool } + { \cs_if_exist_p:c {acro@#1@twice} } + } + { + \bool_lazy_all_p:n + { + { !\l__acro_single_use_bool } + { \cs_if_exist_p:c {acro@#1@once} } + { \l__acro_print_only_used_bool } + } + } + } } { \acro_if_is_excluded:nnTF {#1} {#3} @@ -1534,8 +1552,9 @@ { \acro_if_is_included:nnTF {#1} {#2} { - \bool_if:nTF - { \g__acro_use_barriers_bool && \l__acro_use_barrier_bool } + \bool_lazy_and:nnTF + { \g__acro_use_barriers_bool } + { \l__acro_use_barrier_bool } { \acro_if_in_barrier:nxTF {#1} { \int_use:N \g__acro_barrier_int } @@ -1550,8 +1569,6 @@ { \prg_return_false: } } -\tl_new:N \l__acro_list_entries_tl - % this macro is used in templates for fetching all items to be printed; it % collects all entries in a tl which then is used where needed % @@ -1815,12 +1832,6 @@ \prop_put:Nnn \l__acro_list_styles_prop {#1} {#2} } -% #1: name -% #2: template -% #3: settings -\NewDocumentCommand \DeclareAcroListStyle {mmm} - { \acro_declare_list_style:nnn {#1} {#2} {#3} } - % set a list style \cs_new_protected:Npn \acro_set_list_style:n #1 { @@ -1842,6 +1853,28 @@ } % -------------------------------------------------------------------------- +% case insensitivity of the ID: +\cs_new:Npn \acro_case_insensitive:n #1 + { + \bool_if:NTF \g__acro_case_sensitive_bool + { \tl_to_str:n {#1} } + { \str_lower_case:n {#1} } + } + +\cs_new_protected:Npn \acro_protected_case_insensitive:n #1 + { \acro_case_insensitive:n {#1} } + +\cs_new:Npn \acro_case_insensitive:Nn #1#2 + { \exp_args:Ne #1 { \acro_case_insensitive:n {#2} } } + +\cs_new:Npn \acro_case_insensitive:Nnn #1#2#3 + { \exp_args:Ne #1 { \acro_case_insensitive:n {#2} } {#3} } + +\cs_new_protected:Npn \acro_case_insensitive_command:Nnnn #1#2#3#4 + { \exp_args:Nnnx #1 {#2} {#3} { \acro_case_insensitive:n {#4} } } +\cs_generate_variant:Nn \acro_case_insensitive_command:Nnnn {c} + +% -------------------------------------------------------------------------- % automatic typesetting, the internals of \ac: % #1: id @@ -1879,7 +1912,7 @@ \acro_single_form:nV {#1} \l__acro_single_form_tl \acro_after:n {#1} } - + % #1: ID % #2: long|first|<other> \cs_new_protected:Npn \acro_single_form:nn #1#2 @@ -1935,8 +1968,9 @@ \prg_new_conditional:Npnn \acro_if_is_single:n #1 { p,T,TF } { - \bool_if:nTF - { !\l__acro_use_single_bool || \cs_if_exist_p:c { acro@#1@twice } } + \bool_lazy_or:nnTF + { !\l__acro_single_use_bool } + { \cs_if_exist_p:c {acro@#1@twice} } { \prg_return_false: } { \prg_return_true: } } @@ -1946,11 +1980,10 @@ % -------------------------------------------------------------------------- % some helpers we'll need more often: -\seq_new:N \g__acro_declared_acronyms_seq - \prg_new_conditional:Npnn \acro_if_defined:n #1 {p,T,F,TF} { - \seq_if_in:NnTF \g__acro_declared_acronyms_seq {#1} + \seq_if_in:NeTF \g__acro_declared_acronyms_seq + { \acro_case_insensitive:n {#1} } { \prg_return_true: } { \prg_return_false: } } @@ -1965,14 +1998,14 @@ % name is needed % #1: property % #2: id -\cs_new:Npn \__acro_get_property:nn #1#2 +\cs_new:Npn \__acro_property_get:nn #1#2 { \prop_item:cn {l__acro_#1_prop} {#2} } % #1: id % #2: property % #3: set case % #4: not set case -\prg_new_protected_conditional:Npnn \acro_get_property:nn #1#2 {T,F,TF} +\prg_new_protected_conditional:Npnn \acro_property_get:nn #1#2 {T,F,TF} { \tl_set:Nn \l__acro_tmpa_tl {#2} \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_} @@ -1984,32 +2017,14 @@ { \prg_return_false: } } -\cs_new_protected:Npn \acro_get_property:nn #1#2 - { \acro_get_property:nnTF {#1} {#2} {} {} } -\cs_generate_variant:Nn \acro_get_property:nn {V} - -% #1: id -% #2: property -% #3: set case -% #4: not set case -\prg_new_protected_conditional:Npnn \acro_if_property:nn #1#2 {T,F,TF} - { - \tl_set:Nn \l__acro_tmpa_tl {#2} - \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_} - \prop_if_in:cnTF - {l__acro_ \l__acro_tmpa_tl _prop} - {#1} - { \prg_return_true: } - { \prg_return_false: } - } - -\seq_new:N \l__acro_actions_seq +\cs_new_protected:Npn \acro_property_get:nn #1#2 + { \acro_property_get:nnTF {#1} {#2} {} {} } +\cs_generate_variant:Nn \acro_property_get:nn {V} % within this command one can refer to the current id with `#1' \cs_new_protected:Npn \acro_add_action:n #1 { \seq_put_right:Nn \l__acro_actions_seq {#1} } -\tl_new:N \l_acro_current_id_tl \cs_new_protected:Npn \__acro_get_actions:n #1 { \seq_map_inline:Nn \l__acro_actions_seq @@ -2024,52 +2039,57 @@ \bool_if:NF \l__acro_in_list_bool { \leavevmode } \acro_activate_hyperref_support: % short: - \prop_get:NnNF \l__acro_short_prop {#1} \l__acro_short_tl {} - % \__acro_make_link:NnV \l__acro_short_tl {#1} \l__acro_tmpa_tl + \acro_property_get:nn {#1} {short} % alt: - \prop_get:NnNF \l__acro_alt_prop {#1} \l__acro_alt_tl - % { \__acro_make_link:NnV \l__acro_alt_tl {#1} \l__acro_tmpa_tl } + \acro_property_get:nnF {#1} {alt} { \tl_set_eq:NN \l__acro_alt_tl \l__acro_short_tl } % long: - \acro_get_property:nn {#1} {long} + \acro_property_get:nn {#1} {long} % foreign: - \acro_get_property:nn {#1} {foreign} + \acro_property_get:nn {#1} {foreign} % foreign-lang: - \acro_get_property:nn {#1} {foreign-lang} + \acro_property_get:nn {#1} {foreign-lang} % extra: - \acro_get_property:nn {#1} {extra} + \acro_property_get:nn {#1} {extra} % single: - \acro_get_property:nn {#1} {single} + \acro_property_get:nn {#1} {single} % first-style: - \acro_get_property:nn {#1} {first-style} + \acro_property_get:nn {#1} {first-style} % formatting - \prop_get:NnNTF \l__acro_long_format_prop {#1} - \l__acro_custom_long_format_tl - { \bool_set_true:N \l__acro_custom_long_format_bool } + \acro_property_get:nnTF {#1} {long-format} + { + \tl_set_eq:NN \l__acro_custom_long_format_tl \l__acro_long_format_tl + \bool_set_true:N \l__acro_custom_long_format_bool + } { \bool_set_false:N \l__acro_custom_long_format_bool } - \acro_get_property:nn {#1} {first-long-format} - \prop_get:NnNTF \l__acro_format_prop {#1} \l__acro_custom_short_format_tl - { \bool_set_true:N \l__acro_custom_short_format_bool } + \acro_property_get:nn {#1} {first-long-format} + \acro_property_get:nnTF {#1} {format} + { + \tl_set_eq:NN \l__acro_custom_short_format_tl \l__acro_format_tl + \bool_set_true:N \l__acro_custom_short_format_bool + } { \bool_set_false:N \l__acro_custom_short_format_bool } - \prop_get:NnNTF \l__acro_alt_format_prop {#1} \l__acro_custom_alt_format_tl - { \bool_set_true:N \l__acro_custom_alt_format_bool } + \acro_property_get:nnTF {#1} {alt-format} + { + \tl_set_eq:NN \l__acro_custom_alt_format_tl \l__acro_alt_format_tl + \bool_set_true:N \l__acro_custom_alt_format_bool + } { \bool_set_false:N \l__acro_custom_alt_format_bool } - \acro_get_property:nn {#1} {single-format} + \acro_property_get:nn {#1} {single-format} \acro_for_endings_do:n { \bool_if:cT {l__acro_##1_bool} { \__acro_set_ending_for:nnn {##1} {#1} {long} } } - \acro_get_property:nnF {#1} {long-post} + \acro_property_get:nnF {#1} {long-post} { \tl_clear:N \l__acro_long_post_tl } - \acro_get_property:nnT {#1} {long-pre} + \acro_property_get:nnT {#1} {long-pre} { \tl_put_left:NV \l__acro_long_tl \l__acro_long_pre_tl } \__acro_get_actions:n {#1} } % -------------------------------------------------------------------------- % plural endings and similar concepts: -\seq_new:N \l__acro_endings_seq \cs_new_protected:Npn \acro_for_endings_do:n #1 { \seq_map_inline:Nn \l__acro_endings_seq {#1} } @@ -2087,10 +2107,6 @@ } } -\tl_new:N \l__acro_endings_tl - -\bool_new:N \l__acro_use_ending_form_bool - % this does nothing if a non-existent ending (#1) or non-existent form (#3) is % input % #1: ending @@ -2121,12 +2137,9 @@ { \acro_if_ending_form_exist:nnT {##1} {#2} { - \bool_if:nT - { - \use:c { c_ \prop_item:cn {l__acro_#2_##1_form_prop} {#1} _bool } - && - \use:c {l__acro_##1_bool} - } + \bool_lazy_and:nnT + { \use:c {l__acro_##1_bool} } + { \use:c { c_ \prop_item:cn {l__acro_#2_##1_form_prop} {#1} _bool } } { \prop_get:cncF {l__acro_#2_##1_prop} {#1} {l__acro_#2_tl} {} } } } @@ -2389,26 +2402,22 @@ } } -\NewDocumentCommand \ProvideAcroEnding {mmm} - { \acro_provide_ending:nnn {#1} {#2} {#3} } - % -------------------------------------------------------------------------- % enable us to know if the acronym is used only once and provide a different % style for that: \prg_new_protected_conditional:Npnn \acro_is_used:n #1 { T,F,TF } { \acro_record_barrier:n {#1} - \bool_if:nTF + \bool_lazy_and:nnTF + { \bool_if_p:c {g__acro_#1_used_bool} } { - \bool_if_p:c { g__acro_#1_used_bool } && - ( - ( - \bool_if_p:c { g__acro_#1_first_use_bool } && - \g__acro_mark_first_as_used_bool - ) - || - ! \g__acro_mark_first_as_used_bool - ) + \bool_lazy_or_p:nn + { + \bool_lazy_and_p:nn + { \bool_if_p:c {g__acro_#1_first_use_bool} } + { \g__acro_mark_first_as_used_bool } + } + { !\g__acro_mark_first_as_used_bool } } { \bool_if:NTF \l__acro_mark_as_used_bool @@ -2430,11 +2439,9 @@ { \thepage } { \arabic {page} } { \arabic {abspage} } - \bool_if:nT - { - !\bool_if_p:c { g__acro_#1_label_bool } && - \l__acro_place_label_bool - } + \bool_lazy_and:nnT + { !\bool_if_p:c {g__acro_#1_label_bool} } + { \l__acro_place_label_bool } { \bool_gset_true:c { g__acro_#1_label_bool } \label{\l__acro_label_prefix_tl #1} @@ -2454,11 +2461,11 @@ \cs_new_protected:Npn \__acro_aux_file:Nnnnn #1#2#3#4#5 { \iow_shipout:Nn \@auxout { #1 {#2} {#3} {#4} {#5} } } -\cs_generate_variant:Nn \__acro_aux_file:Nnnnn { Nxxxx } +\cs_generate_variant:Nn \__acro_aux_file:Nnnnn {Nxxxx} \cs_new_protected:Npn \__acro_aux_file_now:n #1 { \iow_now:Nn \@auxout {#1} } -\cs_generate_variant:Nn \__acro_aux_file_now:n { x } +\cs_generate_variant:Nn \__acro_aux_file_now:n {x} % -------------------------------------------------------------------------- % the commands for the auxiliary file: @@ -2482,8 +2489,6 @@ \cs_new_protected:Npn \acro@pages #1#2 { \tl_gset:cn {g__acro_#1_recorded_pages_tl} {#2} } -\bool_new:N \g__acro_rerun_bool - \cs_new_protected:Npn \acro@rerun@check { \bool_if:NT \g__acro_rerun_bool @@ -2567,14 +2572,13 @@ { \__acro_typeset:nn {short} { - \bool_if:nTF - { \l__acro_first_upper_bool } + \bool_if:NTF \l__acro_first_upper_bool { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } } { \exp_not:n {#2} } } } } -\cs_generate_variant:Nn \acro_write_short:nn { nV , nv } +\cs_generate_variant:Nn \acro_write_short:nn {nV,nv} % typeset the alternative form: % #1: ID @@ -2585,14 +2589,15 @@ { \__acro_typeset:nn {alt} { - \bool_if:nTF - { \l__acro_first_upper_bool && \l__acro_upper_short_bool } + \bool_lazy_and:nnTF + { \l__acro_first_upper_bool } + { \l__acro_upper_short_bool } { \exp_not:N \__acro_first_upper_case:n { \exp_not:n {#2} } } { \exp_not:n {#2} } } } } -\cs_generate_variant:Nn \acro_write_alt:nn { nV , nv } +\cs_generate_variant:Nn \acro_write_alt:nn {nV,nv} % typeset a long form: % TODO: rethink the formatting mechanism @@ -2612,16 +2617,13 @@ } } } -\cs_generate_variant:Nn \acro_write_long:nn { VV,Vo,Vf,V,v,vv } +\cs_generate_variant:Nn \acro_write_long:nn {VV,Vo,Vf,V,v,vv} \prg_new_conditional:Npnn \acro_if_foreign:n #1 {T,F,TF} { - \bool_if:nTF - { - \l__acro_foreign_bool - && - \prop_if_in_p:Nn \l__acro_foreign_prop {#1} - } + \bool_lazy_and:nnTF + { \l__acro_foreign_bool } + { \prop_if_in_p:Nn \l__acro_foreign_prop {#1} } { \prg_return_true: } { \prg_return_false: } } @@ -2648,7 +2650,7 @@ { \acro_if_foreign:nT {#1} { - \prop_get:NnNT \l__acro_foreign_prop {#1} \l__acro_foreign_tl + \acro_property_get:nnT {#1} {foreign} { \group_begin: \tl_use:N \l__acro_foreign_format_tl @@ -2666,10 +2668,9 @@ \cs_new_protected:Npn \acro_get_foreign:n #1 { - \prop_if_in:NnT \l__acro_foreign_prop {#1} + \acro_property_get:nnT {#1} {foreign} { \tl_use:N \l__acro_foreign_sep_tl - \prop_get:NnN \l__acro_foreign_prop {#1} \l__acro_foreign_tl \group_begin: \tl_use:N \l__acro_foreign_list_format_tl { @@ -2713,7 +2714,7 @@ \tl_if_in:nnT {#2} {long} { \l__acro_long_post_tl } } -\cs_generate_variant:Nn \acro_write_expanded:nnn { nnV } +\cs_generate_variant:Nn \acro_write_expanded:nnn {nnV} % #1: ID % #2: long|first-long|list-long|extra @@ -2732,9 +2733,9 @@ % #1: id \cs_new_protected:Npn \acro_after:n #1 { - \acro_cite_if:nn { \l__acro_citation_all_bool } {#1} - \acro_index_if:nn { \l__acro_addto_index_bool } {#1} - \acro_get_property:nnT {#1} {post} + \acro_cite_if:Nn \l__acro_citation_all_bool {#1} + \acro_index_if:Nn \l__acro_addto_index_bool {#1} + \acro_property_get:nnT {#1} {post} { \tl_use:N \l__acro_post_tl } } @@ -2833,8 +2834,8 @@ % ---------------------------------------------------------------------------- % citations: -\cs_new:Npn \__acro_citation_cmd:w { \cite } %{} -\cs_new:Npn \__acro_group_citation_cmd:w { \cite } %{} +\cs_new:Npn \__acro_citation_cmd:w { \cite } +\cs_new:Npn \__acro_group_citation_cmd:w { \cite } % #1 pre % #2 post @@ -2845,14 +2846,16 @@ { \__acro_citation_cmd:w {#3} } { \quark_if_no_value:nTF {#2} - { \__acro_citation_cmd:w [ #1 ] {#3} } - { \__acro_citation_cmd:w [ #1 ] [ #2 ] {#3} } + { \__acro_citation_cmd:w [#1] {#3} } + { \__acro_citation_cmd:w [#1] [#2] {#3} } } } -\cs_generate_variant:Nn \__acro_cite:nnn { VVV } +\cs_generate_variant:Nn \__acro_cite:nnn {VVV} \cs_new_protected:Npn \acro_cite:n #1 { + \acro_property_get:nnT {#1} {before-citation} + { \acro_no_break: \l__acro_before_citation_tl } \prop_get:NnNT \l__acro_citation_prop {#1} \l__acro_tmpa_tl { \prop_get:NnN \l__acro_citation_pre_prop {#1} \l__acro_tmpb_tl @@ -2864,6 +2867,8 @@ \l__acro_tmpc_tl \l__acro_tmpa_tl } + \acro_property_get:nnT {#1} {after-citation} + { \acro_no_break: \l__acro_after_citation_tl } } \cs_new_protected:Npn \acro_group_cite:n #1 @@ -2873,18 +2878,18 @@ \tl_set_eq:NN \l__acro_citation_connect_tl \l__acro_between_group_connect_citation_tl - \acro_cite_if:nn { \l__acro_citation_first_bool } {#1} + \acro_cite_if:Nn \l__acro_citation_first_bool {#1} \group_end: } -\cs_new_protected:Npn \acro_cite_if:nn #1#2 - { \bool_if:nT {#1} { \acro_cite:n {#2} } } +\cs_new_protected:Npn \acro_cite_if:Nn #1#2 + { \bool_if:NT #1 { \acro_cite:n {#2} } } % ---------------------------------------------------------------------------- % indexing: -\cs_new_protected:Npn \acro_index_if:nn #1#2 +\cs_new_protected:Npn \acro_index_if:Nn #1#2 { - \bool_if:nT { (#1) && \l__acro_mark_as_used_bool } + \bool_lazy_and:nnT {#1} { \l__acro_mark_as_used_bool } { \prop_get:NnN \l__acro_index_cmd_prop {#2} \l__acro_tmpa_tl \prop_get:NnN \l__acro_index_sort_prop {#2} \l__acro_tmpb_tl @@ -2920,7 +2925,7 @@ } { \__acro_index_cmd:n {#4} } } -\cs_generate_variant:Nn \__acro_index:nnnn { VnVV } +\cs_generate_variant:Nn \__acro_index:nnnn {VnVV} % ---------------------------------------------------------------------------- % accessability support @@ -2951,7 +2956,7 @@ #3 \EndAccSupp { } } -\cs_generate_variant:Nn \acro_do_acc_supp:nnn { VV } +\cs_generate_variant:Nn \acro_do_acc_supp:nnn {VV} \AtEndPreamble { @@ -2976,20 +2981,20 @@ % #3: tool tip text \cs_new_protected:Npn \acro_write_tooltip:nnn #1#2#3 { - \prop_get:NnNTF \l__acro_tooltip_prop {#1} \l__acro_tmpa_tl - { \__acro_check_tooltip:nV {#2} \l__acro_tmpa_tl } + \acro_property_get:nnTF {#1} {tooltip} + { \__acro_check_tooltip:nV {#2} \l__acro_tooltip_tl } { \__acro_check_tooltip:nn {#2} {#3} } } -\cs_generate_variant:Nn \acro_write_tooltip:nnn { nnV } +\cs_generate_variant:Nn \acro_write_tooltip:nnn {nnV} % #1: printed text % #2: tool tip text \cs_new_protected:Npn \__acro_check_tooltip:nn #1#2 { - \bool_if:NTF \l__acro_inside_tooltip_bool + \bool_if:NTF \l__acro_tooltip_inside_bool {#1} { - \bool_set_true:N \l__acro_inside_tooltip_bool + \bool_set_true:N \l__acro_tooltip_inside_bool \__acro_tooltip_cmd:nn {#1} {#2} } } @@ -3109,10 +3114,6 @@ % -------------------------------------------------------------------------- % trailing tokens and what to do when present -\prop_new:N \l__acro_trailing_tokens_prop -\prop_new:N \l__acro_trailing_actions_prop -\bool_new:N \l__acro_trailing_tokens_bool -\tl_new:N \l__acro_trailing_tokens_tl \cs_new_protected:Npn \acro_new_trailing_token:n #1 { \bool_new:c {l__acro_trailing_#1_bool} } @@ -3131,9 +3132,6 @@ { \acro_activate_trailing_action:n {#2} } \acro_new_trailing_token:n {#2} } - -\NewDocumentCommand \AcroRegisterTrailing {mm} - { \acro_register_trailing_token:Nn #1 {#2} } \cs_new_protected:Npn \acro_for_all_trailing_tokens_do:n #1 { \prop_map_inline:Nn \l__acro_trailing_tokens_prop {#1} } @@ -3203,9 +3201,6 @@ \cs_new_protected:Npn \acro_space: { \acro_if_trailing_tokens:nF {dash,babel-hyphen} { \c_space_tl } } - -\NewDocumentCommand \acdot {} { \acro_dot: } -\NewDocumentCommand \acspace {} { \acro_space: } % --------------------------------------------------------------------------- % reset outputs, they'll behave like the first time again (!not like the _only_ @@ -3237,41 +3232,19 @@ \cs_new_protected:Npn \acro_mark_all_as_used: { \acro_for_all_acronyms_do:n { \acro_mark_as_used:n {##1} } } -\DeclareExpandableDocumentCommand \acifused { m } - { \acro_if_acronym_used:nTF {#1} } - \prg_new_conditional:Npnn \acro_if_acronym_used:n #1 { p,T,F,TF } { - \bool_if:nTF - { - \bool_if_p:c { g__acro_#1_used_bool } && - ( !\acro_if_is_single_p:n {#1} ) - } + \bool_lazy_and:nnTF + { \bool_if_p:c {g__acro_#1_used_bool} } + { !\acro_if_is_single_p:n {#1} } { \prg_return_true: } { \prg_return_false: } } -\NewDocumentCommand \acresetall {} - { \acro_reset_all: } - -\NewDocumentCommand \acuseall {} - { \acro_mark_all_as_used: } - -\NewDocumentCommand \acreset { > { \SplitList { , } } m } - { \ProcessList {#1} { \acro_reset:n } \ignorespaces } - -\NewDocumentCommand \acuse { > { \SplitList { , } } m } - { \ProcessList {#1} { \acro_mark_as_used:n } \ignorespaces } - % -------------------------------------------------------------------------- % acronym barriers: allow local lists of only those acronyms used between two % barriers -\int_new:N \g__acro_barrier_int -\bool_new:N \g__acro_use_barriers_bool -\bool_new:N \g__acro_reset_at_barrier_bool -\bool_new:N \l__acro_use_barrier_bool - \keys_define:nn {acro} { use-barriers .bool_gset:N = \g__acro_use_barriers_bool , @@ -3287,9 +3260,6 @@ { \acro_reset_all: } } -\NewDocumentCommand \acbarrier {} - { \acro_barrier: } - \cs_new_protected:Npn \acro_check_barriers:n #1 { \bool_if:NT \g__acro_use_barriers_bool @@ -3358,9 +3328,6 @@ \bool_set_false:N \l__acro_indefinite_bool \bool_set_false:N \l__acro_first_upper_bool \bool_set_false:N \l__acro_upper_indefinite_bool - % \bool_set_false:N \l__acro_citation_all_bool - % \bool_set_false:N \l__acro_citation_first_bool - % \bool_set_false:N \l__acro_addto_index_bool \acro_for_endings_do:n { \bool_set_false:c {l__acro_##1_bool} } } @@ -3376,8 +3343,7 @@ % #2: ID \cs_new_protected:Npn \acro_check_and_mark_if:nn #1#2 { - \bool_if:nTF - { (#1) || !\l__acro_use_acronyms_bool } + \bool_lazy_or:nnTF {#1} { !\l__acro_use_acronyms_bool } { \acro_check_acronym:nn {#2} {false} } { \acro_check_acronym:nn {#2} {true} } } @@ -3388,12 +3354,6 @@ \cs_new_protected:Npn \acro_switch_on: { \bool_set_true:N \l__acro_use_acronyms_bool } -\NewDocumentCommand \acswitchoff {} - { \acro_switch_off: } - -\NewDocumentCommand \acswitchon {} - { \acro_switch_on: } - % commands for (re)defining \ac-like macros: \cs_new_protected:Npn \acro_define_new_acro_command:NN #1#2 { @@ -3401,19 +3361,29 @@ % #2: definition where `#1' refers to the ID \cs_new_protected:Npn #1 ##1##2 { - \cs_set:Npn \__acro_tmp_command:n ####1 {##2} - \exp_args:NNnx #2 ##1 {sO{}m} + \cs_set:Npn \__acro_tmp:n ####1 {##2} + \cs_new_protected:cpx + {acro_ \__acro_remove_backslash:N ##1 :nnn} ####1####2####3 { \acro_begin: \acro_reset_specials: - \keys_set:nn {acro} {########2} - \acro_check_and_mark_if:nn {########1} {########3} - \exp_not:o { \__acro_tmp_command:n {####3} } + \exp_not:N \tl_if_blank:nF {####2} { \keys_set:nn {acro} {####2} } + \acro_check_and_mark_if:nn {####1} {####3} + \__acro_tmp:n {####3} \acro_end: } + #2 ##1 {sO{}m} + { + \acro_case_insensitive_command:cnnn + {acro_ \__acro_remove_backslash:N ##1 :nnn} + {####1} + {####2} + {####3} + } } } \cs_generate_variant:Nn \acro_define_new_acro_command:NN {cc} +\cs_generate_variant:Nn \acro_check_and_mark_if:nn {nx} % commands for (re)defining \acflike-like macros: \cs_new_protected:Npn \acro_define_new_acro_pseudo_command:NN #1#2 @@ -3422,15 +3392,24 @@ % #2: definition where `#1' refers to the ID and `#2' to the pseudo long form \cs_new_protected:Npn #1 ##1##2 { - \cs_set:Npn \__acro_tmp_command:nn ####1####2 {##2} - \exp_args:NNnx #2 ##1 {smm} + \cs_set:Npn \__acro_tmp:nn ####1####2 {##2} + \cs_new_protected:cpx + {acro_ \__acro_remove_backslash:N ##1 :nnn} ####1####2####3 { \acro_begin: \acro_reset_specials: - \acro_check_and_mark_if:nn {########1} {########2} - \exp_not:o { \__acro_tmp_command:nn {####2} {####3} } + \acro_check_and_mark_if:nn {####1} {####3} + \__acro_tmp:nn {####3} {####2} \acro_end: } + #2 ##1 {smm} + { + \acro_case_insensitive_command:cnnn + {acro_ \__acro_remove_backslash:N ##1 :nnn} + {####1} + {####3} + {####2} + } } } \cs_generate_variant:Nn \acro_define_new_acro_pseudo_command:NN {cc} @@ -3595,10 +3574,6 @@ } % -------------------------------------------------------------------------- -% additional variables: -\tl_new:N \l__acro_current_property_tl - -% -------------------------------------------------------------------------- % key and order checking \msg_new:nnn {acro} {no-id} { @@ -3627,36 +3602,47 @@ % #2: property \cs_new_protected:Npn \__acro_property_check:nn #1#2 { - \tl_if_blank:VT \l__acro_current_property_tl + \str_if_empty:NT \l__acro_current_id_str { \acro_serious_message:n {no-id} } \str_if_eq:nnF {#2} {short} { - \bool_if:cF { l__acro_#1_short_set_bool } + \acro_property_if_set:nnF {#1} {short} { - \keys_set:nn { acro / declare-acronym } { short = {#1} } + \keys_set:nn {acro/declare-acronym} { short = {#1} } \acro_harmless_message:nn {substitute-short} {#1} } } - % \bool_new:c { l__acro_#1_#2_set_bool } - \bool_set_true:c { l__acro_#1_#2_set_bool } + \acro_property_mark_set:nn {#1} {#2} } \cs_new_protected:Npn \__acro_first_property_check:nn #1#2 { - \cs_if_exist:cTF { l__acro_#1_short_set_bool } + \cs_if_exist:cTF {l__acro_#1_short_set_bool} { - \bool_if:cT { l__acro_#1_short_set_bool } + \acro_property_if_set:nnT {#1} {short} { \acro_serious_message:nnn {doubled-property} {#1} {#2} } } - { - \bool_new:c { l__acro_#1_short_set_bool } - \bool_set_true:c { l__acro_#1_short_set_bool } - } + { \bool_new:c {l__acro_#1_short_set_bool} } + \acro_property_mark_set:nn {#1} {short} } +% #1: ID +% #2: property +\prg_new_conditional:Npnn \acro_property_if_set:nn #1#2 {T,F,TF} + { + \bool_if:cTF {l__acro_#1_#2_set_bool} + { \prg_return_true: } + { \prg_return_false: } + } + +% #1: ID +% #2: property +\cs_new_protected:Npn \acro_property_mark_set:nn #1#2 + { \bool_set_true:c { l__acro_#1_#2_set_bool } } +\cs_generate_variant:Nn \acro_property_mark_set:nn {V} + % -------------------------------------------------------------------------- % the internal property selection functions for \DeclareAcronym: -\prop_new:N \g__acro_properties_prop \cs_new_protected:Npn \acro_for_properties_do:n { \prop_map_inline:Nn \g__acro_properties_prop } @@ -3667,14 +3653,14 @@ \cs_new_protected:Npn \acro_declare_property_generic:nnn #1#2#3 { \prop_clear_new:c {l__acro_#1_prop} + \tl_clear_new:c {l__acro_#1_tl} \cs_new_protected:cpn {__acro_declare_#1:nn} ##1##2 {#3} \cs_generate_variant:cn {__acro_declare_#1:nn} {V} - % \bool_new:c {l__acro_ \l__acro_current_property_tl _#1_set_bool} \keys_define:nn {acro/declare-acronym} { #2 .code:n = - \use:c {__acro_declare_#1:Vn} \l__acro_current_property_tl {##1} - \bool_set_true:c {l__acro_ \l__acro_current_property_tl _#2_set_bool} + \use:c {__acro_declare_#1:Vn} \l__acro_current_id_str {##1} + \acro_property_mark_set:Vn \l__acro_current_id_str {#2} } \prop_gput:Nnn \g__acro_properties_prop {#2} {#1} } @@ -3696,13 +3682,12 @@ % #2: property name \cs_new_protected:Npn \acro_declare_property:nn #1#2 { \acro_declare_property:nnn {#1} {#2} {} } -\cs_generate_variant:Nn \acro_declare_property:nn { V } +\cs_generate_variant:Nn \acro_declare_property:nn {V} -\cs_new_protected:Npn \acro_declare_simple_property:n #1 +\cs_new_protected:Npn \acro_declare_property_simple:n #1 { \tl_set:Nn \l__acro_tmpa_tl {#1} \tl_replace_all:Nnn \l__acro_tmpa_tl {-} {_} - \tl_clear_new:c {l__acro_ \l__acro_tmpa_tl _tl} \acro_declare_property:Vn \l__acro_tmpa_tl {#1} } @@ -3754,42 +3739,42 @@ \acro_for_endings_do:n { \prop_put:cnn {l__acro_long_##1_form_prop} {#1} {false} - \bool_if:cF {l__acro_#1_long-##1_set_bool} + \acro_property_if_set:nnF {#1} {long-##1} { \prop_put:cnv {l__acro_long_##1_prop} {#1} {l__acro_default_long_##1_tl} } \prop_put:cnn {l__acro_foreign_##1_form_prop} {#1} {false} - \bool_if:cF {l__acro_#1_foreign-##1_set_bool} + \acro_property_if_set:nnF {#1} {foreign-##1} { \prop_put:cnv {l__acro_foreign_##1_prop} {#1} {l__acro_default_foreign_##1_tl} } } } -\acro_declare_simple_property:n {first-style} +\acro_declare_property_simple:n {first-style} % list: -\acro_declare_simple_property:n {list} +\acro_declare_property_simple:n {list} % defines `short-plural', `long-plural' and `long-plural-form' as well as the % options `plural-ending', `short-plural-ending' and `long-plural-ending': % \ProvideAcroEnding {plural} {s} {s} % short indefinite article: -\acro_declare_simple_property:n {short-indefinite} +\acro_declare_property_simple:n {short-indefinite} % long indefinite article: -\acro_declare_simple_property:n {long-indefinite} +\acro_declare_property_simple:n {long-indefinite} % pre long: -\acro_declare_simple_property:n {long-pre} +\acro_declare_property_simple:n {long-pre} % post long: -\acro_declare_simple_property:n {long-post} +\acro_declare_property_simple:n {long-post} % post: -\acro_declare_simple_property:n {post} +\acro_declare_property_simple:n {post} % sort: \acro_declare_property:nnn {sort} {sort} { - \bool_if:cF { l__acro_#1_index-sort_set_bool } + \acro_property_if_set:nnF {#1} {index-sort} { \prop_put:Nnn \l__acro_index_sort_prop {#1} {#2} } } @@ -3803,36 +3788,35 @@ \cs_set_protected:Npn \acro_alt_error:n #1 { - \bool_if:cF {l__acro_#1_alt_set_bool} + \acro_property_if_set:nnF {#1} {alt} { \acro_harmless_message:nn {no-alternative} {#1} } } % alt. indefinite article: -\acro_declare_simple_property:n {alt-indefinite} +\acro_declare_property_simple:n {alt-indefinite} % foreign: -\acro_declare_simple_property:n {foreign} +\acro_declare_property_simple:n {foreign} % foreign-lang: -\acro_declare_simple_property:n {foreign-lang} +\acro_declare_property_simple:n {foreign-lang} % format: -\acro_declare_simple_property:n {format} +\acro_declare_property_simple:n {format} % short format: \acro_declare_property_alias:nn {short-format} {format} % alt format: -\acro_declare_simple_property:n {alt-format} +\acro_declare_property_simple:n {alt-format} % long format: -\acro_declare_simple_property:n {long-format} +\acro_declare_property_simple:n {long-format} % first long format: -\acro_declare_simple_property:n {first-long-format} +\acro_declare_property_simple:n {first-long-format} % pdfstring -- currently needs to be done `by hand': -\prop_new:N \l__acro_pdfstring_short_prop \cs_new_protected:Npn \__acro_declare_pdfstring:nw #1#2/#3/#4 \acro_stop: { \__acro_property_check:nn {#1} {pdfstring} @@ -3850,17 +3834,17 @@ } } } -\cs_generate_variant:Nn \__acro_declare_pdfstring:nw { V } -\keys_define:nn { acro / declare-acronym } +\cs_generate_variant:Nn \__acro_declare_pdfstring:nw {V} + +\keys_define:nn {acro/declare-acronym} { pdfstring .code:n = - \__acro_declare_pdfstring:Vw \l__acro_current_property_tl #1 // \acro_stop: , + \__acro_declare_pdfstring:Vw \l__acro_current_id_str #1 // \acro_stop: } -\prop_new:N \l__acro_pdfstring_alt_prop \cs_new_protected:Npn \__acro_declare_pdfstring_alt:nw #1#2/#3/#4 \acro_stop: { - \__acro_property_check:nn {#1} { pdfstring-alt } + \__acro_property_check:nn {#1} {pdfstring-alt} \prop_put:Nnn \l__acro_pdfstring_alt_prop {#1} {#2} \acro_for_endings_do:n { @@ -3872,70 +3856,87 @@ { \prop_put:cnn {l__acro_pdfstring_alt_##1_prop} {#1} {#2#3} } } } -\cs_generate_variant:Nn \__acro_declare_pdfstring_alt:nw { V } -\keys_define:nn { acro / declare-acronym } +\cs_generate_variant:Nn \__acro_declare_pdfstring_alt:nw {V} + +\keys_define:nn {acro/declare-acronym} { pdfstring-alt .code:n = - \__acro_declare_pdfstring_alt:Vw \l__acro_current_property_tl #1 // \acro_stop: , + \__acro_declare_pdfstring_alt:Vw \l__acro_current_id_str #1 // \acro_stop: } % class: -\acro_declare_simple_property:n {class} +\acro_declare_property_simple:n {class} % extra information: -\acro_declare_simple_property:n {extra} +\acro_declare_property_simple:n {extra} % single appearances: -\acro_declare_simple_property:n {single} +\acro_declare_property_simple:n {single} % single format: -\acro_declare_simple_property:n {single-format} +\acro_declare_property_simple:n {single-format} % acc supp: \acro_declare_property:nn {acc_supp} {accsupp} % tooltip: -\acro_declare_simple_property:n {tooltip} +\acro_declare_property_simple:n {tooltip} -% citation -- currently needs to be done `by hand': -\prop_new:N \l__acro_citation_prop -\prop_new:N \l__acro_citation_pre_prop -\prop_new:N \l__acro_citation_post_prop +% before-citation: +\acro_declare_property_simple:n {before-citation} + +% after-citation: +\acro_declare_property_simple:n {after-citation} + +% citation -- this needs a bit more work: \cs_new_protected:Npn \__acro_declare_citation:nw #1#2[#3]#4[#5]#6#7 \acro_stop: { - % no options: #1: ID, #2: property, #3 is blank - % 1 option: #1: ID, #4: property, #3: option, #5 is blank + % no options: #1: ID, #2: property, #7 is blank + % 1 option: #1: ID, #4: property, #3: option, #5: \q_no_value % 2 options: #1: ID: #6: property, #3: first option, #5: second option - \tl_if_blank:nF { #2#4#6 } + \tl_if_blank:nTF {#7} { - \tl_if_empty:nTF {#3} - { \__acro_declare_citation_aux:nnnn {#1} { } { } {#2} } + \__acro_declare_citation_aux:nnnn {#1} + { \q_no_value } + { \q_no_value } + {#2} + } + { + \quark_if_no_value:nTF {#5} { - \tl_if_empty:nTF {#5} - { \__acro_declare_citation_aux:nnnn {#1} {#3} { } {#4} } - { \__acro_declare_citation_aux:nnnn {#1} {#3} {#5} {#6} } + \__acro_declare_citation_aux:nnnx {#1} + { \q_no_value } + {#3} + { \tl_head:n {#4} } } + { \__acro_declare_citation_aux:nnnn {#1} {#3} {#5} {#6} } } } -\cs_generate_variant:Nn \__acro_declare_citation:nw { V } +\cs_generate_variant:Nn \__acro_declare_citation:nw {V} -\keys_define:nn { acro / declare-acronym } +\keys_define:nn {acro/declare-acronym} { cite .code:n = \__acro_declare_citation:Vw - \l__acro_current_property_tl #1 [][] \scan_stop: \acro_stop: + \l__acro_current_id_str #1 [\q_no_value][\q_no_value] \scan_stop: \acro_stop: } - +\prop_gput:Nnn \g__acro_properties_prop {cite} {cite} + +% #1: ID +% #2: pre +% #3: post +% #4: citation key \cs_new_protected:Npn \__acro_declare_citation_aux:nnnn #1#2#3#4 { \__acro_property_check:nn {#1} {cite} \prop_put:Nnn \l__acro_citation_prop {#1} {#4} - \tl_if_empty:nF {#2} + \quark_if_no_value:nF {#2} { \prop_put:Nnn \l__acro_citation_pre_prop {#1} {#2} } - \tl_if_empty:nF {#3} + \quark_if_no_value:nF {#3} { \prop_put:Nnn \l__acro_citation_post_prop {#1} {#3} } } - +\cs_generate_variant:Nn \__acro_declare_citation_aux:nnnn {nnnx} + % TODO: % add index entries, by default \index{<sort>@<short>} % index: overwrite default <sort>@<short> entry completely @@ -3949,13 +3950,13 @@ % TeX code after an acronym is typeset % index: -\acro_declare_simple_property:n {index} +\acro_declare_property_simple:n {index} % index-sort: -\acro_declare_simple_property:n {index-sort} +\acro_declare_property_simple:n {index-sort} % index-cmd: -\acro_declare_simple_property:n {index-cmd} +\acro_declare_property_simple:n {index-cmd} % -------------------------------------------------------------------------- % acronym macros: @@ -3976,13 +3977,16 @@ % -------------------------------------------------------------------------- % internal acronym declaring function: \cs_new_protected:Npn \acro_declare_acronym:nn #1#2 + { \acro_case_insensitive:Nnn \__acro_declare_acronym:nn {#1} {#2} } + +\cs_new_protected:Npn \__acro_declare_acronym:nn #1#2 { \seq_gput_right:Nn \g__acro_declared_acronyms_seq {#1} \bool_gset_true:N \g__acro_first_acronym_declared_bool - \tl_set:Nn \l__acro_current_property_tl {#1} + \str_set:Nn \l__acro_current_id_str {#1} \acro_for_properties_do:n - { \bool_new:c {l__acro_#1_##1_set_bool} } - \keys_set:nn { acro / declare-acronym } {#2} + { \bool_new:c {l__acro_ \l__acro_current_id_str _##1_set_bool} } + \keys_set:nn {acro/declare-acronym} {#2} \bool_new:c {g__acro_#1_first_use_bool} \bool_new:c {g__acro_#1_used_bool} \bool_new:c {g__acro_#1_label_bool} @@ -3993,27 +3997,20 @@ { \bool_gset_true:c {g__acro_#1_in_list_bool} } \__acro_create_page_records:n {#1} \__acro_define_acronym_macro:n {#1} - \tl_clear:N \l__acro_current_property_tl - \bool_if:cF {l__acro_#1_short_set_bool} + \str_clear:N \l__acro_current_id_str + \acro_property_if_set:nnF {#1} {short} { \acro_serious_message:nnn {missing} {#1} {short} } - \bool_if:cF {l__acro_#1_long_set_bool} + \acro_property_if_set:nnF {#1} {long} { \acro_serious_message:nnn {missing} {#1} {long} } \__acro_log_acronym:n {#1} } -% -------------------------------------------------------------------------- -% the user command: -\NewDocumentCommand \DeclareAcronym {mm} - { \acro_declare_acronym:nn {#1} {#2} } - + % -------------------------------------------------------------------------- % print the list: % #1: list of classes % #2: list of excluded classes -\tl_new:N \l__acro_included_classes_tl -\tl_new:N \l__acro_excluded_classes_tl - -\keys_define:nn { acro / print-acronyms } +\keys_define:nn {acro/print-acronyms} { include-classes .tl_set:N = \l__acro_included_classes_tl , exclude-classes .tl_set:N = \l__acro_excluded_classes_tl , @@ -4032,7 +4029,8 @@ \cs_set:Npn \@noitemerr {} \tl_clear:N \l__acro_included_classes_tl \tl_clear:N \l__acro_excluded_classes_tl - \keys_set:nn { acro / print-acronyms } {#1} + \tl_if_blank:nF {#1} + { \keys_set:nn {acro/print-acronyms} {#1} } \__acro_aux_file_now:n { \acro@print@list } \bool_if:NT \l__acro_sort_bool { \acro_sort_prop:NN \l__acro_short_prop \l__acro_sort_prop } @@ -4050,9 +4048,6 @@ \group_end: } -\NewDocumentCommand \printacronyms { O{} } - { \acro_print_acronyms:n {#1} } - % -------------------------------------------------------------------------- % language support \RequirePackage {translations} @@ -4088,10 +4083,6 @@ } } -\NewDocumentCommand \DeclareAcroTranslation {mm} - { \acro_declare_translation:nn {#1} {#2} } -\@onlypreamble \DeclareAcroTranslation - % tokenlists using the translations: \tl_set:Nn \l__acro_list_name_tl { \GetTranslation {acronym-list-name} } \tl_set:Nn \l__acro_page_name_tl { \GetTranslation {acronym-page-name}\@\, } @@ -4101,478 +4092,27 @@ % -------------------------------------------------------------------------- % definition file: -% \tl_const:Nn \c_acro_definition_file_name_tl {acro} -% \tl_const:Nn \c_acro_definition_file_extension_tl {def} - -% \file_if_exist:nTF -% { \c_acro_definition_file_name_tl .\c_acro_definition_file_extension_tl } -% { -% \@onefilewithoptions -% {\c_acro_definition_file_name_tl} [] [] -% \c_acro_definition_file_extension_tl -% } -% { \acro_serious_message:n {definitions-missing} } - - -% -------------------------------------------------------------------------- -% first appearance styles: -\DeclareAcroFirstStyle {default} {inline} - { } - -\DeclareAcroFirstStyle {reversed} {inline} - { reversed = true } - -\DeclareAcroFirstStyle {short} {inline} - { - only-short = true , - brackets = false - } - -\DeclareAcroFirstStyle {long} {inline} - { - only-long = true , - brackets = false - } - -\DeclareAcroFirstStyle {square} {inline} - { brackets-type = [] } - -\DeclareAcroFirstStyle {plain} {inline} - { - brackets = false , - between = -- - } - -\DeclareAcroFirstStyle {plain-reversed} {inline} - { - brackets = false , - between = -- , - reversed = true - } - -\DeclareAcroFirstStyle {footnote} {note} - { } - -\DeclareAcroFirstStyle {footnote-reversed} {note} - { reversed = true } - -\DeclareAcroFirstStyle {sidenote} {note} - { note-command = \sidenote {#1} } - -\DeclareAcroFirstStyle {sidenote-reversed} {note} - { - note-command = \sidenote {#1} , - reversed = true - } - -\DeclareAcroFirstStyle {empty} {note} - { use-note = false } +\tl_const:Nn \c_acro_definition_file_name_tl {acro.definitions} +\tl_const:Nn \c_acro_definition_file_extension_tl {tex} -% -------------------------------------------------------------------------- -% extra info appearance styles: -\DeclareAcroExtraStyle {default} {inline} +\file_if_exist:nTF + { \c_acro_definition_file_name_tl .\c_acro_definition_file_extension_tl } { - brackets = false , - punct = true , - punct-symbol = . - } - -\DeclareAcroExtraStyle {plain} {inline} - { - brackets = false , - punct = true , - punct-symbol = - } - -\DeclareAcroExtraStyle {paren} {inline} - { - brackets = true , - punct = true , - punct-symbol = - } - -\DeclareAcroExtraStyle {bracket} {inline} - { - brackets = true , - punct = true , - punct-symbol = , - brackets-type = [] - } - -\DeclareAcroExtraStyle {comma} {inline} - { - punct = true, - punct-symbol = {,} , - brackets = false - } - -% -------------------------------------------------------------------------- -% page number appearance styles: -\DeclareAcroPageStyle {default} {inline} - { - punct = true , - punct-symbol = . - } - -\DeclareAcroPageStyle {plain} {inline} - { punct = false } - -\DeclareAcroPageStyle {comma} {inline} - { punct = true } - -\DeclareAcroPageStyle {paren} {inline} - { - brackets=true , - punct-symbol = ~ - } - -\DeclareAcroPageStyle {none} {inline} - { display = false } - -% -------------------------------------------------------------------------- -% list heading styles: -\DeclareAcroListHeading {part} {\part} -\DeclareAcroListHeading {part*} {\part*} -\DeclareAcroListHeading {chapter} {\chapter} -\DeclareAcroListHeading {chapter*} {\chapter*} -\DeclareAcroListHeading {addchap} {\addchap} -\DeclareAcroListHeading {section} {\section} -\DeclareAcroListHeading {section*} {\section*} -\DeclareAcroListHeading {addsec} {\addsec} -\DeclareAcroListHeading {subsection} {\subsection} -\DeclareAcroListHeading {subsection*} {\subsection*} -\DeclareAcroListHeading {subsubsection} {\subsubsection} -\DeclareAcroListHeading {subsubsection*} {\subsubsection*} -\DeclareAcroListHeading {none} {\use_none:n} - -% -------------------------------------------------------------------------- -% list styles: -\DeclareAcroListStyle {description} {list} - { } - -\DeclareAcroListStyle {toc} {list-of} - { } - -\DeclareAcroListStyle {lof} {list-of} - { style = lof } - -\DeclareAcroListStyle {tabular} {table} - { table = tabular } - -\DeclareAcroListStyle {longtable} {table} - { table = longtable } - -\DeclareAcroListStyle {extra-tabular} {extra-table} - { table = tabular } - -\DeclareAcroListStyle {extra-longtable} {extra-table} - { table = longtable } - -\DeclareAcroListStyle {extra-tabular-rev} {extra-table} - { - table = tabular , - reverse = true - } - -\DeclareAcroListStyle {extra-longtable-rev} {extra-table} - { - table = longtable , - reverse = true - } - -% -------------------------------------------------------------------------- -% register some tokens to be checked for: -\AcroRegisterTrailing . {dot} -\AcroRegisterTrailing - {dash} -\AcroRegisterTrailing \babelhyphen {babel-hyphen} - -\keys_set:nn {acro} { activate-trailing-tokens = dot } - -% -------------------------------------------------------------------------- -% the user commands -% automatic: -\NewAcroCommand \ac - { \acro_use:n {#1} } - -\NewAcroCommand \Ac - { - \acro_first_upper: - \acro_use:n {#1} - } - -\NewAcroCommand \iac - { - \acro_indefinite: - \acro_use:n {#1} - } - -\NewAcroCommand \Iac - { - \acro_first_upper: - \acro_indefinite: - \acro_use:n {#1} - } - -\NewAcroCommand \acp - { - \acro_plural: - \acro_use:n {#1} - } - -\NewAcroCommand \Acp - { - \acro_plural: - \acro_first_upper: - \acro_use:n {#1} - } - -\NewAcroCommand \acsingle - { - \acro_get:n {#1} - \acro_single:n {#1} - } - -\NewAcroCommand \Acsingle - { - \acro_get:n {#1} - \acro_first_upper: - \acro_single:n {#1} - } - -% short: -\NewAcroCommand \acs - { \acro_short:n {#1} } - -\NewAcroCommand \Acs - { - \acro_first_upper: - \acro_short:n {#1} - } - -\NewAcroCommand \iacs - { - \acro_indefinite: - \acro_short:n {#1} - } - -\NewAcroCommand \Iacs - { - \acro_first_upper: - \acro_indefinite: - \acro_short:n {#1} - } - -\NewAcroCommand \acsp - { - \acro_plural: - \acro_short:n {#1} - } - -\NewAcroCommand \Acsp - { - \acro_first_upper: - \acro_plural: - \acro_short:n {#1} - } - -% alt: -\NewAcroCommand \aca - { \acro_alt:n {#1} } - -\NewAcroCommand \Aca - { - \acro_first_upper: - \acro_alt:n {#1} - } - -\NewAcroCommand \iaca - { - \acro_indefinite: - \acro_alt:n {#1} - } - -\NewAcroCommand \Iaca - { - \acro_first_upper: - \acro_indefinite: - \acro_alt:n {#1} - } - -\NewAcroCommand \acap - { - \acro_plural: - \acro_alt:n {#1} - } - -\NewAcroCommand \Acap - { - \acro_first_upper: - \acro_plural: - \acro_alt:n {#1} - } - -% long: -\NewAcroCommand \acl - { \acro_long:n {#1} } - -\NewAcroCommand \Acl - { - \acro_first_upper: - \acro_long:n {#1} - } - -\NewAcroCommand \iacl - { - \acro_indefinite: - \acro_long:n {#1} - } - -\NewAcroCommand \Iacl - { - \acro_first_upper: - \acro_indefinite: - \acro_long:n {#1} - } - -\NewAcroCommand \aclp - { - \acro_plural: - \acro_long:n {#1} - } - -\NewAcroCommand \Aclp - { - \acro_plural: - \acro_first_upper: - \acro_long:n {#1} - } - -% first: -\NewAcroCommand \acf - { \acro_first:n {#1} } - -\NewAcroCommand \Acf - { - \acro_first_upper: - \acro_first:n {#1} - } - -\NewAcroCommand \iacf - { - \acro_indefinite: - \acro_first:n {#1} - } - -\NewAcroCommand \Iacf - { - \acro_first_upper: - \acro_indefinite: - \acro_first:n {#1} - } - -\NewAcroCommand \acfp - { - \acro_plural: - \acro_first:n {#1} - } - -\NewAcroCommand \Acfp - { - \acro_plural: - \acro_first_upper: - \acro_first:n {#1} - } - -% first-like: -\NewPseudoAcroCommand \acflike - { \acro_first_like:nn {#1} {#2} } - -\NewPseudoAcroCommand \iacflike - { - \acro_indefinite: - \acro_first_like:nn {#1} {#2} - } - -\NewPseudoAcroCommand \Iacflike - { - \acro_first_upper: - \acro_indefinite: - \acro_first_like:nn {#1} {#2} - } - -\NewPseudoAcroCommand \acfplike - { - \acro_plural: - \acro_first_like:nn {#1} {#2} - } - -% -------------------------------------------------------------------------- -% endings: -\ProvideAcroEnding {plural} {s} {s} - -% -------------------------------------------------------------------------- -% translations: -% list name -\DeclareAcroTranslation {acronym-list-name} - { - Fallback = Acronyms , - English = Acronyms , - French = Acronymes , - German = Abk\"urzungen , - Italian = Acronimi , - Portuguese = Acr\'onimos , - Spanish = Siglas , - Catalan = Sigles , - Turkish = K\i saltmalar - } - -% page name -\DeclareAcroTranslation {acronym-page-name} - { - Fallback = p. , - English = p. , - German = S. , - Portuguese = p. - } - -% pages name -\DeclareAcroTranslation {acronym-pages-name} - { - Fallback = pp. , - English = pp. , - German = S. , - Portuguese = pp. - } - -% following page -\DeclareAcroTranslation {acronym-next-page} - { - Fallback = f. , - English = f. , - German = f. , - Portuguese = s. - } - -% following pages -\DeclareAcroTranslation {acronym-next-pages} - { - Fallback = ff. , - English = ff. , - German = ff. , - Portuguese = ss. + \@onefilewithoptions + {\c_acro_definition_file_name_tl} [] [] + \c_acro_definition_file_extension_tl } + { \acro_serious_message:n {definitions-missing} } % -------------------------------------------------------------------------- % allow for a configuration file: -\tl_const:Nn \c_acro_config_file_name_tl {acro} -\tl_const:Nn \c_acro_config_file_extension_tl {cfg} \file_if_exist:nT - { \c_acro_config_file_name_tl .\c_acro_config_file_extension_tl } + { \l_acro_config_file_name_tl . \l_acro_config_file_extension_tl } { \@onefilewithoptions - {\c_acro_config_file_name_tl} [] [] - \c_acro_config_file_extension_tl + {\l_acro_config_file_name_tl} [] [] + \l_acro_config_file_extension_tl } \file_input_stop: |