Debug CrossRef.
This commit is contained in:
@@ -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} {
|
||||
{\c_@@_label_parent_str} {
|
||||
\seq_pop_right:NN \l_@@_label_seq \l_@@_tmpa_tl
|
||||
\seq_pop_left:NN \l_@@_ref_seq \l_@@_tmpa_tl
|
||||
}
|
||||
{\c_@@_label_wildcard_str} {
|
||||
\seq_pop_left:NN \l_@@_label_seq \l_@@_tmpa_tl
|
||||
\l_@@_tmpa_tl
|
||||
}
|
||||
\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_@@_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_@@_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:
|
||||
|
||||
Reference in New Issue
Block a user