[latex3-commits] [git/LaTeX3-latex3-latex3] master: faster keys_property_find (d658f4124)

Joseph Wright joseph.wright at morningstar2.co.uk
Wed Aug 5 08:40:39 CEST 2020


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/d658f4124b61d39537e5835b514c1aed91ffb98d

>---------------------------------------------------------------

commit d658f4124b61d39537e5835b514c1aed91ffb98d
Author: Jonathan Spratte <jspratte at yahoo.de>
Date:   Tue Aug 4 16:10:09 2020 +0200

    faster keys_property_find


>---------------------------------------------------------------

d658f4124b61d39537e5835b514c1aed91ffb98d
 l3kernel/l3keys.dtx | 76 ++++++++++++++++++++++++++++-------------------------
 1 file changed, 40 insertions(+), 36 deletions(-)

diff --git a/l3kernel/l3keys.dtx b/l3kernel/l3keys.dtx
index 660fee6aa..194f4b763 100644
--- a/l3kernel/l3keys.dtx
+++ b/l3kernel/l3keys.dtx
@@ -1575,52 +1575,56 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_property_find:n}
-% \begin{macro}{\@@_property_find:w}
+% \begin{macro}
+%   {
+%     \@@_property_find_auxi:w   ,
+%     \@@_property_find_auxii:w  ,
+%     \@@_property_find_auxiii:w ,
+%     \@@_property_find_auxiv:w
+%   }
 %   Searching for a property means finding the last |.| in the input,
 %   and storing the text before and after it. Everything is turned into
 %   strings, so there is no problem using an \texttt{x}-type expansion.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_property_find:n #1
   {
-    \str_set:Nx \l_@@_property_str { \@@_trim_spaces:n {#1} }
-    \exp_after:wN \@@_property_find:w \l_@@_property_str . .
-      \s_@@_stop {#1}
+    \cs_set_nopar:Npx \l__keys_property_str { \__keys_trim_spaces:n { #1 } }
+    \exp_after:wN \@@_property_find_auxi:w \l__keys_property_str
+      \s_@@_nil \@@_property_find_auxii:w
+      . \s_@@_nil \@@_property_find_err:w
   }
-\cs_new_protected:Npn \@@_property_find:w #1 . #2 . #3 \s_@@_stop #4
+\cs_new_protected:Npn \@@_property_find_auxi:w #1 . #2 \s_@@_nil #3
   {
-    \tl_if_blank:nTF {#3}
-      {
-        \str_clear:N \l_@@_property_str
-        \__kernel_msg_error:nnn { kernel } { key-no-property } {#4}
-      }
-      {
-        \str_if_eq:nnTF {#3} { . }
-          {
-            \str_set:Nx \l_keys_path_str
-              {
-                \str_if_empty:NF \l_@@_module_str
-                  { \l_@@_module_str  / }
-                \tl_trim_spaces:n {#1}
-              }
-            \str_set:Nn \l_@@_property_str { . #2 }
-          }
-          {
-            \str_set:Nx \l_keys_path_str { \l_@@_module_str / #1 . #2 }
-            \@@_property_search:w #3 \s_@@_stop
-          }
-        \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
-      }
+    #3 #1 \s_@@_mark #2 \s_@@_nil #3
   }
-\cs_new_protected:Npn \@@_property_search:w #1 . #2 \s_@@_stop
+\cs_new_protected:Npn \@@_property_find_auxii:w
+    #1 \s_@@_mark #2 \s_@@_nil \@@_property_find_auxii:w . \s_@@_nil
+    \@@_property_find_err:w
   {
-    \str_if_eq:nnTF {#2} { . }
-      {
-        \str_set:Nn \l_@@_property_str { . #1 }
-      }
-      {
-        \str_set:Nx \l_keys_path_str { \l_keys_path_str . #1 }
-        \@@_property_search:w #2 \s_@@_stop
-      }
+    \cs_set_nopar:Npx \l_keys_path_str
+      { \str_if_empty:NF \l__keys_module_str { \l__keys_module_str / } #1 }
+    \@@_property_find_auxi:w #2 \s_@@_nil \@@_property_find_auxiii:w . \s_@@_nil
+      \@@_property_find_auxiv:w
+  }
+\cs_new_protected:Npn \@@_property_find_auxiii:w #1 \s_@@_mark
+  {
+    \cs_set_nopar:Npx \l_keys_path_str { \l_keys_path_str . #1 }
+    \@@_property_find_auxi:w
+  }
+\cs_new_protected:Npn \@@_property_find_auxiv:w
+    #1 \s_@@_nil \@@_property_find_auxiii:w
+    \s_@@_mark \s_@@_nil \@@_property_find_auxiv:w
+  {
+    \cs_set_nopar:Npx \l__keys_property_str { . #1 }
+    \cs_set_nopar:Npx \l_keys_path_str
+      { \exp_after:wN \__keys_trim_spaces:n \exp_after:wN { \l_keys_path_str } }
+    \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str
+  }
+\cs_new_protected:Npn \@@_property_find_err:w
+    #1 \s_@@_nil #2 \@@_property_find_err:w
+  {
+    \str_clear:N \l__keys_property_str
+    \__kernel_msg_error:nnn { kernel } { key-no-property } {#1}
   }
 %    \end{macrocode}
 % \end{macro}





More information about the latex3-commits mailing list.