[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