Debug CrossRef.
This commit is contained in:
@@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
\str_const:Nn \c_@@_label_delimiter_str {/}
|
\str_const:Nn \c_@@_label_delimiter_str {/}
|
||||||
\str_const:Nn \c_@@_label_parent_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}
|
\str_const:Nn \c_@@_appendices_label_str {appendices}
|
||||||
|
|
||||||
\seq_new:N \g_@@_label_seq
|
\seq_new:N \g_@@_label_seq
|
||||||
@@ -81,54 +81,26 @@
|
|||||||
\seq_set_split:Nnn \g_@@_label_seq {#1} {#2}
|
\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).
|
% #1: Star (No star = include section name in reference, star = do not include).
|
||||||
s
|
s
|
||||||
% #2: Label string delimiter (defaults to "/").
|
% #2: Label Reference
|
||||||
O{\c_@@_label_delimiter_str}
|
|
||||||
% #3: Label Reference
|
|
||||||
>{\TrimSpaces}m
|
>{\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:
|
}{ \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
|
%\str_set:Ne \l_@@_ref_str {#2}
|
||||||
\seq_new:N \l_@@_ref_seq
|
|
||||||
|
|
||||||
\str_new:N \l_@@_ref_str
|
\@@_HiRef_process:Nn \l_@@_ref_str {#2}
|
||||||
\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}
|
|
||||||
}
|
|
||||||
|
|
||||||
% Output the section name only if no star is passed.
|
% Output the section name only if no star is passed.
|
||||||
\bool_if:nF {#1} {
|
\bool_if:nF {#1} {
|
||||||
@@ -141,28 +113,82 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
% Create a reference with the string we just created.
|
% 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 {
|
\NewDocumentCommand{\HiperRef}{
|
||||||
\str_case:nn {#2} {
|
% #1: Label reference.
|
||||||
{\c_@@_label_parent_str} {
|
>{\TrimSpaces}m
|
||||||
\seq_pop_right:NN \l_@@_label_seq \l_@@_tmpa_tl
|
% #2: Display text.
|
||||||
\seq_pop_left:NN \l_@@_ref_seq \l_@@_tmpa_tl
|
m
|
||||||
}
|
}{ \group_begin:
|
||||||
{\c_@@_label_wildcard_str} {
|
|
||||||
\seq_pop_left:NN \l_@@_label_seq \l_@@_tmpa_tl
|
%\str_set:Ne \l_@@_ref_str {#1}
|
||||||
\l_@@_tmpa_tl
|
|
||||||
}
|
\@@_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_@@_trash_tl
|
||||||
|
\seq_pop_left:NN \l_@@_ref_seq \l_@@_trash_tl
|
||||||
|
}
|
||||||
|
{\c_@@_label_wildcard_str} {
|
||||||
|
%\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_@@_current_level_int
|
||||||
\int_new:N \l_@@_pop_count_int
|
\int_new:N \l_@@_pop_count_int
|
||||||
\int_new:N \l_@@_pop_index_int
|
\int_new:N \l_@@_pop_index_int
|
||||||
|
|
||||||
\seq_new:N \l_@@_label_seq
|
|
||||||
|
|
||||||
\str_new:N \l_@@_label_str
|
\str_new:N \l_@@_label_str
|
||||||
|
|
||||||
\cs_new:Nn \@@_heading:nnnnn { \group_begin:
|
\cs_new:Nn \@@_heading:nnnnn { \group_begin:
|
||||||
|
|||||||
Reference in New Issue
Block a user