[latex3-commits] [git/LaTeX3-latex3-latex3] master: Require a value for numeric-type keys (closes #661) (daec4649e)

Joseph Wright joseph.wright at morningstar2.co.uk
Fri Jan 17 09:28:55 CET 2020


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

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

commit daec4649e2af838b2e0c3c20035b378907320f11
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Fri Jan 17 08:28:55 2020 +0000

    Require a value for numeric-type keys (closes #661)


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

daec4649e2af838b2e0c3c20035b378907320f11
 l3kernel/CHANGELOG.md            |  3 ++
 l3kernel/l3keys.dtx              | 77 ++++++++++++++++++++++++----------------
 l3kernel/testfiles/m3keys001.tlg |  7 +---
 3 files changed, 51 insertions(+), 36 deletions(-)

diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md
index c45117f67..151ab19ad 100644
--- a/l3kernel/CHANGELOG.md
+++ b/l3kernel/CHANGELOG.md
@@ -7,6 +7,9 @@ this project uses date-based 'snapshot' version identifiers.
 
 ## [Unreleased]
 
+### Changed
+- Require key values for numerical key types (dim, int, etc.) (see #661)
+
 ### Fixed
 - Issue with keys where some leading spaces could be left in key names
 
diff --git a/l3kernel/l3keys.dtx b/l3kernel/l3keys.dtx
index aefd3f954..7e6f4faa8 100644
--- a/l3kernel/l3keys.dtx
+++ b/l3kernel/l3keys.dtx
@@ -270,22 +270,26 @@
 %   does not trigger an error.
 % \end{function}
 %
-% \begin{function}{.dim_set:N, .dim_set:c, .dim_gset:N, .dim_gset:c}
+% \begin{function}[updated = 2020-01-17]
+%   {.dim_set:N, .dim_set:c, .dim_gset:N, .dim_gset:c}
 %   \begin{syntax}
 %     \meta{key} .dim_set:N = \meta{dimension}
 %   \end{syntax}
 %   Defines \meta{key} to set \meta{dimension} to \meta{value} (which
 %   must a dimension expression).  If the variable does not exist, it
-%   is created globally at the point that the key is set up.
+%   is created globally at the point that the key is set up. The key will
+%   require a value at point-of-use unless a default is set.
 % \end{function}
 %
-% \begin{function}{.fp_set:N, .fp_set:c, .fp_gset:N, .fp_gset:c}
+% \begin{function}[updated = 2020-01-17]
+%   {.fp_set:N, .fp_set:c, .fp_gset:N, .fp_gset:c}
 %   \begin{syntax}
 %     \meta{key} .fp_set:N = \meta{floating point}
 %   \end{syntax}
 %   Defines \meta{key} to set \meta{floating point} to \meta{value}
 %   (which must a floating point expression).  If the variable does not exist,
-%   it is created globally at the point that the key is set up.
+%   it is created globally at the point that the key is set up. The key will
+%   require a value at point-of-use unless a default is set.
 % \end{function}
 %
 % \begin{function}[added = 2013-07-14]
@@ -329,13 +333,15 @@
 %   \end{quote}
 % \end{function}
 %
-% \begin{function}{.int_set:N, .int_set:c, .int_gset:N, .int_gset:c}
+% \begin{function}[updated = 2020-01-17]
+%   {.int_set:N, .int_set:c, .int_gset:N, .int_gset:c}
 %   \begin{syntax}
 %     \meta{key} .int_set:N = \meta{integer}
 %   \end{syntax}
 %   Defines \meta{key} to set \meta{integer} to \meta{value} (which
 %   must be an integer expression).  If the variable does not exist, it
-%   is created globally at the point that the key is set up.
+%   is created globally at the point that the key is set up. The key will
+%   require a value at point-of-use unless a default is set.
 % \end{function}
 %
 % \begin{function}[updated = 2013-07-10]{.meta:n}
@@ -382,14 +388,15 @@
 %   Choices are discussed in detail in section~\ref{sec:l3keys:choice}.
 % \end{function}
 %
-% \begin{function}[added = 2019-05-05]
+% \begin{function}[added = 2019-05-05, updated = 2020-01-17]
 %   {.muskip_set:N, .muskip_set:c, .muskip_gset:N, .muskip_gset:c}
 %   \begin{syntax}
 %     \meta{key} .muskip_set:N = \meta{muskip}
 %   \end{syntax}
 %   Defines \meta{key} to set \meta{muskip} to \meta{value} (which
 %   must be a muskip expression). If the variable does not exist, it
-%   is created globally at the point that the key is set up.
+%   is created globally at the point that the key is set up. The key will
+%   require a value at point-of-use unless a default is set.
 % \end{function}
 %
 % \begin{function}[added = 2019-01-31]
@@ -403,13 +410,15 @@
 %   is created globally at the point that the key is set up.
 % \end{function}
 %
-% \begin{function}{.skip_set:N, .skip_set:c, .skip_gset:N, .skip_gset:c}
+% \begin{function}[updated = 2020-01-17]
+%   {.skip_set:N, .skip_set:c, .skip_gset:N, .skip_gset:c}
 %   \begin{syntax}
 %     \meta{key} .skip_set:N = \meta{skip}
 %   \end{syntax}
 %   Defines \meta{key} to set \meta{skip} to \meta{value} (which
 %   must be a skip expression). If the variable does not exist, it
-%   is created globally at the point that the key is set up.
+%   is created globally at the point that the key is set up. The key will
+%   require a value at point-of-use unless a default is set.
 % \end{function}
 %
 % \begin{function}{.tl_set:N, .tl_set:c, .tl_gset:N, .tl_gset:c}
@@ -1591,6 +1600,7 @@
         \cs_set_nopar:cpx
           { \c_@@_default_root_tl \l_keys_path_tl }
           { \exp_not:n {#1} }
+        \@@_value_requirement:nn { required } { false }
       }
   }
 %    \end{macrocode}
@@ -1766,6 +1776,7 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_variable_set:NnnN, \@@_variable_set:cnnN}
+% \begin{macro}{\@@_variable_set_required:NnnN, \@@_variable_set_required:cnnN}
 %   Setting a variable takes the type and scope separately so that
 %   it is easy to make a new variable if needed.
 %    \begin{macrocode}
@@ -1780,6 +1791,12 @@
       }
   }
 \cs_generate_variant:Nn \@@_variable_set:NnnN { c }
+\cs_new_protected:Npn \@@_variable_set_required:NnnN #1#2#3#4
+  {
+    \@@_variable_set:NnnN #1 {#2} {#3} #4
+    \@@_value_requirement:nn { required } { true }
+  }
+\cs_generate_variant:Nn \@@_variable_set_required:NnnN { c }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1895,13 +1912,13 @@
 % Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:N } #1
-  { \@@_variable_set:NnnN #1 { dim } { } n }
+  { \@@_variable_set_required:NnnN #1 { dim } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:c } #1
-  { \@@_variable_set:cnnN {#1} { dim } { } n }
+  { \@@_variable_set_required:cnnN {#1} { dim } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:N } #1
-  { \@@_variable_set:NnnN #1 { dim } { g } n }
+  { \@@_variable_set_required:NnnN #1 { dim } { g } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:c } #1
-  { \@@_variable_set:cnnN {#1} { dim } { g } n }
+  { \@@_variable_set_required:cnnN {#1} { dim } { g } n }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1911,13 +1928,13 @@
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:N } #1
-  { \@@_variable_set:NnnN #1 { fp } { } n }
+  { \@@_variable_set_required:NnnN #1 { fp } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:c } #1
-  { \@@_variable_set:cnnN {#1} { fp } { } n }
+  { \@@_variable_set_required:cnnN {#1} { fp } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:N } #1
-  { \@@_variable_set:NnnN #1 { fp } { g } n }
+  { \@@_variable_set_required:NnnN #1 { fp } { g } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:c } #1
-  { \@@_variable_set:cnnN {#1} { fp } { g } n }
+  { \@@_variable_set_required:cnnN {#1} { fp } { g } n }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1957,13 +1974,13 @@
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_tl .int_set:N } #1
-  { \@@_variable_set:NnnN #1 { int } { } n }
+  { \@@_variable_set_required:NnnN #1 { int } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .int_set:c } #1
-  { \@@_variable_set:cnnN {#1} { int } { } n }
+  { \@@_variable_set_required:cnnN {#1} { int } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:N } #1
-  { \@@_variable_set:NnnN #1 { int } { g } n }
+  { \@@_variable_set_required:NnnN #1 { int } { g } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:c } #1
-  { \@@_variable_set:cnnN {#1} { int } { g } n }
+  { \@@_variable_set_required:cnnN {#1} { int } { g } n }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -2012,13 +2029,13 @@
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:N } #1
-  { \@@_variable_set:NnnN #1 { muskip } { } n }
+  { \@@_variable_set_required:NnnN #1 { muskip } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .muskip_set:c } #1
-  { \@@_variable_set:cnnN {#1} { muskip } { } n }
+  { \@@_variable_set_required:cnnN {#1} { muskip } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:N } #1
-  { \@@_variable_set:NnnN #1 { muskip } { g } n }
+  { \@@_variable_set_required:NnnN #1 { muskip } { g } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .muskip_gset:c } #1
-  { \@@_variable_set:cnnN {#1} { muskip } { g } n }
+  { \@@_variable_set_required:cnnN {#1} { muskip } { g } n }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2041,13 +2058,13 @@
 %   Setting a variable is very easy: just pass the data along.
 %    \begin{macrocode}
 \cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:N } #1
-  { \@@_variable_set:NnnN #1 { skip } { } n }
+  { \@@_variable_set_required:NnnN #1 { skip } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:c } #1
-  { \@@_variable_set:cnnN {#1} { skip } { } n }
+  { \@@_variable_set_required:cnnN {#1} { skip } { } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:N } #1
-  { \@@_variable_set:NnnN #1 { skip } { g } n }
+  { \@@_variable_set_required:NnnN #1 { skip } { g } n }
 \cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:c } #1
-  { \@@_variable_set:cnnN {#1} { skip } { g } n }
+  { \@@_variable_set_required:cnnN {#1} { skip } { g } n }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
diff --git a/l3kernel/testfiles/m3keys001.tlg b/l3kernel/testfiles/m3keys001.tlg
index cd404ba78..9287ebb20 100644
--- a/l3kernel/testfiles/m3keys001.tlg
+++ b/l3kernel/testfiles/m3keys001.tlg
@@ -89,12 +89,7 @@ TEST 7: Interaction of .default:n with required/forbidden values:
 ============================================================
 Defining key module/key-one on line ...
 Defining key module/key-two on line ...
-! LaTeX3 Error: The key 'module/key-one' requires a value.
-For immediate help type H <return>.
- ...                                              
-l. ...  }
-The key 'module/key-one' must have a value.
-No value was present: the key will be ignored.
+"foo"
 Hello
 ============================================================
 ============================================================





More information about the latex3-commits mailing list