diff options
author | Karl Berry <karl@freefriends.org> | 2022-01-11 22:01:01 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-01-11 22:01:01 +0000 |
commit | fa4d2a5e2aa4aef4c17f825a54127ab10979e27c (patch) | |
tree | 950f60c4d5dda23e9195af93d49623c0d27b6dc3 /Master/texmf-dist/tex | |
parent | 94a61ef951904c933eda185e73e73a42ce34725f (diff) |
zref-clever (11jan22)
git-svn-id: svn://tug.org/texlive/trunk@61572 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/zref-clever/zref-clever-dutch.lang | 257 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang (renamed from Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.dict) | 14 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang (renamed from Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.dict) | 12 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang (renamed from Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.dict) | 12 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang (renamed from Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.dict) | 14 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang (renamed from Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.dict) | 12 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty | 780 |
7 files changed, 835 insertions, 266 deletions
diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-dutch.lang b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-dutch.lang new file mode 100644 index 00000000000..26d2d0cb821 --- /dev/null +++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-dutch.lang @@ -0,0 +1,257 @@ +%% +%% This is file `zref-clever-dutch.lang', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% zref-clever.dtx (with options: `lang-dutch') +%% +%% This file was generated from file(s) of the LaTeX package "zref-clever". +%% +%% Copyright (C) 2021-2022 Gustavo Barros +%% +%% It may be distributed and/or modified under the conditions of the +%% LaTeX Project Public License (LPPL), either version 1.3c of this +%% license or (at your option) any later version. The latest version +%% of this license is in the file: +%% +%% https://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% +%% This work is "maintained" (as per LPPL maintenance status) by +%% Gustavo Barros. +%% +%% This work consists of the files zref-clever.dtx, +%% zref-clever.ins, +%% zref-clever.tex, +%% zref-clever-code.tex, +%% and the files listed in MANIFEST.md. +%% +%% The released version of this package is available from CTAN. +%% +%% ----------------------------------------------------------------------- +%% +%% The development version of the package can be found at +%% +%% https://github.com/gusbrs/zref-clever +%% +%% for those people who are interested. +%% +%% ----------------------------------------------------------------------- +%% +namesep = {\nobreakspace} , +pairsep = {~en\nobreakspace} , +listsep = {,~} , +lastsep = {~en\nobreakspace} , +tpairsep = {~en\nobreakspace} , +tlistsep = {,~} , +tlastsep = {,~en\nobreakspace} , +notesep = {~} , +rangesep = {~t/m\nobreakspace} , + +type = book , + gender = n , + Name-sg = Boek , + name-sg = boek , + Name-pl = Boeken , + name-pl = boeken , + +type = part , + gender = n , + Name-sg = Deel , + name-sg = deel , + Name-pl = Delen , + name-pl = delen , + +type = chapter , + gender = n , + Name-sg = Hoofdstuk , + name-sg = hoofdstuk , + Name-pl = Hoofdstukken , + name-pl = hoofdstukken , + +type = section , + gender = m , + Name-sg = Paragraaf , + name-sg = paragraaf , + Name-pl = Paragrafen , + name-pl = paragrafen , + +type = paragraph , + gender = f , + Name-sg = Alinea , + name-sg = alinea , + Name-pl = Alinea's , + name-pl = alinea's , + +type = appendix , + gender = { m , n } , + Name-sg = Appendix , + name-sg = appendix , + Name-pl = Appendices , + name-pl = appendices , + +type = page , + gender = { f , m } , + Name-sg = Pagina , + name-sg = pagina , + Name-pl = Pagina's , + name-pl = pagina's , + rangesep = {\textendash} , + +type = line , + gender = m , + Name-sg = Regel , + name-sg = regel , + Name-pl = Regels , + name-pl = regels , + +type = figure , + gender = { n , f , m } , + Name-sg = Figuur , + name-sg = figuur , + Name-pl = Figuren , + name-pl = figuren , + +type = table , + gender = { f , m } , + Name-sg = Tabel , + name-sg = tabel , + Name-pl = Tabellen , + name-pl = tabellen , + +type = item , + gender = n , + Name-sg = Punt , + name-sg = punt , + Name-pl = Punten , + name-pl = punten , + +type = footnote , + gender = { f , m } , + Name-sg = Voetnoot , + name-sg = voetnoot , + Name-pl = Voetnoten , + name-pl = voetnoten , + +type = endnote , + gender = { f , m } , + Name-sg = Eindnoot , + name-sg = eindnoot , + Name-pl = Eindnoten , + name-pl = eindnoten , + +type = note , + gender = f , + Name-sg = Opmerking , + name-sg = opmerking , + Name-pl = Opmerkingen , + name-pl = opmerkingen , + +type = equation , + gender = f , + Name-sg = Vergelijking , + name-sg = vergelijking , + Name-pl = Vergelijkingen , + name-pl = vergelijkingen , + Name-sg-ab = Vgl. , + name-sg-ab = vgl. , + Name-pl-ab = Vgl.'s , + name-pl-ab = vgl.'s , + preref = {(} , + postref = {)} , + +type = theorem , + gender = f , + Name-sg = Stelling , + name-sg = stelling , + Name-pl = Stellingen , + name-pl = stellingen , +type = lemma , + gender = n , + Name-sg = Lemma , + name-sg = lemma , + Name-pl = Lemma's , + name-pl = lemma's , + +type = corollary , + gender = n , + Name-sg = Gevolg , + name-sg = gevolg , + Name-pl = Gevolgen , + name-pl = gevolgen , + +type = proposition , + gender = f , + Name-sg = Propositie , + name-sg = propositie , + Name-pl = Proposities , + name-pl = proposities , + +type = definition , + gender = f , + Name-sg = Definitie , + name-sg = definitie , + Name-pl = Definities , + name-pl = definities , + +type = proof , + gender = n , + Name-sg = Bewijs , + name-sg = bewijs , + Name-pl = Bewijzen , + name-pl = bewijzen , + +type = result , + gender = n , + Name-sg = Resultaat , + name-sg = resultaat , + Name-pl = Resultaten , + name-pl = resultaten , + +type = remark , + gender = f , + Name-sg = Opmerking , + name-sg = opmerking , + Name-pl = Opmerkingen , + name-pl = opmerkingen , + +type = example , + gender = n , + Name-sg = Voorbeeld , + name-sg = voorbeeld , + Name-pl = Voorbeelden , + name-pl = voorbeelden , + +type = algorithm , + gender = { n , f , m } , + Name-sg = Algoritme , + name-sg = algoritme , + Name-pl = Algoritmes , + name-pl = algoritmes , +type = listing , + gender = m , + Name-sg = Listing , + name-sg = listing , + Name-pl = Listings , + name-pl = listings , + +type = exercise , + gender = { f , m } , + Name-sg = Opgave , + name-sg = opgave , + Name-pl = Opgaven , + name-pl = opgaven , + +type = solution , + gender = f , + Name-sg = Oplossing , + name-sg = oplossing , + Name-pl = Oplossingen , + name-pl = oplossingen , +%% +%% +%% End of file `zref-clever-dutch.lang'. diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.dict b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang index 5abce90bf8a..bc51e268916 100644 --- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.dict +++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang @@ -1,14 +1,14 @@ %% -%% This is file `zref-clever-english.dict', +%% This is file `zref-clever-english.lang', %% generated with the docstrip utility. %% %% The original source files were: %% -%% zref-clever.dtx (with options: `dict-english') +%% zref-clever.dtx (with options: `lang-english') %% %% This file was generated from file(s) of the LaTeX package "zref-clever". %% -%% Copyright (C) 2021 Gustavo Barros +%% Copyright (C) 2021-2022 Gustavo Barros %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -97,8 +97,6 @@ type = page , name-sg = page , Name-pl = Pages , name-pl = pages , - name-sg-ab = p. , - name-pl-ab = pp. , rangesep = {\textendash} , type = line , @@ -156,8 +154,8 @@ type = equation , name-sg-ab = eq. , Name-pl-ab = Eqs. , name-pl-ab = eqs. , - refpre = {(} , - refpos = {)} , + preref = {(} , + postref = {)} , type = theorem , Name-sg = Theorem , @@ -238,4 +236,4 @@ type = solution , name-pl = solutions , %% %% -%% End of file `zref-clever-english.dict'. +%% End of file `zref-clever-english.lang'. diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.dict b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang index 53ea1fc1395..81f4f69c206 100644 --- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.dict +++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang @@ -1,14 +1,14 @@ %% -%% This is file `zref-clever-french.dict', +%% This is file `zref-clever-french.lang', %% generated with the docstrip utility. %% %% The original source files were: %% -%% zref-clever.dtx (with options: `dict-french') +%% zref-clever.dtx (with options: `lang-french') %% %% This file was generated from file(s) of the LaTeX package "zref-clever". %% -%% Copyright (C) 2021 Gustavo Barros +%% Copyright (C) 2021-2022 Gustavo Barros %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -157,8 +157,8 @@ type = equation , name-sg = équation , Name-pl = Équations , name-pl = équations , - refpre = {(} , - refpos = {)} , + preref = {(} , + postref = {)} , type = theorem , gender = m , @@ -252,4 +252,4 @@ type = solution , name-pl = solutions , %% %% -%% End of file `zref-clever-french.dict'. +%% End of file `zref-clever-french.lang'. diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.dict b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang index e293e0112b9..610818f09fd 100644 --- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.dict +++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang @@ -1,14 +1,14 @@ %% -%% This is file `zref-clever-german.dict', +%% This is file `zref-clever-german.lang', %% generated with the docstrip utility. %% %% The original source files were: %% -%% zref-clever.dtx (with options: `dict-german') +%% zref-clever.dtx (with options: `lang-german') %% %% This file was generated from file(s) of the LaTeX package "zref-clever". %% -%% Copyright (C) 2021 Gustavo Barros +%% Copyright (C) 2021-2022 Gustavo Barros %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -285,8 +285,8 @@ type = equation , case = G , Name-sg = Gleichung , Name-pl = Gleichungen , - refpre = {(} , - refpos = {)} , + preref = {(} , + postref = {)} , type = theorem , gender = n , @@ -484,4 +484,4 @@ type = solution , Name-pl = Lösungen , %% %% -%% End of file `zref-clever-german.dict'. +%% End of file `zref-clever-german.lang'. diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.dict b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang index e2295a49441..6e02ea9dd0b 100644 --- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.dict +++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang @@ -1,14 +1,14 @@ %% -%% This is file `zref-clever-portuguese.dict', +%% This is file `zref-clever-portuguese.lang', %% generated with the docstrip utility. %% %% The original source files were: %% -%% zref-clever.dtx (with options: `dict-portuguese') +%% zref-clever.dtx (with options: `lang-portuguese') %% %% This file was generated from file(s) of the LaTeX package "zref-clever". %% -%% Copyright (C) 2021 Gustavo Barros +%% Copyright (C) 2021-2022 Gustavo Barros %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -104,8 +104,6 @@ type = page , name-sg = página , Name-pl = Páginas , name-pl = páginas , - name-sg-ab = p. , - name-pl-ab = pp. , rangesep = {\textendash} , type = line , @@ -171,8 +169,8 @@ type = equation , name-sg-ab = eq. , Name-pl-ab = Eqs. , name-pl-ab = eqs. , - refpre = {(} , - refpos = {)} , + preref = {(} , + postref = {)} , type = theorem , gender = m , @@ -266,4 +264,4 @@ type = solution , name-pl = soluções , %% %% -%% End of file `zref-clever-portuguese.dict'. +%% End of file `zref-clever-portuguese.lang'. diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.dict b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang index 13038fb9d59..e96c8d6c712 100644 --- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.dict +++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang @@ -1,14 +1,14 @@ %% -%% This is file `zref-clever-spanish.dict', +%% This is file `zref-clever-spanish.lang', %% generated with the docstrip utility. %% %% The original source files were: %% -%% zref-clever.dtx (with options: `dict-spanish') +%% zref-clever.dtx (with options: `lang-spanish') %% %% This file was generated from file(s) of the LaTeX package "zref-clever". %% -%% Copyright (C) 2021 Gustavo Barros +%% Copyright (C) 2021-2022 Gustavo Barros %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -157,8 +157,8 @@ type = equation , name-sg = ecuación , Name-pl = Ecuaciones , name-pl = ecuaciones , - refpre = {(} , - refpos = {)} , + preref = {(} , + postref = {)} , type = theorem , gender = m , @@ -252,4 +252,4 @@ type = solution , name-pl = soluciones , %% %% -%% End of file `zref-clever-spanish.dict'. +%% End of file `zref-clever-spanish.lang'. diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty b/Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty index 34700408b24..61f5127c2e5 100644 --- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty +++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty @@ -8,7 +8,7 @@ %% %% This file was generated from file(s) of the LaTeX package "zref-clever". %% -%% Copyright (C) 2021 Gustavo Barros +%% Copyright (C) 2021-2022 Gustavo Barros %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -53,7 +53,7 @@ }% \endinput }% -\ProvidesExplPackage {zref-clever} {2021-12-07} {0.1.1-alpha} +\ProvidesExplPackage {zref-clever} {2022-01-10} {0.1.2-alpha} {Clever LaTeX cross-references based on zref} \RequirePackage { zref-base } \RequirePackage { zref-user } @@ -165,6 +165,11 @@ } \msg_new:nnn { zref-clever } { key-requires-value } { The~'#1'~key~'#2'~requires~a~value~\msg_line_context:. } +\msg_new:nnn { zref-clever } { key-boolean-or-empty } + { + The~key~'#1'~only~accepts~the~values~'true',~'false'~ + or~an~empty~value~\msg_line_context:. + } \msg_new:nnn { zref-clever } { language-declared } { Language~'#1'~is~already~declared~\msg_line_context:.~Nothing~to~do. } \msg_new:nnn { zref-clever } { unknown-language-alias } @@ -242,14 +247,15 @@ { Unknown~value~'#1'~for~'nudgeif'~option~\msg_line_context:. } \msg_new:nnn { zref-clever } { option-document-only } { Option~'#1'~is~only~available~after~\iow_char:N\\begin\{document\}. } -\msg_new:nnn { zref-clever } { dict-loaded } - { Loaded~'#1'~dictionary. } -\msg_new:nnn { zref-clever } { dict-not-available } - { Dictionary~for~'#1'~not~available~\msg_line_context:. } +\msg_new:nnn { zref-clever } { langfile-loaded } + { Loaded~'#1'~language~file. } +\msg_new:nnn { zref-clever } { langfile-not-available } + { Language~file~for~'#1'~not~available~\msg_line_context:. } \msg_new:nnn { zref-clever } { unknown-language-load } { - Language~'#1'~is~unknown~\msg_line_context:.~Unable~to~load~dictionary.~ - See~documentation~for~'\iow_char:N\\zcDeclareLanguage'~and~ + Language~'#1'~is~unknown~\msg_line_context:.~ + Unable~to~load~language~file.~See~documentation~for~ + '\iow_char:N\\zcDeclareLanguage'~and~ '\iow_char:N\\zcDeclareLanguageAlias'. } \msg_new:nnn { zref-clever } { zref-property-undefined } @@ -299,12 +305,17 @@ { Loaded~support~for~'#1'~package. } \msg_new:nnn { zref-clever } { compat-class } { Loaded~support~for~'#1'~documentclass. } -\cs_new_protected:Npn \__zrefclever_def_extract:Nnnn #1#2#3#4 +\msg_new:nnn { zref-clever } { option-deprecated } + { + Option~'#1'~has~been~deprecated~\msg_line_context:.\iow_newline: + Use~'#2'~instead. + } +\cs_new_protected:Npn \__zrefclever_extract_default:Nnnn #1#2#3#4 { \exp_args:NNNo \exp_args:NNo \tl_set:Nn #1 { \zref@extractdefault {#2} {#3} {#4} } } -\cs_generate_variant:Nn \__zrefclever_def_extract:Nnnn { NVnn } +\cs_generate_variant:Nn \__zrefclever_extract_default:Nnnn { NVnn } \cs_new:Npn \__zrefclever_extract_unexp:nnn #1#2#3 { \exp_args:NNo \exp_args:No @@ -314,10 +325,10 @@ \cs_new:Npn \__zrefclever_extract:nnn #1#2#3 { \zref@extractdefault {#1} {#2} {#3} } \tl_new:N \l__zrefclever_setup_type_tl -\tl_new:N \l__zrefclever_dict_language_tl -\tl_new:N \l__zrefclever_dict_decl_case_tl -\seq_new:N \l__zrefclever_dict_declension_seq -\seq_new:N \l__zrefclever_dict_gender_seq +\tl_new:N \l__zrefclever_base_language_tl +\tl_new:N \l__zrefclever_lang_decl_case_tl +\seq_new:N \l__zrefclever_lang_declension_seq +\seq_new:N \l__zrefclever_lang_gender_seq \seq_const_from_clist:Nn \c__zrefclever_ref_options_necessarily_not_type_specific_seq { @@ -334,8 +345,8 @@ listsep , lastsep , rangesep , - refpre , - refpos , + preref , + postref , } \seq_const_from_clist:Nn \c__zrefclever_ref_options_type_names_seq @@ -379,8 +390,8 @@ { \msg_warning:nnn { zref-clever } { language-declared } {#2} } { \prop_gput:Nnn \g__zrefclever_languages_prop {#2} {#2} - \prop_new:c { g__zrefclever_dict_ #2 _prop } - \tl_set:Nn \l__zrefclever_dict_language_tl {#2} + \prop_new:c { g__zrefclever_lang_ #2 _prop } + \tl_set:Nn \l__zrefclever_base_language_tl {#2} \keys_set:nn { zref-clever / declarelang } {#1} } } @@ -406,21 +417,21 @@ declension .code:n = { \prop_gput:cnn - { g__zrefclever_dict_ \l__zrefclever_dict_language_tl _prop } + { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop } { declension } {#1} } , declension .value_required:n = true , gender .code:n = { \prop_gput:cnn - { g__zrefclever_dict_ \l__zrefclever_dict_language_tl _prop } + { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop } { gender } {#1} } , gender .value_required:n = true , allcaps .code:n = { \prop_gput:cnn - { g__zrefclever_dict_ \l__zrefclever_dict_language_tl _prop } + { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop } { allcaps } { true } } , allcaps .value_forbidden:n = true , @@ -429,19 +440,19 @@ { \exp_args:NNx \prop_get:NnNTF \g__zrefclever_languages_prop { \l__zrefclever_ref_language_tl } - \l__zrefclever_dict_language_tl + \l__zrefclever_base_language_tl { \exp_args:NNx \seq_set_from_clist:Nn - \l__zrefclever_dict_declension_seq + \l__zrefclever_lang_declension_seq { \prop_item:cn { - g__zrefclever_dict_ - \l__zrefclever_dict_language_tl _prop + g__zrefclever_lang_ + \l__zrefclever_base_language_tl _prop } { declension } } - \seq_if_empty:NTF \l__zrefclever_dict_declension_seq + \seq_if_empty:NTF \l__zrefclever_lang_declension_seq { \tl_if_empty:NF \l__zrefclever_ref_decl_case_tl { @@ -455,33 +466,33 @@ { \tl_if_empty:NTF \l__zrefclever_ref_decl_case_tl { - \seq_get_left:NN \l__zrefclever_dict_declension_seq + \seq_get_left:NN \l__zrefclever_lang_declension_seq \l__zrefclever_ref_decl_case_tl } { - \seq_if_in:NVF \l__zrefclever_dict_declension_seq + \seq_if_in:NVF \l__zrefclever_lang_declension_seq \l__zrefclever_ref_decl_case_tl { \msg_warning:nnxx { zref-clever } { unknown-decl-case } { \l__zrefclever_ref_decl_case_tl } { \l__zrefclever_ref_language_tl } - \seq_get_left:NN \l__zrefclever_dict_declension_seq + \seq_get_left:NN \l__zrefclever_lang_declension_seq \l__zrefclever_ref_decl_case_tl } } } \exp_args:NNx \seq_set_from_clist:Nn - \l__zrefclever_dict_gender_seq + \l__zrefclever_lang_gender_seq { \prop_item:cn { - g__zrefclever_dict_ - \l__zrefclever_dict_language_tl _prop + g__zrefclever_lang_ + \l__zrefclever_base_language_tl _prop } { gender } } - \seq_if_empty:NTF \l__zrefclever_dict_gender_seq + \seq_if_empty:NTF \l__zrefclever_lang_gender_seq { \tl_if_empty:NF \l__zrefclever_ref_gender_tl { @@ -496,7 +507,7 @@ { \tl_if_empty:NF \l__zrefclever_ref_gender_tl { - \seq_if_in:NVF \l__zrefclever_dict_gender_seq + \seq_if_in:NVF \l__zrefclever_lang_gender_seq \l__zrefclever_ref_gender_tl { \msg_warning:nnxx { zref-clever } @@ -511,13 +522,13 @@ { \prop_item:cn { - g__zrefclever_dict_ - \l__zrefclever_dict_language_tl _prop + g__zrefclever_lang_ + \l__zrefclever_base_language_tl _prop } { allcaps } } { true } - { \bool_set_true:N \l__zrefclever_capitalize_bool } + { \prop_put:Nnn \l__zrefclever_ref_options_prop { cap } { true } } } { \tl_if_empty:NF \l__zrefclever_ref_decl_case_tl @@ -538,97 +549,99 @@ } } } -\seq_new:N \g__zrefclever_loaded_dictionaries_seq -\bool_new:N \l__zrefclever_load_dict_verbose_bool -\cs_new_protected:Npn \__zrefclever_provide_dictionary:n #1 +\seq_new:N \g__zrefclever_loaded_langfiles_seq +\bool_new:N \l__zrefclever_load_langfile_verbose_bool +\cs_new_protected:Npn \__zrefclever_provide_langfile:n #1 { \group_begin: \@bsphack \prop_get:NnNTF \g__zrefclever_languages_prop {#1} - \l__zrefclever_dict_language_tl + \l__zrefclever_base_language_tl { \seq_if_in:NVF - \g__zrefclever_loaded_dictionaries_seq - \l__zrefclever_dict_language_tl + \g__zrefclever_loaded_langfiles_seq + \l__zrefclever_base_language_tl { \exp_args:Nx \file_get:nnNTF - { zref-clever- \l__zrefclever_dict_language_tl .dict } + { zref-clever- \l__zrefclever_base_language_tl .lang } { \ExplSyntaxOn } \l_tmpa_tl { \tl_clear:N \l__zrefclever_setup_type_tl \exp_args:NNx \seq_set_from_clist:Nn - \l__zrefclever_dict_declension_seq + \l__zrefclever_lang_declension_seq { \prop_item:cn { - g__zrefclever_dict_ - \l__zrefclever_dict_language_tl _prop + g__zrefclever_lang_ + \l__zrefclever_base_language_tl _prop } { declension } } - \seq_if_empty:NTF \l__zrefclever_dict_declension_seq - { \tl_clear:N \l__zrefclever_dict_decl_case_tl } + \seq_if_empty:NTF \l__zrefclever_lang_declension_seq + { \tl_clear:N \l__zrefclever_lang_decl_case_tl } { - \seq_get_left:NN \l__zrefclever_dict_declension_seq - \l__zrefclever_dict_decl_case_tl + \seq_get_left:NN \l__zrefclever_lang_declension_seq + \l__zrefclever_lang_decl_case_tl } \exp_args:NNx \seq_set_from_clist:Nn - \l__zrefclever_dict_gender_seq + \l__zrefclever_lang_gender_seq { \prop_item:cn { - g__zrefclever_dict_ - \l__zrefclever_dict_language_tl _prop + g__zrefclever_lang_ + \l__zrefclever_base_language_tl _prop } { gender } } - \keys_set:nV { zref-clever / dictionary } \l_tmpa_tl - \seq_gput_right:NV \g__zrefclever_loaded_dictionaries_seq - \l__zrefclever_dict_language_tl - \msg_note:nnx { zref-clever } { dict-loaded } - { \l__zrefclever_dict_language_tl } + \keys_set:nV { zref-clever / langfile } \l_tmpa_tl + \seq_gput_right:NV \g__zrefclever_loaded_langfiles_seq + \l__zrefclever_base_language_tl + \msg_note:nnx { zref-clever } { langfile-loaded } + { \l__zrefclever_base_language_tl } } { - \bool_if:NT \l__zrefclever_load_dict_verbose_bool + \bool_if:NT \l__zrefclever_load_langfile_verbose_bool { - \msg_warning:nnx { zref-clever } { dict-not-available } - { \l__zrefclever_dict_language_tl } + \msg_warning:nnx { zref-clever } { langfile-not-available } + { \l__zrefclever_base_language_tl } } - \seq_gput_right:NV \g__zrefclever_loaded_dictionaries_seq - \l__zrefclever_dict_language_tl + \seq_gput_right:NV \g__zrefclever_loaded_langfiles_seq + \l__zrefclever_base_language_tl } } } { - \bool_if:NT \l__zrefclever_load_dict_verbose_bool + \bool_if:NT \l__zrefclever_load_langfile_verbose_bool { \msg_warning:nnn { zref-clever } { unknown-language-load } {#1} } } \@esphack \group_end: } -\cs_generate_variant:Nn \__zrefclever_provide_dictionary:n { x } -\cs_new_protected:Npn \__zrefclever_provide_dictionary_verbose:n #1 +\cs_generate_variant:Nn \__zrefclever_provide_langfile:n { x } +\cs_new_protected:Npn \__zrefclever_provide_langfile_verbose:n #1 { \group_begin: - \bool_set_true:N \l__zrefclever_load_dict_verbose_bool - \__zrefclever_provide_dictionary:n {#1} + \bool_set_true:N \l__zrefclever_load_langfile_verbose_bool + \__zrefclever_provide_langfile:n {#1} \group_end: } -\cs_generate_variant:Nn \__zrefclever_provide_dictionary_verbose:n { x } -\cs_new_protected:Npn \__zrefclever_provide_dict_type_transl:nn #1#2 +\cs_generate_variant:Nn \__zrefclever_provide_langfile_verbose:n { x } +\cs_new_protected:Npn \__zrefclever_provide_lang_opt_type:nn #1#2 { \exp_args:Nnx \prop_gput_if_new:cnn - { g__zrefclever_dict_ \l__zrefclever_dict_language_tl _prop } + { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop } { type- \l__zrefclever_setup_type_tl - #1 } {#2} } -\cs_new_protected:Npn \__zrefclever_provide_dict_default_transl:nn #1#2 +\cs_generate_variant:Nn \__zrefclever_provide_lang_opt_type:nn { nV } +\cs_new_protected:Npn \__zrefclever_provide_lang_opt_default:nn #1#2 { \prop_gput_if_new:cnn - { g__zrefclever_dict_ \l__zrefclever_dict_language_tl _prop } + { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop } { default- #1 } {#2} } -\keys_define:nn { zref-clever / dictionary } +\cs_generate_variant:Nn \__zrefclever_provide_lang_opt_default:nn { nV } +\keys_define:nn { zref-clever / langfile } { type .code:n = { @@ -636,31 +649,33 @@ { \tl_clear:N \l__zrefclever_setup_type_tl } { \tl_set:Nn \l__zrefclever_setup_type_tl {#1} } } , + case .code:n = { - \seq_if_empty:NTF \l__zrefclever_dict_declension_seq + \seq_if_empty:NTF \l__zrefclever_lang_declension_seq { \msg_info:nnxx { zref-clever } { language-no-decl-setup } - { \l__zrefclever_dict_language_tl } {#1} + { \l__zrefclever_base_language_tl } {#1} } { - \seq_if_in:NnTF \l__zrefclever_dict_declension_seq {#1} - { \tl_set:Nn \l__zrefclever_dict_decl_case_tl {#1} } + \seq_if_in:NnTF \l__zrefclever_lang_declension_seq {#1} + { \tl_set:Nn \l__zrefclever_lang_decl_case_tl {#1} } { \msg_info:nnxx { zref-clever } { unknown-decl-case } - {#1} { \l__zrefclever_dict_language_tl } - \seq_get_left:NN \l__zrefclever_dict_declension_seq - \l__zrefclever_dict_decl_case_tl + {#1} { \l__zrefclever_base_language_tl } + \seq_get_left:NN \l__zrefclever_lang_declension_seq + \l__zrefclever_lang_decl_case_tl } } } , case .value_required:n = true , + gender .code:n = { - \seq_if_empty:NTF \l__zrefclever_dict_gender_seq + \seq_if_empty:NTF \l__zrefclever_lang_gender_seq { \msg_info:nnxxx { zref-clever } { language-no-gender } - { \l__zrefclever_dict_language_tl } { gender } {#1} + { \l__zrefclever_base_language_tl } { gender } {#1} } { \tl_if_empty:NTF \l__zrefclever_setup_type_tl @@ -669,27 +684,71 @@ { option-only-type-specific } { gender } } { - \seq_if_in:NnTF \l__zrefclever_dict_gender_seq {#1} - { \__zrefclever_provide_dict_type_transl:nn { gender } {#1} } + \clist_clear:N \l_tmpa_clist + \clist_map_inline:nn {#1} + { + \seq_if_in:NnTF \l__zrefclever_lang_gender_seq {##1} + { \clist_put_right:Nn \l_tmpa_clist {##1} } + { + \msg_info:nnxx { zref-clever } + { gender-not-declared } + { \l__zrefclever_base_language_tl } {##1} + } + } + \clist_if_empty:NF \l_tmpa_clist { - \msg_info:nnxx { zref-clever } { gender-not-declared } - { \l__zrefclever_dict_language_tl } {#1} + \exp_args:Nnx \__zrefclever_provide_lang_opt_type:nn + { gender } { \clist_use:Nn \l_tmpa_clist { , } } } } } } , gender .value_required:n = true , + + cap .choices:nn = + { true , false } + { + \tl_if_empty:NTF \l__zrefclever_setup_type_tl + { + \__zrefclever_provide_lang_opt_default:nV + { cap } \l_keys_choice_tl + } + { + \__zrefclever_provide_lang_opt_type:nV + { cap } \l_keys_choice_tl + } + } , + cap .default:n = true , + nocap .meta:n = { cap = false } , + nocap .value_forbidden:n = true , + + abbrev .choices:nn = + { true , false } + { + \tl_if_empty:NTF \l__zrefclever_setup_type_tl + { + \__zrefclever_provide_lang_opt_default:nV + { abbrev } \l_keys_choice_tl + } + { + \__zrefclever_provide_lang_opt_type:nV + { abbrev } \l_keys_choice_tl + } + } , + abbrev .default:n = true , + noabbrev .meta:n = { abbrev = false }, + noabbrev .value_forbidden:n = true , } \seq_map_inline:Nn \c__zrefclever_ref_options_necessarily_not_type_specific_seq { - \keys_define:nn { zref-clever / dictionary } + \keys_define:nn { zref-clever / langfile } { #1 .value_required:n = true , #1 .code:n = { \tl_if_empty:NTF \l__zrefclever_setup_type_tl - { \__zrefclever_provide_dict_default_transl:nn {#1} {##1} } + { \__zrefclever_provide_lang_opt_default:nn {#1} {##1} } { \msg_info:nnn { zref-clever } { option-not-type-specific } {#1} @@ -700,21 +759,21 @@ \seq_map_inline:Nn \c__zrefclever_ref_options_possibly_type_specific_seq { - \keys_define:nn { zref-clever / dictionary } + \keys_define:nn { zref-clever / langfile } { #1 .value_required:n = true , #1 .code:n = { \tl_if_empty:NTF \l__zrefclever_setup_type_tl - { \__zrefclever_provide_dict_default_transl:nn {#1} {##1} } - { \__zrefclever_provide_dict_type_transl:nn {#1} {##1} } + { \__zrefclever_provide_lang_opt_default:nn {#1} {##1} } + { \__zrefclever_provide_lang_opt_type:nn {#1} {##1} } } , } } \seq_map_inline:Nn \c__zrefclever_ref_options_type_names_seq { - \keys_define:nn { zref-clever / dictionary } + \keys_define:nn { zref-clever / langfile } { #1 .value_required:n = true , #1 .code:n = @@ -725,18 +784,18 @@ { option-only-type-specific } {#1} } { - \tl_if_empty:NTF \l__zrefclever_dict_decl_case_tl - { \__zrefclever_provide_dict_type_transl:nn {#1} {##1} } + \tl_if_empty:NTF \l__zrefclever_lang_decl_case_tl + { \__zrefclever_provide_lang_opt_type:nn {#1} {##1} } { - \__zrefclever_provide_dict_type_transl:nn - { \l__zrefclever_dict_decl_case_tl - #1 } {##1} + \__zrefclever_provide_lang_opt_type:nn + { \l__zrefclever_lang_decl_case_tl - #1 } {##1} } } } , } } -\prop_new:N \g__zrefclever_fallback_dict_prop -\prop_gset_from_keyval:Nn \g__zrefclever_fallback_dict_prop +\prop_new:N \g__zrefclever_fallback_unknown_lang_prop +\prop_gset_from_keyval:Nn \g__zrefclever_fallback_unknown_lang_prop { tpairsep = {,~} , tlistsep = {,~} , @@ -747,17 +806,17 @@ listsep = {,~} , lastsep = {,~} , rangesep = {\textendash} , - refpre = {} , - refpos = {} , + preref = {} , + postref = {} , } \prg_new_protected_conditional:Npnn - \__zrefclever_get_type_transl:nnnN #1#2#3#4 { F } + \__zrefclever_get_lang_opt_type:nnnN #1#2#3#4 { F } { \prop_get:NnNTF \g__zrefclever_languages_prop {#1} - \l__zrefclever_dict_language_tl + \l__zrefclever_base_language_tl { \prop_get:cnNTF - { g__zrefclever_dict_ \l__zrefclever_dict_language_tl _prop } + { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop } { type- #2 - #3 } #4 { \prg_return_true: } { \prg_return_false: } @@ -765,15 +824,15 @@ { \prg_return_false: } } \prg_generate_conditional_variant:Nnn - \__zrefclever_get_type_transl:nnnN { xxxN , xxnN } { F } + \__zrefclever_get_lang_opt_type:nnnN { xxxN , xxnN } { F } \prg_new_protected_conditional:Npnn - \__zrefclever_get_default_transl:nnN #1#2#3 { F } + \__zrefclever_get_lang_opt_default:nnN #1#2#3 { F } { \prop_get:NnNTF \g__zrefclever_languages_prop {#1} - \l__zrefclever_dict_language_tl + \l__zrefclever_base_language_tl { \prop_get:cnNTF - { g__zrefclever_dict_ \l__zrefclever_dict_language_tl _prop } + { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop } { default- #2 } #3 { \prg_return_true: } { \prg_return_false: } @@ -781,11 +840,11 @@ { \prg_return_false: } } \prg_generate_conditional_variant:Nnn - \__zrefclever_get_default_transl:nnN { xnN } { F } + \__zrefclever_get_lang_opt_default:nnN { xnN } { F } \prg_new_protected_conditional:Npnn - \__zrefclever_get_fallback_transl:nN #1#2 { F } + \__zrefclever_get_fallback_unknown_lang_opt:nN #1#2 { F } { - \prop_get:NnNTF \g__zrefclever_fallback_dict_prop + \prop_get:NnNTF \g__zrefclever_fallback_unknown_lang_prop { #1 } #2 { \prg_return_true: } { \prg_return_false: } @@ -881,26 +940,50 @@ range .initial:n = false , range .default:n = true , } -\bool_new:N \l__zrefclever_capitalize_bool \bool_new:N \l__zrefclever_capitalize_first_bool \keys_define:nn { zref-clever / reference } { - cap .bool_set:N = \l__zrefclever_capitalize_bool , - cap .initial:n = false , + cap .code:n = + { + \tl_if_empty:nTF {#1} + { \prop_remove:Nn \l__zrefclever_ref_options_prop { cap } } + { + \bool_lazy_or:nnTF + { \str_if_eq_p:nn {#1} { true } } + { \str_if_eq_p:nn {#1} { false } } + { \prop_put:Nnn \l__zrefclever_ref_options_prop { cap } {#1} } + { + \msg_warning:nnn { zref-clever } + { key-boolean-or-empty } {#1} + } + } + } , cap .default:n = true , - nocap .meta:n = { cap = false }, + nocap .meta:n = { cap = false } , nocap .value_forbidden:n = true , capfirst .bool_set:N = \l__zrefclever_capitalize_first_bool , capfirst .initial:n = false , capfirst .default:n = true , } -\bool_new:N \l__zrefclever_abbrev_bool \bool_new:N \l__zrefclever_noabbrev_first_bool \keys_define:nn { zref-clever / reference } { - abbrev .bool_set:N = \l__zrefclever_abbrev_bool , - abbrev .initial:n = false , + abbrev .code:n = + { + \tl_if_empty:nTF {#1} + { \prop_remove:Nn \l__zrefclever_ref_options_prop { abbrev } } + { + \bool_lazy_or:nnTF + { \str_if_eq_p:nn {#1} { true } } + { \str_if_eq_p:nn {#1} { false } } + { \prop_put:Nnn \l__zrefclever_ref_options_prop { abbrev } {#1} } + { + \msg_warning:nnn { zref-clever } + { key-boolean-or-empty } {#1} + } + } + } , abbrev .default:n = true , noabbrev .meta:n = { abbrev = false }, noabbrev .value_forbidden:n = true , @@ -1015,7 +1098,7 @@ { \tl_set:Nn \l__zrefclever_ref_language_tl { \l__zrefclever_current_language_tl } - \__zrefclever_provide_dictionary_verbose:x + \__zrefclever_provide_langfile_verbose:x { \l__zrefclever_ref_language_tl } } @@ -1023,7 +1106,7 @@ { \tl_set:Nn \l__zrefclever_ref_language_tl { \l__zrefclever_main_language_tl } - \__zrefclever_provide_dictionary_verbose:x + \__zrefclever_provide_langfile_verbose:x { \l__zrefclever_ref_language_tl } } } @@ -1036,7 +1119,7 @@ \tl_set:Nn \l__zrefclever_ref_language_tl { \l__zrefclever_current_language_tl } } - \__zrefclever_provide_dictionary_verbose:x + \__zrefclever_provide_langfile_verbose:x { \l__zrefclever_ref_language_tl } } } @@ -1047,7 +1130,7 @@ { \AddToHook { begindocument } { - \__zrefclever_provide_dictionary:x { \l__zrefclever_ref_language_tl } + \__zrefclever_provide_langfile:x { \l__zrefclever_ref_language_tl } \keys_define:nn { zref-clever / reference } { lang .code:n = @@ -1058,7 +1141,7 @@ { \tl_set:Nn \l__zrefclever_ref_language_tl { \l__zrefclever_current_language_tl } - \__zrefclever_provide_dictionary:x + \__zrefclever_provide_langfile:x { \l__zrefclever_ref_language_tl } } @@ -1066,7 +1149,7 @@ { \tl_set:Nn \l__zrefclever_ref_language_tl { \l__zrefclever_main_language_tl } - \__zrefclever_provide_dictionary:x + \__zrefclever_provide_langfile:x { \l__zrefclever_ref_language_tl } } } @@ -1079,7 +1162,7 @@ \tl_set:Nn \l__zrefclever_ref_language_tl { \l__zrefclever_current_language_tl } } - \__zrefclever_provide_dictionary:x + \__zrefclever_provide_langfile:x { \l__zrefclever_ref_language_tl } } } , @@ -1377,6 +1460,21 @@ } , } } +\keys_define:nn { zref-clever / reference } + { + refpre .code:n = + { + % NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha. + \msg_warning:nnnn { zref-clever }{ option-deprecated } + { refpre } { preref } + } , + refpos .code:n = + { + % NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha. + \msg_warning:nnnn { zref-clever }{ option-deprecated } + { refpos } { postref } + } , + } \keys_define:nn { } { zref-clever / zcsetup .inherit:n = @@ -1398,6 +1496,74 @@ \tl_set:Nn \l__zrefclever_setup_type_tl {#1} \keys_set:nn { zref-clever / typesetup } {#2} } +\keys_define:nn { zref-clever / typesetup } + { + cap .code:n = + { + \tl_if_empty:nTF {#1} + { + \prop_remove:cn + { + l__zrefclever_type_ + \l__zrefclever_setup_type_tl _options_prop + } + { cap } + } + { + \bool_lazy_or:nnTF + { \str_if_eq_p:nn {#1} { true } } + { \str_if_eq_p:nn {#1} { false } } + { + \prop_put:cnn + { + l__zrefclever_type_ + \l__zrefclever_setup_type_tl _options_prop + } + { cap } {#1} + } + { + \msg_warning:nnn { zref-clever } + { key-boolean-or-empty } {#1} + } + } + } , + cap .default:n = true , + nocap .meta:n = { cap = false } , + nocap .value_forbidden:n = true , + + abbrev .code:n = + { + \tl_if_empty:nTF {#1} + { + \prop_remove:cn + { + l__zrefclever_type_ + \l__zrefclever_setup_type_tl _options_prop + } + { abbrev } + } + { + \bool_lazy_or:nnTF + { \str_if_eq_p:nn {#1} { true } } + { \str_if_eq_p:nn {#1} { false } } + { + \prop_put:cnn + { + l__zrefclever_type_ + \l__zrefclever_setup_type_tl _options_prop + } + { abbrev } {#1} + } + { + \msg_warning:nnn { zref-clever } + { key-boolean-or-empty } {#1} + } + } + } , + abbrev .default:n = true , + noabbrev .meta:n = { abbrev = false }, + noabbrev .value_forbidden:n = true , + } \seq_map_inline:Nn \c__zrefclever_ref_options_necessarily_not_type_specific_seq { @@ -1438,36 +1604,51 @@ } , } } +\keys_define:nn { zref-clever / typesetup } + { + refpre .code:n = + { + % NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha. + \msg_warning:nnnn { zref-clever }{ option-deprecated } + { refpre } { preref } + } , + refpos .code:n = + { + % NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha. + \msg_warning:nnnn { zref-clever }{ option-deprecated } + { refpos } { postref } + } , + } \NewDocumentCommand \zcLanguageSetup { m m } { \group_begin: \prop_get:NnNTF \g__zrefclever_languages_prop {#1} - \l__zrefclever_dict_language_tl + \l__zrefclever_base_language_tl { \tl_clear:N \l__zrefclever_setup_type_tl \exp_args:NNx \seq_set_from_clist:Nn - \l__zrefclever_dict_declension_seq + \l__zrefclever_lang_declension_seq { \prop_item:cn { - g__zrefclever_dict_ - \l__zrefclever_dict_language_tl _prop + g__zrefclever_lang_ + \l__zrefclever_base_language_tl _prop } { declension } } - \seq_if_empty:NTF \l__zrefclever_dict_declension_seq - { \tl_clear:N \l__zrefclever_dict_decl_case_tl } + \seq_if_empty:NTF \l__zrefclever_lang_declension_seq + { \tl_clear:N \l__zrefclever_lang_decl_case_tl } { - \seq_get_left:NN \l__zrefclever_dict_declension_seq - \l__zrefclever_dict_decl_case_tl + \seq_get_left:NN \l__zrefclever_lang_declension_seq + \l__zrefclever_lang_decl_case_tl } \exp_args:NNx \seq_set_from_clist:Nn - \l__zrefclever_dict_gender_seq + \l__zrefclever_lang_gender_seq { \prop_item:cn { - g__zrefclever_dict_ - \l__zrefclever_dict_language_tl _prop + g__zrefclever_lang_ + \l__zrefclever_base_language_tl _prop } { gender } } @@ -1477,18 +1658,19 @@ \group_end: } \@onlypreamble \zcLanguageSetup -\cs_new_protected:Npn \__zrefclever_declare_type_transl:nnnn #1#2#3#4 +\cs_new_protected:Npn \__zrefclever_declare_lang_opt_type:nnnn #1#2#3#4 { - \prop_gput:cnn { g__zrefclever_dict_ #1 _prop } + \prop_gput:cnn { g__zrefclever_lang_ #1 _prop } { type- #2 - #3 } {#4} } -\cs_generate_variant:Nn \__zrefclever_declare_type_transl:nnnn { VVnn , VVxn } -\cs_new_protected:Npn \__zrefclever_declare_default_transl:nnn #1#2#3 +\cs_generate_variant:Nn + \__zrefclever_declare_lang_opt_type:nnnn { VVnn , VVxn , VVnx , VVnV } +\cs_new_protected:Npn \__zrefclever_declare_lang_opt_default:nnn #1#2#3 { - \prop_gput:cnn { g__zrefclever_dict_ #1 _prop } + \prop_gput:cnn { g__zrefclever_lang_ #1 _prop } { default- #2 } {#3} } -\cs_generate_variant:Nn \__zrefclever_declare_default_transl:nnn { Vnn } +\cs_generate_variant:Nn \__zrefclever_declare_lang_opt_default:nnn { Vnn , VnV } \keys_define:nn { zref-clever / langsetup } { type .code:n = @@ -1497,31 +1679,33 @@ { \tl_clear:N \l__zrefclever_setup_type_tl } { \tl_set:Nn \l__zrefclever_setup_type_tl {#1} } } , + case .code:n = { - \seq_if_empty:NTF \l__zrefclever_dict_declension_seq + \seq_if_empty:NTF \l__zrefclever_lang_declension_seq { \msg_warning:nnxx { zref-clever } { language-no-decl-setup } - { \l__zrefclever_dict_language_tl } {#1} + { \l__zrefclever_base_language_tl } {#1} } { - \seq_if_in:NnTF \l__zrefclever_dict_declension_seq {#1} - { \tl_set:Nn \l__zrefclever_dict_decl_case_tl {#1} } + \seq_if_in:NnTF \l__zrefclever_lang_declension_seq {#1} + { \tl_set:Nn \l__zrefclever_lang_decl_case_tl {#1} } { \msg_warning:nnxx { zref-clever } { unknown-decl-case } - {#1} { \l__zrefclever_dict_language_tl } - \seq_get_left:NN \l__zrefclever_dict_declension_seq - \l__zrefclever_dict_decl_case_tl + {#1} { \l__zrefclever_base_language_tl } + \seq_get_left:NN \l__zrefclever_lang_declension_seq + \l__zrefclever_lang_decl_case_tl } } } , case .value_required:n = true , + gender .code:n = { - \seq_if_empty:NTF \l__zrefclever_dict_gender_seq + \seq_if_empty:NTF \l__zrefclever_lang_gender_seq { \msg_warning:nnxxx { zref-clever } { language-no-gender } - { \l__zrefclever_dict_language_tl } { gender } {#1} + { \l__zrefclever_base_language_tl } { gender } {#1} } { \tl_if_empty:NTF \l__zrefclever_setup_type_tl @@ -1530,21 +1714,68 @@ { option-only-type-specific } { gender } } { - \seq_if_in:NnTF \l__zrefclever_dict_gender_seq {#1} + \clist_clear:N \l_tmpa_clist + \clist_map_inline:nn {#1} { - \__zrefclever_declare_type_transl:VVnn - \l__zrefclever_dict_language_tl - \l__zrefclever_setup_type_tl - { gender } {#1} + \seq_if_in:NnTF \l__zrefclever_lang_gender_seq {##1} + { \clist_put_right:Nn \l_tmpa_clist {##1} } + { + \msg_warning:nnxx { zref-clever } + { gender-not-declared } + { \l__zrefclever_base_language_tl } {##1} + } } + \clist_if_empty:NF \l_tmpa_clist { - \msg_warning:nnxx { zref-clever } { gender-not-declared } - { \l__zrefclever_dict_language_tl } {#1} + \__zrefclever_declare_lang_opt_type:VVnx + \l__zrefclever_base_language_tl + \l__zrefclever_setup_type_tl + { gender } { \clist_use:Nn \l_tmpa_clist { , } } } } } } , gender .value_required:n = true , + + cap .choices:nn = + { true , false } + { + \tl_if_empty:NTF \l__zrefclever_setup_type_tl + { + \__zrefclever_declare_lang_opt_default:VnV + \l__zrefclever_base_language_tl + { cap } \l_keys_choice_tl + } + { + \__zrefclever_declare_lang_opt_type:VVnV + \l__zrefclever_base_language_tl + \l__zrefclever_setup_type_tl + { cap } \l_keys_choice_tl + } + } , + cap .default:n = true , + nocap .meta:n = { cap = false } , + nocap .value_forbidden:n = true , + + abbrev .choices:nn = + { true , false } + { + \tl_if_empty:NTF \l__zrefclever_setup_type_tl + { + \__zrefclever_declare_lang_opt_default:VnV + \l__zrefclever_base_language_tl + { abbrev } \l_keys_choice_tl + } + { + \__zrefclever_declare_lang_opt_type:VVnV + \l__zrefclever_base_language_tl + \l__zrefclever_setup_type_tl + { abbrev } \l_keys_choice_tl + } + } , + abbrev .default:n = true , + noabbrev .meta:n = { abbrev = false }, + noabbrev .value_forbidden:n = true , } \seq_map_inline:Nn \c__zrefclever_ref_options_necessarily_not_type_specific_seq @@ -1556,8 +1787,8 @@ { \tl_if_empty:NTF \l__zrefclever_setup_type_tl { - \__zrefclever_declare_default_transl:Vnn - \l__zrefclever_dict_language_tl + \__zrefclever_declare_lang_opt_default:Vnn + \l__zrefclever_base_language_tl {#1} {##1} } { @@ -1577,19 +1808,34 @@ { \tl_if_empty:NTF \l__zrefclever_setup_type_tl { - \__zrefclever_declare_default_transl:Vnn - \l__zrefclever_dict_language_tl + \__zrefclever_declare_lang_opt_default:Vnn + \l__zrefclever_base_language_tl {#1} {##1} } { - \__zrefclever_declare_type_transl:VVnn - \l__zrefclever_dict_language_tl + \__zrefclever_declare_lang_opt_type:VVnn + \l__zrefclever_base_language_tl \l__zrefclever_setup_type_tl {#1} {##1} } } , } } +\keys_define:nn { zref-clever / langsetup } + { + refpre .code:n = + { + % NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha. + \msg_warning:nnnn { zref-clever }{ option-deprecated } + { refpre } { preref } + } , + refpos .code:n = + { + % NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha. + \msg_warning:nnnn { zref-clever }{ option-deprecated } + { refpos } { postref } + } , + } \seq_map_inline:Nn \c__zrefclever_ref_options_type_names_seq { @@ -1604,18 +1850,18 @@ { option-only-type-specific } {#1} } { - \tl_if_empty:NTF \l__zrefclever_dict_decl_case_tl + \tl_if_empty:NTF \l__zrefclever_lang_decl_case_tl { - \__zrefclever_declare_type_transl:VVnn - \l__zrefclever_dict_language_tl + \__zrefclever_declare_lang_opt_type:VVnn + \l__zrefclever_base_language_tl \l__zrefclever_setup_type_tl {#1} {##1} } { - \__zrefclever_declare_type_transl:VVxn - \l__zrefclever_dict_language_tl + \__zrefclever_declare_lang_opt_type:VVxn + \l__zrefclever_base_language_tl \l__zrefclever_setup_type_tl - { \l__zrefclever_dict_decl_case_tl - #1 } {##1} + { \l__zrefclever_lang_decl_case_tl - #1 } {##1} } } } , @@ -1629,7 +1875,7 @@ \keys_set:nn { zref-clever / reference } {#3} \seq_set_from_clist:Nn \l__zrefclever_zcref_labels_seq {#1} \bool_set:Nn \l__zrefclever_link_star_bool {#2} - \__zrefclever_provide_dictionary:x { \l__zrefclever_ref_language_tl } + \__zrefclever_provide_langfile:x { \l__zrefclever_ref_language_tl } \__zrefclever_process_language_options: \bool_lazy_and:nnT { \l__zrefclever_zrefcheck_available_bool } @@ -1645,7 +1891,7 @@ \group_end: \tl_if_empty:NF \l__zrefclever_zcref_note_tl { - \__zrefclever_get_ref_string:nN { notesep } \l_tmpa_tl + \__zrefclever_get_ref_opt_typeset:nN { notesep } \l_tmpa_tl \l_tmpa_tl \l__zrefclever_zcref_note_tl } @@ -1726,7 +1972,7 @@ } \cs_new_protected:Npn \__zrefclever_label_type_put_new_right:n #1 { - \__zrefclever_def_extract:Nnnn + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_type_a_tl {#1} { zc@type } { \c_empty_tl } \seq_if_in:NVF \l__zrefclever_label_types_seq \l__zrefclever_label_type_a_tl @@ -1737,9 +1983,9 @@ } \cs_new_protected:Npn \__zrefclever_sort_default:nn #1#2 { - \__zrefclever_def_extract:Nnnn + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_type_a_tl {#1} { zc@type } { zc@missingtype } - \__zrefclever_def_extract:Nnnn + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_type_b_tl {#2} { zc@type } { zc@missingtype } \tl_if_eq:NNTF @@ -1750,15 +1996,15 @@ } \cs_new_protected:Npn \__zrefclever_sort_default_same_type:nn #1#2 { - \__zrefclever_def_extract:Nnnn \l__zrefclever_label_enclval_a_tl + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_enclval_a_tl {#1} { zc@enclval } { \c_empty_tl } \tl_reverse:N \l__zrefclever_label_enclval_a_tl - \__zrefclever_def_extract:Nnnn \l__zrefclever_label_enclval_b_tl + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_enclval_b_tl {#2} { zc@enclval } { \c_empty_tl } \tl_reverse:N \l__zrefclever_label_enclval_b_tl - \__zrefclever_def_extract:Nnnn \l__zrefclever_label_extdoc_a_tl + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_a_tl {#1} { externaldocument } { \c_empty_tl } - \__zrefclever_def_extract:Nnnn \l__zrefclever_label_extdoc_b_tl + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_b_tl {#2} { externaldocument } { \c_empty_tl } \bool_set_false:N \l__zrefclever_sort_decided_bool @@ -1968,10 +2214,12 @@ \tl_new:N \l__zrefclever_listsep_tl \tl_new:N \l__zrefclever_lastsep_tl \tl_new:N \l__zrefclever_rangesep_tl -\tl_new:N \l__zrefclever_refpre_tl -\tl_new:N \l__zrefclever_refpos_tl +\tl_new:N \l__zrefclever_preref_tl +\tl_new:N \l__zrefclever_postref_tl \tl_new:N \l__zrefclever_namefont_tl \tl_new:N \l__zrefclever_reffont_tl +\bool_new:N \l__zrefclever_capitalize_bool +\bool_new:N \l__zrefclever_abbrev_bool \bool_new:N \l__zrefclever_verbose_testing_bool \cs_new_protected:Npn \__zrefclever_typeset_refs: { @@ -1988,11 +2236,11 @@ \int_zero:N \l__zrefclever_range_same_count_int % Get type block options (not type-specific). - \__zrefclever_get_ref_string:nN { tpairsep } + \__zrefclever_get_ref_opt_typeset:nN { tpairsep } \l__zrefclever_tpairsep_tl - \__zrefclever_get_ref_string:nN { tlistsep } + \__zrefclever_get_ref_opt_typeset:nN { tlistsep } \l__zrefclever_tlistsep_tl - \__zrefclever_get_ref_string:nN { tlastsep } + \__zrefclever_get_ref_opt_typeset:nN { tlastsep } \l__zrefclever_tlastsep_tl % Process label stack. @@ -2017,9 +2265,11 @@ \tl_set:Nn \l__zrefclever_label_type_b_tl { page } } { - \__zrefclever_def_extract:NVnn \l__zrefclever_label_type_a_tl + \__zrefclever_extract_default:NVnn + \l__zrefclever_label_type_a_tl \l__zrefclever_label_a_tl { zc@type } { zc@missingtype } - \__zrefclever_def_extract:NVnn \l__zrefclever_label_type_b_tl + \__zrefclever_extract_default:NVnn + \l__zrefclever_label_type_b_tl \l__zrefclever_label_b_tl { zc@type } { zc@missingtype } } @@ -2073,28 +2323,32 @@ } } - % Get type-specific separators, refpre/pos and font options, once per - % type. + % Get type-specific separators, pre-/postref font and other options, + % once per type. \int_compare:nNnT { \l__zrefclever_label_count_int } = { 0 } { - \__zrefclever_get_ref_string:nN { namesep } + \__zrefclever_get_ref_opt_typeset:nN { namesep } \l__zrefclever_namesep_tl - \__zrefclever_get_ref_string:nN { pairsep } + \__zrefclever_get_ref_opt_typeset:nN { pairsep } \l__zrefclever_pairsep_tl - \__zrefclever_get_ref_string:nN { listsep } + \__zrefclever_get_ref_opt_typeset:nN { listsep } \l__zrefclever_listsep_tl - \__zrefclever_get_ref_string:nN { lastsep } + \__zrefclever_get_ref_opt_typeset:nN { lastsep } \l__zrefclever_lastsep_tl - \__zrefclever_get_ref_string:nN { rangesep } + \__zrefclever_get_ref_opt_typeset:nN { rangesep } \l__zrefclever_rangesep_tl - \__zrefclever_get_ref_string:nN { refpre } - \l__zrefclever_refpre_tl - \__zrefclever_get_ref_string:nN { refpos } - \l__zrefclever_refpos_tl - \__zrefclever_get_ref_font:nN { namefont } + \__zrefclever_get_ref_opt_typeset:nN { preref } + \l__zrefclever_preref_tl + \__zrefclever_get_ref_opt_typeset:nN { postref } + \l__zrefclever_postref_tl + \__zrefclever_get_ref_opt_font:nN { namefont } \l__zrefclever_namefont_tl - \__zrefclever_get_ref_font:nN { reffont } + \__zrefclever_get_ref_opt_font:nN { reffont } \l__zrefclever_reffont_tl + \__zrefclever_get_ref_opt_bool:nnN { cap } { false } + \l__zrefclever_capitalize_bool + \__zrefclever_get_ref_opt_bool:nnN { abbrev } { false } + \l__zrefclever_abbrev_bool } % Here we send this to a couple of auxiliary functions. @@ -2565,33 +2819,33 @@ } { \bool_if:NF \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpre_tl } + { \exp_not:V \l__zrefclever_preref_tl } % It's two `@s', but escaped for DocStrip. \exp_not:N \hyper@@link { \__zrefclever_extract_url_unexp:n {#1} } { \__zrefclever_extract_unexp:nnn {#1} { anchor } { } } { \bool_if:NT \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpre_tl } + { \exp_not:V \l__zrefclever_preref_tl } \exp_not:N \group_begin: \exp_not:V \l__zrefclever_reffont_tl \__zrefclever_extract_unexp:nvn {#1} { l__zrefclever_ref_property_tl } { } \exp_not:N \group_end: \bool_if:NT \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpos_tl } + { \exp_not:V \l__zrefclever_postref_tl } } \bool_if:NF \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpos_tl } + { \exp_not:V \l__zrefclever_postref_tl } } { - \exp_not:V \l__zrefclever_refpre_tl + \exp_not:V \l__zrefclever_preref_tl \exp_not:N \group_begin: \exp_not:V \l__zrefclever_reffont_tl \__zrefclever_extract_unexp:nvn {#1} { l__zrefclever_ref_property_tl } { } \exp_not:N \group_end: - \exp_not:V \l__zrefclever_refpos_tl + \exp_not:V \l__zrefclever_postref_tl } } { \__zrefclever_ref_default: } @@ -2624,7 +2878,7 @@ \exp_not:V \l__zrefclever_type_name_tl \exp_not:N \group_end: \exp_not:V \l__zrefclever_namesep_tl - \exp_not:V \l__zrefclever_refpre_tl + \exp_not:V \l__zrefclever_preref_tl \exp_not:N \group_begin: \exp_not:V \l__zrefclever_reffont_tl \__zrefclever_extract_unexp:Vvn @@ -2632,10 +2886,10 @@ { l__zrefclever_ref_property_tl } { } \exp_not:N \group_end: \bool_if:NT \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpos_tl } + { \exp_not:V \l__zrefclever_postref_tl } } \bool_if:NF \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpos_tl } + { \exp_not:V \l__zrefclever_postref_tl } } { \exp_not:N \group_begin: @@ -2670,7 +2924,7 @@ } { \bool_if:NF \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpre_tl } + { \exp_not:V \l__zrefclever_preref_tl } % It's two '@s', but escaped for DocStrip. \exp_not:N \hyper@@link { @@ -2683,7 +2937,7 @@ } { \bool_if:NT \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpre_tl } + { \exp_not:V \l__zrefclever_preref_tl } \exp_not:N \group_begin: \exp_not:V \l__zrefclever_reffont_tl \__zrefclever_extract_unexp:Vvn @@ -2691,20 +2945,20 @@ { l__zrefclever_ref_property_tl } { } \exp_not:N \group_end: \bool_if:NT \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpos_tl } + { \exp_not:V \l__zrefclever_postref_tl } } \bool_if:NF \l__zrefclever_preposinlink_bool - { \exp_not:V \l__zrefclever_refpos_tl } + { \exp_not:V \l__zrefclever_postref_tl } } { - \exp_not:V \l__zrefclever_refpre_tl + \exp_not:V \l__zrefclever_preref_tl \exp_not:N \group_begin: \exp_not:V \l__zrefclever_reffont_tl \__zrefclever_extract_unexp:Vvn \l__zrefclever_type_first_label_tl { l__zrefclever_ref_property_tl } { } \exp_not:N \group_end: - \exp_not:V \l__zrefclever_refpos_tl + \exp_not:V \l__zrefclever_postref_tl } } { \__zrefclever_ref_default: } @@ -2780,15 +3034,17 @@ { \l__zrefclever_nudge_gender_bool } { ! \tl_if_empty_p:N \l__zrefclever_ref_gender_tl } { - \__zrefclever_get_type_transl:xxnNF + \__zrefclever_get_lang_opt_type:xxnNF { \l__zrefclever_ref_language_tl } { \l__zrefclever_type_first_label_type_tl } { gender } \l__zrefclever_type_name_gender_tl { \tl_clear:N \l__zrefclever_type_name_gender_tl } - \tl_if_eq:NNF - \l__zrefclever_ref_gender_tl + \clist_set:NV \l_tmpa_clist \l__zrefclever_type_name_gender_tl + \clist_if_in:NVF + \l_tmpa_clist + \l__zrefclever_ref_gender_tl { \tl_if_empty:NTF \l__zrefclever_type_name_gender_tl { @@ -2826,7 +3082,7 @@ \tl_put_left:NV \l__zrefclever_name_format_tl \l__zrefclever_ref_decl_case_tl } - \__zrefclever_get_type_transl:xxxNF + \__zrefclever_get_lang_opt_type:xxxNF { \l__zrefclever_ref_language_tl } { \l__zrefclever_type_first_label_type_tl } { \l__zrefclever_name_format_tl } @@ -2868,13 +3124,13 @@ \l__zrefclever_name_format_fallback_tl \l__zrefclever_ref_decl_case_tl } - \__zrefclever_get_type_transl:xxxNF + \__zrefclever_get_lang_opt_type:xxxNF { \l__zrefclever_ref_language_tl } { \l__zrefclever_type_first_label_type_tl } { \l__zrefclever_name_format_tl } \l__zrefclever_type_name_tl { - \__zrefclever_get_type_transl:xxxNF + \__zrefclever_get_lang_opt_type:xxxNF { \l__zrefclever_ref_language_tl } { \l__zrefclever_type_first_label_type_tl } { \l__zrefclever_name_format_fallback_tl } @@ -2934,9 +3190,9 @@ \cs_generate_variant:Nn \__zrefclever_extract_url_unexp:n { V } \cs_new_protected:Npn \__zrefclever_labels_in_sequence:nn #1#2 { - \__zrefclever_def_extract:Nnnn \l__zrefclever_label_extdoc_a_tl + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_a_tl {#1} { externaldocument } { \c_empty_tl } - \__zrefclever_def_extract:Nnnn \l__zrefclever_label_extdoc_b_tl + \__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_b_tl {#2} { externaldocument } { \c_empty_tl } \tl_if_eq:NNT @@ -3008,7 +3264,7 @@ } } } -\cs_new_protected:Npn \__zrefclever_get_ref_string:nN #1#2 +\cs_new_protected:Npn \__zrefclever_get_ref_opt_typeset:nN #1#2 { % First attempt: general options. \prop_get:NnNF \l__zrefclever_ref_options_prop {#1} #2 @@ -3039,19 +3295,19 @@ {#1} #2 } { - % If not found, try type specific translations. - \__zrefclever_get_type_transl:xxnNF + % If not found, try type- and language-specific. + \__zrefclever_get_lang_opt_type:xxnNF { \l__zrefclever_ref_language_tl } { \l__zrefclever_label_type_a_tl } {#1} #2 { - % If not found, try default translations. - \__zrefclever_get_default_transl:xnNF + % If not found, try language-specific default. + \__zrefclever_get_lang_opt_default:xnNF { \l__zrefclever_ref_language_tl } {#1} #2 { % If not found, try fallback. - \__zrefclever_get_fallback_transl:nNF {#1} #2 + \__zrefclever_get_fallback_unknown_lang_opt:nNF {#1} #2 { \tl_clear:N #2 \msg_warning:nnn { zref-clever } @@ -3062,7 +3318,7 @@ } } } -\cs_new_protected:Npn \__zrefclever_get_ref_font:nN #1#2 +\cs_new_protected:Npn \__zrefclever_get_ref_opt_font:nN #1#2 { % First attempt: general options. \prop_get:NnNF \l__zrefclever_ref_options_prop {#1} #2 @@ -3088,6 +3344,65 @@ { \tl_clear:N #2 } } } +\cs_new_protected:Npn \__zrefclever_get_ref_opt_bool:nnN #1#2#3 + { + % First attempt: general options. + \prop_get:NnNF \l__zrefclever_ref_options_prop {#1} \l_tmpa_tl + { + % If not found, try type specific options. + \bool_lazy_and:nnTF + { + \prop_if_exist_p:c + { + l__zrefclever_type_ + \l__zrefclever_label_type_a_tl _options_prop + } + } + { + \prop_if_in_p:cn + { + l__zrefclever_type_ + \l__zrefclever_label_type_a_tl _options_prop + } + {#1} + } + { + \prop_get:cnN + { + l__zrefclever_type_ + \l__zrefclever_label_type_a_tl _options_prop + } + {#1} \l_tmpa_tl + } + { + % If not found, try type- and language-specific. + \__zrefclever_get_lang_opt_type:xxnNF + { \l__zrefclever_ref_language_tl } + { \l__zrefclever_label_type_a_tl } + {#1} \l_tmpa_tl + { + % If not found, try language-specific default. + \__zrefclever_get_lang_opt_default:xnNF + { \l__zrefclever_ref_language_tl } + {#1} \l_tmpa_tl + { + % If not found, use default argument. + \bool_lazy_or:nnTF + { \str_if_eq_p:nn {#2} { true } } + { \str_if_eq_p:nn {#2} { false } } + { \tl_set:Nn \l_tmpa_tl {#2} } + { + % And, if even that fails, presume false. + \tl_set:Nn \l_tmpa_tl { false } + } + } + } + } + } + % Having retrieved the option value, set the boolean. At this point, we + % *know* '\l_tmpa_tl' is either 'true' or 'false'. + \use:c { bool_set_ \l_tmpa_tl :N } #3 + } \__zrefclever_compat_module:nn { appendix } { \AddToHook { cmd / appendix / before } @@ -3325,8 +3640,8 @@ \zcRefTypeSetup { equation } { reffont = \upshape , - refpre = {\textup{(}} , - refpos = {\textup{)}} , + preref = {\textup{(}} , + postref = {\textup{)}} , } \msg_info:nnn { zref-clever } { compat-package } { amsmath } } @@ -3514,6 +3829,7 @@ \zcDeclareLanguageAlias { brazil } { portuguese } \zcDeclareLanguageAlias { portuges } { portuguese } \zcDeclareLanguage [ gender = { f , m } ] { spanish } +\zcDeclareLanguage [ gender = { f , m , n } ] { dutch } %% %% %% End of file `zref-clever.sty'. |