summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/xassoccnt
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-06-19 21:37:34 +0000
committerKarl Berry <karl@freefriends.org>2016-06-19 21:37:34 +0000
commitf72d4261f1d88b9543cdae61918a314cc69118e4 (patch)
tree627a884ae934f486642b45f8774edd2f5ad7106f /Master/texmf-dist/tex/latex/xassoccnt
parent36713e69240f37f23c19a3c6263eacadfe848fd7 (diff)
xassoccnt (19jun16)
git-svn-id: svn://tug.org/texlive/trunk@41500 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/xassoccnt')
-rw-r--r--Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty270
1 files changed, 257 insertions, 13 deletions
diff --git a/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty b/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty
index 38410d2c686..db0ebec8c2f 100644
--- a/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty
+++ b/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty
@@ -1,4 +1,4 @@
-%% LaTeX package xassoccnt - version 0.8 (2016/06/10 -- 23/28/27)
+%% LaTeX package xassoccnt - version 0.9 (2016/06/19 -- 08/11/05)
%% Source file for xassoccnt.sty
%%
%%
@@ -19,11 +19,11 @@
%%
%%
-\def\xassoccntpackageversion{0.8}
+\def\xassoccntpackageversion{0.9}
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-\ProvidesPackage{xassoccnt}[2016/06/10 - v\xassoccntpackageversion]
-
+\ProvidesPackage{xassoccnt}[2016/06/19 - v\xassoccntpackageversion]
+\RequirePackage{graphicx}
\RequirePackage{xcolor}
\RequirePackage{xparse}
\RequirePackage{l3keys2e}
@@ -61,6 +61,9 @@
\bool_new:N \l__xassoccnt_is_supertotalcounter_bool
+\bool_new:N \l_xassoccnt_resetperiodiccounters_bool
+\bool_new:N \l_xassoccnt_wrapperiodiccounters_bool
+
\seq_new:N \l__xassoccnt_counterreset_seq
%%%
@@ -163,7 +166,14 @@
supertotal .bool_set:N={\l__xassoccnt_is_supertotalcounter_bool },
- resetbackup .bool_set:N={\l__xassoccnt_resetbackupcounters_bool }
+ resetbackup .bool_set:N={\l__xassoccnt_resetbackupcounters_bool },
+
+% resetperiodic .bool_set:N={ \l_xassoccnt_resetperiodiccounters_bool }
+}
+
+\keys_define:nn {xassoccnt_periodiccounter} {%
+ reset .bool_set:N={ \l_xassoccnt_resetperiodiccounters_bool },
+ wrap .bool_set:N={ \l_xassoccnt_wrapperiodiccounters_bool }
}
\keys_set:nn{xassoccnt}{nonumberofruns}
@@ -266,6 +276,7 @@
\cs_set_eq:NN \xassoccnt_standardsetcounter \setcounter
+
% Needed for Backup/Restore features
\AtBeginDocument{%
@@ -284,7 +295,7 @@
}{}
\AtEndOfPackage{
- \PackageInfo{xassoccnt}{2016/06/10 - v\xassoccntpackageversion -- stepping counters simultaneously and other features}
+ \PackageInfo{xassoccnt}{2016/06/19 - v\xassoccntpackageversion -- stepping counters simultaneously and other features}
\@ifpackageloaded{calc}{%
\msg_warning:nnn{xassoccnt}{incompatiblepackagenonfatal}{calc}% Warning
\bool_set_true:N \l__xassoccnt_calcpackage_loaded
@@ -349,8 +360,14 @@
\seq_new:N \g__xassoccnt_totalcounter_container
+\prop_new:N \g_xassoccnt_totalcounter_prop
\seq_new:N \g__xassoccnt_supertotalcounter_container
+
+\seq_new:N \g_xassoccnt_periodiccounter_container_seq
+\prop_new:N \g_xassoccnt_periodiccounter_prop
+
+
\cs_new_nopar:Nn \__xassoccnt_container_perdriver_new:n {
\seq_if_exist:cF{ \__xassoccnt_drivercontainer:n {#1} }
{ % Generate only if there is no driver container sequence so far!
@@ -852,7 +869,9 @@
%% More generic macros (hidding the internal features of the lists)
-\cs_new:Nn \xassoccnt_container_datatype: {seq}
+\cs_new_nopar:Nn \xassoccnt_container_property: {prop}
+
+\cs_new_nopar:Nn \xassoccnt_container_datatype: {seq}
\cs_new:Nn \__xassoccnt_construct_cs:n {%
@@ -1331,12 +1350,170 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NewDocumentCommand{\DeclarePeriodicCounter}{O{}mm}{%
+ \xassoccnt_add_periodiccounter:nnn {#1} {#2} {#3}%
+}
+
+
+\prg_new_conditional:Nnn \xassoccnt_is_periodiccounter:n {TF,T,F}
+{%
+ \seq_if_in:NnTF \g_xassoccnt_periodiccounter_container_seq {#1}
+ {\prg_return_true:}
+ {\prg_return_false:}
+}
+
+\cs_new:Nn \xassoccnt_stepcounter_periodiccounter:n {%
+ \xassoccnt_is_periodiccounter:nT {#1}{%
+ \int_compare:nNnT {\prop_item:Nn \g_xassoccnt_periodiccounter_prop {#1}} = {\use:c{c@#1}}%
+ { \__xassoccnt_setdocumentcounter:nnn {} {#1}{\c_zero} }
+ }
+}
+\cs_new:Nn \xassoccnt_addtocounter_periodiccounter:nnn {%
+ \keys_set:nn {xassoccnt_periodiccounter} {wrap=true,#3}
+ \int_set:Nn \l_tmpa_int { \int_eval:n {\number\value{#1}+#2 } }
+ \bool_if:NTF \l_xassoccnt_wrapperiodiccounters_bool {%
+ \int_set:Nn \l_tmpb_int { \int_mod:nn {\l_tmpa_int} {\prop_item:Nn \g_xassoccnt_periodiccounter_prop {#1}}}%
+ \__xassoccnt_setdocumentcounter:nnn {} {#1}{\l_tmpb_int}% Wrap around!!!!
+ }{%
+ \__xassoccnt_setdocumentcounter:nnn {} {#1}{\l_tmpa_int}% Don't Wrap around!!!!
+ }%
+}
+
+
+\cs_new:Nn \xassoccnt_reset_periodiccounter:nn {%
+ \keys_set:nn {xassoccnt_periodiccounter} {reset=true,#1}
+ % Reset the periodic counter if requested (by default this is true!)
+ \bool_if:NT \l_xassoccnt_resetperiodiccounters_bool {%
+ \__xassoccnt_setdocumentcounter:nnn {} {#2} {\c_zero}%
+ }
+}
+
+\cs_new:Nn \xassoccnt_remove_periodiccounter:nn {%
+ \seq_gremove_all:Nn \g_xassoccnt_periodiccounter_container_seq {#2}%
+ \prop_remove:Nn \g_xassoccnt_periodiccounter_prop {#2}%
+ \xassoccnt_reset_periodiccounter:nn {#1} {#2}
+}
+
+\cs_new:Nn \xassoccnt_add_periodiccounter:nnn {%
+ \keys_set:nn {xassoccnt} {#1}
+ \seq_put_right:Nn \g_xassoccnt_periodiccounter_container_seq {#2}%
+ \seq_gremove_duplicates:N \g_xassoccnt_periodiccounter_container_seq
+ \xassoccnt_changecondition_periodiccounter:nnn {reset=false} {#2} {#3} % Check the optional argument later on!!!!
+}
+
+\cs_new:Nn \xassoccnt_changecondition_periodiccounter:nnn {%
+ \xassoccnt_is_periodiccounter:nTF {#2}{%
+ \prop_put:Nnn \g_xassoccnt_periodiccounter_prop {#2} {#3}%
+ \xassoccnt_reset_periodiccounter:nn {#1} {#2}
+ }
+}
+
+\NewDocumentCommand{\ChangePeriodicCounterCondition}{O{}mm}{%
+ \xassoccnt_changecondition_periodiccounter:nnn {#1}{#2}{#3}%
+}
+
+\NewDocumentCommand{\RemovePeriodicCounter}{O{}m}{%
+ \xassoccnt_remove_periodiccounter:nn{#1} {#2}
+}
+
+\NewDocumentCommand{\AddPeriodicCounter}{O{}mm}{%
+ \xassoccnt_add_periodiccounter:nnn {#1} {#2} {#3}
+}
+
+\NewDocumentCommand{\IsPeriodicCounterTF}{m+m+m}{%
+ \xassoccnt_is_periodiccounter:nTF{#1}{#2}{#3}%
+}
+
+\NewDocumentCommand{\IsPeriodicCounterT}{m+m}{%
+ \xassoccnt_is_periodiccounter:nT{#1}{#2}
+}
+
+\NewDocumentCommand{\IsPeriodicCounterF}{m+m}{%
+ \xassoccnt_is_periodiccounter:nF{#1}{#2}
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
%%%% Redefinition of standard counter macros
+
+\NewDocumentCommand{\stepcounteroldnototal}{m}{%
+ \__xassoccnt_translate_countername:cn {l_tmpa_tl} {#1}%
+ \xassoccnt_is_suspendedcounter:nF{#1}{%
+ \xassoccnt_is_coupledcounter:nTF {#1}
+ { \xassoccnt_stepcounter_coupledcounters:n{#1} }
+ {% No, not a coupled counter!
+ \cs_gset_nopar:Nn \__xassoccnt_laststeppedcounter: {\l_tmpa_tl}%
+ \xassoccnt_countersinresetlist:n{\l_tmpa_tl}%
+ \__xassoccnt_getresetlist:n {\l_tmpa_tl}%
+ \seq_if_empty:NTF \l__xassoccnt_counterreset_seq
+ {%
+ \xassoccnt_standardaddtocounter{\l_tmpa_tl}{\c_one}% Use the original one!
+ \int_gset:Nn \g__xassoccnt_lastcountervalue_int {\number\value{\l_tmpa_tl}}%
+ \__xassoccnt_step_associatedcounters:n {\l_tmpa_tl}
+ }{ % reset list is not empty!
+ % This is the replacement of \csname cl@#1\endcsname
+ \xassoccnt_standardaddtocounter{\l_tmpa_tl}{\c_one}
+ \seq_map_inline:Nn \l__xassoccnt_counterreset_seq {%
+ \xassoccnt_is_drivercounter:nTF{##1}{%
+ \csname c@##1\endcsname\c_zero % Reset but do not increase
+ }{%
+ \csname c@##1\endcsname\c_minus_one
+ \xassoccnt_standardstepcounter{##1}%
+ }
+ }
+ \__xassoccnt_step_associatedcounters:n {\l_tmpa_tl} % step the remaining associated counters
+ }% End of not empty reset list
+ }% End of coupled counters
+ } % end of not suspended counter
+}
+
+
+
+\NewDocumentCommand{\stepcounterTotal}{m}{%
+ \__xassoccnt_translate_countername:cn {l_tmpa_tl} {#1}%
+ \xassoccnt_is_suspendedcounter:nF{#1}{%
+ \xassoccnt_is_coupledcounter:nTF {#1}
+ { \xassoccnt_stepcounter_coupledcounters:n{#1} }
+ {% No, not a coupled counter!
+ \cs_gset_nopar:Nn \__xassoccnt_laststeppedcounter: {\l_tmpa_tl}%
+ \xassoccnt_countersinresetlist:n{\l_tmpa_tl}%
+ \__xassoccnt_getresetlist:n {\l_tmpa_tl}%
+ \seq_if_empty:NTF \l__xassoccnt_counterreset_seq
+ {%
+ \xassoccnt_standardaddtocounter{\l_tmpa_tl}{\c_one}% Use the original one!
+ \int_gset:Nn \g__xassoccnt_lastcountervalue_int {\number\value{\l_tmpa_tl}}%
+ \__xassoccnt_step_associatedcounters:n {\l_tmpa_tl}
+ }{ % reset list is not empty!
+ % This is the replacement of \csname cl@#1\endcsname
+ \xassoccnt_standardaddtocounter{\l_tmpa_tl}{\c_one}
+ \seq_map_inline:Nn \l__xassoccnt_counterreset_seq {%
+ \xassoccnt_is_drivercounter:nTF{##1}{%
+ \csname c@##1\endcsname\c_zero % Reset but do not increase
+ }{%
+ \csname c@##1\endcsname\c_minus_one
+ \xassoccnt_standardstepcounter{##1}%
+ }
+ }
+ \__xassoccnt_step_associatedcounters:n {\l_tmpa_tl} % step the remaining associated counters
+ }% End of not empty reset list
+ }% End of coupled counters
+ } % end of not suspended counter
+ \__xassoccnt_is_totalcounter:nT {#1} {%
+ \__xassoccnt_store_totalcounter_value:n {#1}%
+ }
+}
+
+
\RenewDocumentCommand{\stepcounter}{m}{%
\__xassoccnt_translate_countername:cn {l_tmpa_tl} {#1}%
\xassoccnt_is_suspendedcounter:nF{#1}{%
+ \xassoccnt_stepcounter_periodiccounter:n {#1}%
\xassoccnt_is_coupledcounter:nTF {#1}
{ \xassoccnt_stepcounter_coupledcounters:n{#1} }
{% No, not a coupled counter!
@@ -1363,8 +1540,23 @@
}% End of not empty reset list
}% End of coupled counters
} % end of not suspended counter
+ \__xassoccnt_is_totalcounter:nT {#1} {%
+ \__xassoccnt_store_totalcounter_value:n {#1}%
+ }
}
+\RenewDocumentCommand{\addtocounter}{mmO{}}{%
+ \xassoccnt_is_periodiccounter:nTF {#1}{%
+ \xassoccnt_addtocounter_periodiccounter:nnn {#1} {#2} {#3}%
+ }{%
+ \xassoccnt_standardaddtocounter{#1}{#2}%
+ }
+}
+
+
+
+
+
\NewDocumentCommand{\xassoccnt_addtocounter}{mmO{}}{%
@@ -1374,9 +1566,28 @@
\xassoccnt_standardaddtocounter{\l_tmpb_tl}{#2}%
\cs_gset_nopar:Nn \__xassoccnt_lastaddtocounter: {\l_tmpb_tl}%
}%
+ % Now check if #1 is a total counter and set the property correspondingly
+ \__xassoccnt_is_totalcounter:nT {#1} {%
+ \__xassoccnt_store_totalcounter_value:n {#1}%
+ }
+}
+
+
+\RenewDocumentCommand{\xassoccnt_addtocounter}{mmO{}}{%
+ % Only add to a counter if this counter isn't on the suspended counters list!
+ \xassoccnt_is_suspendedcounter:nF{#1}{%
+ \__xassoccnt_translate_countername:cn {l_tmpb_tl} {#1}%
+ \xassoccnt_standardaddtocounter{\l_tmpb_tl}{#2}%
+ \cs_gset_nopar:Nn \__xassoccnt_lastaddtocounter: {\l_tmpb_tl}%
+ }%
+ % Now check if #1 is a total counter and set the property correspondingly
+ \__xassoccnt_is_totalcounter:nT {#1} {%
+ \__xassoccnt_store_totalcounter_value:n {#1}%
+ }
}
+
\cs_new:Nn \__xassoccnt_setdocumentcounter:nnn {%
\__xassoccnt_translate_countername:cn {l_tmpa_tl} {#2}%
\xassoccnt_standardsetcounter{\l_tmpa_tl}{#3}%
@@ -1468,6 +1679,10 @@
\cs_gset_nopar:Nn \__xassoccnt_lastsetcounter: {#1}
\xassoccnt_standardsetcounter{\tl_use:N \l_tmpb_tl}{#2}%
\int_gset:Nn \g__xassoccnt_lastcountervalue_int {\number\value{\l_tmpb_tl}}%
+ \__xassoccnt_is_totalcounter:nT {#1} {%
+ \__xassoccnt_store_totalcounter_value:n {#1}%
+ %\prop_put:Nnn \g_xassoccnt_totalcounter_prop {#1} {\number\value{\tl_use:N \l_tmpa_tl}}
+ }
}
@@ -1514,6 +1729,8 @@
+
+
\NewDocumentCommand{\NewDocumentCounter}{O{initial=\c_zero}mo}{%
\IfValueTF{#3}{%
\__xassoccnt_newcounter_ltx:nnn{#1}{#2}{#3}
@@ -1626,11 +1843,15 @@
\NewDocumentCommand{\NewTotalDocumentCounter}{O{}m}{%
\keys_set:nn {xassoccnt} {supertotal=false,#1}
\__xassoccnt_ifis_latexcounter:nF {#2} {% Define the counter
- \DeclareDocumentCounter[sloppy=false]{#2}%
+ \xassoccnt_declaredocumentcounter:nn{sloppy=false}{#2}%
}%
\__xassoccnt_registertotaldocumentcounter:nn{#1}{#2}
}
+\cs_new:Nn \__xassoccnt_store_totalcounter_value:n {%
+ \prop_put:Nnn \g_xassoccnt_totalcounter_prop {#1} {\number\value{\__xassoccnt_expand_totalcountername:n{#1}}}
+}
+
\cs_new:Nn \__xassoccnt_registertotaldocumentcounter:nn {%
\keys_set:nn {xassoccnt} {supertotal=false,#1}
\__xassoccnt_ifis_latexcounter:nF {#2} {% Counter does not exist -- do not autodefine
@@ -1639,8 +1860,10 @@
% If the counter already exists -> check for the internal totalcounter name
\cs_if_exist:cF { c@\__xassoccnt_expand_totalcountername:n{#2} }
{
- \DeclareDocumentCounter[sloppy=false,initial={\c_minus_one}]{\__xassoccnt_expand_totalcountername:n{#2}}
- \seq_gput_right:Nx \g__xassoccnt_totalcounter_container {\__xassoccnt_expand_totalcountername:n{#2}}
+ \xassoccnt_declaredocumentcounter:nn{sloppy=false,initial={\c_minus_one}}{\__xassoccnt_expand_totalcountername:n{#2}}%
+ \seq_gput_right:Nx \g__xassoccnt_totalcounter_container {\__xassoccnt_expand_totalcountername:n{#2}}%
+ \__xassoccnt_store_totalcounter_value:n {#2}%
+ %\prop_put:Nnn \g_xassoccnt_totalcounter_prop {#2} {\number\value{\__xassoccnt_expand_totalcountername:n{#2}}}
\bool_if:NT \l__xassoccnt_is_supertotalcounter_bool {%
\__xassoccnt_add_supertotalcounter:n {#2}
}
@@ -1669,6 +1892,12 @@
\number\value{\tl_use:N \l_tmpa_tl}%
}
+\renewcommand{\TotalValue}[1]{%
+ \prop_item:Nn \g_xassoccnt_totalcounter_prop {#1}%
+}
+
+%\newcommand{\loadstore}
+
\cs_new:Nn \__xassoccnt_writetotalcounters:nn {%
@@ -2001,22 +2230,36 @@
%%%%%%%%%%%%%%%%%%%%
+\cs_new:Nn \xassoccnt_declaredocumentcounteropt:nnn{%
+ \__xassoccnt_newcounter_ltx:nnn{#1}{#2}{#3}%
+}
+
+\cs_new:Nn \xassoccnt_declaredocumentcounter:nn{%
+ \__xassoccnt_newcounter_ltx:nn{#1}{#2}{}%
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%
+
\NewDocumentCommand{\EnableNumberofrunsTF}{mm}{%
\bool_if:NF \g__xassoccnt_nonumberofruns_bool {
#1
}{#2}
}
-\ExplSyntaxOff
\NewDocumentCommand{\DeclareDocumentCounter}{O{initial={0}}mo}{%
\IfValueTF{#3}{%
- \NewDocumentCounter[#1]{#2}[#3]%
+ \xassoccnt_declaredocumentcounteropt:nnn{#1}{#2}{#3}%
}{%
- \NewDocumentCounter[#1]{#2}%
+ \xassoccnt_declaredocumentcounter:nn{#1}{#2}%
}%
}
+\ExplSyntaxOff
+
+
\EnableNumberofrunsTF{%
\NewTotalDocumentCounter[supertotal=true]{numberofruns}
@@ -2055,6 +2298,7 @@
\AddFeature[sublists=true]{coupledcounters} % New style, not fully implemented so far
+\AddFeature[sublists=false]{periodiccounters} % New style, not fully implemented so far
% Some more to be done