summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/zref-clever/zref-clever-dutch.lang6
-rw-r--r--Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang4
-rw-r--r--Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang4
-rw-r--r--Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang4
-rw-r--r--Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang4
-rw-r--r--Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang4
-rw-r--r--Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty2568
7 files changed, 1707 insertions, 887 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
index 26d2d0cb821..41c8c90a50c 100644
--- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-dutch.lang
+++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-dutch.lang
@@ -161,8 +161,8 @@ type = equation ,
name-sg-ab = vgl. ,
Name-pl-ab = Vgl.'s ,
name-pl-ab = vgl.'s ,
- preref = {(} ,
- postref = {)} ,
+ refbounds-first-sg = {,(,),} ,
+ refbounds = {(,,,)} ,
type = theorem ,
gender = f ,
@@ -170,6 +170,7 @@ type = theorem ,
name-sg = stelling ,
Name-pl = Stellingen ,
name-pl = stellingen ,
+
type = lemma ,
gender = n ,
Name-sg = Lemma ,
@@ -232,6 +233,7 @@ type = algorithm ,
name-sg = algoritme ,
Name-pl = Algoritmes ,
name-pl = algoritmes ,
+
type = listing ,
gender = m ,
Name-sg = Listing ,
diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang
index bc51e268916..63d7fb66f01 100644
--- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang
+++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-english.lang
@@ -154,8 +154,8 @@ type = equation ,
name-sg-ab = eq. ,
Name-pl-ab = Eqs. ,
name-pl-ab = eqs. ,
- preref = {(} ,
- postref = {)} ,
+ refbounds-first-sg = {,(,),} ,
+ refbounds = {(,,,)} ,
type = theorem ,
Name-sg = Theorem ,
diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang
index 81f4f69c206..0518b3af6ad 100644
--- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang
+++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-french.lang
@@ -157,8 +157,8 @@ type = equation ,
name-sg = équation ,
Name-pl = Équations ,
name-pl = équations ,
- preref = {(} ,
- postref = {)} ,
+ refbounds-first-sg = {,(,),} ,
+ refbounds = {(,,,)} ,
type = theorem ,
gender = m ,
diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang
index 610818f09fd..c1e39cc917c 100644
--- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang
+++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-german.lang
@@ -285,8 +285,8 @@ type = equation ,
case = G ,
Name-sg = Gleichung ,
Name-pl = Gleichungen ,
- preref = {(} ,
- postref = {)} ,
+ refbounds-first-sg = {,(,),} ,
+ refbounds = {(,,,)} ,
type = theorem ,
gender = n ,
diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang
index 6e02ea9dd0b..c0750f8aede 100644
--- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang
+++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-portuguese.lang
@@ -169,8 +169,8 @@ type = equation ,
name-sg-ab = eq. ,
Name-pl-ab = Eqs. ,
name-pl-ab = eqs. ,
- preref = {(} ,
- postref = {)} ,
+ refbounds-first-sg = {,(,),} ,
+ refbounds = {(,,,)} ,
type = theorem ,
gender = m ,
diff --git a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang
index e96c8d6c712..90f33105676 100644
--- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang
+++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever-spanish.lang
@@ -157,8 +157,8 @@ type = equation ,
name-sg = ecuación ,
Name-pl = Ecuaciones ,
name-pl = ecuaciones ,
- preref = {(} ,
- postref = {)} ,
+ refbounds-first-sg = {,(,),} ,
+ refbounds = {(,,,)} ,
type = theorem ,
gender = m ,
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 61f5127c2e5..6877d2d5ce5 100644
--- a/Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty
+++ b/Master/texmf-dist/tex/latex/zref-clever/zref-clever.sty
@@ -53,7 +53,7 @@
}%
\endinput
}%
-\ProvidesExplPackage {zref-clever} {2022-01-10} {0.1.2-alpha}
+\ProvidesExplPackage {zref-clever} {2022-01-28} {0.2.0-alpha}
{Clever LaTeX cross-references based on zref}
\RequirePackage { zref-base }
\RequirePackage { zref-user }
@@ -109,7 +109,7 @@
{
\bool_if:nTF
{ \prop_if_in_p:Nn \l__zrefclever_counter_resetby_prop {#1} }
- { \prop_item:Nn \l__zrefclever_counter_resetby_prop {#1} }
+ { \prop_item:Nn \l__zrefclever_counter_resetby_prop {#1} }
{
\seq_map_tokens:Nn \l__zrefclever_counter_resetters_seq
{ \__zrefclever_counter_reset_by_aux:nn {#1} }
@@ -165,11 +165,6 @@
}
\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 }
@@ -186,7 +181,7 @@
}
\msg_new:nnn { zref-clever } { unknown-language-opt }
{
- Language~'#1'~is~unknown~\msg_line_context:.~Using~default.~
+ Language~'#1'~is~unknown~\msg_line_context:.~
See~documentation~for~'\iow_char:N\\zcDeclareLanguage'~and~
'\iow_char:N\\zcDeclareLanguageAlias'.
}
@@ -249,15 +244,6 @@
{ Option~'#1'~is~only~available~after~\iow_char:N\\begin\{document\}. }
\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~language~file.~See~documentation~for~
- '\iow_char:N\\zcDeclareLanguage'~and~
- '\iow_char:N\\zcDeclareLanguageAlias'.
- }
\msg_new:nnn { zref-clever } { zref-property-undefined }
{
Option~'ref=#1'~requested~\msg_line_context:.~
@@ -283,6 +269,12 @@
Unknown~compatibility~module~'#1'~given~to~option~'nocompat'.~
Nothing~to~do.
}
+\msg_new:nnn { zref-clever } { refbounds-must-be-four }
+ {
+ The~value~of~option~'#1'~must~be~a~comma~sepatared~list~
+ of~four~items.~We~received~'#2'~items~\msg_line_context:.~
+ Option~not~set.
+ }
\msg_new:nnn { zref-clever } { missing-zref-check }
{
Option~'check'~requested~\msg_line_context:.~
@@ -294,11 +286,6 @@
{ Reference~property~'#1'~undefined~for~label~'#2'~\msg_line_context:. }
\msg_new:nnn { zref-clever } { missing-name }
{ Reference~format~option~'#1'~undefined~for~type~'#2'~\msg_line_context:. }
-\msg_new:nnn { zref-clever } { missing-string }
- {
- We~couldn't~find~a~value~for~reference~option~'#1'~\msg_line_context:.~
- But~we~should~have:~throw~a~rock~at~the~maintainer.
- }
\msg_new:nnn { zref-clever } { single-element-range }
{ Range~for~type~'#1'~resulted~in~single~element~\msg_line_context:. }
\msg_new:nnn { zref-clever } { compat-package }
@@ -324,13 +311,139 @@
\cs_generate_variant:Nn \__zrefclever_extract_unexp:nnn { Vnn , nvn , Vvn }
\cs_new:Npn \__zrefclever_extract:nnn #1#2#3
{ \zref@extractdefault {#1} {#2} {#3} }
+\cs_new:Npn \__zrefclever_opt_varname_general:nn #1#2
+ { l__zrefclever_opt_general_ #1 _ #2 }
+\cs_new:Npn \__zrefclever_opt_varname_type:nnn #1#2#3
+ { l__zrefclever_opt_type_ #1 _ #2 _ #3 }
+\cs_generate_variant:Nn \__zrefclever_opt_varname_type:nnn { enn , een }
+\cs_new:Npn \__zrefclever_opt_varname_language:nnn #1#2#3
+ {
+ \__zrefclever_language_if_declared:nTF {#1}
+ {
+ g__zrefclever_opt_language_
+ \tl_use:c { \__zrefclever_language_varname:n {#1} }
+ _ #2 _ #3
+ }
+ { g__zrefclever_opt_lang_unknown_ \int_rand:n { 1000000 } _ #3 }
+ }
+\cs_generate_variant:Nn \__zrefclever_opt_varname_language:nnn { enn }
+\cs_new:Npn \__zrefclever_opt_varname_lang_default:nnn #1#2#3
+ {
+ \__zrefclever_language_if_declared:nTF {#1}
+ {
+ g__zrefclever_opt_lang_
+ \tl_use:c { \__zrefclever_language_varname:n {#1} }
+ _default_ #2 _ #3
+ }
+ { g__zrefclever_opt_lang_unknown_ \int_rand:n { 1000000 } _ #3 }
+ }
+\cs_generate_variant:Nn \__zrefclever_opt_varname_lang_default:nnn { enn }
+\cs_new:Npn \__zrefclever_opt_varname_lang_type:nnnn #1#2#3#4
+ {
+ \__zrefclever_language_if_declared:nTF {#1}
+ {
+ g__zrefclever_opt_lang_
+ \tl_use:c { \__zrefclever_language_varname:n {#1} }
+ _type_ #2 _ #3 _ #4
+ }
+ { g__zrefclever_opt_lang_unknown_ \int_rand:n { 1000000 } _ #4 }
+ }
+\cs_generate_variant:Nn
+ \__zrefclever_opt_varname_lang_type:nnnn { eenn , eeen }
+\cs_new:Npn \__zrefclever_opt_varname_fallback:nn #1#2
+ { c__zrefclever_opt_fallback_ #1 _ #2 }
+\cs_new_protected:Npn \__zrefclever_opt_tl_unset:N #1
+ { \tl_set_eq:NN #1 \c_novalue_tl }
+\cs_new_protected:Npn \__zrefclever_opt_tl_gunset:N #1
+ { \tl_gset_eq:NN #1 \c_novalue_tl }
+\cs_generate_variant:Nn \__zrefclever_opt_tl_unset:N { c }
+\cs_generate_variant:Nn \__zrefclever_opt_tl_gunset:N { c }
+\prg_new_conditional:Npnn \__zrefclever_opt_tl_if_set:N #1 { F , TF }
+ {
+ \bool_lazy_and:nnTF
+ { \tl_if_exist_p:N #1 }
+ { ! \tl_if_novalue_p:n {#1} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_new_protected:Npn \__zrefclever_opt_tl_gset_if_new:Nn #1#2
+ {
+ \__zrefclever_opt_tl_if_set:NF #1
+ { \tl_gset:Nn #1 {#2} }
+ }
+\cs_generate_variant:Nn \__zrefclever_opt_tl_gset_if_new:Nn { cn }
+\prg_new_protected_conditional:Npnn \__zrefclever_opt_tl_get:NN #1#2 { F }
+ {
+ \__zrefclever_opt_tl_if_set:NTF #1
+ {
+ \tl_set_eq:NN #2 #1
+ \prg_return_true:
+ }
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn
+ \__zrefclever_opt_tl_get:NN { cN } { F }
+\cs_new_protected:Npn \__zrefclever_opt_seq_set_clist_split:Nn #1#2
+ { \seq_set_split:Nnn #1 { , } {#2} }
+\cs_new_protected:Npn \__zrefclever_opt_seq_gset_clist_split:Nn #1#2
+ { \seq_gset_split:Nnn #1 { , } {#2} }
+\cs_new_protected:Npn \__zrefclever_opt_seq_unset:N #1
+ { \cs_set_eq:NN #1 \scan_stop: }
+\cs_new_protected:Npn \__zrefclever_opt_seq_gunset:N #1
+ { \cs_gset_eq:NN #1 \scan_stop: }
+\cs_generate_variant:Nn \__zrefclever_opt_seq_unset:N { c }
+\cs_generate_variant:Nn \__zrefclever_opt_seq_gunset:N { c }
+\prg_new_conditional:Npnn \__zrefclever_opt_seq_if_set:N #1 { F , TF }
+ { \seq_if_exist:NTF #1 { \prg_return_true: } { \prg_return_false: } }
+\prg_generate_conditional_variant:Nnn
+ \__zrefclever_opt_seq_if_set:N { c } { F , TF }
+\prg_new_protected_conditional:Npnn \__zrefclever_opt_seq_get:NN #1#2 { F }
+ {
+ \__zrefclever_opt_seq_if_set:NTF #1
+ {
+ \seq_set_eq:NN #2 #1
+ \prg_return_true:
+ }
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn
+ \__zrefclever_opt_seq_get:NN { cN } { F }
+\cs_new_protected:Npn \__zrefclever_opt_bool_unset:N #1
+ { \cs_set_eq:NN #1 \scan_stop: }
+\cs_new_protected:Npn \__zrefclever_opt_bool_gunset:N #1
+ { \cs_gset_eq:NN #1 \scan_stop: }
+\cs_generate_variant:Nn \__zrefclever_opt_bool_unset:N { c }
+\cs_generate_variant:Nn \__zrefclever_opt_bool_gunset:N { c }
+\prg_new_conditional:Npnn \__zrefclever_opt_bool_if_set:N #1 { F , TF }
+ { \bool_if_exist:NTF #1 { \prg_return_true: } { \prg_return_false: } }
+\prg_generate_conditional_variant:Nnn
+ \__zrefclever_opt_bool_if_set:N { c } { F , TF }
+\prg_new_protected_conditional:Npnn \__zrefclever_opt_bool_get:NN #1#2 { F }
+ {
+ \__zrefclever_opt_bool_if_set:NTF #1
+ {
+ \bool_set_eq:NN #2 #1
+ \prg_return_true:
+ }
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn
+ \__zrefclever_opt_bool_get:NN { cN } { F }
+\prg_new_conditional:Npnn \__zrefclever_opt_bool_if:N #1 { T , F , TF }
+ {
+ \__zrefclever_opt_bool_if_set:NTF #1
+ { \bool_if:NTF #1 { \prg_return_true: } { \prg_return_false: } }
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn
+ \__zrefclever_opt_bool_if:N { c } { T , F , TF }
\tl_new:N \l__zrefclever_setup_type_tl
-\tl_new:N \l__zrefclever_base_language_tl
+\tl_new:N \l__zrefclever_setup_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
+ \c__zrefclever_rf_opts_tl_not_type_specific_seq
{
tpairsep ,
tlistsep ,
@@ -338,18 +451,38 @@
notesep ,
}
\seq_const_from_clist:Nn
- \c__zrefclever_ref_options_possibly_type_specific_seq
+ \c__zrefclever_rf_opts_tl_maybe_type_specific_seq
{
namesep ,
pairsep ,
listsep ,
lastsep ,
rangesep ,
- preref ,
- postref ,
+ namefont ,
+ reffont ,
+ }
+\seq_const_from_clist:Nn
+ \c__zrefclever_rf_opts_seq_refbounds_seq
+ {
+ refbounds-first ,
+ refbounds-first-sg ,
+ refbounds-first-pb ,
+ refbounds-first-rb ,
+ refbounds-mid ,
+ refbounds-mid-rb ,
+ refbounds-mid-re ,
+ refbounds-last ,
+ refbounds-last-pe ,
+ refbounds-last-re ,
+ }
+\seq_const_from_clist:Nn
+ \c__zrefclever_rf_opts_bool_maybe_type_specific_seq
+ {
+ cap ,
+ abbrev ,
}
\seq_const_from_clist:Nn
- \c__zrefclever_ref_options_type_names_seq
+ \c__zrefclever_rf_opts_tl_type_names_seq
{
Name-sg ,
name-sg ,
@@ -360,39 +493,95 @@
Name-pl-ab ,
name-pl-ab ,
}
-\seq_const_from_clist:Nn
- \c__zrefclever_ref_options_font_seq
+\seq_new:N \c__zrefclever_rf_opts_tl_typesetup_seq
+\seq_gconcat:NNN \c__zrefclever_rf_opts_tl_typesetup_seq
+ \c__zrefclever_rf_opts_tl_maybe_type_specific_seq
+ \c__zrefclever_rf_opts_tl_type_names_seq
+\seq_new:N \c__zrefclever_rf_opts_tl_reference_seq
+\seq_gconcat:NNN \c__zrefclever_rf_opts_tl_reference_seq
+ \c__zrefclever_rf_opts_tl_not_type_specific_seq
+ \c__zrefclever_rf_opts_tl_maybe_type_specific_seq
+\clist_map_inline:nn
{
- namefont ,
- reffont ,
+ reference ,
+ typesetup ,
+ langsetup ,
+ langfile ,
+ }
+ {
+ \keys_define:nn { zref-clever/ #1 }
+ {
+ +refbounds-first .meta:n =
+ {
+ refbounds-first = {##1} ,
+ refbounds-first-sg = {##1} ,
+ refbounds-first-pb = {##1} ,
+ refbounds-first-rb = {##1} ,
+ } ,
+ +refbounds-first .default:x = \c_novalue_tl ,
+ +refbounds-mid .meta:n =
+ {
+ refbounds-mid = {##1} ,
+ refbounds-mid-rb = {##1} ,
+ refbounds-mid-re = {##1} ,
+ } ,
+ +refbounds-mid .default:x = \c_novalue_tl ,
+ +refbounds-last .meta:n =
+ {
+ refbounds-last = {##1} ,
+ refbounds-last-pe = {##1} ,
+ refbounds-last-re = {##1} ,
+ } ,
+ +refbounds-last .default:x = \c_novalue_tl ,
+ +refbounds-rb .meta:n =
+ {
+ refbounds-first-rb = {##1} ,
+ refbounds-mid-rb = {##1} ,
+ } ,
+ +refbounds-rb .default:x = \c_novalue_tl ,
+ +refbounds-re .meta:n =
+ {
+ refbounds-mid-re = {##1} ,
+ refbounds-last-re = {##1} ,
+ } ,
+ +refbounds-re .default:x = \c_novalue_tl ,
+ +refbounds .meta:n =
+ {
+ +refbounds-first = {##1} ,
+ +refbounds-mid = {##1} ,
+ +refbounds-last = {##1} ,
+ } ,
+ +refbounds .default:x = \c_novalue_tl ,
+ refbounds .meta:n = { +refbounds = {##1} } ,
+ refbounds .default:x = \c_novalue_tl ,
+ }
}
-\seq_new:N \c__zrefclever_ref_options_typesetup_seq
-\seq_gconcat:NNN \c__zrefclever_ref_options_typesetup_seq
- \c__zrefclever_ref_options_possibly_type_specific_seq
- \c__zrefclever_ref_options_type_names_seq
-\seq_gconcat:NNN \c__zrefclever_ref_options_typesetup_seq
- \c__zrefclever_ref_options_typesetup_seq
- \c__zrefclever_ref_options_font_seq
-\seq_new:N \c__zrefclever_ref_options_reference_seq
-\seq_gconcat:NNN \c__zrefclever_ref_options_reference_seq
- \c__zrefclever_ref_options_necessarily_not_type_specific_seq
- \c__zrefclever_ref_options_possibly_type_specific_seq
-\seq_gconcat:NNN \c__zrefclever_ref_options_reference_seq
- \c__zrefclever_ref_options_reference_seq
- \c__zrefclever_ref_options_font_seq
-\prop_new:N \g__zrefclever_languages_prop
+\cs_new:Npn \__zrefclever_language_varname:n #1
+ { g__zrefclever_declared_language_ #1 _tl }
+\cs_set_eq:NN \zrefclever_language_varname:n
+ \__zrefclever_language_varname:n
+\prg_new_conditional:Npnn \__zrefclever_language_if_declared:n #1 { T , F , TF }
+ {
+ \tl_if_exist:cTF { \__zrefclever_language_varname:n {#1} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\prg_generate_conditional_variant:Nnn
+ \__zrefclever_language_if_declared:n { x } { T , F , TF }
+\prg_set_eq_conditional:NNn \zrefclever_language_if_declared:n
+ \__zrefclever_language_if_declared:n { TF }
\NewDocumentCommand \zcDeclareLanguage { O { } m }
{
\group_begin:
\tl_if_empty:nF {#2}
{
- \prop_if_in:NnTF \g__zrefclever_languages_prop {#2}
+ \__zrefclever_language_if_declared:nTF {#2}
{ \msg_warning:nnn { zref-clever } { language-declared } {#2} }
{
- \prop_gput:Nnn \g__zrefclever_languages_prop {#2} {#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}
+ \tl_new:c { \__zrefclever_language_varname:n {#2} }
+ \tl_gset:cn { \__zrefclever_language_varname:n {#2} } {#2}
+ \tl_set:Nn \l__zrefclever_setup_language_tl {#2}
+ \keys_set:nn { zref-clever/declarelang } {#1}
}
}
\group_end:
@@ -402,56 +591,60 @@
{
\tl_if_empty:nF {#1}
{
- \prop_if_in:NnTF \g__zrefclever_languages_prop {#2}
+ \__zrefclever_language_if_declared:nTF {#2}
{
- \exp_args:NNnx
- \prop_gput:Nnn \g__zrefclever_languages_prop {#1}
- { \prop_item:Nn \g__zrefclever_languages_prop {#2} }
+ \tl_gset:cx { \__zrefclever_language_varname:n {#1} }
+ { \tl_use:c { \__zrefclever_language_varname:n {#2} } }
}
{ \msg_warning:nnn { zref-clever } { unknown-language-alias } {#2} }
}
}
\@onlypreamble \zcDeclareLanguageAlias
-\keys_define:nn { zref-clever / declarelang }
+\keys_define:nn { zref-clever/declarelang }
{
declension .code:n =
{
- \prop_gput:cnn
- { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop }
- { declension } {#1}
+ \seq_gset_from_clist:cn
+ {
+ \__zrefclever_opt_varname_language:enn
+ { \l__zrefclever_setup_language_tl } { declension } { seq }
+ }
+ {#1}
} ,
declension .value_required:n = true ,
gender .code:n =
{
- \prop_gput:cnn
- { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop }
- { gender } {#1}
+ \seq_gset_from_clist:cn
+ {
+ \__zrefclever_opt_varname_language:enn
+ { \l__zrefclever_setup_language_tl } { gender } { seq }
+ }
+ {#1}
} ,
gender .value_required:n = true ,
- allcaps .code:n =
+ allcaps .choices:nn =
+ { true , false }
{
- \prop_gput:cnn
- { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop }
- { allcaps } { true }
+ \use:c { bool_gset_ \l_keys_choice_tl :c }
+ {
+ \__zrefclever_opt_varname_language:enn
+ { \l__zrefclever_setup_language_tl } { allcaps } { bool }
+ }
} ,
- allcaps .value_forbidden:n = true ,
+ allcaps .default:n = true ,
}
-\cs_new_protected:Npn \__zrefclever_process_language_options:
+\cs_new_protected:Npn \__zrefclever_process_language_settings:
{
- \exp_args:NNx \prop_get:NnNTF \g__zrefclever_languages_prop
+ \__zrefclever_language_if_declared:xTF
{ \l__zrefclever_ref_language_tl }
- \l__zrefclever_base_language_tl
{
- \exp_args:NNx \seq_set_from_clist:Nn
- \l__zrefclever_lang_declension_seq
+ \__zrefclever_opt_seq_get:cNF
{
- \prop_item:cn
- {
- g__zrefclever_lang_
- \l__zrefclever_base_language_tl _prop
- }
- { declension }
+ \__zrefclever_opt_varname_language:enn
+ { \l__zrefclever_ref_language_tl } { declension } { seq }
}
+ \l__zrefclever_lang_declension_seq
+ { \seq_clear:N \l__zrefclever_lang_declension_seq }
\seq_if_empty:NTF \l__zrefclever_lang_declension_seq
{
\tl_if_empty:NF \l__zrefclever_ref_decl_case_tl
@@ -482,16 +675,13 @@
}
}
}
- \exp_args:NNx \seq_set_from_clist:Nn
- \l__zrefclever_lang_gender_seq
+ \__zrefclever_opt_seq_get:cNF
{
- \prop_item:cn
- {
- g__zrefclever_lang_
- \l__zrefclever_base_language_tl _prop
- }
- { gender }
+ \__zrefclever_opt_varname_language:enn
+ { \l__zrefclever_ref_language_tl } { gender } { seq }
}
+ \l__zrefclever_lang_gender_seq
+ { \seq_clear:N \l__zrefclever_lang_gender_seq }
\seq_if_empty:NTF \l__zrefclever_lang_gender_seq
{
\tl_if_empty:NF \l__zrefclever_ref_gender_tl
@@ -518,17 +708,12 @@
}
}
}
- \str_if_eq:eeT
+ \__zrefclever_opt_bool_if:cT
{
- \prop_item:cn
- {
- g__zrefclever_lang_
- \l__zrefclever_base_language_tl _prop
- }
- { allcaps }
+ \__zrefclever_opt_varname_language:enn
+ { \l__zrefclever_ref_language_tl } { allcaps } { bool }
}
- { true }
- { \prop_put:Nnn \l__zrefclever_ref_options_prop { cap } { true } }
+ { \keys_set:nn { zref-clever/reference } { cap = true } }
}
{
\tl_if_empty:NF \l__zrefclever_ref_decl_case_tl
@@ -550,98 +735,64 @@
}
}
\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_base_language_tl
+ \__zrefclever_language_if_declared:nT {#1}
{
- \seq_if_in:NVF
+ \seq_if_in:NxF
\g__zrefclever_loaded_langfiles_seq
- \l__zrefclever_base_language_tl
+ { \tl_use:c { \__zrefclever_language_varname:n {#1} } }
{
\exp_args:Nx \file_get:nnNTF
- { zref-clever- \l__zrefclever_base_language_tl .lang }
+ {
+ zref-clever-
+ \tl_use:c { \__zrefclever_language_varname:n {#1} }
+ .lang
+ }
{ \ExplSyntaxOn }
\l_tmpa_tl
{
+ \tl_set:Nn \l__zrefclever_setup_language_tl {#1}
\tl_clear:N \l__zrefclever_setup_type_tl
- \exp_args:NNx \seq_set_from_clist:Nn
- \l__zrefclever_lang_declension_seq
+ \__zrefclever_opt_seq_get:cNF
{
- \prop_item:cn
- {
- g__zrefclever_lang_
- \l__zrefclever_base_language_tl _prop
- }
- { declension }
+ \__zrefclever_opt_varname_language:nnn
+ {#1} { declension } { seq }
}
+ \l__zrefclever_lang_declension_seq
+ { \seq_clear:N \l__zrefclever_lang_declension_seq }
\seq_if_empty:NTF \l__zrefclever_lang_declension_seq
{ \tl_clear:N \l__zrefclever_lang_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_lang_gender_seq
+ \__zrefclever_opt_seq_get:cNF
{
- \prop_item:cn
- {
- g__zrefclever_lang_
- \l__zrefclever_base_language_tl _prop
- }
- { gender }
+ \__zrefclever_opt_varname_language:nnn
+ {#1} { gender } { seq }
}
- \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 }
+ \l__zrefclever_lang_gender_seq
+ { \seq_clear:N \l__zrefclever_lang_gender_seq }
+ \keys_set:nV { zref-clever/langfile } \l_tmpa_tl
+ \seq_gput_right:Nx \g__zrefclever_loaded_langfiles_seq
+ { \tl_use:c { \__zrefclever_language_varname:n {#1} } }
+ \msg_info:nnx { zref-clever } { langfile-loaded }
+ { \tl_use:c { \__zrefclever_language_varname:n {#1} } }
}
{
- \bool_if:NT \l__zrefclever_load_langfile_verbose_bool
- {
- \msg_warning:nnx { zref-clever } { langfile-not-available }
- { \l__zrefclever_base_language_tl }
- }
- \seq_gput_right:NV \g__zrefclever_loaded_langfiles_seq
- \l__zrefclever_base_language_tl
+ \seq_gput_right:Nx \g__zrefclever_loaded_langfiles_seq
+ { \tl_use:c { \__zrefclever_language_varname:n {#1} } }
}
}
}
- {
- \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_langfile:n { x }
-\cs_new_protected:Npn \__zrefclever_provide_langfile_verbose:n #1
- {
- \group_begin:
- \bool_set_true:N \l__zrefclever_load_langfile_verbose_bool
- \__zrefclever_provide_langfile:n {#1}
- \group_end:
- }
-\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_lang_ \l__zrefclever_base_language_tl _prop }
- { type- \l__zrefclever_setup_type_tl - #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_lang_ \l__zrefclever_base_language_tl _prop }
- { default- #1 } {#2}
- }
-\cs_generate_variant:Nn \__zrefclever_provide_lang_opt_default:nn { nV }
-\keys_define:nn { zref-clever / langfile }
+\keys_define:nn { zref-clever/langfile }
{
type .code:n =
{
@@ -655,14 +806,14 @@
\seq_if_empty:NTF \l__zrefclever_lang_declension_seq
{
\msg_info:nnxx { zref-clever } { language-no-decl-setup }
- { \l__zrefclever_base_language_tl } {#1}
+ { \l__zrefclever_setup_language_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_base_language_tl }
+ {#1} { \l__zrefclever_setup_language_tl }
\seq_get_left:NN \l__zrefclever_lang_declension_seq
\l__zrefclever_lang_decl_case_tl
}
@@ -670,12 +821,13 @@
} ,
case .value_required:n = true ,
+ gender .default:x = \c_novalue_tl ,
gender .code:n =
{
\seq_if_empty:NTF \l__zrefclever_lang_gender_seq
{
\msg_info:nnxxx { zref-clever } { language-no-gender }
- { \l__zrefclever_base_language_tl } { gender } {#1}
+ { \l__zrefclever_setup_language_tl } { gender } {#1}
}
{
\tl_if_empty:NTF \l__zrefclever_setup_type_tl
@@ -684,71 +836,64 @@
{ option-only-type-specific } { gender }
}
{
- \clist_clear:N \l_tmpa_clist
- \clist_map_inline:nn {#1}
+ \tl_if_novalue:nF {#1}
{
- \seq_if_in:NnTF \l__zrefclever_lang_gender_seq {##1}
- { \clist_put_right:Nn \l_tmpa_clist {##1} }
+ \seq_clear:N \l_tmpa_seq
+ \clist_map_inline:nn {#1}
{
- \msg_info:nnxx { zref-clever }
- { gender-not-declared }
- { \l__zrefclever_base_language_tl } {##1}
+ \seq_if_in:NnTF \l__zrefclever_lang_gender_seq {##1}
+ { \seq_put_right:Nn \l_tmpa_seq {##1} }
+ {
+ \msg_info:nnxx { zref-clever }
+ { gender-not-declared }
+ { \l__zrefclever_setup_language_tl } {##1}
+ }
+ }
+ \__zrefclever_opt_seq_if_set:cF
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ { gender }
+ { seq }
+ }
+ {
+ \seq_gset_eq:cN
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ { gender }
+ { seq }
+ }
+ \l_tmpa_seq
}
- }
- \clist_if_empty:NF \l_tmpa_clist
- {
- \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
+ \c__zrefclever_rf_opts_tl_not_type_specific_seq
{
- \keys_define:nn { zref-clever / langfile }
+ \keys_define:nn { zref-clever/langfile }
{
- #1 .value_required:n = true ,
+ #1 .default:x = \c_novalue_tl ,
#1 .code:n =
{
\tl_if_empty:NTF \l__zrefclever_setup_type_tl
- { \__zrefclever_provide_lang_opt_default:nn {#1} {##1} }
+ {
+ \tl_if_novalue:nF {##1}
+ {
+ \__zrefclever_opt_tl_gset_if_new:cn
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { tl }
+ }
+ {##1}
+ }
+ }
{
\msg_info:nnn { zref-clever }
{ option-not-type-specific } {#1}
@@ -757,25 +902,48 @@
}
}
\seq_map_inline:Nn
- \c__zrefclever_ref_options_possibly_type_specific_seq
+ \c__zrefclever_rf_opts_tl_maybe_type_specific_seq
{
- \keys_define:nn { zref-clever / langfile }
+ \keys_define:nn { zref-clever/langfile }
{
- #1 .value_required:n = true ,
+ #1 .default:x = \c_novalue_tl ,
#1 .code:n =
{
\tl_if_empty:NTF \l__zrefclever_setup_type_tl
- { \__zrefclever_provide_lang_opt_default:nn {#1} {##1} }
- { \__zrefclever_provide_lang_opt_type:nn {#1} {##1} }
+ {
+ \tl_if_novalue:nF {##1}
+ {
+ \__zrefclever_opt_tl_gset_if_new:cn
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { tl }
+ }
+ {##1}
+ }
+ }
+ {
+ \tl_if_novalue:nF {##1}
+ {
+ \__zrefclever_opt_tl_gset_if_new:cn
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { tl }
+ }
+ {##1}
+ }
+ }
} ,
}
}
\seq_map_inline:Nn
- \c__zrefclever_ref_options_type_names_seq
+ \c__zrefclever_rf_opts_tl_type_names_seq
{
- \keys_define:nn { zref-clever / langfile }
+ \keys_define:nn { zref-clever/langfile }
{
- #1 .value_required:n = true ,
+ #1 .default:x = \c_novalue_tl ,
#1 .code:n =
{
\tl_if_empty:NTF \l__zrefclever_setup_type_tl
@@ -785,17 +953,216 @@
}
{
\tl_if_empty:NTF \l__zrefclever_lang_decl_case_tl
- { \__zrefclever_provide_lang_opt_type:nn {#1} {##1} }
{
- \__zrefclever_provide_lang_opt_type:nn
- { \l__zrefclever_lang_decl_case_tl - #1 } {##1}
+ \tl_if_novalue:nF {##1}
+ {
+ \__zrefclever_opt_tl_gset_if_new:cn
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { tl }
+ }
+ {##1}
+ }
+ }
+ {
+ \tl_if_novalue:nF {##1}
+ {
+ \__zrefclever_opt_tl_gset_if_new:cn
+ {
+ \__zrefclever_opt_varname_lang_type:eeen
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ { \l__zrefclever_lang_decl_case_tl - #1 } { tl }
+ }
+ {##1}
+ }
}
}
} ,
}
}
-\prop_new:N \g__zrefclever_fallback_unknown_lang_prop
-\prop_gset_from_keyval:Nn \g__zrefclever_fallback_unknown_lang_prop
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_seq_refbounds_seq
+ {
+ \keys_define:nn { zref-clever/langfile }
+ {
+ #1 .default:x = \c_novalue_tl ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l__zrefclever_setup_type_tl
+ {
+ \tl_if_novalue:nF {##1}
+ {
+ \__zrefclever_opt_seq_if_set:cF
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl } {#1} { seq }
+ }
+ {
+ \seq_gclear:N \g_tmpa_seq
+ \__zrefclever_opt_seq_gset_clist_split:Nn
+ \g_tmpa_seq {##1}
+ \bool_lazy_or:nnTF
+ { \tl_if_empty_p:n {##1} }
+ {
+ \int_compare_p:nNn
+ { \seq_count:N \g_tmpa_seq } = { 4 }
+ }
+ {
+ \seq_gset_eq:cN
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { seq }
+ }
+ \g_tmpa_seq
+ }
+ {
+ \msg_info:nnxx { zref-clever }
+ { refbounds-must-be-four }
+ {#1} { \seq_count:N \g_tmpa_seq }
+ }
+ }
+ }
+ }
+ {
+ \tl_if_novalue:nF {##1}
+ {
+ \__zrefclever_opt_seq_if_set:cF
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl } {#1} { seq }
+ }
+ {
+ \seq_gclear:N \g_tmpa_seq
+ \__zrefclever_opt_seq_gset_clist_split:Nn
+ \g_tmpa_seq {##1}
+ \bool_lazy_or:nnTF
+ { \tl_if_empty_p:n {##1} }
+ {
+ \int_compare_p:nNn
+ { \seq_count:N \g_tmpa_seq } = { 4 }
+ }
+ {
+ \seq_gset_eq:cN
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { seq }
+ }
+ \g_tmpa_seq
+ }
+ {
+ \msg_info:nnxx { zref-clever }
+ { refbounds-must-be-four }
+ {#1} { \seq_count:N \g_tmpa_seq }
+ }
+ }
+ }
+ }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_bool_maybe_type_specific_seq
+ {
+ \keys_define:nn { zref-clever/langfile }
+ {
+ #1 .choice: ,
+ #1 / true .code:n =
+ {
+ \tl_if_empty:NTF \l__zrefclever_setup_type_tl
+ {
+ \__zrefclever_opt_bool_if_set:cF
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { bool }
+ }
+ {
+ \bool_gset_true:c
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { bool }
+ }
+ }
+ }
+ {
+ \__zrefclever_opt_bool_if_set:cF
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ {
+ \bool_gset_true:c
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ }
+ }
+ } ,
+ #1 / false .code:n =
+ {
+ \tl_if_empty:NTF \l__zrefclever_setup_type_tl
+ {
+ \__zrefclever_opt_bool_if_set:cF
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { bool }
+ }
+ {
+ \bool_gset_false:c
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { bool }
+ }
+ }
+ }
+ {
+ \__zrefclever_opt_bool_if_set:cF
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ {
+ \bool_gset_false:c
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ }
+ }
+ } ,
+ #1 / unset .code:n = { } ,
+ #1 .default:n = true ,
+ no #1 .meta:n = { #1 = false } ,
+ no #1 .value_forbidden:n = true ,
+ }
+ }
+\cs_new_protected:Npn \__zrefclever_opt_tl_cset_fallback:nn #1#2
+ {
+ \tl_const:cn
+ { \__zrefclever_opt_varname_fallback:nn {#1} { tl } } {#2}
+ }
+\keyval_parse:nnn
+ { }
+ { \__zrefclever_opt_tl_cset_fallback:nn }
{
tpairsep = {,~} ,
tlistsep = {,~} ,
@@ -806,48 +1173,6 @@
listsep = {,~} ,
lastsep = {,~} ,
rangesep = {\textendash} ,
- preref = {} ,
- postref = {} ,
- }
-\prg_new_protected_conditional:Npnn
- \__zrefclever_get_lang_opt_type:nnnN #1#2#3#4 { F }
- {
- \prop_get:NnNTF \g__zrefclever_languages_prop {#1}
- \l__zrefclever_base_language_tl
- {
- \prop_get:cnNTF
- { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop }
- { type- #2 - #3 } #4
- { \prg_return_true: }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn
- \__zrefclever_get_lang_opt_type:nnnN { xxxN , xxnN } { F }
-\prg_new_protected_conditional:Npnn
- \__zrefclever_get_lang_opt_default:nnN #1#2#3 { F }
- {
- \prop_get:NnNTF \g__zrefclever_languages_prop {#1}
- \l__zrefclever_base_language_tl
- {
- \prop_get:cnNTF
- { g__zrefclever_lang_ \l__zrefclever_base_language_tl _prop }
- { default- #2 } #3
- { \prg_return_true: }
- { \prg_return_false: }
- }
- { \prg_return_false: }
- }
-\prg_generate_conditional_variant:Nnn
- \__zrefclever_get_lang_opt_default:nnN { xnN } { F }
-\prg_new_protected_conditional:Npnn
- \__zrefclever_get_fallback_unknown_lang_opt:nN #1#2 { F }
- {
- \prop_get:NnNTF \g__zrefclever_fallback_unknown_lang_prop
- { #1 } #2
- { \prg_return_true: }
- { \prg_return_false: }
}
\cs_new_protected:Npn \__zrefclever_prop_put_non_empty:Nnn #1#2#3
{
@@ -856,7 +1181,7 @@
{ \prop_put:Nnn #1 {#2} {#3} }
}
\tl_new:N \l__zrefclever_ref_property_tl
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
ref .code:n =
{
@@ -874,7 +1199,7 @@
}
\bool_new:N \l__zrefclever_typeset_ref_bool
\bool_new:N \l__zrefclever_typeset_name_bool
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
typeset .choice: ,
typeset / both .code:n =
@@ -901,7 +1226,7 @@
noref .value_forbidden:n = true ,
}
\bool_new:N \l__zrefclever_typeset_sort_bool
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
sort .bool_set:N = \l__zrefclever_typeset_sort_bool ,
sort .initial:n = true ,
@@ -910,7 +1235,7 @@
nosort .value_forbidden:n = true ,
}
\seq_new:N \l__zrefclever_typesort_seq
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
typesort .code:n =
{
@@ -925,7 +1250,7 @@
notypesort .value_forbidden:n = true ,
}
\bool_new:N \l__zrefclever_typeset_compress_bool
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
comp .bool_set:N = \l__zrefclever_typeset_compress_bool ,
comp .initial:n = true ,
@@ -934,113 +1259,79 @@
nocomp .value_forbidden:n = true ,
}
\bool_new:N \l__zrefclever_typeset_range_bool
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
range .bool_set:N = \l__zrefclever_typeset_range_bool ,
range .initial:n = false ,
range .default:n = true ,
}
-\bool_new:N \l__zrefclever_capitalize_first_bool
-\keys_define:nn { zref-clever / reference }
+\bool_new:N \l__zrefclever_capfirst_bool
+\keys_define:nn { zref-clever/reference }
{
- 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 .value_forbidden:n = true ,
-
- capfirst .bool_set:N = \l__zrefclever_capitalize_first_bool ,
+ capfirst .bool_set:N = \l__zrefclever_capfirst_bool ,
capfirst .initial:n = false ,
capfirst .default:n = true ,
}
\bool_new:N \l__zrefclever_noabbrev_first_bool
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
- 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 ,
-
noabbrevfirst .bool_set:N = \l__zrefclever_noabbrev_first_bool ,
noabbrevfirst .initial:n = false ,
noabbrevfirst .default:n = true ,
}
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
S .meta:n =
- { capfirst = true , noabbrevfirst = true },
- S .value_forbidden:n = true ,
+ { capfirst = {#1} , noabbrevfirst = {#1} },
+ S .default:n = true ,
}
-\bool_new:N \l__zrefclever_use_hyperref_bool
-\bool_new:N \l__zrefclever_warn_hyperref_bool
-\keys_define:nn { zref-clever / reference }
+\bool_new:N \l__zrefclever_hyperlink_bool
+\bool_new:N \l__zrefclever_hyperref_warn_bool
+\keys_define:nn { zref-clever/reference }
{
hyperref .choice: ,
hyperref / auto .code:n =
{
- \bool_set_true:N \l__zrefclever_use_hyperref_bool
- \bool_set_false:N \l__zrefclever_warn_hyperref_bool
+ \bool_set_true:N \l__zrefclever_hyperlink_bool
+ \bool_set_false:N \l__zrefclever_hyperref_warn_bool
} ,
hyperref / true .code:n =
{
- \bool_set_true:N \l__zrefclever_use_hyperref_bool
- \bool_set_true:N \l__zrefclever_warn_hyperref_bool
+ \bool_set_true:N \l__zrefclever_hyperlink_bool
+ \bool_set_true:N \l__zrefclever_hyperref_warn_bool
} ,
hyperref / false .code:n =
{
- \bool_set_false:N \l__zrefclever_use_hyperref_bool
- \bool_set_false:N \l__zrefclever_warn_hyperref_bool
+ \bool_set_false:N \l__zrefclever_hyperlink_bool
+ \bool_set_false:N \l__zrefclever_hyperref_warn_bool
} ,
hyperref .initial:n = auto ,
- hyperref .default:n = auto
+ hyperref .default:n = true ,
+ nohyperref .meta:n = { hyperref = false } ,
+ nohyperref .value_forbidden:n = true ,
}
\AddToHook { begindocument }
{
\__zrefclever_if_package_loaded:nTF { hyperref }
{
- \bool_if:NT \l__zrefclever_use_hyperref_bool
+ \bool_if:NT \l__zrefclever_hyperlink_bool
{ \RequirePackage { zref-hyperref } }
}
{
- \bool_if:NT \l__zrefclever_warn_hyperref_bool
+ \bool_if:NT \l__zrefclever_hyperref_warn_bool
{ \msg_warning:nn { zref-clever } { missing-hyperref } }
- \bool_set_false:N \l__zrefclever_use_hyperref_bool
+ \bool_set_false:N \l__zrefclever_hyperlink_bool
}
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
hyperref .code:n =
- { \msg_warning:nn { zref-clever } { hyperref-preamble-only } }
+ { \msg_warning:nn { zref-clever } { hyperref-preamble-only } } ,
+ nohyperref .code:n =
+ { \bool_set_false:N \l__zrefclever_hyperlink_bool } ,
}
}
\str_new:N \l__zrefclever_nameinlink_str
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
nameinlink .choice: ,
nameinlink / true .code:n =
@@ -1054,12 +1345,14 @@
nameinlink .initial:n = tsingle ,
nameinlink .default:n = true ,
}
-\bool_new:N \l__zrefclever_preposinlink_bool
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
- preposinlink .bool_set:N = \l__zrefclever_preposinlink_bool ,
- preposinlink .initial:n = false ,
- preposinlink .default:n = true ,
+ preposinlink .code:n =
+ {
+ % NOTE Option deprecated in 2022-01-12 for v0.2.0-alpha.
+ \msg_warning:nnnn { zref-clever }{ option-deprecated }
+ { preposinlink } { refbounds }
+ } ,
}
\tl_new:N \l__zrefclever_ref_language_tl
@@ -1083,10 +1376,9 @@
\tl_set:Nn \l__zrefclever_main_language_tl { english }
}
}
- \tl_set:Nn \l__zrefclever_ref_language_tl
- { \l__zrefclever_current_language_tl }
}
-\keys_define:nn { zref-clever / reference }
+\tl_set:Nn \l_zrefclever_ref_language_tl { \l__zrefclever_ref_language_tl }
+\keys_define:nn { zref-clever/reference }
{
lang .code:n =
{
@@ -1098,40 +1390,34 @@
{
\tl_set:Nn \l__zrefclever_ref_language_tl
{ \l__zrefclever_current_language_tl }
- \__zrefclever_provide_langfile_verbose:x
- { \l__zrefclever_ref_language_tl }
}
{ main }
{
\tl_set:Nn \l__zrefclever_ref_language_tl
{ \l__zrefclever_main_language_tl }
- \__zrefclever_provide_langfile_verbose:x
- { \l__zrefclever_ref_language_tl }
}
}
{
- \prop_if_in:NnTF \g__zrefclever_languages_prop {#1}
- { \tl_set:Nn \l__zrefclever_ref_language_tl {#1} }
+ \tl_set:Nn \l__zrefclever_ref_language_tl {#1}
+ \__zrefclever_language_if_declared:nF {#1}
{
\msg_warning:nnn { zref-clever }
{ unknown-language-opt } {#1}
- \tl_set:Nn \l__zrefclever_ref_language_tl
- { \l__zrefclever_current_language_tl }
}
- \__zrefclever_provide_langfile_verbose:x
- { \l__zrefclever_ref_language_tl }
}
+ \__zrefclever_provide_langfile:x
+ { \l__zrefclever_ref_language_tl }
}
} ,
+ lang .initial:n = current ,
lang .value_required:n = true ,
}
\AddToHook { begindocument / before }
{
\AddToHook { begindocument }
{
- \__zrefclever_provide_langfile:x { \l__zrefclever_ref_language_tl }
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
lang .code:n =
{
@@ -1141,44 +1427,35 @@
{
\tl_set:Nn \l__zrefclever_ref_language_tl
{ \l__zrefclever_current_language_tl }
- \__zrefclever_provide_langfile:x
- { \l__zrefclever_ref_language_tl }
}
{ main }
{
\tl_set:Nn \l__zrefclever_ref_language_tl
{ \l__zrefclever_main_language_tl }
- \__zrefclever_provide_langfile:x
- { \l__zrefclever_ref_language_tl }
}
}
{
- \prop_if_in:NnTF \g__zrefclever_languages_prop {#1}
- { \tl_set:Nn \l__zrefclever_ref_language_tl {#1} }
+ \tl_set:Nn \l__zrefclever_ref_language_tl {#1}
+ \__zrefclever_language_if_declared:nF {#1}
{
\msg_warning:nnn { zref-clever }
{ unknown-language-opt } {#1}
- \tl_set:Nn \l__zrefclever_ref_language_tl
- { \l__zrefclever_current_language_tl }
}
- \__zrefclever_provide_langfile:x
- { \l__zrefclever_ref_language_tl }
}
} ,
- lang .value_required:n = true ,
}
}
}
\tl_new:N \l__zrefclever_ref_decl_case_tl
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
d .code:n =
{ \msg_warning:nnn { zref-clever } { option-document-only } { d } } ,
}
\AddToHook { begindocument }
{
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
d .tl_set:N = \l__zrefclever_ref_decl_case_tl ,
d .value_required:n = true ,
@@ -1190,7 +1467,7 @@
\bool_new:N \l__zrefclever_nudge_singular_bool
\bool_new:N \l__zrefclever_nudge_gender_bool
\tl_new:N \l__zrefclever_ref_gender_tl
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
nudge .choice: ,
nudge / true .code:n =
@@ -1251,37 +1528,37 @@
}
\AddToHook { begindocument }
{
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
g .tl_set:N = \l__zrefclever_ref_gender_tl ,
g .value_required:n = true ,
}
}
\tl_new:N \l__zrefclever_ref_typeset_font_tl
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{ font .tl_set:N = \l__zrefclever_ref_typeset_font_tl }
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
titleref .code:n = { \RequirePackage { zref-titleref } } ,
titleref .value_forbidden:n = true ,
}
\AddToHook { begindocument }
{
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
titleref .code:n =
{ \msg_warning:nn { zref-clever } { titleref-preamble-only } }
}
}
\tl_new:N \l__zrefclever_zcref_note_tl
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
note .tl_set:N = \l__zrefclever_zcref_note_tl ,
note .value_required:n = true ,
}
\bool_new:N \l__zrefclever_zrefcheck_available_bool
\bool_new:N \l__zrefclever_zcref_with_check_bool
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
check .code:n = { \RequirePackage { zref-check } } ,
check .value_forbidden:n = true ,
@@ -1291,7 +1568,7 @@
\__zrefclever_if_package_loaded:nTF { zref-check }
{
\bool_set_true:N \l__zrefclever_zrefcheck_available_bool
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
check .code:n =
{
@@ -1303,7 +1580,7 @@
}
{
\bool_set_false:N \l__zrefclever_zrefcheck_available_bool
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
check .value_forbidden:n = false ,
check .code:n =
@@ -1312,7 +1589,7 @@
}
}
\prop_new:N \l__zrefclever_counter_type_prop
-\keys_define:nn { zref-clever / label }
+\keys_define:nn { zref-clever/label }
{
countertype .code:n =
{
@@ -1341,7 +1618,7 @@
} ,
}
\seq_new:N \l__zrefclever_counter_resetters_seq
-\keys_define:nn { zref-clever / label }
+\keys_define:nn { zref-clever/label }
{
counterresetters .code:n =
{
@@ -1367,7 +1644,7 @@
counterresetters .value_required:n = true ,
}
\prop_new:N \l__zrefclever_counter_resetby_prop
-\keys_define:nn { zref-clever / label }
+\keys_define:nn { zref-clever/label }
{
counterresetby .code:n =
{
@@ -1391,7 +1668,7 @@
} ,
}
\tl_new:N \l__zrefclever_current_counter_tl
-\keys_define:nn { zref-clever / label }
+\keys_define:nn { zref-clever/label }
{
currentcounter .tl_set:N = \l__zrefclever_current_counter_tl ,
currentcounter .value_required:n = true ,
@@ -1399,7 +1676,7 @@
}
\bool_new:N \g__zrefclever_nocompat_bool
\seq_new:N \g__zrefclever_nocompat_modules_seq
-\keys_define:nn { zref-clever / reference }
+\keys_define:nn { zref-clever/reference }
{
nocompat .code:n =
{
@@ -1419,7 +1696,7 @@
}
\AddToHook { begindocument }
{
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
nocompat .code:n =
{
@@ -1445,129 +1722,137 @@
\seq_gremove_all:Nn \g__zrefclever_nocompat_modules_seq {#1}
}
}
-\prop_new:N \l__zrefclever_ref_options_prop
\seq_map_inline:Nn
- \c__zrefclever_ref_options_reference_seq
+ \c__zrefclever_rf_opts_tl_reference_seq
{
- \keys_define:nn { zref-clever / reference }
+ \keys_define:nn { zref-clever/reference }
{
- #1 .default:V = \c_novalue_tl ,
+ #1 .default:x = \c_novalue_tl ,
#1 .code:n =
{
\tl_if_novalue:nTF {##1}
- { \prop_remove:Nn \l__zrefclever_ref_options_prop {#1} }
- { \prop_put:Nnn \l__zrefclever_ref_options_prop {#1} {##1} }
+ {
+ \__zrefclever_opt_tl_unset:c
+ { \__zrefclever_opt_varname_general:nn {#1} { tl } }
+ }
+ {
+ \tl_set:cn
+ { \__zrefclever_opt_varname_general:nn {#1} { tl } }
+ {##1}
+ }
} ,
}
}
-\keys_define:nn { zref-clever / reference }
+\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 }
+ { refpre } { refbounds }
} ,
refpos .code:n =
{
% NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha.
\msg_warning:nnnn { zref-clever }{ option-deprecated }
- { refpos } { postref }
+ { refpos } { refbounds }
} ,
- }
-\keys_define:nn { }
- {
- zref-clever / zcsetup .inherit:n =
+ preref .code:n =
{
- zref-clever / label ,
- zref-clever / reference ,
- }
- }
-\ProcessKeysOptions { zref-clever / zcsetup }
-\NewDocumentCommand \zcsetup { m }
- { \__zrefclever_zcsetup:n {#1} }
-\cs_new_protected:Npn \__zrefclever_zcsetup:n #1
- { \keys_set:nn { zref-clever / zcsetup } {#1} }
-\cs_generate_variant:Nn \__zrefclever_zcsetup:n { x }
-\NewDocumentCommand \zcRefTypeSetup { m m }
- {
- \prop_if_exist:cF { l__zrefclever_type_ #1 _options_prop }
- { \prop_new:c { l__zrefclever_type_ #1 _options_prop } }
- \tl_set:Nn \l__zrefclever_setup_type_tl {#1}
- \keys_set:nn { zref-clever / typesetup } {#2}
+ % NOTE Option deprecated in 2022-01-14 for v0.2.0-alpha.
+ \msg_warning:nnnn { zref-clever }{ option-deprecated }
+ { preref } { refbounds }
+ } ,
+ postref .code:n =
+ {
+ % NOTE Option deprecated in 2022-01-14 for v0.2.0-alpha.
+ \msg_warning:nnnn { zref-clever }{ option-deprecated }
+ { postref } { refbounds }
+ } ,
}
-\keys_define:nn { zref-clever / typesetup }
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_seq_refbounds_seq
{
- cap .code:n =
+ \keys_define:nn { zref-clever/reference }
{
- \tl_if_empty:nTF {#1}
+ #1 .default:x = \c_novalue_tl ,
+ #1 .code:n =
{
- \prop_remove:cn
+ \tl_if_novalue:nTF {##1}
{
- l__zrefclever_type_
- \l__zrefclever_setup_type_tl _options_prop
+ \__zrefclever_opt_seq_unset:c
+ { \__zrefclever_opt_varname_general:nn {#1} { seq } }
}
- { cap }
- }
- {
- \bool_lazy_or:nnTF
- { \str_if_eq_p:nn {#1} { true } }
- { \str_if_eq_p:nn {#1} { false } }
{
- \prop_put:cnn
+ \seq_clear:N \l_tmpa_seq
+ \__zrefclever_opt_seq_set_clist_split:Nn
+ \l_tmpa_seq {##1}
+ \bool_lazy_or:nnTF
+ { \tl_if_empty_p:n {##1} }
+ { \int_compare_p:nNn { \seq_count:N \l_tmpa_seq } = { 4 } }
{
- l__zrefclever_type_
- \l__zrefclever_setup_type_tl _options_prop
+ \seq_set_eq:cN
+ { \__zrefclever_opt_varname_general:nn {#1} { seq } }
+ \l_tmpa_seq
+ }
+ {
+ \msg_warning:nnxx { zref-clever }
+ { refbounds-must-be-four }
+ {#1} { \seq_count:N \l_tmpa_seq }
}
- { 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 =
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_bool_maybe_type_specific_seq
+ {
+ \keys_define:nn { zref-clever/reference }
{
- \tl_if_empty:nTF {#1}
+ #1 .choice: ,
+ #1 / true .code:n =
{
- \prop_remove:cn
- {
- l__zrefclever_type_
- \l__zrefclever_setup_type_tl _options_prop
- }
- { abbrev }
- }
+ \bool_set_true:c
+ { \__zrefclever_opt_varname_general:nn {#1} { bool } }
+ } ,
+ #1 / false .code:n =
{
- \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 ,
+ \bool_set_false:c
+ { \__zrefclever_opt_varname_general:nn {#1} { bool } }
+ } ,
+ #1 / unset .code:n =
+ {
+ \__zrefclever_opt_bool_unset:c
+ { \__zrefclever_opt_varname_general:nn {#1} { bool } }
+ } ,
+ #1 .default:n = true ,
+ no #1 .meta:n = { #1 = false } ,
+ no #1 .value_forbidden:n = true ,
+ }
+ }
+\keys_define:nn { }
+ {
+ zref-clever/zcsetup .inherit:n =
+ {
+ zref-clever/label ,
+ zref-clever/reference ,
+ }
+ }
+\ProcessKeysOptions { zref-clever/zcsetup }
+\NewDocumentCommand \zcsetup { m }
+ { \__zrefclever_zcsetup:n {#1} }
+\cs_new_protected:Npn \__zrefclever_zcsetup:n #1
+ { \keys_set:nn { zref-clever/zcsetup } {#1} }
+\cs_generate_variant:Nn \__zrefclever_zcsetup:n { x }
+\NewDocumentCommand \zcRefTypeSetup { m m }
+ {
+ \tl_set:Nn \l__zrefclever_setup_type_tl {#1}
+ \keys_set:nn { zref-clever/typesetup } {#2}
}
\seq_map_inline:Nn
- \c__zrefclever_ref_options_necessarily_not_type_specific_seq
+ \c__zrefclever_rf_opts_tl_not_type_specific_seq
{
- \keys_define:nn { zref-clever / typesetup }
+ \keys_define:nn { zref-clever/typesetup }
{
#1 .code:n =
{
@@ -1577,101 +1862,171 @@
}
}
\seq_map_inline:Nn
- \c__zrefclever_ref_options_typesetup_seq
+ \c__zrefclever_rf_opts_tl_typesetup_seq
{
- \keys_define:nn { zref-clever / typesetup }
+ \keys_define:nn { zref-clever/typesetup }
{
- #1 .default:V = \c_novalue_tl ,
+ #1 .default:x = \c_novalue_tl ,
#1 .code:n =
{
\tl_if_novalue:nTF {##1}
{
- \prop_remove:cn
+ \__zrefclever_opt_tl_unset:c
{
- l__zrefclever_type_
- \l__zrefclever_setup_type_tl _options_prop
+ \__zrefclever_opt_varname_type:enn
+ { \l__zrefclever_setup_type_tl } {#1} { tl }
}
- {#1}
}
{
- \prop_put:cnn
+ \tl_set:cn
{
- l__zrefclever_type_
- \l__zrefclever_setup_type_tl _options_prop
+ \__zrefclever_opt_varname_type:enn
+ { \l__zrefclever_setup_type_tl } {#1} { tl }
}
- {#1} {##1}
+ {##1}
}
} ,
}
}
-\keys_define:nn { zref-clever / typesetup }
+\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 }
+ { refpre } { refbounds }
} ,
refpos .code:n =
{
% NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha.
\msg_warning:nnnn { zref-clever }{ option-deprecated }
- { refpos } { postref }
+ { refpos } { refbounds }
} ,
+ preref .code:n =
+ {
+ % NOTE Option deprecated in 2022-01-14 for v0.2.0-alpha.
+ \msg_warning:nnnn { zref-clever }{ option-deprecated }
+ { preref } { refbounds }
+ } ,
+ postref .code:n =
+ {
+ % NOTE Option deprecated in 2022-01-14 for v0.2.0-alpha.
+ \msg_warning:nnnn { zref-clever }{ option-deprecated }
+ { postref } { refbounds }
+ } ,
+ }
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_seq_refbounds_seq
+ {
+ \keys_define:nn { zref-clever/typesetup }
+ {
+ #1 .default:x = \c_novalue_tl ,
+ #1 .code:n =
+ {
+ \tl_if_novalue:nTF {##1}
+ {
+ \__zrefclever_opt_seq_unset:c
+ {
+ \__zrefclever_opt_varname_type:enn
+ { \l__zrefclever_setup_type_tl } {#1} { seq }
+ }
+ }
+ {
+ \seq_clear:N \l_tmpa_seq
+ \__zrefclever_opt_seq_set_clist_split:Nn
+ \l_tmpa_seq {##1}
+ \bool_lazy_or:nnTF
+ { \tl_if_empty_p:n {##1} }
+ { \int_compare_p:nNn { \seq_count:N \l_tmpa_seq } = { 4 } }
+ {
+ \seq_set_eq:cN
+ {
+ \__zrefclever_opt_varname_type:enn
+ { \l__zrefclever_setup_type_tl } {#1} { seq }
+ }
+ \l_tmpa_seq
+ }
+ {
+ \msg_warning:nnxx { zref-clever }
+ { refbounds-must-be-four }
+ {#1} { \seq_count:N \l_tmpa_seq }
+ }
+ }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_bool_maybe_type_specific_seq
+ {
+ \keys_define:nn { zref-clever/typesetup }
+ {
+ #1 .choice: ,
+ #1 / true .code:n =
+ {
+ \bool_set_true:c
+ {
+ \__zrefclever_opt_varname_type:enn
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ } ,
+ #1 / false .code:n =
+ {
+ \bool_set_false:c
+ {
+ \__zrefclever_opt_varname_type:enn
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ } ,
+ #1 / unset .code:n =
+ {
+ \__zrefclever_opt_bool_unset:c
+ {
+ \__zrefclever_opt_varname_type:enn
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ } ,
+ #1 .default:n = true ,
+ no #1 .meta:n = { #1 = false } ,
+ no #1 .value_forbidden:n = true ,
+ }
}
\NewDocumentCommand \zcLanguageSetup { m m }
{
\group_begin:
- \prop_get:NnNTF \g__zrefclever_languages_prop {#1}
- \l__zrefclever_base_language_tl
+ \__zrefclever_language_if_declared:nTF {#1}
{
\tl_clear:N \l__zrefclever_setup_type_tl
- \exp_args:NNx \seq_set_from_clist:Nn
- \l__zrefclever_lang_declension_seq
+ \tl_set:Nn \l__zrefclever_setup_language_tl {#1}
+ \__zrefclever_opt_seq_get:cNF
{
- \prop_item:cn
- {
- g__zrefclever_lang_
- \l__zrefclever_base_language_tl _prop
- }
- { declension }
+ \__zrefclever_opt_varname_language:nnn
+ {#1} { declension } { seq }
}
+ \l__zrefclever_lang_declension_seq
+ { \seq_clear:N \l__zrefclever_lang_declension_seq }
\seq_if_empty:NTF \l__zrefclever_lang_declension_seq
{ \tl_clear:N \l__zrefclever_lang_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_lang_gender_seq
+ \__zrefclever_opt_seq_get:cNF
{
- \prop_item:cn
- {
- g__zrefclever_lang_
- \l__zrefclever_base_language_tl _prop
- }
- { gender }
+ \__zrefclever_opt_varname_language:nnn
+ {#1} { gender } { seq }
}
- \keys_set:nn { zref-clever / langsetup } {#2}
+ \l__zrefclever_lang_gender_seq
+ { \seq_clear:N \l__zrefclever_lang_gender_seq }
+ \keys_set:nn { zref-clever/langsetup } {#2}
}
{ \msg_warning:nnn { zref-clever } { unknown-language-setup } {#1} }
\group_end:
}
\@onlypreamble \zcLanguageSetup
-\cs_new_protected:Npn \__zrefclever_declare_lang_opt_type:nnnn #1#2#3#4
- {
- \prop_gput:cnn { g__zrefclever_lang_ #1 _prop }
- { type- #2 - #3 } {#4}
- }
-\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_lang_ #1 _prop }
- { default- #2 } {#3}
- }
-\cs_generate_variant:Nn \__zrefclever_declare_lang_opt_default:nnn { Vnn , VnV }
-\keys_define:nn { zref-clever / langsetup }
+\keys_define:nn { zref-clever/langsetup }
{
type .code:n =
{
@@ -1685,14 +2040,14 @@
\seq_if_empty:NTF \l__zrefclever_lang_declension_seq
{
\msg_warning:nnxx { zref-clever } { language-no-decl-setup }
- { \l__zrefclever_base_language_tl } {#1}
+ { \l__zrefclever_setup_language_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_base_language_tl }
+ {#1} { \l__zrefclever_setup_language_tl }
\seq_get_left:NN \l__zrefclever_lang_declension_seq
\l__zrefclever_lang_decl_case_tl
}
@@ -1700,12 +2055,13 @@
} ,
case .value_required:n = true ,
+ gender .default:x = \c_novalue_tl ,
gender .code:n =
{
\seq_if_empty:NTF \l__zrefclever_lang_gender_seq
{
\msg_warning:nnxxx { zref-clever } { language-no-gender }
- { \l__zrefclever_base_language_tl } { gender } {#1}
+ { \l__zrefclever_setup_language_tl } { gender } {#1}
}
{
\tl_if_empty:NTF \l__zrefclever_setup_type_tl
@@ -1714,82 +2070,69 @@
{ option-only-type-specific } { gender }
}
{
- \clist_clear:N \l_tmpa_clist
- \clist_map_inline:nn {#1}
+ \tl_if_novalue:nTF {#1}
{
- \seq_if_in:NnTF \l__zrefclever_lang_gender_seq {##1}
- { \clist_put_right:Nn \l_tmpa_clist {##1} }
+ \__zrefclever_opt_seq_gunset:c
{
- \msg_warning:nnxx { zref-clever }
- { gender-not-declared }
- { \l__zrefclever_base_language_tl } {##1}
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ { gender }
+ { seq }
}
}
- \clist_if_empty:NF \l_tmpa_clist
{
- \__zrefclever_declare_lang_opt_type:VVnx
- \l__zrefclever_base_language_tl
- \l__zrefclever_setup_type_tl
- { gender } { \clist_use:Nn \l_tmpa_clist { , } }
+ \seq_clear:N \l_tmpa_seq
+ \clist_map_inline:nn {#1}
+ {
+ \seq_if_in:NnTF \l__zrefclever_lang_gender_seq {##1}
+ { \seq_put_right:Nn \l_tmpa_seq {##1} }
+ {
+ \msg_warning:nnxx { zref-clever }
+ { gender-not-declared }
+ { \l__zrefclever_setup_language_tl } {##1}
+ }
+ }
+ \seq_gset_eq:cN
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ { gender }
+ { seq }
+ }
+ \l_tmpa_seq
}
}
}
} ,
- 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
+ \c__zrefclever_rf_opts_tl_not_type_specific_seq
{
- \keys_define:nn { zref-clever / langsetup }
+ \keys_define:nn { zref-clever/langsetup }
{
- #1 .value_required:n = true ,
+ #1 .default:x = \c_novalue_tl ,
#1 .code:n =
{
\tl_if_empty:NTF \l__zrefclever_setup_type_tl
{
- \__zrefclever_declare_lang_opt_default:Vnn
- \l__zrefclever_base_language_tl
- {#1} {##1}
+ \tl_if_novalue:nTF {##1}
+ {
+ \__zrefclever_opt_tl_gunset:c
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl } {#1} { tl }
+ }
+ }
+ {
+ \tl_gset:cn
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl } {#1} { tl }
+ }
+ {##1}
+ }
}
{
\msg_warning:nnn { zref-clever }
@@ -1799,47 +2142,88 @@
}
}
\seq_map_inline:Nn
- \c__zrefclever_ref_options_possibly_type_specific_seq
+ \c__zrefclever_rf_opts_tl_maybe_type_specific_seq
{
- \keys_define:nn { zref-clever / langsetup }
+ \keys_define:nn { zref-clever/langsetup }
{
#1 .value_required:n = true ,
#1 .code:n =
{
\tl_if_empty:NTF \l__zrefclever_setup_type_tl
{
- \__zrefclever_declare_lang_opt_default:Vnn
- \l__zrefclever_base_language_tl
- {#1} {##1}
+ \tl_if_novalue:nTF {##1}
+ {
+ \__zrefclever_opt_tl_gunset:c
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl } {#1} { tl }
+ }
+ }
+ {
+ \tl_gset:cn
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl } {#1} { tl }
+ }
+ {##1}
+ }
}
{
- \__zrefclever_declare_lang_opt_type:VVnn
- \l__zrefclever_base_language_tl
- \l__zrefclever_setup_type_tl
- {#1} {##1}
+ \tl_if_novalue:nTF {##1}
+ {
+ \__zrefclever_opt_tl_gunset:c
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { tl }
+ }
+ }
+ {
+ \tl_gset:cn
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { tl }
+ }
+ {##1}
+ }
}
} ,
}
}
-\keys_define:nn { zref-clever / langsetup }
+\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 }
+ { refpre } { refbounds }
} ,
refpos .code:n =
{
% NOTE Option deprecated in 2022-01-10 for v0.1.2-alpha.
\msg_warning:nnnn { zref-clever }{ option-deprecated }
- { refpos } { postref }
+ { refpos } { refbounds }
+ } ,
+ preref .code:n =
+ {
+ % NOTE Option deprecated in 2022-01-14 for v0.2.0-alpha.
+ \msg_warning:nnnn { zref-clever }{ option-deprecated }
+ { preref } { refbounds }
+ } ,
+ postref .code:n =
+ {
+ % NOTE Option deprecated in 2022-01-14 for v0.2.0-alpha.
+ \msg_warning:nnnn { zref-clever }{ option-deprecated }
+ { postref } { refbounds }
} ,
}
\seq_map_inline:Nn
- \c__zrefclever_ref_options_type_names_seq
+ \c__zrefclever_rf_opts_tl_type_names_seq
{
- \keys_define:nn { zref-clever / langsetup }
+ \keys_define:nn { zref-clever/langsetup }
{
#1 .value_required:n = true ,
#1 .code:n =
@@ -1850,21 +2234,200 @@
{ option-only-type-specific } {#1}
}
{
- \tl_if_empty:NTF \l__zrefclever_lang_decl_case_tl
+ \tl_if_novalue:nTF {##1}
+ {
+ \__zrefclever_opt_tl_gunset:c
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { tl }
+ }
+ }
+ {
+ \tl_if_empty:NTF \l__zrefclever_lang_decl_case_tl
+ {
+ \tl_gset:cn
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { tl }
+ }
+ {##1}
+ }
+ {
+ \tl_gset:cn
+ {
+ \__zrefclever_opt_varname_lang_type:eeen
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ { \l__zrefclever_lang_decl_case_tl - #1 }
+ { tl }
+ }
+ {##1}
+ }
+ }
+ }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_seq_refbounds_seq
+ {
+ \keys_define:nn { zref-clever/langsetup }
+ {
+ #1 .default:x = \c_novalue_tl ,
+ #1 .code:n =
+ {
+ \tl_if_empty:NTF \l__zrefclever_setup_type_tl
+ {
+ \tl_if_novalue:nTF {##1}
+ {
+ \__zrefclever_opt_seq_gunset:c
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { seq }
+ }
+ }
+ {
+ \seq_gclear:N \g_tmpa_seq
+ \__zrefclever_opt_seq_gset_clist_split:Nn
+ \g_tmpa_seq {##1}
+ \bool_lazy_or:nnTF
+ { \tl_if_empty_p:n {##1} }
+ {
+ \int_compare_p:nNn
+ { \seq_count:N \g_tmpa_seq } = { 4 }
+ }
+ {
+ \seq_gset_eq:cN
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { seq }
+ }
+ \g_tmpa_seq
+ }
+ {
+ \msg_warning:nnxx { zref-clever }
+ { refbounds-must-be-four }
+ {#1} { \seq_count:N \g_tmpa_seq }
+ }
+ }
+ }
+ {
+ \tl_if_novalue:nTF {##1}
+ {
+ \__zrefclever_opt_seq_gunset:c
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl } {#1} { seq }
+ }
+ }
+ {
+ \seq_gclear:N \g_tmpa_seq
+ \__zrefclever_opt_seq_gset_clist_split:Nn
+ \g_tmpa_seq {##1}
+ \bool_lazy_or:nnTF
+ { \tl_if_empty_p:n {##1} }
+ {
+ \int_compare_p:nNn
+ { \seq_count:N \g_tmpa_seq } = { 4 }
+ }
+ {
+ \seq_gset_eq:cN
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl } {#1} { seq }
+ }
+ \g_tmpa_seq
+ }
+ {
+ \msg_warning:nnxx { zref-clever }
+ { refbounds-must-be-four }
+ {#1} { \seq_count:N \g_tmpa_seq }
+ }
+ }
+ }
+ } ,
+ }
+ }
+\seq_map_inline:Nn
+ \c__zrefclever_rf_opts_bool_maybe_type_specific_seq
+ {
+ \keys_define:nn { zref-clever/langsetup }
+ {
+ #1 .choice: ,
+ #1 / true .code:n =
+ {
+ \tl_if_empty:NTF \l__zrefclever_setup_type_tl
+ {
+ \bool_gset_true:c
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { bool }
+ }
+ }
+ {
+ \bool_gset_true:c
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ }
+ } ,
+ #1 / false .code:n =
+ {
+ \tl_if_empty:NTF \l__zrefclever_setup_type_tl
+ {
+ \bool_gset_false:c
+ {
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { bool }
+ }
+ }
+ {
+ \bool_gset_false:c
+ {
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
+ }
+ }
+ } ,
+ #1 / unset .code:n =
+ {
+ \tl_if_empty:NTF \l__zrefclever_setup_type_tl
+ {
+ \__zrefclever_opt_bool_gunset:c
{
- \__zrefclever_declare_lang_opt_type:VVnn
- \l__zrefclever_base_language_tl
- \l__zrefclever_setup_type_tl
- {#1} {##1}
+ \__zrefclever_opt_varname_lang_default:enn
+ { \l__zrefclever_setup_language_tl }
+ {#1} { bool }
}
+ }
+ {
+ \__zrefclever_opt_bool_gunset:c
{
- \__zrefclever_declare_lang_opt_type:VVxn
- \l__zrefclever_base_language_tl
- \l__zrefclever_setup_type_tl
- { \l__zrefclever_lang_decl_case_tl - #1 } {##1}
+ \__zrefclever_opt_varname_lang_type:eenn
+ { \l__zrefclever_setup_language_tl }
+ { \l__zrefclever_setup_type_tl }
+ {#1} { bool }
}
}
} ,
+ #1 .default:n = true ,
+ no #1 .meta:n = { #1 = false } ,
+ no #1 .value_forbidden:n = true ,
}
}
\NewDocumentCommand \zcref { s O { } m }
@@ -1872,11 +2435,11 @@
\cs_new_protected:Npn \__zrefclever_zcref:nnn #1#2#3
{
\group_begin:
- \keys_set:nn { zref-clever / reference } {#3}
+ \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_langfile:x { \l__zrefclever_ref_language_tl }
- \__zrefclever_process_language_options:
+ \__zrefclever_process_language_settings:
\bool_lazy_and:nnT
{ \l__zrefclever_zrefcheck_available_bool }
{ \l__zrefclever_zcref_with_check_bool }
@@ -1891,7 +2454,10 @@
\group_end:
\tl_if_empty:NF \l__zrefclever_zcref_note_tl
{
- \__zrefclever_get_ref_opt_typeset:nN { notesep } \l_tmpa_tl
+ \__zrefclever_get_rf_opt_tl:nxxN { notesep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l_tmpa_tl
\l_tmpa_tl
\l__zrefclever_zcref_note_tl
}
@@ -1914,9 +2480,11 @@
\bool_new:N \l__zrefclever_link_star_bool
\NewDocumentCommand \zcpageref { s O { } m }
{
- \IfBooleanTF {#1}
- { \zcref*[#2, ref = page] {#3} }
- { \zcref [#2, ref = page] {#3} }
+ \group_begin:
+ \IfBooleanT {#1}
+ { \bool_set_false:N \l__zrefclever_hyperlink_bool }
+ \zcref [#2, ref = page] {#3}
+ \group_end:
}
\tl_new:N \l__zrefclever_label_type_a_tl
\tl_new:N \l__zrefclever_label_type_b_tl
@@ -1931,7 +2499,7 @@
\cs_new_protected:Npn \__zrefclever_sort_labels:
{
\seq_clear:N \l__zrefclever_label_types_seq
- \tl_if_eq:NnF \l__zrefclever_ref_property_tl { page }
+ \tl_if_eq:NnF \l__zrefclever_ref_propserty_tl { page }
{
\seq_map_function:NN \l__zrefclever_zcref_labels_seq
\__zrefclever_label_type_put_new_right:n
@@ -1973,7 +2541,7 @@
\cs_new_protected:Npn \__zrefclever_label_type_put_new_right:n #1
{
\__zrefclever_extract_default:Nnnn
- \l__zrefclever_label_type_a_tl {#1} { zc@type } { \c_empty_tl }
+ \l__zrefclever_label_type_a_tl {#1} { zc@type } { }
\seq_if_in:NVF \l__zrefclever_label_types_seq
\l__zrefclever_label_type_a_tl
{
@@ -1997,15 +2565,15 @@
\cs_new_protected:Npn \__zrefclever_sort_default_same_type:nn #1#2
{
\__zrefclever_extract_default:Nnnn \l__zrefclever_label_enclval_a_tl
- {#1} { zc@enclval } { \c_empty_tl }
+ {#1} { zc@enclval } { }
\tl_reverse:N \l__zrefclever_label_enclval_a_tl
\__zrefclever_extract_default:Nnnn \l__zrefclever_label_enclval_b_tl
- {#2} { zc@enclval } { \c_empty_tl }
+ {#2} { zc@enclval } { }
\tl_reverse:N \l__zrefclever_label_enclval_b_tl
\__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_a_tl
- {#1} { externaldocument } { \c_empty_tl }
+ {#1} { externaldocument } { }
\__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_b_tl
- {#2} { externaldocument } { \c_empty_tl }
+ {#2} { externaldocument } { }
\bool_set_false:N \l__zrefclever_sort_decided_bool
@@ -2190,6 +2758,7 @@
\bool_new:N \l__zrefclever_last_of_type_bool
\int_new:N \l__zrefclever_type_count_int
\int_new:N \l__zrefclever_label_count_int
+\int_new:N \l__zrefclever_ref_count_int
\tl_new:N \l__zrefclever_label_a_tl
\tl_new:N \l__zrefclever_label_b_tl
\tl_new:N \l__zrefclever_typeset_queue_prev_tl
@@ -2198,9 +2767,10 @@
\tl_new:N \l__zrefclever_type_first_label_type_tl
\tl_new:N \l__zrefclever_type_name_tl
\bool_new:N \l__zrefclever_name_in_link_bool
+\bool_new:N \l__zrefclever_type_name_missing_bool
\tl_new:N \l__zrefclever_name_format_tl
\tl_new:N \l__zrefclever_name_format_fallback_tl
-\tl_new:N \l__zrefclever_type_name_gender_tl
+\seq_new:N \l__zrefclever_type_name_gender_seq
\int_new:N \l__zrefclever_range_count_int
\int_new:N \l__zrefclever_range_same_count_int
\tl_new:N \l__zrefclever_range_beg_label_tl
@@ -2214,12 +2784,22 @@
\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_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_cap_bool
\bool_new:N \l__zrefclever_abbrev_bool
+\seq_new:N \l__zrefclever_refbounds_first_seq
+\seq_new:N \l__zrefclever_refbounds_first_sg_seq
+\seq_new:N \l__zrefclever_refbounds_first_pb_seq
+\seq_new:N \l__zrefclever_refbounds_first_rb_seq
+\seq_new:N \l__zrefclever_refbounds_mid_seq
+\seq_new:N \l__zrefclever_refbounds_mid_rb_seq
+\seq_new:N \l__zrefclever_refbounds_mid_re_seq
+\seq_new:N \l__zrefclever_refbounds_last_seq
+\seq_new:N \l__zrefclever_refbounds_last_pe_seq
+\seq_new:N \l__zrefclever_refbounds_last_re_seq
+\seq_new:N \l__zrefclever_type_first_refbounds_seq
+\bool_new:N \l__zrefclever_type_first_refbounds_set_bool
\bool_new:N \l__zrefclever_verbose_testing_bool
\cs_new_protected:Npn \__zrefclever_typeset_refs:
{
@@ -2232,15 +2812,23 @@
\tl_clear:N \l__zrefclever_range_beg_label_tl
\int_zero:N \l__zrefclever_label_count_int
\int_zero:N \l__zrefclever_type_count_int
+ \int_zero:N \l__zrefclever_ref_count_int
\int_zero:N \l__zrefclever_range_count_int
\int_zero:N \l__zrefclever_range_same_count_int
+ \bool_set_false:N \l__zrefclever_type_first_refbounds_set_bool
% Get type block options (not type-specific).
- \__zrefclever_get_ref_opt_typeset:nN { tpairsep }
+ \__zrefclever_get_rf_opt_tl:nxxN { tpairsep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_tpairsep_tl
- \__zrefclever_get_ref_opt_typeset:nN { tlistsep }
+ \__zrefclever_get_rf_opt_tl:nxxN { tlistsep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_tlistsep_tl
- \__zrefclever_get_ref_opt_typeset:nN { tlastsep }
+ \__zrefclever_get_rf_opt_tl:nxxN { tlastsep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_tlastsep_tl
% Process label stack.
@@ -2323,32 +2911,86 @@
}
}
- % Get type-specific separators, pre-/postref font and other options,
- % once per type.
+ % Get possibly type-specific separators, refbounds, font and other
+ % options, once per type.
\int_compare:nNnT { \l__zrefclever_label_count_int } = { 0 }
{
- \__zrefclever_get_ref_opt_typeset:nN { namesep }
+ \__zrefclever_get_rf_opt_tl:nxxN { namesep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_namesep_tl
- \__zrefclever_get_ref_opt_typeset:nN { pairsep }
+ \__zrefclever_get_rf_opt_tl:nxxN { pairsep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_pairsep_tl
- \__zrefclever_get_ref_opt_typeset:nN { listsep }
+ \__zrefclever_get_rf_opt_tl:nxxN { listsep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_listsep_tl
- \__zrefclever_get_ref_opt_typeset:nN { lastsep }
+ \__zrefclever_get_rf_opt_tl:nxxN { lastsep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_lastsep_tl
- \__zrefclever_get_ref_opt_typeset:nN { rangesep }
+ \__zrefclever_get_rf_opt_tl:nxxN { rangesep }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_rangesep_tl
- \__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 }
+ \__zrefclever_get_rf_opt_tl:nxxN { namefont }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_namefont_tl
- \__zrefclever_get_ref_opt_font:nN { reffont }
+ \__zrefclever_get_rf_opt_tl:nxxN { reffont }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_reffont_tl
- \__zrefclever_get_ref_opt_bool:nnN { cap } { false }
- \l__zrefclever_capitalize_bool
- \__zrefclever_get_ref_opt_bool:nnN { abbrev } { false }
+ \__zrefclever_get_rf_opt_bool:nnxxN { cap } { false }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_cap_bool
+ \__zrefclever_get_rf_opt_bool:nnxxN { abbrev } { false }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
\l__zrefclever_abbrev_bool
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-first }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_first_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-first-sg }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_first_sg_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-first-pb }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_first_pb_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-first-rb }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_first_rb_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-mid }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_mid_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-mid-rb }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_mid_rb_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-mid-re }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_mid_re_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-last }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_last_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-last-pe }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_last_pe_seq
+ \__zrefclever_get_rf_opt_seq:nxxN { refbounds-last-re }
+ { \l__zrefclever_label_type_a_tl }
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_refbounds_last_re_seq
}
% Here we send this to a couple of auxiliary functions.
@@ -2373,19 +3015,31 @@
\l__zrefclever_label_a_tl
\tl_set:NV \l__zrefclever_type_first_label_type_tl
\l__zrefclever_label_type_a_tl
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_sg_seq
+ \bool_set_true:N \l__zrefclever_type_first_refbounds_set_bool
}
% The last is the second: we have a pair (if not repeated).
% Test: 'zc-typeset01.lvt': "Last of type: pair"
{ 1 }
{
- \int_compare:nNnF { \l__zrefclever_range_same_count_int } = { 1 }
+ \int_compare:nNnTF { \l__zrefclever_range_same_count_int } = { 1 }
+ {
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_sg_seq
+ \bool_set_true:N \l__zrefclever_type_first_refbounds_set_bool
+ }
{
\tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_pairsep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_pe_seq
}
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_pb_seq
+ \bool_set_true:N \l__zrefclever_type_first_refbounds_set_bool
}
}
}
@@ -2398,28 +3052,56 @@
% Test: 'zc-typeset01.lvt': "Last of type: not range"
{ 0 }
{
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ \int_compare:nNnTF { \l__zrefclever_ref_count_int } < { 2 }
+ {
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_pairsep_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_pe_seq
+ }
+ }
{
- \exp_not:V \l__zrefclever_lastsep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_lastsep_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_seq
+ }
}
}
% Last in the range is also the second in it.
% Test: 'zc-typeset01.lvt': "Last of type: pair in sequence"
{ 1 }
{
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ \int_compare:nNnTF
+ { \l__zrefclever_range_same_count_int } = { 1 }
{
% We know `range_beg_label' is not empty, since this is the
% second element in the range, but the third or more in the
% type list.
- \exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V \l__zrefclever_range_beg_label_tl
- \int_compare:nNnF
- { \l__zrefclever_range_same_count_int } = { 1 }
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_pairsep_tl
+ \__zrefclever_get_ref:VN
+ \l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_last_pe_seq
+ }
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_pb_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
+ {
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
+ \exp_not:V \l__zrefclever_listsep_tl
+ \__zrefclever_get_ref:VN
+ \l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_seq
\exp_not:V \l__zrefclever_lastsep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_seq
}
}
}
@@ -2437,49 +3119,117 @@
{ 0 }
{
% If `range_beg_label' is empty, it means it was also the
- % first of the type, and hence was already handled.
- \tl_if_empty:VF \l__zrefclever_range_beg_label_tl
+ % first of the type, and hence its typesetting was already
+ % handled, and we just have to set refbounds.
+ \tl_if_empty:VTF \l__zrefclever_range_beg_label_tl
{
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_sg_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
+ {
+ \int_compare:nNnTF
+ { \l__zrefclever_ref_count_int } < { 2 }
{
- \exp_not:V \l__zrefclever_lastsep_tl
- \__zrefclever_get_ref:V
- \l__zrefclever_range_beg_label_tl
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_pairsep_tl
+ \__zrefclever_get_ref:VN
+ \l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_last_pe_seq
+ }
+ }
+ {
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_lastsep_tl
+ \__zrefclever_get_ref:VN
+ \l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_last_seq
+ }
}
}
}
- % A `range', but with no skipped value, treat as list.
+ % A `range', but with no skipped value, treat as pair if range
+ % started with first of type, otherwise as list.
% Test: 'zc-typeset01.lvt': "Last of type: range to pair"
{ 1 }
{
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ % Ditto.
+ \tl_if_empty:VTF \l__zrefclever_range_beg_label_tl
{
- % Ditto.
- \tl_if_empty:VF \l__zrefclever_range_beg_label_tl
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_pb_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_pairsep_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_pe_seq
+ }
+ }
+ {
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V
+ \__zrefclever_get_ref:VN
\l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_seq
+ }
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_lastsep_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_seq
}
- \exp_not:V \l__zrefclever_lastsep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
}
}
}
{
% An actual range.
% Test: 'zc-typeset01.lvt': "Last of type: range"
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ % Ditto.
+ \tl_if_empty:VTF \l__zrefclever_range_beg_label_tl
+ {
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_rb_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
{
- % Ditto.
- \tl_if_empty:VF \l__zrefclever_range_beg_label_tl
+ \int_compare:nNnTF
+ { \l__zrefclever_ref_count_int } < { 2 }
+ {
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_pairsep_tl
+ \__zrefclever_get_ref:VN
+ \l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_rb_seq
+ }
+ \seq_set_eq:NN
+ \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_pb_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
{
- \exp_not:V \l__zrefclever_lastsep_tl
- \__zrefclever_get_ref:V
- \l__zrefclever_range_beg_label_tl
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_lastsep_tl
+ \__zrefclever_get_ref:VN
+ \l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_rb_seq
+ }
}
+ }
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
\exp_not:V \l__zrefclever_rangesep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_re_seq
}
}
}
@@ -2511,16 +3261,40 @@
}
% Test: 'zc-typeset01.lvt': "Last of type: option range"
% Test: 'zc-typeset01.lvt': "Last of type: option range to pair"
- \tl_set:Nx \l__zrefclever_typeset_queue_curr_tl
+ \bool_if:NTF \l__zrefclever_next_maybe_range_bool
{
- \bool_if:NTF \l__zrefclever_next_maybe_range_bool
- { \exp_not:V \l__zrefclever_pairsep_tl }
- { \exp_not:V \l__zrefclever_rangesep_tl }
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \tl_set:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_pairsep_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_pe_seq
+ }
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_pb_seq
+ \bool_set_true:N \l__zrefclever_type_first_refbounds_set_bool
+ }
+ {
+ \tl_set:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
+ \exp_not:V \l__zrefclever_rangesep_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_last_re_seq
+ }
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_rb_seq
+ \bool_set_true:N \l__zrefclever_type_first_refbounds_set_bool
}
}
}
+ % If none of the special cases for the first of type refbounds have been
+ % set, do it.
+ \bool_if:NF \l__zrefclever_type_first_refbounds_set_bool
+ {
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_seq
+ }
+
% Now that the type block is finished, we can add the name and the first
% ref to the queue. Also, if "typeset" option is not "both", handle it
% here as well.
@@ -2536,7 +3310,10 @@
{
% Test: 'zc-typeset01.lvt': "Last of type: option typeset ref"
\tl_put_left:Nx \l__zrefclever_typeset_queue_curr_tl
- { \__zrefclever_get_ref:V \l__zrefclever_type_first_label_tl }
+ {
+ \__zrefclever_get_ref:VN \l__zrefclever_type_first_label_tl
+ \l__zrefclever_type_first_refbounds_seq
+ }
}
{
\bool_if:NTF \l__zrefclever_typeset_name_bool
@@ -2636,9 +3413,11 @@
\tl_clear:N \l__zrefclever_type_first_label_type_tl
\tl_clear:N \l__zrefclever_range_beg_label_tl
\int_zero:N \l__zrefclever_label_count_int
+ \int_zero:N \l__zrefclever_ref_count_int
\int_incr:N \l__zrefclever_type_count_int
\int_zero:N \l__zrefclever_range_count_int
\int_zero:N \l__zrefclever_range_same_count_int
+ \bool_set_false:N \l__zrefclever_type_first_refbounds_set_bool
}
}
\cs_new_protected:Npn \__zrefclever_typeset_refs_not_last_of_type:
@@ -2666,6 +3445,7 @@
\l__zrefclever_label_a_tl
\tl_set:NV \l__zrefclever_type_first_label_type_tl
\l__zrefclever_label_type_a_tl
+ \int_incr:N \l__zrefclever_ref_count_int
% If the next label may be part of a range, we set `range_beg_label'
% to "empty" (we deal with it as the "first", and must do it there, to
@@ -2710,10 +3490,12 @@
% Test: 'zc-typeset01.lvt': "Not last of type: no range"
{ 0 }
{
+ \int_incr:N \l__zrefclever_ref_count_int
\tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_mid_seq
}
}
% Last is second in the range: if `range_same_count' is also
@@ -2723,20 +3505,33 @@
% Test: 'zc-typeset01.lvt': "Not last of type: range pair"
{ 1 }
{
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ \tl_if_empty:VTF \l__zrefclever_range_beg_label_tl
+ {
+ \seq_set_eq:NN \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
{
- \tl_if_empty:VF \l__zrefclever_range_beg_label_tl
+ \int_incr:N \l__zrefclever_ref_count_int
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V
+ \__zrefclever_get_ref:VN
\l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_seq
}
- \int_compare:nNnF
- { \l__zrefclever_range_same_count_int } = { 1 }
+ }
+ \int_compare:nNnF
+ { \l__zrefclever_range_same_count_int } = { 1 }
+ {
+ \int_incr:N \l__zrefclever_ref_count_int
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V
+ \__zrefclever_get_ref:VN
\l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_mid_seq
}
}
}
@@ -2755,44 +3550,85 @@
% Test: 'zc-typeset01.lvt': "Not last of type: range to one"
{ 0 }
{
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ \tl_if_empty:VTF \l__zrefclever_range_beg_label_tl
{
- \tl_if_empty:VF \l__zrefclever_range_beg_label_tl
+ \seq_set_eq:NN
+ \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
+ {
+ \int_incr:N \l__zrefclever_ref_count_int
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V
+ \__zrefclever_get_ref:VN
\l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_seq
}
}
}
% Test: 'zc-typeset01.lvt': "Not last of type: range to pair"
{ 1 }
{
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ \tl_if_empty:VTF \l__zrefclever_range_beg_label_tl
{
- \tl_if_empty:VF \l__zrefclever_range_beg_label_tl
+ \seq_set_eq:NN
+ \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
+ {
+ \int_incr:N \l__zrefclever_ref_count_int
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V
+ \__zrefclever_get_ref:VN
\l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_seq
}
+ }
+ \int_incr:N \l__zrefclever_ref_count_int
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_mid_seq
}
}
}
{
% Test: 'zc-typeset01.lvt': "Not last of type: range"
- \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ \tl_if_empty:VTF \l__zrefclever_range_beg_label_tl
{
- \tl_if_empty:VF \l__zrefclever_range_beg_label_tl
+ \seq_set_eq:NN
+ \l__zrefclever_type_first_refbounds_seq
+ \l__zrefclever_refbounds_first_rb_seq
+ \bool_set_true:N
+ \l__zrefclever_type_first_refbounds_set_bool
+ }
+ {
+ \int_incr:N \l__zrefclever_ref_count_int
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
{
\exp_not:V \l__zrefclever_listsep_tl
- \__zrefclever_get_ref:V
+ \__zrefclever_get_ref:VN
\l__zrefclever_range_beg_label_tl
+ \l__zrefclever_refbounds_mid_rb_seq
}
+ }
+ % For the purposes of the serial comma, and thus for the
+ % distinction of 'lastsep' and 'pairsep', a "range" counts
+ % as one. Since 'range_beg' has already been counted
+ % (here or with the first of type), we refrain from
+ % incrementing 'ref_count_int'.
+ \tl_put_right:Nx \l__zrefclever_typeset_queue_curr_tl
+ {
\exp_not:V \l__zrefclever_rangesep_tl
- \__zrefclever_get_ref:V \l__zrefclever_label_a_tl
+ \__zrefclever_get_ref:VN \l__zrefclever_label_a_tl
+ \l__zrefclever_refbounds_mid_re_seq
}
}
}
@@ -2808,49 +3644,47 @@
{ \zref@default }
\cs_new_protected:Npn \__zrefclever_name_default:
{ \zref@default }
-\cs_new:Npn \__zrefclever_get_ref:n #1
+\cs_new:Npn \__zrefclever_get_ref:nN #1#2
{
\zref@ifrefcontainsprop {#1} { \l__zrefclever_ref_property_tl }
{
\bool_if:nTF
{
- \l__zrefclever_use_hyperref_bool &&
+ \l__zrefclever_hyperlink_bool &&
! \l__zrefclever_link_star_bool
}
{
- \bool_if:NF \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_preref_tl }
+ \exp_not:N \group_begin:
+ \exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn #2 { 1 }
% 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_preref_tl }
- \exp_not:N \group_begin:
- \exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn #2 { 2 }
\__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_postref_tl }
+ \seq_item:Nn #2 { 3 }
}
- \bool_if:NF \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_postref_tl }
+ \seq_item:Nn #2 { 4 }
+ \exp_not:N \group_end:
}
{
- \exp_not:V \l__zrefclever_preref_tl
\exp_not:N \group_begin:
\exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn #2 { 1 }
+ \seq_item:Nn #2 { 2 }
\__zrefclever_extract_unexp:nvn {#1}
{ l__zrefclever_ref_property_tl } { }
+ \seq_item:Nn #2 { 3 }
+ \seq_item:Nn #2 { 4 }
\exp_not:N \group_end:
- \exp_not:V \l__zrefclever_postref_tl
}
}
{ \__zrefclever_ref_default: }
}
-\cs_generate_variant:Nn \__zrefclever_get_ref:n { V }
+\cs_generate_variant:Nn \__zrefclever_get_ref:nN { VN }
\cs_new:Npn \__zrefclever_get_ref_first:
{
\zref@ifrefundefined { \l__zrefclever_type_first_label_tl }
@@ -2862,6 +3696,7 @@
{ \l__zrefclever_type_first_label_tl }
{ \l__zrefclever_ref_property_tl }
{
+ \exp_not:N \group_begin:
% It's two `@s', but escaped for DocStrip.
\exp_not:N \hyper@@link
{
@@ -2878,18 +3713,19 @@
\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_preref_tl
\exp_not:N \group_begin:
\exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 1 }
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 2 }
\__zrefclever_extract_unexp:Vvn
\l__zrefclever_type_first_label_tl
{ l__zrefclever_ref_property_tl } { }
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 3 }
\exp_not:N \group_end:
- \bool_if:NT \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_postref_tl }
}
- \bool_if:NF \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_postref_tl }
+ \exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 4 }
+ \exp_not:N \group_end:
}
{
\exp_not:N \group_begin:
@@ -2901,7 +3737,7 @@
}
}
{
- \tl_if_empty:NTF \l__zrefclever_type_name_tl
+ \bool_if:nTF \l__zrefclever_type_name_missing_bool
{
\__zrefclever_name_default:
\exp_not:V \l__zrefclever_namesep_tl
@@ -2911,7 +3747,8 @@
\exp_not:V \l__zrefclever_namefont_tl
\exp_not:V \l__zrefclever_type_name_tl
\exp_not:N \group_end:
- \exp_not:V \l__zrefclever_namesep_tl
+ \tl_if_empty:NF \l__zrefclever_type_name_tl
+ { \exp_not:V \l__zrefclever_namesep_tl }
}
\zref@ifrefcontainsprop
{ \l__zrefclever_type_first_label_tl }
@@ -2919,12 +3756,14 @@
{
\bool_if:nTF
{
- \l__zrefclever_use_hyperref_bool &&
+ \l__zrefclever_hyperlink_bool &&
! \l__zrefclever_link_star_bool
}
{
- \bool_if:NF \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_preref_tl }
+ \exp_not:N \group_begin:
+ \exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn
+ \l__zrefclever_type_first_refbounds_seq { 1 }
% It's two '@s', but escaped for DocStrip.
\exp_not:N \hyper@@link
{
@@ -2936,29 +3775,29 @@
\l__zrefclever_type_first_label_tl { anchor } { }
}
{
- \bool_if:NT \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_preref_tl }
- \exp_not:N \group_begin:
- \exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn
+ \l__zrefclever_type_first_refbounds_seq { 2 }
\__zrefclever_extract_unexp:Vvn
\l__zrefclever_type_first_label_tl
{ l__zrefclever_ref_property_tl } { }
- \exp_not:N \group_end:
- \bool_if:NT \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_postref_tl }
+ \seq_item:Nn
+ \l__zrefclever_type_first_refbounds_seq { 3 }
}
- \bool_if:NF \l__zrefclever_preposinlink_bool
- { \exp_not:V \l__zrefclever_postref_tl }
+ \seq_item:Nn
+ \l__zrefclever_type_first_refbounds_seq { 4 }
+ \exp_not:N \group_end:
}
{
- \exp_not:V \l__zrefclever_preref_tl
\exp_not:N \group_begin:
\exp_not:V \l__zrefclever_reffont_tl
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 1 }
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 2 }
\__zrefclever_extract_unexp:Vvn
\l__zrefclever_type_first_label_tl
{ l__zrefclever_ref_property_tl } { }
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 3 }
+ \seq_item:Nn \l__zrefclever_type_first_refbounds_seq { 4 }
\exp_not:N \group_end:
- \exp_not:V \l__zrefclever_postref_tl
}
}
{ \__zrefclever_ref_default: }
@@ -2968,18 +3807,24 @@
\cs_new_protected:Npn \__zrefclever_type_name_setup:
{
\zref@ifrefundefined { \l__zrefclever_type_first_label_tl }
- { \tl_clear:N \l__zrefclever_type_name_tl }
+ {
+ \tl_clear:N \l__zrefclever_type_name_tl
+ \bool_set_true:N \l__zrefclever_type_name_missing_bool
+ }
{
\tl_if_eq:NnTF
\l__zrefclever_type_first_label_type_tl { zc@missingtype }
- { \tl_clear:N \l__zrefclever_type_name_tl }
+ {
+ \tl_clear:N \l__zrefclever_type_name_tl
+ \bool_set_true:N \l__zrefclever_type_name_missing_bool
+ }
{
% Determine whether we should use capitalization, abbreviation,
% and plural.
\bool_lazy_or:nnTF
- { \l__zrefclever_capitalize_bool }
+ { \l__zrefclever_cap_bool }
{
- \l__zrefclever_capitalize_first_bool &&
+ \l__zrefclever_capfirst_bool &&
\int_compare_p:nNn { \l__zrefclever_type_count_int } = { 0 }
}
{ \tl_set:Nn \l__zrefclever_name_format_tl {Name} }
@@ -3034,19 +3879,15 @@
{ \l__zrefclever_nudge_gender_bool }
{ ! \tl_if_empty_p:N \l__zrefclever_ref_gender_tl }
{
- \__zrefclever_get_lang_opt_type:xxnNF
- { \l__zrefclever_ref_language_tl }
+ \__zrefclever_get_rf_opt_seq:nxxN { gender }
{ \l__zrefclever_type_first_label_type_tl }
- { gender }
- \l__zrefclever_type_name_gender_tl
- { \tl_clear:N \l__zrefclever_type_name_gender_tl }
- \clist_set:NV \l_tmpa_clist
- \l__zrefclever_type_name_gender_tl
- \clist_if_in:NVF
- \l_tmpa_clist
+ { \l__zrefclever_ref_language_tl }
+ \l__zrefclever_type_name_gender_seq
+ \seq_if_in:NVF
+ \l__zrefclever_type_name_gender_seq
\l__zrefclever_ref_gender_tl
{
- \tl_if_empty:NTF \l__zrefclever_type_name_gender_tl
+ \seq_if_empty:NTF \l__zrefclever_type_name_gender_seq
{
\msg_warning:nnxxx { zref-clever }
{ nudge-gender-not-declared-for-type }
@@ -3059,7 +3900,10 @@
{ nudge-gender-mismatch }
{ \l__zrefclever_type_first_label_type_tl }
{ \l__zrefclever_ref_gender_tl }
- { \l__zrefclever_type_name_gender_tl }
+ {
+ \seq_use:Nn
+ \l__zrefclever_type_name_gender_seq { ,~ }
+ }
{ \l__zrefclever_ref_language_tl }
}
}
@@ -3068,12 +3912,13 @@
\tl_if_empty:NTF \l__zrefclever_name_format_fallback_tl
{
- \prop_get:cVNF
+ \__zrefclever_opt_tl_get:cNF
{
- l__zrefclever_type_
- \l__zrefclever_type_first_label_type_tl _options_prop
+ \__zrefclever_opt_varname_type:een
+ { \l__zrefclever_type_first_label_type_tl }
+ { \l__zrefclever_name_format_tl }
+ { tl }
}
- \l__zrefclever_name_format_tl
\l__zrefclever_type_name_tl
{
\tl_if_empty:NF \l__zrefclever_ref_decl_case_tl
@@ -3082,13 +3927,18 @@
\tl_put_left:NV \l__zrefclever_name_format_tl
\l__zrefclever_ref_decl_case_tl
}
- \__zrefclever_get_lang_opt_type:xxxNF
- { \l__zrefclever_ref_language_tl }
- { \l__zrefclever_type_first_label_type_tl }
- { \l__zrefclever_name_format_tl }
+ \__zrefclever_opt_tl_get:cNF
+ {
+ \__zrefclever_opt_varname_lang_type:eeen
+ { \l__zrefclever_ref_language_tl }
+ { \l__zrefclever_type_first_label_type_tl }
+ { \l__zrefclever_name_format_tl }
+ { tl }
+ }
\l__zrefclever_type_name_tl
{
\tl_clear:N \l__zrefclever_type_name_tl
+ \bool_set_true:N \l__zrefclever_type_name_missing_bool
\msg_warning:nnxx { zref-clever } { missing-name }
{ \l__zrefclever_name_format_tl }
{ \l__zrefclever_type_first_label_type_tl }
@@ -3096,20 +3946,22 @@
}
}
{
- \prop_get:cVNF
+ \__zrefclever_opt_tl_get:cNF
{
- l__zrefclever_type_
- \l__zrefclever_type_first_label_type_tl _options_prop
+ \__zrefclever_opt_varname_type:een
+ { \l__zrefclever_type_first_label_type_tl }
+ { \l__zrefclever_name_format_tl }
+ { tl }
}
- \l__zrefclever_name_format_tl
\l__zrefclever_type_name_tl
{
- \prop_get:cVNF
+ \__zrefclever_opt_tl_get:cNF
{
- l__zrefclever_type_
- \l__zrefclever_type_first_label_type_tl _options_prop
+ \__zrefclever_opt_varname_type:een
+ { \l__zrefclever_type_first_label_type_tl }
+ { \l__zrefclever_name_format_fallback_tl }
+ { tl }
}
- \l__zrefclever_name_format_fallback_tl
\l__zrefclever_type_name_tl
{
\tl_if_empty:NF \l__zrefclever_ref_decl_case_tl
@@ -3124,19 +3976,29 @@
\l__zrefclever_name_format_fallback_tl
\l__zrefclever_ref_decl_case_tl
}
- \__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_opt_tl_get:cNF
{
- \__zrefclever_get_lang_opt_type:xxxNF
+ \__zrefclever_opt_varname_lang_type:eeen
{ \l__zrefclever_ref_language_tl }
{ \l__zrefclever_type_first_label_type_tl }
- { \l__zrefclever_name_format_fallback_tl }
+ { \l__zrefclever_name_format_tl }
+ { tl }
+ }
+ \l__zrefclever_type_name_tl
+ {
+ \__zrefclever_opt_tl_get:cNF
+ {
+ \__zrefclever_opt_varname_lang_type:eeen
+ { \l__zrefclever_ref_language_tl }
+ { \l__zrefclever_type_first_label_type_tl }
+ { \l__zrefclever_name_format_fallback_tl }
+ { tl }
+ }
\l__zrefclever_type_name_tl
{
\tl_clear:N \l__zrefclever_type_name_tl
+ \bool_set_true:N
+ \l__zrefclever_type_name_missing_bool
\msg_warning:nnxx { zref-clever }
{ missing-name }
{ \l__zrefclever_name_format_tl }
@@ -3152,7 +4014,7 @@
% Signal whether the type name is to be included in the hyperlink or not.
\bool_lazy_any:nTF
{
- { ! \l__zrefclever_use_hyperref_bool }
+ { ! \l__zrefclever_hyperlink_bool }
{ \l__zrefclever_link_star_bool }
{ \tl_if_empty_p:N \l__zrefclever_type_name_tl }
{ \str_if_eq_p:Vn \l__zrefclever_nameinlink_str { false } }
@@ -3180,20 +4042,20 @@
\cs_new:Npn \__zrefclever_extract_url_unexp:n #1
{
\zref@ifpropundefined { urluse }
- { \__zrefclever_extract_unexp:nnn {#1} { url } { \c_empty_tl } }
+ { \__zrefclever_extract_unexp:nnn {#1} { url } { } }
{
\zref@ifrefcontainsprop {#1} { urluse }
- { \__zrefclever_extract_unexp:nnn {#1} { urluse } { \c_empty_tl } }
- { \__zrefclever_extract_unexp:nnn {#1} { url } { \c_empty_tl } }
+ { \__zrefclever_extract_unexp:nnn {#1} { urluse } { } }
+ { \__zrefclever_extract_unexp:nnn {#1} { url } { } }
}
}
\cs_generate_variant:Nn \__zrefclever_extract_url_unexp:n { V }
\cs_new_protected:Npn \__zrefclever_labels_in_sequence:nn #1#2
{
\__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_a_tl
- {#1} { externaldocument } { \c_empty_tl }
+ {#1} { externaldocument } { }
\__zrefclever_extract_default:Nnnn \l__zrefclever_label_extdoc_b_tl
- {#2} { externaldocument } { \c_empty_tl }
+ {#2} { externaldocument } { }
\tl_if_eq:NNT
\l__zrefclever_label_extdoc_a_tl
@@ -3264,145 +4126,105 @@
}
}
}
-\cs_new_protected:Npn \__zrefclever_get_ref_opt_typeset:nN #1#2
+\cs_new_protected:Npn \__zrefclever_get_rf_opt_tl:nnnN #1#2#3#4
{
% First attempt: general options.
- \prop_get:NnNF \l__zrefclever_ref_options_prop {#1} #2
+ \__zrefclever_opt_tl_get:cNF
+ { \__zrefclever_opt_varname_general:nn {#1} { tl } }
+ #4
{
% 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} #2
- }
+ \__zrefclever_opt_tl_get:cNF
+ { \__zrefclever_opt_varname_type:nnn {#2} {#1} { tl } }
+ #4
{
% 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
+ \__zrefclever_opt_tl_get:cNF
+ { \__zrefclever_opt_varname_lang_type:nnnn {#3} {#2} {#1} { tl } }
+ #4
{
% If not found, try language-specific default.
- \__zrefclever_get_lang_opt_default:xnNF
- { \l__zrefclever_ref_language_tl }
- {#1} #2
+ \__zrefclever_opt_tl_get:cNF
+ { \__zrefclever_opt_varname_lang_default:nnn {#3} {#1} { tl } }
+ #4
{
% If not found, try fallback.
- \__zrefclever_get_fallback_unknown_lang_opt:nNF {#1} #2
- {
- \tl_clear:N #2
- \msg_warning:nnn { zref-clever }
- { missing-string } {#1}
- }
+ \__zrefclever_opt_tl_get:cNF
+ { \__zrefclever_opt_varname_fallback:nn {#1} { tl } }
+ #4
+ { \tl_clear:N #4 }
}
}
}
}
}
-\cs_new_protected:Npn \__zrefclever_get_ref_opt_font:nN #1#2
+\cs_generate_variant:Nn \__zrefclever_get_rf_opt_tl:nnnN { nxxN }
+\cs_new_protected:Npn \__zrefclever_get_rf_opt_seq:nnnN #1#2#3#4
{
% First attempt: general options.
- \prop_get:NnNF \l__zrefclever_ref_options_prop {#1} #2
+ \__zrefclever_opt_seq_get:cNF
+ { \__zrefclever_opt_varname_general:nn {#1} { seq } }
+ #4
{
% If not found, try type specific options.
- \bool_if:nTF
- {
- \prop_if_exist_p:c
- {
- l__zrefclever_type_
- \l__zrefclever_label_type_a_tl _options_prop
- }
- }
+ \__zrefclever_opt_seq_get:cNF
+ { \__zrefclever_opt_varname_type:nnn {#2} {#1} { seq } }
+ #4
{
- \prop_get:cnNF
+ % If not found, try type- and language-specific.
+ \__zrefclever_opt_seq_get:cNF
+ { \__zrefclever_opt_varname_lang_type:nnnn {#3} {#2} {#1} { seq } }
+ #4
{
- l__zrefclever_type_
- \l__zrefclever_label_type_a_tl _options_prop
+ % If not found, try language-specific default.
+ \__zrefclever_opt_seq_get:cNF
+ { \__zrefclever_opt_varname_lang_default:nnn {#3} {#1} { seq } }
+ #4
+ {
+ % If not found, try fallback.
+ \__zrefclever_opt_seq_get:cNF
+ { \__zrefclever_opt_varname_fallback:nn {#1} { seq } }
+ #4
+ { \seq_clear:N #4 }
+ }
}
- {#1} #2
- { \tl_clear:N #2 }
}
- { \tl_clear:N #2 }
}
}
-\cs_new_protected:Npn \__zrefclever_get_ref_opt_bool:nnN #1#2#3
+\cs_generate_variant:Nn \__zrefclever_get_rf_opt_seq:nnnN { nxxN }
+\cs_new_protected:Npn \__zrefclever_get_rf_opt_bool:nnnnN #1#2#3#4#5
{
% First attempt: general options.
- \prop_get:NnNF \l__zrefclever_ref_options_prop {#1} \l_tmpa_tl
+ \__zrefclever_opt_bool_get:cNF
+ { \__zrefclever_opt_varname_general:nn {#1} { bool } }
+ #5
{
% 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
- }
+ \__zrefclever_opt_bool_get:cNF
+ { \__zrefclever_opt_varname_type:nnn {#3} {#1} { bool } }
+ #5
{
% 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
+ \__zrefclever_opt_bool_get:cNF
+ { \__zrefclever_opt_varname_lang_type:nnnn {#4} {#3} {#1} { bool } }
+ #5
{
% If not found, try language-specific default.
- \__zrefclever_get_lang_opt_default:xnNF
- { \l__zrefclever_ref_language_tl }
- {#1} \l_tmpa_tl
+ \__zrefclever_opt_bool_get:cNF
+ { \__zrefclever_opt_varname_lang_default:nnn {#4} {#1} { bool } }
+ #5
{
- % 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 }
- }
+ % If not found, try fallback.
+ \__zrefclever_opt_bool_get:cNF
+ { \__zrefclever_opt_varname_fallback:nn {#1} { bool } }
+ #5
+ { \use:c { bool_set_ #2 :N } #5 }
}
}
}
}
- % 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
}
+\cs_generate_variant:Nn \__zrefclever_get_rf_opt_bool:nnnnN { nnxxN }
\__zrefclever_compat_module:nn { appendix }
{
\AddToHook { cmd / appendix / before }
@@ -3638,11 +4460,7 @@
{ \__zrefclever_zcsetup:n { currentcounter = equation } }
}
\zcRefTypeSetup { equation }
- {
- reffont = \upshape ,
- preref = {\textup{(}} ,
- postref = {\textup{)}} ,
- }
+ { reffont = \upshape }
\msg_info:nnn { zref-clever } { compat-package } { amsmath }
}
}