texlive[67173] Master/texmf-dist: starray (20may23)

commits+karl at tug.org commits+karl at tug.org
Sat May 20 22:19:05 CEST 2023


Revision: 67173
          http://tug.org/svn/texlive?view=revision&revision=67173
Author:   karl
Date:     2023-05-20 22:19:04 +0200 (Sat, 20 May 2023)
Log Message:
-----------
starray (20may23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/starray/README.md
    trunk/Master/texmf-dist/doc/latex/starray/starray.pdf
    trunk/Master/texmf-dist/doc/latex/starray/starray.tex
    trunk/Master/texmf-dist/tex/latex/starray/starray.sty

Modified: trunk/Master/texmf-dist/doc/latex/starray/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/starray/README.md	2023-05-20 20:18:53 UTC (rev 67172)
+++ trunk/Master/texmf-dist/doc/latex/starray/README.md	2023-05-20 20:19:04 UTC (rev 67173)
@@ -73,6 +73,11 @@
 
 ## Changelog
 
+* Version 1.2 (this)
+    - Issues #3
+    - added expandable versions of some commands (see manual)
+    - documentation
+
 * Version 1.1
     - Issues #1/#2
     - most/all commands are protected now

Modified: trunk/Master/texmf-dist/doc/latex/starray/starray.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/starray/starray.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/starray/starray.tex	2023-05-20 20:18:53 UTC (rev 67172)
+++ trunk/Master/texmf-dist/doc/latex/starray/starray.tex	2023-05-20 20:19:04 UTC (rev 67173)
@@ -15,7 +15,7 @@
 %%
 %% The Current Maintainer of this work is Alceu Frigeri
 %%
-%% This is version 1.1 (2023/05/16)
+%% This is version 1.2 (2023/05/20)
 %%
 %% The list of files that compose this work can be found in the README.md file at
 %% https://ctan.org/pkg/starray
@@ -29,7 +29,7 @@
 \RequirePackage[inline]{enumitem}
 \SetEnumitemKey{miditemsep}{parsep=0ex,itemsep=0.4ex}
 
-
+\RequirePackage[hidelinks,hypertexnames=false]{hyperref}
 \begin{document}
 \tstitle{
   author={Alceu Frigeri\footnote{\tsverb{https://github.com/alceu-frigeri/starray}}},
@@ -62,9 +62,8 @@
 \end{tsremark}
 
 \begin{tsremark}[\color{red}Important:]
- \textsl{Expandability}, unfortunately most/all defined functions are not ''fully expandable'', in particular, the conditional/branching functions aren't. This means, among other things, one can't have a 'predicated variant' of any conditional defined in this (for instance, to be used in a boolean expression).
+ \textsl{Expandability}, unfortunately most/all defined functions are not ''fully expandable'', in particular, most conditional/branching functions aren't, with just a few exceptions (marked with a star \ding{72}, as per \tsobj[pkg]{expl3} documentation convention).
  
- For what it's worth, all user visible functions are 'protected'.
 \end{tsremark}
 
 
@@ -100,12 +99,27 @@
 \tsmacro{\starray_new:n}{starray}
 \tsmacro{\starray_new:nTF}{starray,if-true,if-false}
 \end{codesyntax}
+Creates a new \tsobj[marg]{starray} or raises a warning  if the name is already taken. The declaration (and associated property lists) is global. The given name is referred (in this text) as the \tsobj[marg]{starray-root} or just \tsobj[marg]{root}. 
 \end{codedescribe}
-Creates a new \tsobj[marg]{starray} or raises a warning  if the name is already taken. The declaration (and associated property lists) is global. The given name is referred (in this text) as the \tsobj[marg]{starray-root} or just \tsobj[marg]{root}. 
 \begin{tsremark}
   A warning is raised (see \ref{pack:options}) if the name is already taken. The branching version doesn't raise any warning.
 \end{tsremark}
 
+\subsection{Conditionals}\label{conditionals:exist}
+\begin{codedescribe}[code,EXP,new=2023/05/20]{\starray_if_exist_p:n,\starray_if_exist:nTF,\starray_if_valid_p:n,\starray_if_valid:nTF}
+\begin{codesyntax}%
+\tsmacro{\starray_if_exist_p:n}{starray}
+\tsmacro{\starray_if_exist:nTF}{starray,if-true,if-false}
+\tsmacro{\starray_if_valid_p:n}{starray}
+\tsmacro{\starray_if_valid:nTF}{starray,if-true,if-false}
+\end{codesyntax}
+\tsobj{\starray_if_exist:nTF} only tests if \tsobj[marg]{starray} (the base property) is defined. It doesn't verifies if it really is a  \tsobj[pkg]{starray}.
+\tsobj{\starray_if_valid:nTF} further tests if an internal boolean (\tsobj[key]{is\_starray}) is also defined. This doesn't necessary mean it is a \tsobj[pkg]{starray} or if it's a really valid one (chances are that it is, but...), see \tsobj{\starray_term_syntax:nTF}, section \ref{conditionals:terms}, for a more reliable validity test.
+\end{codedescribe}
+\begin{tsremark}
+The predicate versions, \tsobj{_p}, expand to either \tsobj{\prg_return_true:} or \tsobj{\prg_return_false:}.
+\end{tsremark}
+
 \section{Defining and initialising a starray structure}\label{pack:def}
 
 \begin{codedescribe}{\starray_def_prop:nnn,\starray_def_prop:nnnTF}
@@ -448,6 +462,17 @@
 A warning is raised (see \ref{pack:options}) in case of a \tsobj[marg]{starray-ref} syntax error. The branching version doesn't raise any warning.
 \end{tsremark}
 
+\begin{codedescribe}[code,EXP,new=2023/05/20]{\starray_parsed_get_iter:}
+\begin{codesyntax}%
+\tsobj{\starray_parsed_get_iter:}{}
+\end{codesyntax}
+\tsobj{\starray_parsed_get_iter:} will place in the current iterator's value,  using \tsobj{\int_use:N}, of the last parsed term in the input stream.
+\end{codedescribe}
+\begin{tsremark}[\color{red}Warning:]
+This can be used after any command which 'parses a term', for instance \tsobj{\starray_term_syntax:n}, see section \ref{conditionals:terms}, but it only makes sense (and returns a reliable/meaningful result) IF the last parser operation was successfully executed.
+\end{tsremark}
+
+
 \begin{codedescribe}{\starray_get_cnt:n,\starray_get_cnt:nN,\starray_get_cnt:nNTF}
 \begin{codesyntax}%
 \tsmacro{\starray_get_cnt:n}{starray-ref}
@@ -460,6 +485,17 @@
 A warning is raised (see \ref{pack:options}) in case of a \tsobj[marg]{starray-ref} syntax error. The branching version doesn't raise any warning.
 \end{tsremark}
 
+\begin{codedescribe}[code,EXP,new=2023/05/20]{\starray_parsed_get_cnt:}
+\begin{codesyntax}%
+\tsobj{\starray_parsed_get_cnt:}{}
+\end{codesyntax}
+\tsobj{\starray_parsed_get_cnt:} will place the current number of terms, using \tsobj{\int_use:N}, of the last parsed term, in the input stream.
+\end{codedescribe}
+\begin{tsremark}[\color{red}Warning:]
+This can be used after any command which 'parses a term', for instance \tsobj{\starray_term_syntax:n}, see section \ref{conditionals:terms}, but it only makes sense (and returns a reliable/meaningful result) IF the last parser operation was successfully executed.
+\end{tsremark}
+
+
 \section{Changing and recovering starray properties}\label{pack:get/set}
 
 \begin{codedescribe}{\starray_set_prop:nnn,\starray_set_prop:nnV,\starray_set_prop:nnnTF,\starray_set_prop:nnVTF,\starray_gset_prop:nnn,\starray_gset_prop:nnV,\starray_gset_prop:nnnTF,\starray_gset_prop:nnVTF}
@@ -537,18 +573,69 @@
 
 \tscode*[codeprefix=~]{keyval.demo9}
 
+\begin{codedescribe}{\starray_get_prop:nn,\starray_get_prop:nnN,\starray_get_prop:nnNTF}
+\begin{codesyntax}%
+\tsmacro{\starray_get_prop:nn}{starray-ref,key}
+\tsmacro{\starray_get_prop:nnN}{starray-ref,key,tl-var}
+\tsmacro{\starray_get_prop:nnNTF}{starray-ref,key,tl-var,if-true,if-false}
+\end{codesyntax}
+\tsmacro{\starray_get_prop:nn}{starray-ref,key} places the value of \tsobj[marg]{key} in the input stream.
+\tsmacro{\starray_get_prop:nnN}{starray-ref,key,tl-var} recovers the value of \tsobj[marg]{key} and places it in \tsobj[marg]{tl-var} (a token list variable), this is specially useful in conjunction with \tsobj{\starray_set_prop:nnV}, whilst the \tsobj{\starray_get_prop:nnNTF} version branches accordly.
+\end{codedescribe}
+\begin{tsremark}
+In case of a syntax error, or \tsobj[marg]{key} doesn't exist, an empty value is left in the stream (or \tsobj[marg]{tl-var}).
+\end{tsremark}
+\begin{tsremark}
+A warning is raised (see \ref{pack:options}) in case of a \tsobj[marg]{starray-ref} syntax error. The branching version doesn't raise any warning.
+\end{tsremark}
 
-\section{Additional Conditionals}\label{pack:extra}
 
+\begin{codedescribe}[code,EXP,new=2023/05/20]{\starray_parsed_get_prop:n}
+\begin{codesyntax}%
+\tsmacro{\starray_parsed_get_prop:nn}{key}
+\end{codesyntax}
+\tsmacro{\starray_parsed_get_prop:n}{key} places the value of \tsobj[marg]{key}, if it exists, from the last parsed term, in the input stream. 
+\end{codedescribe}
+\begin{tsremark}[\color{red}Warning:]
+This can be used after any command which 'parses a term', for instance \tsobj{\starray_term_syntax:n}, see section \ref{conditionals:terms}, but it only makes sense (and returns a reliable/meaningful result) IF the last parser operation was successfully executed.
+\end{tsremark}
+
+
+\section{Additional Commands and Conditionals}\label{conditionals:terms}
+
 \begin{codedescribe}{\starray_if_in:nnTF,\starray_term_syntax:nTF}
 \begin{codesyntax}%
 \tsmacro{\starray_if_in:nnTF}{starray-ref,key,if-true,if-false}
 \tsmacro{\starray_term_syntax:nTF}{starray-ref,if-true,if-false}
 \end{codesyntax}
+The \tsmacro{\starray_if_in:nnTF}{starray-ref,key,\ldots,\ldots} tests if a given \tsobj[marg]{key} is present, whilst  \tsmacro{\starray_term_syntax:nTF}{starray-ref,if-true,if-false} just verifies if the \tsobj[marg]{starray-ref} syntax is valid or not, branching accordly.
 \end{codedescribe}
-The \tsmacro{\starray_if_in:nnTF}{starray-ref,key,\ldots,\ldots} tests if a given \tsobj[marg]{key} is present, whilst  \tsmacro{\starray_term_syntax:nTF}{starray-ref,\ldots,\ldots} just verifies if the \tsobj[marg]{starray-ref} syntax is valid or not, branching accordly.
 
+\begin{codedescribe}{\starray_term_syntax:n}
+\begin{codesyntax}%
+\tsmacro{\starray_term_syntax:n}{starray-ref}
+\end{codesyntax}
+This will just parse  a \tsobj[marg]{starray-ref} reference, and set interval variables so that commands like \tsobj{\starray_parsed_} can be used.
+\end{codedescribe}
+\begin{tsremark}[\color{red}Warning:]
+The main idea is to allow some expandable commands, but be aware that all \tsobj{\starray_} commands that use a \tsobj[marg]{starray-ref} use the very same parser variables.
+\end{tsremark}
 
+
+\begin{codedescribe}[code,EXP,new=2023/05/20]{\starray_parsed_if_in_p:n,\starray_parsed_if_in:nTF}
+\begin{codesyntax}%
+\tsmacro{\starray_parsed_if_in_p:nTF}{key}
+\tsmacro{\starray_parsed_if_in:nTF}{key,if-true,if-false}
+\end{codesyntax}
+This will test if the given \tsobj[key]{key} is present in the "last parsed term". 
+\end{codedescribe}
+\begin{tsremark}
+The predicate version, \tsobj{_p}, expands to either \tsobj{\prg_return_true:} or \tsobj{\prg_return_false:}.
+\end{tsremark}
+\begin{tsremark}[\color{red}Warning:]
+This can be used after any command which 'parses a term', for instance \tsobj{\starray_term_syntax:n}, but it only makes sense (and returns a reliable/meaningful result) IF the last parser operation was successfully executed.
+\end{tsremark}
+
 \section{Showing (debugging) starrays }\label{pack:show}
 
 \begin{codedescribe}{\starray_show_def:n,\starray_show_def_in_text:n}

Modified: trunk/Master/texmf-dist/tex/latex/starray/starray.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/starray/starray.sty	2023-05-20 20:18:53 UTC (rev 67172)
+++ trunk/Master/texmf-dist/tex/latex/starray/starray.sty	2023-05-20 20:19:04 UTC (rev 67173)
@@ -12,7 +12,7 @@
 %%
 %% The Current Maintainer of this work is Alceu Frigeri
 %%
-%% This is version 1.1 (2023/05/16)
+%% This is version 1.2 (2023/05/20)
 %%
 %% The list of files that compose this work can be found in the README.md file at
 %% https://ctan.org/pkg/starray
@@ -24,8 +24,8 @@
 
 \ProvidesExplPackage
     {starray}
-    {2023/05/16}
-    {1.0}
+    {2023/05/20}
+    {1.2}
     {A structured array/hash of properties}
 
 %%%%%%%
@@ -38,8 +38,8 @@
   {
      name        .code:n = starray ,
      prefix      .code:n = starray ,
-     date        .code:n = 2023/05/16 ,
-     version     .code:n = 1.1 ,
+     date        .code:n = 2023/05/20 ,
+     version     .code:n = 1.2 ,
      description .code:n = A~structured~array/hash~of~properties
   }
 \cs_if_exist:NF \__codedesc_pkg_info:nn 
@@ -129,7 +129,7 @@
 \cs_generate_variant:Nn \tl_put_right:Nn {Ne}
 \cs_generate_variant:Nn \tl_gput_right:Nn {Ne}
 \cs_generate_variant:Nn \tl_set:Nn {Ne , ce}
-\cs_generate_variant:Nn \tl_gset:Nn {Ne , ce}
+\cs_generate_variant:Nn \tl_gset:Nn {Ne , ce} 
 
 \cs_generate_variant:Nn \seq_put_right:Nn {ce}
 \cs_generate_variant:Nn \seq_gput_right:Nn {ce}
@@ -139,9 +139,9 @@
 \cs_generate_variant:Nn \prop_put:Nnn {Nee , cee}
 \cs_generate_variant:Nn \prop_gput:Nnn {Nee , cee}
 
-\cs_generate_variant:Nn \prop_get:NnN {Nnc , cnc , Nec , cec}
+\cs_generate_variant:Nn \prop_get:NnN { cnc , cec }
 
-\prg_generate_conditional_variant:Nnn \prop_get:NnN {Nnc , cnc , Nec , cec} { F , T , TF}
+\prg_generate_conditional_variant:Nnn \prop_get:NnN { Nec } { F , T , TF}
 
 \prg_generate_conditional_variant:Nnn \seq_if_in:Nn {ce} {TF}
 \prg_generate_conditional_variant:Nnn \prop_if_in:Nn {ce} {TF}
@@ -326,9 +326,11 @@
 
 %%%%
 %%%% recursive/reentrant aware tmp variables.
+%%%% this is clumsy and utterly ugly... 
+%%%% a set of variables for each recursing level...
 %%%%
 
-\int_set:Nn \l_tmpa_int {7}
+\int_set:Nn \l_tmpa_int {9}
 \tl_clear:N \l_tmpa_tl
 \int_do_while:nNnn {\l_tmpa_int} > {0}
   {
@@ -371,6 +373,7 @@
 \tl_new:N \l__starray_parsed_ref_tl
 \tl_new:N \l__starray_parsed_base_ref_tl
 \tl_new:N \l__starray_parsed_root_ref_tl
+\tl_new:N \l__starray_parsed_ref_no_idx_ending_tl
   
 \tl_new:N \l__starray_parsing_term_tl 
 
@@ -404,8 +407,9 @@
 %%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%
 
-% probably EXP
-\prg_new_protected_conditional:Npnn \__starray_if_free:n #1 {T, F, TF}
+%
+%
+\prg_new_conditional:Npnn \__starray_if_free:n #1 {p, T, F, TF}
   {
     \prop_if_exist:cTF {#1}
       { \prg_return_false: }
@@ -412,18 +416,34 @@
       { \prg_return_true: }
   }
 
-\prg_generate_conditional_variant:Nnn \__starray_if_free:n {e} {T, F, TF}
+\prg_generate_conditional_variant:Nnn \__starray_if_free:n {e} {p, T, F, TF}
 
-% possible rEXP
-\prg_new_protected_conditional:Npnn \__starray_if_valid:n #1 {T, F, TF}
+
+\prg_new_conditional:Npnn \starray_if_exist:n #1 {p, T, F, TF}
   {
+    \__starray_if_free:nTF {\l__starray_prefix_tl #1 _def_prop}
+      { \prg_return_false: }
+      { \prg_return_true: }
+  }
+
+
+\prg_new_conditional:Npnn \__starray_if_valid:n #1 {p, T, F, TF}
+  {
     \bool_lazy_and:nnTF {\prop_if_exist_p:c {#1}} {\prop_item:cn {#1} {is_starray}}
       { \prg_return_true: }
       { \prg_return_false: }
   }
 
-\prg_generate_conditional_variant:Nnn \__starray_if_valid:n {e} {T, F, TF}
+\prg_generate_conditional_variant:Nnn \__starray_if_valid:n {e} {p, T, F, TF}
 
+\prg_new_conditional:Npnn \starray_if_valid:n #1 {p, T, F, TF}
+  {
+    \__starray_if_valid:nTF {\l__starray_prefix_tl #1 _def_prop}
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+
+
 %%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%
 %%%%
@@ -756,7 +776,7 @@
 %%%%%%%%%%%%%%%
 
 
-\prg_new_protected_conditional:Npnn \__starray_def_from_keyval_testdot_aux:w  #1 . \q_nil { TF}
+\prg_new_conditional:Npnn \__starray_def_from_keyval_testdot_aux:w  #1 . \q_nil { TF}
   {
     \str_compare:nNnTF {#1} = {struct}
       { \prg_return_true: }
@@ -763,8 +783,10 @@
       { \prg_return_false: }
   }
 
-
-\prg_new_protected_conditional:Npnn \__starray_def_from_keyval_testdot:w  #1 . #2 \q_stop { TF}
+%
+% This should be protected (\tl_set:Ne isn't expandable) but only the TF form matters.
+%
+\prg_new_conditional:Npnn \__starray_def_from_keyval_testdot:w  #1 . #2 \q_stop { TF}
   {
     \quark_if_nil:nTF {#2}
       {
@@ -777,7 +799,6 @@
             \prg_return_true:
           } % dot struct, OK
           {
-%            \bool_gset_false:N \l__starray_rtn_bool
             \prg_return_false:
           } %% possible syntax ERR (dot, but no struct!)
       }
@@ -1180,7 +1201,7 @@
 %%%%%%%%%%%%%%%
 
 
-\cs_new_protected:Npn \__starray_get_prop:nn #1#2
+\cs_new:Npn \__starray_get_prop:nn #1#2
   {
     \prop_item:cn {\l__starray_prefix_tl #1 _term_prop}{#2}
   }
@@ -1205,6 +1226,17 @@
       \msg_warning:nnnn {starray} {syntax /  prop} {get:1} {#1}
     } % returns nothing by default
   }
+  
+  
+%%%%%%%%%%%%%%%%
+%%%
+%%% WARNING: This is uses the 'last parsed term'.
+%%%
+%%%%%%%%%%%%%%%%  
+\cs_new:Npn \starray_parsed_get_prop:n #1
+  {
+    \__starray_get_prop:ee {\l__starray_parsed_ref_tl}{#1}
+  }  
 
 \cs_new_protected:Npn \starray_get_prop:nnN #1#2#3
   {
@@ -1228,7 +1260,9 @@
     \__starray_parser:nnTF {\c__starray_idx_ending_bool}{#1}
       {
         \prop_get:cnNTF 
-          {\l__starray_prefix_tl \l__starray_parsed_ref_tl _term_prop} {#2} #3
+          {\l__starray_prefix_tl \l__starray_parsed_ref_tl _term_prop} 
+          {#2} 
+          #3
           {
             \prg_return_true:
           }
@@ -1245,18 +1279,16 @@
   }
 
 
+
 \prg_new_protected_conditional:Npnn \starray_if_in:nn #1#2 {T, F, TF}
   {
-    \__starray_parser:nnTF {\c__starray_idx_ending_bool}{#1}
+    \__starray_parser:nnTF {\c__starray_idx_ending_bool} {#1}
       {
         \prop_if_in:cnTF 
-          {\l__starray_prefix_tl \l__starray_parsed_ref_tl _term_prop} {#2}
-          {
-            \prg_return_true:
-          }
-          {
-            \prg_return_false:
-          }
+          { \l__starray_prefix_tl \l__starray_parsed_ref_tl _term_prop } 
+          {#2}
+          { \prg_return_true: }
+          { \prg_return_false: }
       }
       {
         \seq_clear:N \l__starray_msg_seq
@@ -1264,7 +1296,21 @@
       } % returns nothing by default
   }
 
+%%%%%%%%%%%%%%%%
+%%%
+%%% WARNING: This is uses the 'last parsed term'.
+%%%
+%%%%%%%%%%%%%%%%
+\prg_new_conditional:Npnn \starray_parsed_if_in:n #1 {p, T, F, TF}
+  {
+    \prop_if_in:cnTF 
+      { \l__starray_prefix_tl \l__starray_parsed_ref_tl _term_prop } 
+      {#1}
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
 
+
 \cs_new_protected:Npn \starray_get_cnt:n #1
   {
     \__starray_parser:nnTF {\c__starray_no_idx_ending_bool}{#1}
@@ -1278,6 +1324,19 @@
       } % returns nothing by default
   }
 
+
+%%%%%%%%%%%%%%%%
+%%%
+%%% WARNING: This uses the 'last parsed term'.
+%%%         It will leave cnt directly in the input stream
+%%%%%%%%%%%%%%%%
+\cs_new:Npn \starray_parsed_get_cnt:
+  {
+    \int_use:N
+      \prop_item:cn { \l__starray_prefix_tl \l__starray_parsed_ref_no_idx_ending_tl _base_prop } {cnt}
+  }
+   
+
 \cs_new_protected:Npn \starray_get_cnt:nN #1#2
   {
     \__starray_parser:nnTF {\c__starray_no_idx_ending_bool}{#1}
@@ -1323,6 +1382,18 @@
   }
 
 
+%%%%%%%%%%%%%%%%
+%%%
+%%% WARNING: This uses the 'last parsed term'.
+%%%         It will leave current iter directly in the input stream
+%%%%%%%%%%%%%%%%
+\cs_new:Npn \starray_parsed_get_iter:
+  {
+    \int_use:N 
+      \prop_item:cn { \l__starray_prefix_tl \l__starray_parsed_ref_no_idx_ending_tl _base_prop } {iter}
+  }
+
+
 \cs_new_protected:Npn \starray_get_iter:nN #1#2
   {
     \__starray_parser:nnTF {\c__starray_no_idx_ending_bool}{#1}
@@ -1445,8 +1516,11 @@
 %%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%
 
-
-\prg_new_protected_conditional:Npnn \__starray_set_parse_end:w  #1#2 ] #3 \q_stop { TF}
+%
+% Not expandable. DO NOT generate a predicate version! 
+% but, already a :w conditional anyway (internal)
+%
+\prg_new_conditional:Npnn \__starray_set_parse_end:w  #1#2 ] #3 \q_stop { TF}
   {
     \quark_if_nil:nTF {#3}
       { \prg_return_false: } %% syntax ERR
@@ -1457,7 +1531,11 @@
   }
 
 
-\prg_new_protected_conditional:Npnn \__starray_set_parse_aux:w  #1#2 [ \q_nil \q_stop { TF}
+%
+% Not expandable. DO NOT generate a predicate version! 
+% but, already a :w conditional anyway (internal)
+%
+\prg_new_conditional:Npnn \__starray_set_parse_aux:w  #1#2 [ \q_nil \q_stop { TF}
   {
     \__starray_set_parse_end:wTF  {#1}#2 ] \q_nil\q_stop
       {\prg_return_true:}
@@ -1465,7 +1543,11 @@
   }
 
 
-\prg_new_protected_conditional:Npnn \__starray_set_parse_begin:w #1#2 [ #3 \q_stop { TF}
+%
+% Not expandable. DO NOT generate a predicate version! 
+% but, already a :w conditional anyway (internal)
+%
+\prg_new_conditional:Npnn \__starray_set_parse_begin:w #1#2 [ #3 \q_stop { TF}
   {
     \quark_if_nil:nTF {#3}
       {               % no 'term' ref, just array_name (current/iter term)
@@ -1703,7 +1785,11 @@
 %%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%
 
-\prg_new_protected_conditional:Npnn \__starray_term_parse_end:w  #1 ] #2 \q_stop { TF}
+%%%
+%%% \tl_set: isn't expandable... but (internal) and only the TF variant is needed.
+%%% :w macro anyway...
+%%%
+\prg_new_conditional:Npnn \__starray_term_parse_end:w  #1 ] #2 \q_stop { TF}
   {
     \quark_if_nil:nTF {#2}
       { \prg_return_false: } %% syntax ERR
@@ -1714,7 +1800,11 @@
   }
 
 
-\prg_new_protected_conditional:Npnn \__starray_term_parse_aux:w  #1 [ \q_nil \q_stop { TF}
+%%%
+%%% \tl_set: isn't expandable (see above)... but (internal) and only the TF variant is needed.
+%%% :w macro anyway...
+%%%
+\prg_new_conditional:Npnn \__starray_term_parse_aux:w  #1 [ \q_nil \q_stop { TF}
   {
     \__starray_term_parse_end:wTF  #1 ] \q_nil\q_stop
       {\prg_return_true:}
@@ -1722,7 +1812,11 @@
   }
 
 
-\prg_new_protected_conditional:Npnn \__starray_term_parse_begin:w #1 [ #2 \q_stop { TF}
+%%%
+%%% \tl_set: isn't expandable (see above)... but (internal) and only the TF variant is needed.
+%%% :w macro anyway...
+%%%
+\prg_new_conditional:Npnn \__starray_term_parse_begin:w #1 [ #2 \q_stop { TF}
   {
     \tl_set:Nn \l__starray_parsed_term_tl {#1}
 
@@ -1787,6 +1881,9 @@
           {
             \quark_if_nil:nTF {#2}
             {       % this is the last one
+              \tl_set:Ne 
+                \l__starray_parsed_ref_no_idx_ending_tl 
+                {\l__starray_parsed_ref_tl}
               \bool_if:NTF \l__starray_parser_no_idx_ending_bool
               {                                  % assuming it is to add a term...
                 \tl_if_empty:NTF \l__starray_parsed_idx_tl
@@ -1910,6 +2007,13 @@
         \prg_return_false:
       }
   }
+  
+\cs_new:Npn \starray_term_syntax:n #1
+  {
+    \__starray_parser:nnTF {\c__starray_idx_ending_bool}{#1}
+      {}
+      {}  
+  }  
 
 %%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%



More information about the tex-live-commits mailing list.