summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/xassoccnt
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-03-06 01:00:56 +0000
committerKarl Berry <karl@freefriends.org>2016-03-06 01:00:56 +0000
commitf9ae82e6878c08de47271500aa73687fc462eeee (patch)
tree15cb763ea53adc80033e7fa816386946b33d5b8a /Master/texmf-dist/tex/latex/xassoccnt
parentdecf15de43d216e512ad6f7bfd7e803655a2e407 (diff)
xassoccnt (5mar16)
git-svn-id: svn://tug.org/texlive/trunk@39946 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/xassoccnt')
-rw-r--r--Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty289
1 files changed, 251 insertions, 38 deletions
diff --git a/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty b/Master/texmf-dist/tex/latex/xassoccnt/xassoccnt.sty
index 1e0137d168e..1c6809697a7 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.5 (2016/02/27 -- 19/52/22)
+%% LaTeX package xassoccnt - version 0.6 (2016/03/05 -- 14/44/15)
%% Source file for xassoccnt.sty
%%
%%
@@ -19,10 +19,10 @@
%%
%%
-\def\xassoccntpackageversion{0.5}
+\def\xassoccntpackageversion{0.6}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{xassoccnt}[2016/02/27 - v\xassoccntpackageversion]
+\ProvidesPackage{xassoccnt}[2016/03/05 - v\xassoccntpackageversion]
\RequirePackage{xcolor}
\RequirePackage{xparse}
@@ -42,6 +42,7 @@
\int_new:N \g__xassoccnt_lastcountervalue_int
\bool_new:N \g__xassoccnt_autodefine_counters % --> global document option
+\bool_new:N \g__xassoccnt_nonumberofruns_bool % --> global document option
\clist_new:N \l__xassoccnt_exclude_clist % clist for
\clist_new:N \l__xassoccnt_onlycounters_clist % clist for the \SetDocumentCounter command
@@ -102,6 +103,8 @@
initial .code:n={ \int_set:Nn \l__xassoccnt_initialcountervalue_int {#1}},
sloppy .bool_set:N=\l__xassoccnt_sloppy_newcounter,
autodefinecounters .bool_set:N=\g__xassoccnt_autodefine_counters,
+ nonumberofruns .code:n={\typeout{Disabling numberofruns}\bool_gset_true:N \g__xassoccnt_nonumberofruns_bool},
+ nonumberofruns .value_forbidden:n = true,
% Choice keys
autodefine .choice:,
autodefine / all .code:n= {\bool_set_true:N \l__xassoccnt_autodefine_allcounters
@@ -160,6 +163,8 @@
resetbackup .bool_set:N={\l__xassoccnt_resetbackupcounters_bool }
}
+%\keys_set:nn{xassoccnt}{nonumberofruns=false}
+
\ProcessKeysOptions{xassoccnt}
@@ -190,6 +195,27 @@
---~#2~---
}
+\msg_new:nnn{xassoccnt}{addcoupledcountergroupundefined}{%
+ Warning:~There~is~no~coupled~counter~group~named~#2~\\
+ The~addition~operation~is~ignored!\\
+ ---~#1~---
+}
+
+\msg_new:nnn{xassoccnt}{clearcoupledcountergroupundefined}{%
+ Warning:~There~is~no~coupled~counter~group~named~#2~\\
+ The~clearing~operation~is~ignored!\\
+ ---~#1~---
+}
+
+
+\msg_new:nnn{xassoccnt}{removingcoupledcountergroupundefined}{%
+ Warning:~There~is~no~coupled~counter~group~named~#2~\\
+ The~removing~operation~is~ignored!\\
+ ---~#1~---
+}
+
+
+
\msg_new:nnn{xassoccnt}{backupcollectionundefined}{%
Error:~Backup~collection~#1~not~defined\\
@@ -867,14 +893,37 @@
}
+\cs_new_nopar:Nn \xassoccnt_container_map_break: {%
+ \__xassoccnt_construct_cs:n{_map_break:}
+}
+
+\cs_new:Nn \xassoccnt_container_concat:NNN {%
+ \__xassoccnt_construct_cs:n{_concat:NNN} #1 #2 #3
+}
+
+\cs_new:Nn \xassoccnt_container_gconcat:NNN {%
+ \__xassoccnt_construct_cs:n{_gconcat:NNN} #1 #2 #3
+}
+
+
\prg_new_conditional:Nnn \xassoccnt_container_if_exist:N {TF,T,F}%
{
- \__xassoccnt_construct_cs:n{_if_exist:NTF} #1
+% \__xassoccnt_construct_cs:n{_if_exist:NTF} #1
+ \seq_if_exist:NTF #1
{\prg_return_true:}
{\prg_return_false:}
}
+\prg_new_conditional:Nnn \xassoccnt_container_if_exist:c {TF,T,F}%
+{
+% \__xassoccnt_construct_cs:n{_if_exist:NTF} #1
+ \seq_if_exist:cTF {#1}
+ {\prg_return_true:}
+ {\prg_return_false:}
+}
+
+
\prg_new_conditional:Nnn \xassoccnt_container_if_in:Nn {TF,T,F}%
{
@@ -903,8 +952,8 @@
\cs_generate_variant:Nn \xassoccnt_container_new:N {c}
-\cs_generate_variant:Nn \xassoccnt_container_clear:N {c}
-\cs_generate_variant:Nn \xassoccnt_container_gclear:N {c}
+\cs_generate_variant:Nn \xassoccnt_container_clear:N {c,x}
+\cs_generate_variant:Nn \xassoccnt_container_gclear:N {c,x}
\cs_generate_variant:Nn \xassoccnt_container_set_eq:NN {cN,Nc,cc}
\cs_generate_variant:Nn \xassoccnt_container_gset_eq:NN {cN,Nc,cc}
@@ -918,6 +967,8 @@
\cs_generate_variant:Nn \xassoccnt_container_remove_duplicates:N {c}
\cs_generate_variant:Nn \xassoccnt_container_gremove_duplicates:N {c}
+\cs_generate_variant:Nn \xassoccnt_container_concat:NNN {ccc}
+\cs_generate_variant:Nn \xassoccnt_container_gconcat:NNN {ccc}
\cs_generate_variant:Nn \xassoccnt_container_remove_all:Nn {cn}
\cs_generate_variant:Nn \xassoccnt_container_gremove_all:Nn {cn}
@@ -937,7 +988,7 @@
\cs_generate_variant:Nn \xassoccnt_container_if_in:NnT {NVT,NvT,NoT,NxT,cnT,cVT,cvT,coT,cxT}
\cs_generate_variant:Nn \xassoccnt_container_if_in:NnF {NVF,NvF,NoF,NxF,cnF,cVF,cvF,coF,cxF}
-\cs_generate_variant:Nn \xassoccnt_container_if_exist:NTF {cTF}
+\cs_generate_variant:Nn \xassoccnt_container_if_exist:NTF {cTF,xTF}
\cs_generate_variant:Nn \xassoccnt_container_if_exist:NT {cT}
\cs_generate_variant:Nn \xassoccnt_container_if_exist:NF {cF}
@@ -946,19 +997,28 @@
\keys_define:nn {xassoccnt_container} {
feature .bool_set:N=\l__xassoccnt_feature_bool,
- sublists .bool_set:N=\l__xassoccnt_sublists_bool
+ sublists .bool_set:N=\l__xassoccnt_sublists_bool,
+ name .tl_set:N=\l__xassoccnt_countergroup_name_tl,
+ multiple .bool_set:N=\l__xassoccnt_multiple_bool,
+ featurename .tl_set:N=\l__xassoccnt_feature_name_tl
}
\seq_new:N \g__xassoccnt_feature_seq % The master control !!!!
\seq_new:N \g__xassoccnt_sublists_seq
-\cs_new:Nn \xassoccnt_create_featurename:n { xassoccnt_feature#1 }
+\cs_new:Nn \xassoccnt_create_featurename:n { xassoccnt_feature_#1 }
+
+\cs_new:Nn \xassoccnt_featurename:n { xassoccnt_feature_#1 }
+
+\cs_new:Nn \xassoccnt_feature_subcontainer:nn { \xassoccnt_featurename:n{#1}_#2 }
+\cs_new:Nn \xassoccnt_feature_group_container:n { \xassoccnt_featurename:n{#1}_group } % This holds the names of the several sub containers
-\cs_new:Nn \xassoccnt_featurename:n { xassoccnt_feature#1 }
+%% A feature is actually a super container that has sub containers (i.e. a list/seq of counters that have this feature )
-%% A feature is actually a super container that has sub containers (i.e. a list/seq of counters that have this feature
+%% Example the feature 'coupledcounters' will have a group countainer, that holds the name of the counter groups
+%% Each counter group (of a feature) itself will have a subcontainer where the counter names are stored.
%% Multiple counters may occur in the per - feature - specific container list
@@ -968,14 +1028,15 @@
\seq_if_in:NnF \g__xassoccnt_feature_seq {#2} {%
\seq_gput_right:Nn \g__xassoccnt_feature_seq {#2}%
\xassoccnt_create_container:nc {feature=true} { \xassoccnt_featurename:n { #2 } }
- \bool_if:NTF \l__xassoccnt_sublists_bool { \seq_gput_right:NV \g__xassoccnt_sublists_seq {\c_one }} { \seq_gput_right:NV \g__xassoccnt_sublists_seq {\c_zero }}
+ \bool_if:NTF \l__xassoccnt_sublists_bool {
+ \xassoccnt_create_container:nc {feature=false} {\xassoccnt_feature_group_container:n{#2} }
+ \seq_gput_right:NV \g__xassoccnt_sublists_seq {\c_one }
+ } { \seq_gput_right:NV \g__xassoccnt_sublists_seq {\c_zero }}
}% End of \seq_if_in
}
}
-
-
\prg_new_conditional:Nnn \xassoccnt_feature_if_in:n {TF,T,F}
{
\seq_if_in:NnTF { \g__xassoccnt_feature_seq } {#1}
@@ -1033,6 +1094,37 @@
}
}
+
+\cs_new:Nn \xassoccnt_feature_add_to_subcontainer:nnn {%
+ \keys_set:nn{xassoccnt_container} {multiple=false,#1}
+ \clist_set:Nx \l_tmpa_clist {#3}
+
+ \clist_map_inline:Nn \l_tmpa_clist {%
+ \xassoccnt_container_if_in:cnTF {\xassoccnt_feature_subcontainer:nn{\l__xassoccnt_feature_name_tl}{#2}} {##1}
+ {%
+ \bool_if:NT \l__xassoccnt_multiple_bool {% Add only if `multiple=true` was specified
+ \xassoccnt_container_put_right:cn {\xassoccnt_feature_subcontainer:nn{\l__xassoccnt_feature_name_tl}{#2}} {##1}
+ }
+ }{ %
+ \xassoccnt_container_put_right:cn {\xassoccnt_feature_subcontainer:nn{\l__xassoccnt_feature_name_tl}{#2}} {##1}
+ }
+ } % End of map_inline
+}
+
+
+
+\cs_new:Nn \xassoccnt_feature_add_to_group_container:nn {%
+ \keys_set:nn{xassoccnt_container} {multiple=false,#1}
+ \xassoccnt_add_to_containerlist:cn {\xassoccnt_feature_group_container:n{\l__xassoccnt_feature_name_tl}} {#2}% Create the container first.
+ \bool_if:NF \l__xassoccnt_multiple_bool {%
+ \xassoccnt_container_remove_duplicates:c { \xassoccnt_feature_group_container:n{\l__xassoccnt_feature_name_tl} }%
+ }
+ \xassoccnt_container_if_exist:cF {\xassoccnt_feature_subcontainer:nn{\l__xassoccnt_feature_name_tl}{#2}}
+ {
+ \xassoccnt_create_container:nc {feature=false} {\xassoccnt_feature_subcontainer:nn{\l__xassoccnt_feature_name_tl}{#2}} % Creating and filling of the subcontainer
+ }
+}
+
\cs_generate_variant:Nn \xassoccnt_add_to_containerlist:Nn {cn,nn}
@@ -1047,21 +1139,134 @@
+
\NewDocumentCommand{\NewContainer}{m}{%
\xassoccnt_create_container:nc {feature=false} {#1}
}
+\bool_new:N \l__xassoccnt_is_coupledcounter_bool
+
+
+\prg_new_conditional:Nnn \__xassoccnt_is_coupledcounter:n {TF,T,F}
+{
+ \xassoccnt_container_map_inline:cn { \xassoccnt_feature_group_container:n{coupledcounters} } {%
+ \bool_set_false:N \l__xassoccnt_is_coupledcounter_bool
+ \xassoccnt_container_if_in:cxT { \xassoccnt_feature_subcontainer:nn{coupledcounters}{##1} } {#1}
+ {
+ \bool_set_true:N \l__xassoccnt_is_coupledcounter_bool
+ \xassoccnt_container_map_break:
+ }
+ }
+ \bool_if:NTF \l__xassoccnt_is_coupledcounter_bool
+ {\prg_return_true:}
+ {\prg_return_false:}
+}
+
+\cs_generate_variant:Nn \__xassoccnt_is_coupledcounter:nTF {c }
+\cs_generate_variant:Nn \__xassoccnt_is_coupledcounter:nT { c }
+\cs_generate_variant:Nn \__xassoccnt_is_coupledcounter:nF { c }
+
+\cs_new:Nn \xassoccnt_is_coupledcounter:nTF { %
+ \__xassoccnt_is_coupledcounter:nTF {#1} {#2} {#3}
+}
+
+\cs_new:Nn \xassoccnt_is_coupledcounter:nT { %
+ \__xassoccnt_is_coupledcounter:nT {#1} {#2}%
+}
+
+\cs_new:Nn \xassoccnt_is_coupledcounter:nF { %
+ \__xassoccnt_is_coupledcounter:nF {#1} {#2}%
+}
+
+
+
+\cs_generate_variant:Nn \xassoccnt_is_coupledcounter:nTF { c }
+\cs_generate_variant:Nn \xassoccnt_is_coupledcounter:nT { c }
+\cs_generate_variant:Nn \xassoccnt_is_coupledcounter:nF { c }
+
+
+% Declaring a new coupled counters group
+\cs_new:Nn \xassoccnt_declare_coupledcountersgroup:n {%
+ \xassoccnt_container_if_exist:cF { \xassoccnt_feature_group_container:n{coupledcounters}{#1} }
+ {
+ \xassoccnt_feature_add_to_group_container:nn{multiple=false,featurename=coupledcounters}{#1}%
+ }
+}
+
+% The stepcounter branch for coupled counters
+\cs_new:Nn \xassoccnt_stepcounter_coupledcounters:n {%
+ \xassoccnt_container_map_inline:cn { \xassoccnt_feature_group_container:n{coupledcounters} } {%
+ \xassoccnt_container_if_in:cxT { \xassoccnt_feature_subcontainer:nn{coupledcounters}{##1} } {#1 }
+ {
+ \xassoccnt_container_map_inline:cn {\xassoccnt_feature_subcontainer:nn{coupledcounters}{##1}} {
+ \xassoccnt_standardstepcounter{####1}%
+ }
+ }
+ }
+}
+
+
+\NewDocumentCommand{\DeclareCoupledCountersGroup}{m}{%
+ \xassoccnt_declare_coupledcountersgroup:n{#1}
+}
+
+
\NewDocumentCommand{\DeclareCoupledCounters}{O{}m}{%
- \xassoccnt_add_to_containerlist:cn {\xassoccnt_featurename:n {coupledcounters} } {#2}%
+ \keys_set:nn {xassoccnt_container} {multiple=false,#1}
+ % Check first if the counter group name is already registered
+ \xassoccnt_container_if_exist:cF { \xassoccnt_feature_subcontainer:nn{coupledcounters}{\l__xassoccnt_countergroup_name_tl} }
+ {
+ \xassoccnt_declare_coupledcountersgroup:n{\l__xassoccnt_countergroup_name_tl}
+ }
+ \xassoccnt_feature_add_to_subcontainer:nnn{multiple=false,#1,featurename=coupledcounters}{\l__xassoccnt_countergroup_name_tl}{#2}%
}
\NewDocumentCommand{\AddCoupledCounters}{O{}m}{%
- \xassoccnt_add_to_containerlist:cn {\xassoccnt_featurename:n {coupledcounters} } {#2}%
+ \keys_set:nn {xassoccnt_container} {multiple=false,#1}
+ \xassoccnt_container_if_exist:cTF { \xassoccnt_feature_subcontainer:nn{coupledcounters}{\l__xassoccnt_countergroup_name_tl } } {
+ \xassoccnt_feature_add_to_subcontainer:nnn{#1,featurename=coupledcounters}{\l__xassoccnt_countergroup_name_tl}{#2}%
+ }{%
+ \msg_warning:nnxx{xassoccnt}{addcoupledcountergroupundefined}{AddCoupledCounters}{\l__xassoccnt_countergroup_name_tl}% Warning about undefined counter group
+ }%
}
\NewDocumentCommand{\RemoveCoupledCounters}{O{}m}{%
- \xassoccnt_container_remove_by_clist:cn { \xassoccnt_featurename:n {coupledcounters} } {#2}
+ \keys_set:nn {xassoccnt_container} {#1}
+ \xassoccnt_container_if_exist:cTF { \xassoccnt_feature_subcontainer:nn{coupledcounters}{\l__xassoccnt_countergroup_name_tl } } {%
+ \xassoccnt_container_remove_by_clist:cn {\xassoccnt_feature_subcontainer:nn{coupledcounters}{\l__xassoccnt_countergroup_name_tl }} {#2}
+ }{%
+ \msg_warning:nnxx{xassoccnt}{removingcoupledcountergroupundefined}{RemoveCoupledCounters}{\l__xassoccnt_countergroup_name_tl}% Warning about undefined counter group
+ }
+}
+
+\NewDocumentCommand{\ClearCoupledCounters}{m}{%
+ \keys_set:nn {xassoccnt_container} {#1}
+ \xassoccnt_container_if_exist:cTF { \xassoccnt_feature_subcontainer:nn{coupledcounters}{\l__xassoccnt_countergroup_name_tl } } {%
+ \xassoccnt_container_clear:c {\xassoccnt_feature_subcontainer:nn{coupledcounters}{\l__xassoccnt_countergroup_name_tl }}
+ }{%
+ \msg_warning:nnxx{xassoccnt}{clearcoupledcountergroupundefined}{ClearCoupledCounters}{\l__xassoccnt_countergroup_name_tl}% Warning about undefined counter group
+ }
+}
+
+\NewDocumentCommand{\ClearAllCoupledCounters}{}{%
+ \xassoccnt_container_if_exist:cT { \xassoccnt_feature_group_container:n{coupledcounters} } {%
+ \xassoccnt_container_map_inline:cn { \xassoccnt_feature_group_container:n{coupledcounters} } {%
+ \ClearCoupledCounters{name=##1}%
+ }
+ }
+}
+
+\NewDocumentCommand{\IsCoupledCounterTF}{mmm}{%
+ \xassoccnt_is_coupledcounter:nTF {#1} {#2} {#3}
+}
+
+\NewDocumentCommand{\IsCoupledCounterT}{mm}{%
+ \xassoccnt_is_coupledcounter:nT {#1} {#2}
+}
+
+\NewDocumentCommand{\IsCoupledCounterF}{mm}{%
+ \xassoccnt_is_coupledcounter:nF {#1} {#2}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1073,12 +1278,9 @@
\RenewDocumentCommand{\stepcounter}{m}{%
\__xassoccnt_translate_countername:cn {l_tmpa_tl} {#1}%
\xassoccnt_is_suspendedcounter:nF{#1}{%
- \xassoccnt_container_if_in:cxTF { \xassoccnt_featurename:n {coupledcounters} } {#1} {%
- \xassoccnt_container_map_inline:cn {\xassoccnt_featurename:n {coupledcounters} } {%
- \xassoccnt_standardstepcounter{##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}%
@@ -1492,7 +1694,7 @@
% Prevent multiple addition of a counter name
\seq_if_in:NnF #1 {#2}
{
- \seq_gput_right:Nn \l__xassoccnt_backupresetlist_seq {\c_zero}
+ \seq_gput_right:Nn \l__xassoccnt_backupresetlist_seq {\c_one}
\seq_gput_right:Nn #1 { #2 }
}
}
@@ -1502,7 +1704,7 @@
% Prevent multiple addition of a counter name
\seq_if_in:NnF #1 {#2}
{
- \seq_gput_right:Nn \l__xassoccnt_backupresetlist_seq {\c_one}
+ \seq_gput_right:Nn \l__xassoccnt_backupresetlist_seq {\c_zero}
\seq_gput_right:NV #1 {#2}
}
}
@@ -1557,6 +1759,7 @@
\msg_error:nnn{xassoccnt}{nameisnocounter}{##1}%
}%
}%
+% \seq_use:Nn \l__xassoccnt_countervaluesbackup_seq {\par}
}
@@ -1603,6 +1806,7 @@
\tl_set:Nn \l_tmpa_tl {#3}
\int_zero:N \l_tmpa_int%
\int_zero:N \l_tmpb_int%
+
\seq_clear:N \l_tmpa_seq%
\seq_if_in:NnT \l__xassoccnt_counternamesbackup_seq {#3} {%
\seq_map_inline:Nn \l__xassoccnt_counternamesbackup_seq
@@ -1677,13 +1881,31 @@
%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\EnableNumberofrunsTF}{mm}{%
+ \bool_if:NF \g__xassoccnt_nonumberofruns_bool {
+ #1
+ }{#2}
+}
\ExplSyntaxOff
-
-\AtBeginDocument{%
- \stepcounter{numberofruns}
+\NewDocumentCommand{\DeclareDocumentCounter}{O{initial={0}}mo}{%
+ \IfValueTF{#3}{%
+ \NewDocumentCounter[#1]{#2}[#3]%
+ }{%
+ \NewDocumentCounter[#1]{#2}%
+ }%
}
+
+
+\EnableNumberofrunsTF{%
+ \NewTotalDocumentCounter[supertotal=true]{numberofruns}
+ \AtBeginDocument{%
+ \stepcounter{numberofruns}
+ }
+}{}
+
+
@@ -1692,13 +1914,6 @@
% Extended interface functions
-\NewDocumentCommand{\DeclareDocumentCounter}{O{initial={0}}mo}{%
- \IfValueTF{#3}{%
- \NewDocumentCounter[#1]{#2}[#3]%
- }{%
- \NewDocumentCounter[#1]{#2}%
- }%
-}
\@onlypreamble{\NewTotalDocumentCounter}
\@onlypreamble{\RegisterTotalDocumentCounter}
@@ -1708,8 +1923,6 @@
-\NewTotalDocumentCounter[supertotal=true]{numberofruns}
-
%%% Colour output routines
\newcommand{\GeneralCounterInfoColor}{orange}
@@ -1718,7 +1931,7 @@
\newcommand{\TotalCounterInfoColor}{violet}
-\AddFeature{coupledcounters} % New style, not fully implemented so far
+\AddFeature[sublists=true]{coupledcounters} % New style, not fully implemented so far
% Some more to be done