From fb0e09783157c2c9f8e6899a25abc2442b8a77f6 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Fri, 18 Jan 2013 23:26:48 +0000
Subject: acro (17jan13)

git-svn-id: svn://tug.org/texlive/trunk@28867 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/acro/acro.sty | 649 +++++++++++++++++++++---------
 1 file changed, 449 insertions(+), 200 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/acro/acro.sty')

diff --git a/Master/texmf-dist/tex/latex/acro/acro.sty b/Master/texmf-dist/tex/latex/acro/acro.sty
index f867b88fe19..fb8b8c09105 100644
--- a/Master/texmf-dist/tex/latex/acro/acro.sty
+++ b/Master/texmf-dist/tex/latex/acro/acro.sty
@@ -23,7 +23,7 @@
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
 % The acro package consists of the files
-%  - acro.sty, acro_en.tex, acro_en.pdf, README
+%  - acro.sty, acro0.def, acro1.def, acro_en.tex, acro_en.pdf, README
 % --------------------------------------------------------------------------
 % If you have any ideas, questions, suggestions or bugs to report, please
 % feel free to contact me.
@@ -31,11 +31,11 @@
 \RequirePackage{expl3,xparse,l3keys2e,xtemplate}
 \ProvidesExplPackage
   {acro}
-  {2013/01/02}
-  {0.6a}
+  {2013/01/16}
+  {1.0}
   {Typeset Acronyms}
 
-% error messages:
+% warning and error messages:
 \msg_new:nnnn { acro } { undefined }
   { You've~requested~acronym~`#1'~but~it~seems~that~it~was~never~defined! }
   {
@@ -43,12 +43,23 @@
     apperantly~haven't~defined~it,~yet!~Maybe~you've~mispelled~it?
   }
 
+\msg_new:nnnn { acro } { version }
+  { You've~selected~the~version~option~`#1'~which~doesn't~exist. }
+  {
+    You've~selected~the~version~option~`#1'~which~doesn't~exist.~
+    I'm~using~option~`#2'~instead.
+  }
+
 % temporary variables
 \tl_new:N   \l__acro_tmpa_tl
 \tl_new:N   \l__acro_tmpb_tl
 \tl_new:N   \l__acro_tmpc_tl
 \prop_new:N \l__acro_tmpa_prop
+\prop_new:N \l__acro_tmpb_prop
 \seq_new:N  \l__acro_tmpa_seq
+\seq_new:N  \l__acro_tmpb_seq
+
+\tl_new:N   \l__acro_ignore_tl
 
 % boolean variables:
 \bool_new:N \l__acro_mark_as_used_bool
@@ -64,10 +75,16 @@
 \bool_new:N \l__acro_xspace_bool
 \bool_new:N \l__acro_first_upper_bool
 \bool_new:N \l__acro_sort_bool
+\bool_set_true:N \l__acro_sort_bool
 \bool_new:N \l__acro_capitalize_list_bool
 \bool_new:N \l__acro_citation_all_bool
 \bool_new:N \l__acro_citation_first_bool
 \bool_set_true:N \l__acro_citation_first_bool
+\bool_new:N \l__acro_acc_supp_bool
+\bool_new:N \l__acro_page_ranges_bool
+\bool_set_true:N \l__acro_page_ranges_bool
+\bool_new:N \l__acro_record_pages_bool
+\bool_set_true:N \l__acro_record_pages_bool
 
 % tokenlist variables:
 \tl_new:N   \l__acro_short_format_tl
@@ -81,7 +98,13 @@
 \tl_new:N   \l__acro_page_instance_tl
 \tl_set:Nn  \l__acro_page_instance_tl  { none }
 \tl_new:N   \l__acro_page_name_tl
-\tl_set:Nn  \l__acro_page_name_tl      { p. }
+\tl_set:Nn  \l__acro_page_name_tl      { p.\@\, }
+\tl_new:N   \l__acro_pages_name_tl
+\tl_set:Nn  \l__acro_pages_name_tl     { pp.\@\, }
+\tl_new:N   \l__acro_next_page_tl
+\tl_set:Nn  \l__acro_next_page_tl      { \,f.\@ }
+\tl_new:N   \l__acro_next_pages_tl
+\tl_set:Nn  \l__acro_next_pages_tl     { \,ff.\@ }
 \tl_new:N   \l__acro_list_instance_tl
 \tl_set:Nn  \l__acro_list_instance_tl  { list }
 \tl_new:N   \l__acro_list_type_tl
@@ -104,6 +127,7 @@
 % property list variables:
 \prop_new:N \l__acro_short_prop
 \prop_new:N \l__acro_alt_prop
+\prop_new:N \l__acro_sort_prop
 \prop_new:N \l__acro_long_prop
 \prop_new:N \l__acro_class_prop
 \prop_new:N \l__acro_replace_plural_prop
@@ -116,6 +140,7 @@
 \prop_new:N \l__acro_citation_post_prop
 \prop_new:N \l__acro_pdfstring_prop
 \prop_new:N \l__acro_pdfstring_plural_prop
+\prop_new:N \l__acro_acc_supp_prop
 
 % length variables:
 \dim_new:N  \l__acro_table_width_dim
@@ -129,9 +154,39 @@
 
 \cs_new_eq:NN \acro_first_upper_case:n \__acro_first_upper_case:n
 
+% --------------------------------------------------------------------------
+% versioning:
+\tl_new:N  \l__acro_active_version_tl
+\tl_new:N  \l__acro_version_zero_tl
+\tl_set:Nn \l__acro_version_zero_tl { 0 }
+
+\clist_new:N \l__acro_versions_clist
+\clist_put_right:Nn \l__acro_versions_clist { 0 }
+\clist_put_right:Nn \l__acro_versions_clist { 1 }
+
+\bool_new:N \l__acro_version_selected_bool
+
+\cs_new:Npn \__acro_select_version:n #1
+  {
+    \clist_if_in:NnTF \l__acro_versions_clist { #1 }
+      {
+        \file_input:n { acro#1.def }
+        \tl_set:Nn \l__acro_active_version_tl { #1 }
+      }
+      {
+        \msg_warning:nnxx { acro } { version } { #1 } { 1 }
+        \file_input:n { acro1.def }
+        \tl_set:Nn \l__acro_active_version_tl { 1 }
+      }
+    \bool_set_true:N \l__acro_version_selected_bool
+  }
+
+
 % options:
 \keys_define:nn { acro }
   {
+    version          .code:n     = \__acro_select_version:n { #1 } ,
+    accsupp          .bool_set:N = \l__acro_acc_supp_bool        ,
     macros           .bool_set:N = \l__acro_create_macros_bool   ,
     xspace           .bool_set:N = \l__acro_xspace_bool          ,
     strict           .bool_set:N = \l__acro_strict_bool          ,
@@ -147,6 +202,11 @@
     extra-style      .tl_set:N   = \l__acro_extra_instance_tl    ,
     page-ref         .tl_set:N   = \l__acro_page_instance_tl     ,
     page-name        .tl_set:N   = \l__acro_page_name_tl         ,
+    pages-name       .tl_set:N   = \l__acro_pages_name_tl        ,
+    page-ranges      .bool_set:N = \l__acro_page_ranges_bool     ,
+    record-pages     .bool_set:N = \l__acro_record_pages_bool    ,
+    next-page        .tl_set:N   = \l__acro_next_page_tl         ,
+    next-pages       .tl_set:N   = \l__acro_next_pages_tl        ,
     list-style       .tl_set:N   = \l__acro_list_instance_tl     ,
     list-type        .tl_set:N   = \l__acro_list_type_tl         ,
     list-header      .tl_set:N   = \l__acro_list_title_tl        ,
@@ -184,65 +244,14 @@
         \cs_new_eq:NN \acro_xspace: \xspace
       }
       { \cs_new:Npn \acro_xspace: {} }
+    \bool_if:NF \l__acro_record_pages_bool
+      { \cs_set_eq:NN \__acro_record_page_number:n \use_none:n }
   }
 
 % setup command:
 \NewDocumentCommand \acsetup { m }
   { \keys_set:nn { acro } { #1 } \ignorespaces }
 
-% --------------------------------------------------------------------------
-% adding an acronym, internal command:
-% #1: use/replace plural (boolean)
-% #2: id
-% #3: short
-% #4: short plural
-% #5: alt
-% #6: long
-% #7: long plural
-% #8: class
-% #9: extra
-\cs_new:Npn \acro_new:nnnnnnnnn #1#2#3#4#5#6#7#8#9
-  {
-    \IfBooleanTF { #1 }
-      { \prop_put:Nnn \l__acro_replace_plural_prop { #2 } { \c_true_bool } }
-      { \prop_put:Nnn \l__acro_replace_plural_prop { #2 } { \c_false_bool } }
-    \prop_put:Nnn \l__acro_short_prop { #2 } { #3 }
-    \prop_put:Nnn \l__acro_pdfstring_prop { #2 } { #3 }
-    \IfNoValueTF { #4 }
-      {
-        \prop_put:Nnn \l__acro_short_plural_prop
-          { #2 } { \l__acro_default_plural_tl }
-        \prop_put:Nnx \l__acro_pdfstring_plural_prop
-          { #2 } { \exp_not:n { #3 } \exp_not:V \l__acro_default_plural_tl }
-      }
-      {
-        \prop_put:Nnn \l__acro_short_plural_prop { #2 } { #4 }
-        \prop_put:Nnx \l__acro_pdfstring_plural_prop { #2 } { \exp_not:n { #3 #4 } }
-      }
-    \IfNoValueTF { #5 }
-      { \prop_put:Nnn \l__acro_alt_prop { #2 } { #2 } }
-      { \prop_put:Nnn \l__acro_alt_prop { #2 } { #5 } }
-    \prop_put:Nnn \l__acro_long_prop { #2 } { #6 }
-    \IfNoValueTF { #7 }
-      { \prop_put:Nnn \l__acro_long_plural_prop { #2 } { \l__acro_default_plural_tl } }
-      { \prop_put:Nnn \l__acro_long_plural_prop { #2 } { #7 } }
-    \IfNoValueF { #8 }
-      { \prop_put:Nnn \l__acro_class_prop { #2 } { #8} }
-    \IfNoValueF { #9 }
-      { \prop_put:Nnn \l__acro_extra_prop { #2 } { #9 } }
-    \bool_new:c { g__acro_#2_used_bool }
-    \bool_new:c { g__acro_#2_label_bool }
-    \bool_if:NT \l__acro_create_macros_bool
-      {
-        \cs_if_exist:cTF { #2 }
-          {
-            \bool_if:NT \l__acro_strict_bool
-              { \cs_set:cpn { #2 } { \ac { #2 } \acro_xspace: } }
-          }
-          { \cs_new:cpn { #2 } { \ac { #2 } \acro_xspace: } }
-      }
-  }
-
 % typeset the short form:
 \cs_new:Npn \__acro_write_short:n #1
   {
@@ -312,7 +321,7 @@
           \ifHy@ocgcolorlinks
             \exp_after:wN \use_i:nn
           \else
-            \exp_after:wN \use_ii:nn
+            \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
           \fi
         \fi
         { \textcolor { \@linkcolor } { #1 } }
@@ -368,7 +377,7 @@
       }
     \bool_if:nT { \l__acro_first_use_brackets_bool && !\l__acro_first_reversed_bool }
       { \tl_head:N \l__acro_first_brackets_tl }
-    \__acro_write_short:n { #2 }
+    \__acro_acc_supp:nn { #1 } { \__acro_write_short:n { #2 } }
     \bool_if:nT { \l__acro_first_use_brackets_bool && !\l__acro_first_reversed_bool }
       { \tl_tail:N \l__acro_first_brackets_tl }
     \bool_if:nT { !\l__acro_first_only_short_bool && \l__acro_first_reversed_bool }
@@ -392,7 +401,7 @@
 \DeclareTemplateCode { acro-first } { footnote } { 3 } { }
   {
     \AssignTemplateKeys
-    \__acro_write_short:n { #2 }
+    \__acro_acc_supp:nn { #1 } { \__acro_write_short:n { #2 } }
     \footnote
       {
         \__acro_write_long:No \l__acro_long_format_tl { #3 }
@@ -460,12 +469,234 @@
   { punct = true, brackets = false }
 
 % --------------------------------------------------------------------------
-% outputting the page number:
+% outputting the page numbers:
 \bool_new:N \l__acro_page_punct_bool
+\bool_new:N \l__acro_page_brackets_bool
 \bool_new:N \l__acro_page_display_bool
 \tl_new:N   \l__acro_page_punct_tl
+\tl_new:N   \l__acro_page_brackets_tl
 \dim_new:N  \l__acro_page_space_dim
 
+\cs_new:Npn \acro_create_page_records:n #1
+  {
+    \seq_new:c { g__acro_#1_tmp_seq }
+    \seq_new:c { g__acro_#1_pages_seq }
+  }
+
+\cs_new:Npn \acro@hyper@page #1
+  {
+    \tl_if_in:nnTF { #1 } { \acro@no@hyperpage }
+      { #1 }
+      { \acro_hyper_page:n { #1 } }
+  }
+
+\cs_new_protected:Npn \acro@no@hyperpage {}
+
+\cs_new:Npn \__acro_safe_pages_aux:n #1
+  { \noexpand \acro@hyper@page {#1}| }
+
+\cs_new_eq:NN \acro_hyper_page:n \use:n
+
+\cs_new:Npn \acro_safe_pages:n #1
+  {
+    \iow_now:Nx \@auxout
+      {
+        \exp_not:n { \global \@namedef } { acro@#1@pages }
+          { \seq_map_function:cN { g__acro_#1_pages_seq } \__acro_safe_pages_aux:n }
+      }
+  }
+
+\AtEndDocument
+  {
+    \prop_map_inline:Nn \l__acro_short_prop
+      {
+        \acro_finalize_page_numbers:n { #1 }
+        \acro_safe_pages:n { #1 }
+      }
+  }
+
+\tl_new:N \l__acro_tmp_page_tl
+\tl_new:N \l__acro_last_page_tl
+
+%TODO: this should be translated into expl3 syntax
+\cs_new:Npn \__acro_if_is_number:nTF #1
+  {
+    \if!\ifnum9<1#1!\expandafter\expandafter\expandafter\@firstoftwo\fi
+    \else
+      \expandafter\@secondoftwo
+    \fi
+  }
+
+\cs_new:Npn \__acro_convert_to_arabic:n #1
+  {
+    \__acro_if_is_number:nTF { #1 }
+      { #1 }
+      { \exp_args:Nf \int_from_roman:n { \tl_expandable_lowercase:n { #1 } } }
+  }
+\cs_generate_variant:Nn \__acro_convert_to_arabic:n { V }
+
+\cs_new:Npn \__acro_record_page_number:n #1
+  {
+    \seq_if_empty:cTF { g__acro_#1_pages_seq }
+      {% no pages recorded, yet
+        \seq_gput_right:cx { g__acro_#1_pages_seq } { \thepage }
+        \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage }
+      }
+      {
+        \seq_get_right:cN { g__acro_#1_tmp_seq } \l__acro_tmp_page_tl
+        \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_last_page_tl
+        \tl_if_eq:NNTF \l__acro_tmp_page_tl \l__acro_last_page_tl
+          {% range may have started
+            \int_compare:nNnF
+              { \value{page} }
+                =
+              { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl }
+              {
+                \int_compare:nNnTF
+                  { \value{page} }
+                    =
+                  { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl + 1 }
+                  {% range continues
+                    \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage }
+                  }
+                  {% no range (any more)
+                    \seq_gput_right:cx { g__acro_#1_pages_seq } { \acro@no@hyperpage,~ }
+                    \seq_gclear:c      { g__acro_#1_tmp_seq }
+                    \seq_gput_right:cx { g__acro_#1_tmp_seq }   { \thepage }
+                    \seq_gput_right:cx { g__acro_#1_pages_seq } { \thepage }
+                  }
+              }
+          }
+          {% we're in a range
+            \int_compare:nNnF
+              { \value{page} }
+                =
+              { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl }
+              {
+                \int_compare:nNnTF
+                  { \value{page} }
+                    =
+                  { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl + 1 }
+                  {% range continues
+                    \seq_gput_right:cx { g__acro_#1_tmp_seq } { \thepage }
+                  }
+                  {% no range (any more)
+                    \int_compare:nNnTF
+                      { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl }
+                        =
+                      { \__acro_convert_to_arabic:V \l__acro_last_page_tl +1 }
+                      {
+                        \bool_if:NTF \l__acro_page_ranges_bool
+                          {
+                            \seq_gput_right:cn { g__acro_#1_pages_seq }
+                              { \acro@no@hyperpage,~ }
+                            \seq_gput_right:cx { g__acro_#1_pages_seq }
+                              { \l__acro_tmp_page_tl }
+                          }
+                          {
+                            \seq_gput_right:cn { g__acro_#1_pages_seq }
+                              { \acro@no@hyperpage\l__acro_next_page_tl }
+                          }
+                      }
+                      {
+                        \bool_if:NTF \l__acro_page_ranges_bool
+                          {
+                            \seq_gput_right:cn { g__acro_#1_pages_seq }
+                              { \acro@no@hyperpage-- }
+                            \seq_gput_right:cx { g__acro_#1_pages_seq }
+                              { \l__acro_tmp_page_tl }
+                          }
+                          {
+                            \seq_gput_right:cn { g__acro_#1_pages_seq }
+                              { \acro@no@hyperpage\l__acro_next_pages_tl }
+                          }
+                      }
+                    \seq_gclear:c      { g__acro_#1_tmp_seq }
+                    \seq_gput_right:cx { g__acro_#1_tmp_seq }   { \thepage }
+                    \seq_gput_right:cn { g__acro_#1_pages_seq } { \acro@no@hyperpage,~ }
+                    \seq_gput_right:cx { g__acro_#1_pages_seq } { \thepage }
+                  }
+              }
+          }
+      }
+  }
+
+\cs_new:Npn \acro_finalize_page_numbers:n #1
+  {
+    \seq_get_right:cN { g__acro_#1_tmp_seq } \l__acro_tmp_page_tl
+    \seq_get_right:cN { g__acro_#1_pages_seq } \l__acro_last_page_tl
+    \tl_if_eq:NNF \l__acro_tmp_page_tl \l__acro_last_page_tl
+      {
+        \int_compare:nNnTF
+          { \__acro_convert_to_arabic:V \l__acro_tmp_page_tl }
+            =
+          { \__acro_convert_to_arabic:V \l__acro_last_page_tl +1 }
+          {
+            \bool_if:NTF \l__acro_page_ranges_bool
+              {
+                \seq_gput_right:cn { g__acro_#1_pages_seq }
+                  { \acro@no@hyperpage,~ }
+                \seq_gput_right:cx { g__acro_#1_pages_seq }
+                  { \l__acro_tmp_page_tl }
+              }
+              {
+                \seq_gput_right:cn { g__acro_#1_pages_seq }
+                  { \acro@no@hyperpage\l__acro_next_page_tl }
+              }
+          }
+          {
+            \bool_if:NTF \l__acro_page_ranges_bool
+              {
+                \seq_gput_right:cn { g__acro_#1_pages_seq }
+                  { \acro@no@hyperpage-- }
+                \seq_gput_right:cx { g__acro_#1_pages_seq }
+                  { \l__acro_tmp_page_tl }
+              }
+              {
+                \seq_gput_right:cn { g__acro_#1_pages_seq }
+                  { \acro@no@hyperpage\l__acro_next_pages_tl }
+              }
+          }
+      }
+  }
+
+\cs_new:Npn \acro_print_page_numbers:n #1
+  {
+    \cs_if_exist:cTF { acro@#1@pages }
+      {
+        \tl_set_eq:Nc \l__acro_tmpa_tl { acro@#1@pages }
+        \__acro_print_page_numbers:n { #1 }
+      }
+      { ?? }
+  }
+
+\cs_new:Npn \__acro_print_page_numbers:n #1
+  {
+    \seq_set_split:NnV \l__acro_tmpb_seq { | } \l__acro_tmpa_tl
+    \seq_pop_right:NN \l__acro_tmpb_seq \l__acro_ignore_tl
+    \int_compare:nNnTF { \seq_count:N \l__acro_tmpb_seq } = { 1 }
+      { \l__acro_page_name_tl } { \l__acro_pages_name_tl }
+    \acro_no_break:
+    \skip_horizontal:N \l__acro_page_space_dim
+    \acro_no_break:
+    \seq_map_inline:Nn \l__acro_tmpb_seq { ##1 }
+  }
+
+\AtBeginDocument
+  {
+    \tl_if_eq:NNT \l__acro_active_version_tl \l__acro_version_zero_tl
+      {
+        \cs_set:Npn \__acro_print_page_numbers:n #1
+          {
+            \acro_no_break:
+            \skip_horizontal:N \l__acro_page_space_dim
+            \acro_no_break:
+            \tl_use:N \l__acro_page_name_tl
+            \pageref{ac:#1}
+          }
+      }
+  }
+
 \cs_new:Npn \acro_no_break: { \tex_penalty:D \c_ten_thousand }
 
 \DeclareObjectType { acro-page-number } { 1 }
@@ -477,8 +708,7 @@
     punct-symbol  : tokenlist = {,}   ,
     brackets      : boolean   = false ,
     brackets-type : tokenlist = ()    ,
-    space         : length    = .3ex  ,
-    name          : tokenlist         ,
+    space         : length    = .3ex
   }
 
 \DeclareTemplateCode { acro-page-number } { default } { 1 }
@@ -488,8 +718,7 @@
     punct-symbol  = \l__acro_page_punct_tl      ,
     brackets      = \l__acro_page_brackets_bool ,
     brackets-type = \l__acro_page_brackets_tl   ,
-    space         = \l__acro_page_space_dim     ,
-    name          = \l__acro_page_name_tl       ,
+    space         = \l__acro_page_space_dim
   }
   {
     \AssignTemplateKeys
@@ -500,11 +729,7 @@
         \tl_use:N \c_space_tl
         \bool_if:NT \l__acro_page_brackets_bool
           { \tl_head:N \l__acro_page_brackets_tl }
-        \tl_use:N \l__acro_page_name_tl
-        \acro_no_break:
-        \skip_horizontal:N \l__acro_page_space_dim
-        \acro_no_break:
-        \pageref { ac:#1 }
+        \acro_print_page_numbers:n { #1 }
         \bool_if:NT \l__acro_page_brackets_bool
           { \tl_tail:N \l__acro_page_brackets_tl }
       }
@@ -568,7 +793,7 @@
 \cs_new:Npn \acro_is_excluded:nnF #1#2#3
   {
     \bool_set_false:N \l__acro_is_excluded_bool
-    \IfNoValueTF { #2 }
+    \tl_if_empty:nTF { #2 }
       { #3 }
       {
         \clist_map_inline:nn { #2 }
@@ -649,7 +874,14 @@
     \AssignTemplateKeys
     \__acro_activate_hyperref_support:
     \cs_set:Npn \acro_print_list_short:nn ##1##2
-      { \item [ \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } ] }
+      {
+        \item
+          [
+            \acro_hyper_target:nn
+              { ##1 }
+              { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } }
+          ]
+      }
     \cs_set:Npn \acro_print_list_long:n ##1
       {
         \__acro_write_long:Nf \l__acro_list_long_format_tl
@@ -693,7 +925,12 @@
     \AssignTemplateKeys
     \__acro_activate_hyperref_support:
     \cs_set:Npn \acro_print_list_short:nn ##1##2
-      { \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } & }
+      {
+        \acro_hyper_target:nn
+          { ##1 }
+          { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } }
+        &
+      }
     \cs_set:Npn \acro_print_list_long:n ##1
       {
         \__acro_write_long:Nf \l__acro_list_long_format_tl
@@ -735,7 +972,12 @@
     \AssignTemplateKeys
     \__acro_activate_hyperref_support:
     \cs_set:Npn \acro_print_list_short:nn ##1##2
-      { \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } & }
+      {
+        \acro_hyper_target:nn
+          { ##1 }
+          { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } }
+        &
+      }
     \cs_set:Npn \acro_print_list_long:n ##1
       {
         \__acro_write_long:Nf \l__acro_list_long_format_tl
@@ -779,7 +1021,12 @@
     \AssignTemplateKeys
     \__acro_activate_hyperref_support:
     \cs_set:Npn \acro_print_list_short:nn ##1##2
-      { \acro_hyper_target:nn { ##1 } { \__acro_write_short:n { ##2 } } & }
+      {
+        \acro_hyper_target:nn
+          { ##1 }
+          { \__acro_acc_supp:nn { ##1 } { \__acro_write_short:n { ##2 } } }
+        &
+      }
     \cs_set:Npn \acro_print_list_extra:n ##1
       {
         \bool_if:NT \l__acro_capitalize_list_bool
@@ -835,7 +1082,9 @@
     \acro_is_used:nTF { #1 }
       {
         % this is not the first time
-        \__acro_write_short:V \l__acro_short_tl
+        \__acro_acc_supp:nn
+          { #1 }
+          { \__acro_write_short:V \l__acro_short_tl }
         \__acro_cite_if:Nn \l__acro_citation_all_bool { #1 }
       }
       {
@@ -914,7 +1163,11 @@
         \iow_now:Nx \@auxout { \string \acro@used@once { #1 } }
         \bool_if:NT \l__acro_mark_as_used_bool
           {
-            \bool_if:cF { g__acro_#1_label_bool }
+            \bool_if:nT
+              {
+                !\bool_if_p:c { g__acro_#1_label_bool } &&
+                \tl_if_eq_p:NN \l__acro_active_version_tl \l__acro_version_zero_tl
+              }
               {
                 \bool_gset_true:c { g__acro_#1_label_bool }
                 \label{ac:#1}
@@ -952,7 +1205,9 @@
     \acro_is_used:n { #1 }
     \__acro_is_single:nT { #1 }
       { \cs_set_eq:NN \acro_hyper_link:nn \use_ii:nn }
-    \__acro_write_short:V \l__acro_short_tl
+    \__acro_acc_supp:nn
+      { #1 }
+      { \__acro_write_short:V \l__acro_short_tl }
     \__acro_cite_if:Nn \l__acro_citation_all_bool { #1 }
   }
 
@@ -964,7 +1219,9 @@
     \acro_is_used:n { #1 }
     \__acro_is_single:nT { #1 }
       { \cs_set_eq:NN \acro_hyper_link:nn \use_ii:nn }
-    \__acro_write_short:V \l__acro_alt_tl
+    \__acro_acc_supp:nn
+      { #1 }
+      { \__acro_write_short:V \l__acro_alt_tl }
     \__acro_cite_if:Nn \l__acro_citation_all_bool { #1 }
   }
 
@@ -994,20 +1251,6 @@
       { \l__acro_long_tl }
   }
 
-% set custom format:
-\cs_new:Npn \acro_format:nn #1#2
-  { \prop_put:Nnn \l__acro_format_prop { #1 } { #2 } }
-
-% add citation:
-\cs_new:Npn \acro_citation:nnnn #1#2#3#4
-  {
-    \prop_put:Nnn \l__acro_citation_prop { #1 } { #4 }
-    \IfNoValueF { #2 }
-      { \prop_put:Nnn \l__acro_citation_pre_prop { #1 } { #2 } }
-    \IfNoValueF { #3 }
-      { \prop_put:Nnn \l__acro_citation_post_prop { #1 } { #3 } }
-  }
-
 % #1 pre
 % #2 post
 % #3 key
@@ -1041,6 +1284,34 @@
       }
   }
 
+% accessability support
+\tl_new:N \l__acro_acc_supp_tl
+\cs_new_eq:NN \__acro_acc_supp:nn \use_ii:nn
+
+\cs_new:Npn \__acro_acc_supp_aux:nn #1#2
+  {
+    \BeginAccSupp { ActualText = #1 }
+      #2
+    \EndAccSupp { }
+  }
+\cs_generate_variant:Nn \__acro_acc_supp_aux:nn { V }
+
+\AtBeginDocument
+  {
+    \bool_if:NT \l__acro_acc_supp_bool
+      {
+        \RequirePackage { accsupp }
+        \cs_set:Npn \__acro_acc_supp:nn #1#2
+          {
+            \prop_get:NnNF \l__acro_acc_supp_prop { #1 } \l__acro_acc_supp_tl
+              { \prop_get:NnN \l__acro_short_prop { #1 } \l__acro_acc_supp_tl }
+            \bool_if:NT \l__acro_use_plural_bool
+              { \tl_put_right:NV \l__acro_acc_supp_tl \l__acro_short_plural_tl }
+            \__acro_acc_supp_aux:Vn \l__acro_acc_supp_tl { #2 }
+          }
+      }
+  }
+
 % --------------------------------------------------------------------------
 % experimental sorting feature:
 \AtBeginDocument
@@ -1050,9 +1321,14 @@
         \RequirePackage { l3sort }
         \cs_new:Npn \acro_sort_prop:N #1
           {
-            \seq_clear:N \l__acro_tmpa_seq
-            \prop_map_inline:Nn #1
-              { \seq_put_right:Nn \l__acro_tmpa_seq { ##1 } }
+            \seq_clear:N  \l__acro_tmpa_seq
+            \prop_clear:N \l__acro_tmpa_prop
+            \prop_clear:N \l__acro_tmpb_prop
+            \prop_map_inline:Nn \l__acro_sort_prop
+              {
+                \seq_put_right:Nn \l__acro_tmpa_seq { ##2 }
+                \prop_put:Nnn \l__acro_tmpa_prop { ##2 } { ##1 }
+              }
             \seq_sort:Nn \l__acro_tmpa_seq
               {
                 \tl_to_lowercase:n {
@@ -1061,80 +1337,47 @@
                     { \sort_reversed: }
                 }
               }
-            \prop_clear:N \l__acro_tmpa_prop
             \seq_map_inline:Nn \l__acro_tmpa_seq
               {
-                \prop_get:NnN #1 { ##1 } \l__acro_tmpa_tl
-                \prop_put:NnV \l__acro_tmpa_prop { ##1 } \l__acro_tmpa_tl
+                % get ID:
+                \prop_get:NnN \l__acro_tmpa_prop { ##1 } \l__acro_tmpa_tl
+                % get prop entry of ID in #1:
+                \prop_get:NVNT #1 \l__acro_tmpa_tl \l__acro_tmpb_tl
+                  {
+                    \prop_put:NVV \l__acro_tmpb_prop
+                      \l__acro_tmpa_tl
+                      \l__acro_tmpb_tl
+                  }
               }
-            \prop_set_eq:NN #1 \l__acro_tmpa_prop
+            \prop_set_eq:NN #1 \l__acro_tmpb_prop
           }
       }
   }
 
 % --------------------------------------------------------------------------
-% print the whole list:
-\cs_new:Npn \acro_print_acronyms:nn #1#2
-  {
-    \iow_now:Nx \@auxout { \string \acro@print@list }
-    \bool_if:NT \l__acro_sort_bool
-      { \acro_sort_prop:N \l__acro_short_prop }
-    \UseInstance { acro-title } { \l__acro_list_title_tl }
-      { \l__acro_list_name_tl }
-    \cs_if_exist:NTF \acro@printed@list
-      {
-        \UseInstance { acro-list } { \l__acro_list_instance_tl }
-          { \l__acro_list_type_tl } { #1 } { #2 }
-      }
-      { \@latex@warning@no@line {Rerun~to~get~acronym~list~right} }
-  }
-
+% regarding list printing:
 \cs_new:Npn \acro@print@list
   { \cs_if_exist:NF \acro@printed@list { \cs_new:Npn \acro@printed@list {} } }
 
-% --------------------------------------------------------------------------
-% USER COMMANDS
-% adding an acronym, user command:
-% #1: use/replace plural (boolean)
-% #2: id
-% #3: short
-% #4: short plural
-% #5: alt
-% #6: long
-% #7: long plural
-% #8: class
-% #9: extra
-\NewDocumentCommand \DeclareAcronym
-  { sm>{\SplitArgument{1}{,}}mo>{\SplitArgument{1}{,}}+mgo }
-  { \acro_new:nnnnnnnnn { #1 } { #2 } #3 { #4 } #5 { #7 } { #6 } }
-\@onlypreamble \DeclareAcronym
-
-\NewDocumentCommand \DeclareAcronymFormat { mm }
-  { \acro_format:nn { #1 } { #2 } }
-\@onlypreamble \DeclareAcronymFormat
-
-\NewDocumentCommand \DeclareAcronymCitation { moom }
-  { \acro_citation:nnnn { #1 } { #2 } { #3 } { #4 } }
-\@onlypreamble \DeclareAcronymCitation
-
-\NewDocumentCommand \DeclareAcronymPDFString
-  { m >{ \SplitArgument { 1 } { , } } m }
-  { \acro_pdfstring:nnn { #1 } #2 }
-\@onlypreamble \DeclareAcronymPDFstring
-
-\cs_new:Npn \acro_use_if:n #1
+
+\cs_new:Npn \acro_use_if:nn #1#2
   {
     \IfBooleanTF { #1 }
       { \bool_set_false:N \l__acro_mark_as_used_bool }
-      { \bool_set_true:N \l__acro_mark_as_used_bool }
+      {
+        \__acro_record_page_number:n { #2 }
+        \bool_set_true:N \l__acro_mark_as_used_bool
+      }
   }
 
+% --------------------------------------------------------------------------
+% the user commands:
 % automatic:
 \NewDocumentCommand \ac { sm }
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \acro_use:n { #2 }
     \group_end:
   }
@@ -1143,7 +1386,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_first_upper_bool
       \acro_use:n { #2 }
     \group_end:
@@ -1153,7 +1396,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \acro_use:n { #2 }
     \group_end:
@@ -1163,7 +1406,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \bool_set_true:N \l__acro_first_upper_bool
       \acro_use:n { #2 }
@@ -1175,7 +1418,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \acro_short:n { #2 }
     \group_end:
   }
@@ -1184,7 +1427,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \acro_short:n { #2 }
     \group_end:
@@ -1195,7 +1438,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \acro_alt:n { #2 }
     \group_end:
   }
@@ -1204,7 +1447,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \acro_alt:n { #2 }
     \group_end:
@@ -1215,7 +1458,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \acro_long:n { #2 }
     \group_end:
   }
@@ -1224,7 +1467,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_first_upper_bool
       \acro_long:n { #2 }
     \group_end:
@@ -1234,7 +1477,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \acro_long:n { #2 }
     \group_end:
@@ -1244,7 +1487,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \bool_set_true:N \l__acro_first_upper_bool
       \acro_long:n { #2 }
@@ -1256,7 +1499,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \acro_first:n { #2 }
     \group_end:
   }
@@ -1265,7 +1508,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_first_upper_bool
       \acro_first:n { #2 }
     \group_end:
@@ -1275,7 +1518,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \acro_first:n { #2 }
     \group_end:
@@ -1285,7 +1528,7 @@
   {
     \group_begin:
       \acro_defined:n { #2 }
-      \acro_use_if:n { #1 }
+      \acro_use_if:nn { #1 } { #2 }
       \bool_set_true:N \l__acro_use_plural_bool
       \bool_set_true:N \l__acro_first_upper_bool
       \acro_first:n { #2 }
@@ -1321,9 +1564,7 @@
 \NewDocumentCommand \acuse { > { \SplitList { , } } m }
   { \ProcessList { #1 } { \acro_mark_as_used:n } }
 
-% typeset the list:
-\NewDocumentCommand \printacronyms { G{}o }
-  { \acro_print_acronyms:nn { #1 } { #2 } }
+
 
 \ProcessKeysOptions { acro }
 
@@ -1352,20 +1593,6 @@
       { \prop_get:Nn \l__acro_pdfstring_plural_prop { #1 } }
   }
 
-\cs_new:Npn \acro_pdfstring:nnn #1#2#3
-  {
-    \prop_put:Nnx \l__acro_pdfstring_prop { #1 } { #2 }
-    \IfNoValueTF { #3 }
-      {
-        \prop_put:Nnx \l__acro_pdfstring_plural_prop
-          { #1 } { #2 \l__acro_default_plural_tl }
-      }
-      {
-        \prop_put:Nnx \l__acro_pdfstring_plural_prop
-          { #1 } { #2 #3 }
-      }
-  }
-
 \AtBeginDocument
   {
     \@ifpackageloaded { hyperref }
@@ -1390,12 +1617,15 @@
             \cs_set_eq:NN \Acfp \acpdfstringplural
             \cs_set_eq:NN \acap \acpdfstringplural
           }
+        \cs_set_eq:NN \acro_hyper_page:n \hyperpage
       } {}
   }
 
 % --------------------------------------------------------------------------
 % language support
 \RequirePackage { translations }
+% Listenname
+\DeclareTranslationFallback      { acronym-list-name } { Acronyms }
 \DeclareTranslation { English  } { acronym-list-name } { Acronyms }
 \DeclareTranslation { American } { acronym-list-name } { Acronyms }
 \DeclareTranslation { British  } { acronym-list-name } { Acronyms }
@@ -1406,6 +1636,31 @@
 \DeclareTranslation { Catalan  } { acronym-list-name } { Sigles }
 \DeclareTranslation { Turkish  } { acronym-list-name } { K\i saltmalar }
 \tl_set:Nn \l__acro_list_name_tl { \GetTranslation { acronym-list-name } }
+% Seitenname
+\DeclareTranslationFallback     { acronym-page-name } { p. }
+\DeclareTranslation { English } { acronym-page-name } { p. }
+\DeclareTranslation { German  } { acronym-page-name } { S. }
+\tl_set:Nn \l__acro_page_name_tl { \GetTranslation { acronym-page-name }\@\, }
+% Seitenname - Plural
+\DeclareTranslationFallback     { acronym-pages-name } { pp. }
+\DeclareTranslation { English } { acronym-pages-name } { pp. }
+\DeclareTranslation { German  } { acronym-pages-name } { S. }
+\tl_set:Nn \l__acro_pages_name_tl { \GetTranslation { acronym-pages-name }\@\, }
+% einzelne folgende Seite
+\DeclareTranslationFallback     { acronym-next-page } { f. }
+\DeclareTranslation { English } { acronym-next-page } { f. }
+\DeclareTranslation { German  } { acronym-next-page } { f. }
+\tl_set:Nn \l__acro_next_page_tl { \,\GetTranslation {acronym-next-page }\@ }
+% mehrere folgende Seiten
+\DeclareTranslationFallback     { acronym-next-pages } { ff. }
+\DeclareTranslation { English } { acronym-next-pages } { ff. }
+\DeclareTranslation { German  } { acronym-next-pages } { ff. }
+\tl_set:Nn \l__acro_next_pages_tl { \,\GetTranslation {acronym-next-pages }\@ }
+
+% --------------------------------------------------------------------------
+% load default version
+\bool_if:NF \l__acro_version_selected_bool
+  { \__acro_select_version:n { 1 } }
 
 \tex_endinput:D
 % --------------------------------------------------------------------------
@@ -1443,30 +1698,24 @@
                    short entry) resolved
                  - option `xspace' added
 2013/01/02 v0.6a - \acuseall
-                 
+2013/01/16 v1.0  - new syntax of \DeclareAcronym
+                 - new option `version'
+                 - new `accsupp' acronym property
+                 - new `sort' acronym property
+                 - new syntax of \printacronyms
+                 - new default: `sort=true' 
+                 - new options `page-ranges', `next-page', `next-pages',
+                   `pages-name', `record-pages'
+                 - no automatic label placement for page number referencing
+                   any more
+
 % --------------------------------------------------------------------------
 % TODO:
 - Option `totoc'!?
-- accsupp Support?
 - revise list styles to allow _full_ customization by creating own instances!
   this probably needs a handfull of macros that give access to the entries
   without worrying about internals
 - record and list _all_ pagenumbers where an acronym occurs
 - compilation halts instead of throwing an error if an undefined acronym is used
-- possibility to add sort key
 - add \ACF, \ACFP, \ACL and \ACLP that will print all words of the long form
-  capitalized 
-
-= long term =
-- new syntax:
-  \DeclareAcronym{<ID>}
-    {
-      short        = ?? ,
-      long         = ?? ,
-      sort         = ?? ,
-      short-plural = ?? ,
-      long-plural* = ?? ,% * = replacement instead of ending
-      PDF-text     = ?? ,
-      cite         = ?? ,
-      ...
-    }
\ No newline at end of file
+  capitalized
\ No newline at end of file
-- 
cgit v1.2.3

