Debug CrossRef.

This commit is contained in:
Silcantar
2025-09-18 22:57:51 -05:00
parent e2a0277635
commit 1093a0a909

View File

@@ -29,7 +29,7 @@
\str_const:Nn \c_@@_label_delimiter_str {/}
\str_const:Nn \c_@@_label_parent_str {.}
\str_const:Nn \c_@@_label_wildcard_str {~}
\str_const:Nn \c_@@_label_wildcard_str {*}
\str_const:Nn \c_@@_appendices_label_str {appendices}
\seq_new:N \g_@@_label_seq
@@ -81,54 +81,26 @@
\seq_set_split:Nnn \g_@@_label_seq {#1} {#2}
}
\RenewDocumentCommand{\Ref}{
% MATCH delimiter, parent, and wildcard symbols, but CAPTURE only
% parents and wildcards, NOT delimiters.
\regex_const:Nn \c_@@_ref_regex {\/|(\.|\*)} %{\\\c_@@_label_delimiter_str|(\\\c_@@_label_parent_str|\\\c_@@_label_wildcard_str)}
%\regex_show:N \c_@@_ref_regex
\seq_new:N \l_@@_label_seq
\seq_new:N \l_@@_ref_seq
\str_new:N \l_@@_ref_str
\NewDocumentCommand{\HiRef}{
% #1: Star (No star = include section name in reference, star = do not include).
s
% #2: Label string delimiter (defaults to "/").
O{\c_@@_label_delimiter_str}
% #3: Label Reference
% #2: Label Reference
>{\TrimSpaces}m
% #4: Parent label symbol (defaults to ".").
O{\c_@@_label_parent_str}
% #5: Label wildcard symbol (defaults to "~").
O{\c_@@_label_wildcard_str}
}{ \group_begin:
% Put the parameters in string variables so we can work with them.
\str_const:Nn \c_@@_label_delimiter_str {#2}
\str_const:Nn \c_@@_label_parent_str {#4}
\str_const:Nn \c_@@_label_wildcard_str {#5}
\str_const:Ne \c_@@_regex_str {
% MATCH delimiter, parent, and wildcard symbols, but CAPTURE only
% parents and wildcards, NOT delimiters.
/|(\c_@@_label_parent_str|\c_@@_label_wildcard_str)
}
\seq_new:N \l_@@_label_seq
\seq_new:N \l_@@_ref_seq
%\str_set:Ne \l_@@_ref_str {#2}
\str_new:N \l_@@_ref_str
\str_set:Nn \l_@@_ref_str {#3}
% Split the string on the delimiters.
\seq_set_regex_split:NNn \l_@@_ref_seq \c_@@_regex_str {\l_@@_ref_str}
% Copy the current label sequence to a local variable.
\seq_set_eq:NN \l_@@_label_seq \g_@@_label_seq
% Iterate through the reference sequence, removing one element from the
% end of the temporary label sequence for each parent symbol.
\seq_map_indexed_function:NN \l_@@_ref_seq \_seq_map:nn
% % Add the shortened temporary label sequence to the beginning of the
% % reference sequence.
\seq_concat:NNN \l_@@_ref_seq \l_@@_label_seq \l_@@_ref_seq
% % Join the reference sequence back into a delimited string.
\str_set:Nn \l_@@_ref_str {\seq_use:Nn \l_@@_ref_seq {#1}}
\str_if_eq:nnF {\str_head:N \l_@@_ref_str} {\c_@@_label_delimiter_str} {
\str_put_left:Nn \l_@@_ref_str {\c_@@_label_delimiter_str}
}
\@@_HiRef_process:Nn \l_@@_ref_str {#2}
% Output the section name only if no star is passed.
\bool_if:nF {#1} {
@@ -141,28 +113,82 @@
}
}
% Create a reference with the string we just created.
\ref{\l_@@_ref_str}
\exp_args:Ne \ref {\l_@@_ref_str}
\group_end: }
\cs_new:Nn \_seq_map:nn {
\str_case:nn {#2} {
\NewDocumentCommand{\HiperRef}{
% #1: Label reference.
>{\TrimSpaces}m
% #2: Display text.
m
}{ \group_begin:
%\str_set:Ne \l_@@_ref_str {#1}
\@@_HiRef_process:Nn \l_@@_ref_str {#1}
\hyperref[\l_@@_ref_str]{#2}
\group_end: }
\cs_new:Nn \@@_HiRef_process:Nn {
% Split the string on the delimiters.
\exp_args:NNNe \seq_set_regex_split:NNn \l_@@_ref_seq \c_@@_ref_regex {#2}
\seq_remove_all:Nn \l_@@_ref_seq {}
\str_log:N \l_@@_ref_str
\seq_log:N \l_@@_ref_seq
% Copy the current label sequence to a local variable.
\seq_set_eq:NN \l_@@_label_seq \g_@@_label_seq
\seq_log:N \l_@@_label_seq
% Iterate through the reference sequence, removing one element from the
% end of the temporary label sequence for each parent symbol.
\seq_map_indexed_function:NN \l_@@_ref_seq \@@_seq_map:nn
% Add the shortened temporary label sequence to the beginning of the
% reference sequence.
\str_if_eq:eeT {\str_head:N \l_@@_ref_str} {\c_@@_label_parent_str} {
\seq_concat:NNN \l_@@_ref_seq \l_@@_label_seq \l_@@_ref_seq
}
\seq_log:N \l_@@_ref_seq
% Join the reference sequence back into a delimited string.
\str_set:Ne \l_@@_ref_str {\seq_use:Ne \l_@@_ref_seq {\c_@@_label_delimiter_str}}
\str_if_eq:eeF {\str_head:N \l_@@_ref_str} {\c_@@_label_delimiter_str} {
\str_put_left:Ne \l_@@_ref_str {\c_@@_label_delimiter_str}
}
\str_set_eq:NN #1 \l_@@_ref_str
}
\tl_new:N \l_@@_trash_tl
\cs_new:Nn \@@_seq_map:nn {
\str_case_e:nn {#2} {
{\c_@@_label_parent_str} {
\seq_pop_right:NN \l_@@_label_seq \l_@@_tmpa_tl
\seq_pop_left:NN \l_@@_ref_seq \l_@@_tmpa_tl
\seq_pop_right:NN \l_@@_label_seq \l_@@_trash_tl
\seq_pop_left:NN \l_@@_ref_seq \l_@@_trash_tl
}
{\c_@@_label_wildcard_str} {
\seq_pop_left:NN \l_@@_label_seq \l_@@_tmpa_tl
\l_@@_tmpa_tl
%\message{wildcard~map}
\seq_pop_left:NN \l_@@_label_seq \l_tmpa_tl
% \seq_pop_left:NN \l_@@_ref_seq \l_@@_trash_tl
% \seq_put_left:NN \l_@@_ref_seq \l_tmpa_tl
\exp_args:NNne \seq_set_item:Nnn \l_@@_ref_seq {#1} {\l_tmpa_tl}
}
}
}
\group_end: }
}
\int_new:N \l_@@_current_level_int
\int_new:N \l_@@_pop_count_int
\int_new:N \l_@@_pop_index_int
\seq_new:N \l_@@_label_seq
\str_new:N \l_@@_label_str
\cs_new:Nn \@@_heading:nnnnn { \group_begin: