[latex3-commits] [git/LaTeX3-latex3-latex3] l3bitset-2: add l3bitset (700539a9e)
Ulrike Fischer
fischer at troubleshooting-tex.de
Tue Dec 22 23:57:42 CET 2020
Repository : https://github.com/latex3/latex3
On branch : l3bitset-2
Link : https://github.com/latex3/latex3/commit/700539a9e8f3a9bb7ed99c13874b3d2efa35119a
>---------------------------------------------------------------
commit 700539a9e8f3a9bb7ed99c13874b3d2efa35119a
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date: Tue Dec 22 23:57:42 2020 +0100
add l3bitset
>---------------------------------------------------------------
700539a9e8f3a9bb7ed99c13874b3d2efa35119a
l3experimental/l3bitset/l3bitset.dtx | 621 +++++++++++++++++++++
.../l3sys-shell.ins => l3bitset/l3bitset.ins} | 10 +-
2 files changed, 626 insertions(+), 5 deletions(-)
diff --git a/l3experimental/l3bitset/l3bitset.dtx b/l3experimental/l3bitset/l3bitset.dtx
new file mode 100644
index 000000000..a364cf966
--- /dev/null
+++ b/l3experimental/l3bitset/l3bitset.dtx
@@ -0,0 +1,621 @@
+% \iffalse meta-comment
+%
+%% File: l3bitset.dtx
+%
+% Copyright (C) 2020 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% http://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3bitset bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+% https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver>
+\documentclass[full]{l3doc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+% \title{^^A
+% The \pkg{l3bitset} package \\ Bitsets ^^A
+% }
+%
+% \author{^^A
+% The \LaTeX3 Project\thanks
+% {^^A
+% E-mail:
+% \href{mailto:latex-team at latex-project.org}
+% {latex-team at latex-project.org}^^A
+% }^^A
+% }
+%
+% \date{Released XXXX-XX-XX}
+%
+% \maketitle
+% \begin{documentation}
+%
+% This package defines and implements the data type \texttt{bitset}, a vector of
+% bits. The size of the vector may grow dynamically.
+% Individual bits can be set and unset by index and by name.
+% The index is like all other indices in expl3 modules \emph{1-based}.
+% A \texttt{bitset} can be output as binary number or---as needed e.g. in a
+% PDF dictionary---as decimal (arabic) number.
+% Currently only a small subset of the functions provided by the \pkg{bitset}
+% package are implemented here, mainly the functions needed to use bitsets in
+% PDF dictionaries.
+%
+% The bitset is stored as a string (but one shouldn't rely on the internal
+% representation) and so the vector size is theoretically
+% unlimited, only restricted by \TeX-memory. But the export function
+% \cs{bitset_to_arabic:N} can use functions from the \texttt{int} module only if
+% the largest index used for this bitset is smaller then 32, for longer
+% bitsets \texttt{fp} is used and this is slower.
+%
+% \section{Creating bitsets}
+% \begin{function}[added = 2020-12-13]
+% {\bitset_new:N,\bitset_new:c}
+% \begin{syntax}
+% \cs{bitset_new:N} \meta{bitset var} \\
+% \end{syntax}
+% Creates a new \meta{bitset var} or raises an error if the name is already taken.
+% The declaration is global. The \meta{bitset var} is initially 0.
+%
+% Bitsets are implemented as string variables consisting of
+% \texttt{1}'s and \texttt{0}'s.
+% The rightmost number is the index position 1, so
+% the string variable can be viewed directly as the binary number.
+% But one shouldn't rely on the internal representation, but use the
+% dedicated \cs{bitset_to_bin:N} instead to get the binary number.
+% \end{function}
+%
+% \begin{function}[EXP, pTF,added = 2020-12-14]
+% { \bitset_if_exist:N, \bitset_if_exist:c }
+% \begin{syntax}
+% \cs{bitset_if_exist_p:N} \meta{bitset var}
+% \cs{bitset_if_exist:NTF} \meta{bitset var} \Arg{true code} \Arg{false code}%
+% \end{syntax}
+% Tests whether the \meta{bitset var} exist.
+% \end{function}
+
+%
+% \section{Setting and unsetting bits}
+%
+% \begin{function}[added = 2020-12-13]
+% { \bitset_set_true:Nn, \bitset_set_true:cn, \bitset_gset_true:Nn, \bitset_gset_true:cn }
+% \begin{syntax}
+% \cs{bitset_set_true:Nn} \meta{bitset var} \Arg{integer expression}\\
+% \cs{bitset_gset_true:Nn} \meta{bitset var} \Arg{integer expression}
+% \end{syntax}
+% Evaluates the \meta{integer expression} and sets the bit of the
+% index position it represents to 1. Index position are 1-based and set from
+% right to left (so one can view the bitset as a binary number).
+% If needed the length of the bit vector is enlarged.
+% If the \meta{integer expression} evaluates to a negative number, nothing happens.
+% \end{function}
+%
+% \begin{function}[added = 2020-12-13]
+% { \bitset_set_false:Nn, \bitset_set_false:cn, \bitset_gset_false:Nn, \bitset_set_false:cn }
+% \begin{syntax}
+% \cs{bitset_set_false:Nn} \meta{bitset var} \Arg{integer expression}\\
+% \cs{bitset_gset_false:Nn} \meta{bitset var} \Arg{integer expression}
+% \end{syntax}
+% Evaluates the \meta{integer expression} and unsets the bit of the
+% index position it represents (sets it to 0).
+% The index is 1-based. If the \meta{integer expression} evaluates to a
+% negative number or is larger than the current length of the bit vector
+% nothing happens. If the leading (left most) bit is unset,
+% zeros are not trimmed but stay in the bit vector.
+% \end{function}
+%
+% \begin{function}[added = 2020-12-22]
+% {\bitset_clear:N,\bitset_clear:c,\bitset_gclear:N,\bitset_gclear:c}
+% \begin{syntax}
+% \cs{bitset_clear:N} \meta{bitset var} \\
+% \cs{bitset_gclear:N} \meta{bitset var}
+% \end{syntax}
+% This resets the bitset to the initial state.
+% \end{function}
+%
+% \section{Using bitsets}
+%
+% \begin{function}[EXP,added = 2020-12-14]
+% { \bitset_index:Nn, \bitset_index:cn }
+% \begin{syntax}
+% \cs{bitset_index:Nn} \meta{bitset var} \Arg{integer expression}
+% \end{syntax}
+% Evaluates the \meta{integer expression} and output \texttt{1} if the bit is
+% set and \texttt{0} otherwise.
+% \end{function}
+%
+% \begin{function}[EXP,added = 2020-12-13]
+% {\bitset_to_bin:N, \bitset_to_bin:c}
+% \begin{syntax}
+% \cs{bitset_to_bin:N} \meta{bitset var}
+% \end{syntax}
+% This leaves the current value of the bitset expressed as
+% a binary (string) number in the input stream.
+% If no bit has been set yet, the output is zero.
+% \end{function}
+% \begin{function}[EXP,added = 2020-12-13]
+% {\bitset_to_arabic:N, \bitset_to_arabic:c}
+% \begin{syntax}
+% \cs{bitset_to_arabic:N} \meta{bitset var}
+% \end{syntax}
+% This leaves the current value of the bitset expressed as
+% a decimal number in the input stream. If no bit has been set yet,
+% the output is zero. The function uses \cs{int_from_bin:n} if the largest
+% index that have been set or unset is smaller then 32, and a slower implementation
+% based on \cs{fp_eval} otherwise.
+% \end{function}
+%
+%
+% \begin{function}[added = 2020-12-13]
+% {\bitset_show:N, \bitset_show:c}
+% \begin{syntax}
+% \cs{bitset_show:N} \meta{bitset var}
+% \end{syntax}
+% Displays the binary and decimal value of the \meta{bitset var} on the terminal,
+% \end{function}
+%
+% \begin{function}[added = 2020-12-13]
+% {\bitset_log:N, \bitset_log:c}
+% \begin{syntax}
+% \cs{bitset_log:N} \meta{bitset var}
+% \end{syntax}
+% Writes the value of the \meta{bitset var} in the log file.
+% \end{function}
+%
+
+% \section{Syntactic sugar: Setting bits by keys}
+%
+% \begin{function}[added = 2020-12-19]
+% {\bitset_gset_named_index:Nn}
+% \begin{syntax}
+% \cs{bitset_gset_named_index:Nn} \meta{bitset var}
+% \{
+% \meta{name1} |=| \meta{index1} |,|
+% \meta{name2} |=| \meta{index2} |,| \ldots{}
+% \}
+% \end{syntax}
+% This adds the name--index pairs given in the second
+% argument to an internal, global property list. If the
+% property list didn't exist yet, it is created.
+% It is then possible to use the names (the keys of the property
+% to set and unset bits. It is not necessary to give every index
+% a name, and an index can have more than one name.
+% \end{function}
+%
+% For example after this settings
+%
+% \begin{verbatim}
+% \bitset_new:N \l_pdfannot_F_bitset
+% \bitset_gset_named_index:Nn \l_pdfannot_F_bitset
+% {
+% Invisible = 1,
+% Hidden = 2,
+% Print = 3,
+% NoZoom = 4,
+% NoRotate = 5,
+% NoView = 6,
+% ReadOnly = 7,
+% Locked = 8,
+% ToggleNoView = 9,
+% LockedContents = 10
+% }
+% \end{verbatim}
+% it is possible to set bit 3 by using
+% |\bitset_set_true_key:Nn \l_pdfannot_F_bitset {Print}|
+% If a key is unknown a warning is issued.
+% \begin{function}[added = 2020-12-13]
+% {\bitset_set_true_key:Nn, \bitset_set_true_key:cn,
+% \bitset_gset_true_key:Nn,\bitset_gset_true_key:cn }
+% \begin{syntax}
+% \cs{bitset_set_true_key:Nn} \meta{bitset var} \Arg{key}\\
+% \cs{bitset_gset_true_key:Nn} \meta{bitset var} \Arg{key}
+% \end{syntax}
+% This sets the bit of the position described by key to \texttt{1}.
+%
+% If needed the length of the bitset is enlarged.
+% \end{function}
+% \begin{function}[added = 2020-12-13]
+% {\bitset_set_false_key:Nn, \bitset_set_false_key:cn,
+% \bitset_gset_false_key:Nn, \bitset_set_false_key:cn,}
+% \begin{syntax}
+% \cs{bitset_set_false_key:Nn} \meta{bitset var} \Arg{key}\\
+% \cs{bitset_gset_false_key:Nn} \meta{bitset var} \Arg{key}
+% \end{syntax}
+% This sets the bit of the position described by key to 0.
+% If the leading (left most) bit is unset, zeros are not
+% trimmed but stay in the bit vector.
+% \end{function}
+% \begin{function}[EXP,added = 2020-12-14]
+% {\bitset_key:Nn}
+% \begin{syntax}
+% \cs{bitset_key:Nn} \meta{bitset var} \Arg{key}
+% \end{syntax}
+% This outputs \texttt{1} if the bit is set, \texttt{0} otherwise.
+% \end{function}
+% \end{documentation}
+%
+% \begin{implementation}
+% \section{\pkg{l3bitset} implementation}
+% \TestFiles{m3bitset001,m3bitset002}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=bitset>
+% \end{macrocode}
+% A bitset is a string variable.
+% \begin{macro}
+% {
+% \bitset_new:N, \bitset_new:c
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_new:N #1
+ {
+ \__kernel_chk_if_free_cs:N #1
+ \cs_gset_eq:NN #1 \c_zero_str
+ }
+
+\cs_generate_variant:Nn \bitset_new:N {c}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[pTF]
+% {
+% \bitset_if_exist:N, \bitset_if_exist:c
+% }
+%
+% Existence tests.
+% \begin{macrocode}
+\prg_new_eq_conditional:NNn
+ \bitset_if_exist:N \str_if_exist:N { p , T , F , TF }
+\prg_new_eq_conditional:NNn
+ \bitset_if_exist:c \str_if_exist:c
+ { p , T , F , TF }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}
+% {
+% \bitset_set_true:Nn, \bitset_set_true:cn,
+% \bitset_gset_true:Nn, \bitset_gset_true:cn,
+% }
+% A bit is set by either extending the string or by splitting it and
+% then inserting an 1. It is not checked if the value was already 1.
+% \begin{macrocode}
+% #1 name, #2 index (integer expression, 1-based)
+\cs_new_protected:Npn \bitset_set_true:Nn #1 #2
+ {
+ \int_compare:nNnT {#2 } > { 0 }
+ {
+ \int_compare:nNnTF {\str_count:N #1 } < { #2 }
+ {
+ %extend the str
+ \exp_args:NNe
+ \str_put_left:Nn #1 { \prg_replicate:nn { #2 - \str_count:N #1 -1 } {0} }
+ \str_put_left:Nn #1 { 1 }
+ }
+ {
+ %replace value
+ \str_set:Nx #1
+ {
+ \str_range:Nnn #1 {1}{-1 - (#2)}
+ 1
+ \str_range:Nnn #1 {1 -(#2)}{-1}
+ }
+ }
+ }
+ }
+
+%#1 name, #2 index (integer expression,1-based)
+\cs_new_protected:Npn \bitset_gset_true:Nn #1 #2
+ {
+ \int_compare:nNnT {#2 } > { 0 }
+ {
+ \int_compare:nNnTF {\str_count:N #1 } < { #2 }
+ {
+ % %extend the str
+ \exp_args:NNe
+ \str_gput_left:Nn #1 { \prg_replicate:nn { #2 - \str_count:N #1 -1 } {0} }
+ \str_gput_left:Nn #1 { 1 }
+ }
+ {
+ % replace the value
+ \str_gset:Nx #1
+ {
+ \str_range:Nnn #1 {1}{-1 -(#2)}
+ 1
+ \str_range:Nnn #1 {1 -(#2)}{-1}
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \bitset_set_true:Nn {cn}
+\cs_generate_variant:Nn \bitset_gset_true:Nn {cn}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}
+% {
+% \bitset_set_false:Nn, \bitset_set_false:cn,
+% \bitset_gset_false:Nn, \bitset_gset_false:cn
+% }
+% Unsetting a bit has only to do something if the string is longer than then index.
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_set_false:Nn #1 #2 %#1 name, #2 index (1-based)
+ {
+ \int_compare:nNnT {#2 } > { 0 }
+ {
+ \int_compare:nNnT {\str_count:N #1 } > { #2 -1 }
+ {
+ % need to replace the str
+ \str_set:Nx #1
+ {
+ \str_range:Nnn #1 {1}{-1 - (#2)}
+ 0
+ \str_range:Nnn #1 { 1 - (#2)}{-1}
+ }
+ }
+ }
+ }
+
+\cs_new_protected:Npn \bitset_gset_false:Nn #1 #2 %#1 name, #2 index (1-based)
+ {
+ \int_compare:nNnT {#2 } > { 0 }
+ {
+ \int_compare:nNnT {\str_count:N #1 } > { #2 -1 }
+ {
+ % need to replace the str
+ \str_gset:Nx #1
+ {
+ \str_range:Nnn #1 {1}{-1 -(#2)}
+ 0
+ \str_range:Nnn #1 {1 - (#2)}{-1}
+ }
+ }
+ }
+ }
+\cs_generate_variant:Nn \bitset_set_false:Nn {cn}
+\cs_generate_variant:Nn \bitset_gset_false:Nn {cn}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}
+% {
+% \bitset_clear:N, \bitset_clear:c,
+% \bitset_gclear:N, \bitset_gclear:c
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_clear:N #1
+ {
+ \str_set_eq:NN #1 \c_zero_str
+ }
+\cs_new_protected:Npn \bitset_gclear:N #1
+ {
+ \str_gset_eq:NN #1 \c_zero_str
+ }
+\cs_generate_variant:Nn \bitset_clear:N {c}
+\cs_generate_variant:Nn \bitset_gclear:N {c}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}
+% {
+% \bitset_to_arabic:N, \bitset_to_arabic:c,
+% \bitset_to_bin:N, \bitset_to_bin:c,
+% }
+% The naming of the commands follow the names in the \texttt{int} module.
+% \cs{bitset_to_arabic:N} uses \cs{int_from_bin:n} if the string is shorter
+% then 32 and the slower \cs{fp_eval} for larger bitsets.
+%
+% \begin{macrocode}
+\cs_new:Npn \bitset_to_arabic:N #1
+ {
+ \int_compare:nNnTF { \str_count:N #1 } < {32}
+ { \exp_args:No \int_from_bin:n {#1} }
+ {
+ \exp_after:wN \@@_to_int:nN \exp_after:wN 0
+ #1 \q_recursion_tail \q_recursion_stop
+ }
+ }
+
+\cs_new:Npn \@@_to_int:nN #1#2
+ {
+ \quark_if_recursion_tail_stop_do:Nn #2 {#1}
+ \exp_args:Nf \@@_to_int:nN { \fp_eval:n { #1 * 2 + #2 } }
+ }
+
+\cs_new:Npn \bitset_to_bin:N #1
+ {
+ #1
+ }
+
+\cs_generate_variant:Nn \bitset_to_arabic:N {c}
+\cs_generate_variant:Nn \bitset_to_bin:N {c}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}
+% {
+% \bitset_index:Nn, \bitset_index:cn
+% }
+% \begin{macrocode}
+\cs_new:Npn \bitset_index:Nn #1 #2
+ {
+ \int_compare:nNnTF { #2 } > { 0 }
+ {
+ \int_eval:n { \str_item:Nn #1 { 0 - (#2)} + 0 }
+ }
+ {
+ 0
+ }
+ }
+\cs_generate_variant:Nn \bitset_index:Nn {cn}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}
+% {
+% \bitset_show:N, \bitset_show:c,
+% \bitset_log:N, \bitset_log:c
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_show:N { \@@_show:NN \msg_show:nnxxxx }
+\cs_generate_variant:Nn \bitset_show:N { c }
+\cs_new_protected:Npn \bitset_log:N { \@@_show:NN \msg_log:nnxxxx }
+\cs_generate_variant:Nn \bitset_log:N { c }
+\cs_new_protected:Npn \__bitset_show:NN #1#2
+ {
+ \__kernel_chk_defined:NT #2
+ {
+ #1 { LaTeX/kernel } { show-bitset }
+ { \token_to_str:N #2 }
+ { \bitset_to_bin:N #2 }
+ { \bitset_to_arabic:N #2 }
+ { }
+ }
+ }
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}
+% {
+% \bitset_gset_named_index:Nn
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_gset_named_index:Nn #1 #2
+ {
+ \prop_if_exist:cF { g_@@_\cs_to_str:N #1 _key_prop }
+ {
+ \prop_new:c { g_@@_\cs_to_str:N #1 _key_prop }
+ }
+ \prop_gset_from_keyval:cn
+ { g_@@_\cs_to_str:N #1 _key_prop }
+ { #2 }
+ }
+% \end{macrocode}
+% \begin{macro}
+% {
+% \bitset_set_true_key:Nn, \bitset_set_true_key:cn,
+% \bitset_gset_true_key:Nn, \bitset_gset_true_key:cn
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_set_true_key:Nn #1 #2
+ {
+ \prop_if_in:cnTF { g_@@_\cs_to_str:N #1 _key_prop } {#2}
+ {
+ \bitset_set_true:Nn #1
+ {
+ \prop_item:cn{ g_@@_\cs_to_str:N #1 _key_prop }{#2}
+ }
+ }
+ {
+ \__kernel_msg_warning:nnxx { kernel } { bitset-unknown-key }
+ { \token_to_str:N #1 }
+ { \tl_to_str:n { #2} }
+ }
+ }
+
+\cs_new_protected:Npn \bitset_gset_true_key:Nn #1 #2
+ {
+ \prop_if_in:cnTF { g_@@_\cs_to_str:N #1 _key_prop } {#2}
+ {
+ \bitset_gset_true:Nn #1
+ {
+ \prop_item:cn{ g_@@_\cs_to_str:N #1 _key_prop }{#2}
+ }
+ }
+ {
+ \__kernel_msg_warning:nnxx { kernel } { bitset-unknown-key }
+ { \token_to_str:N #1 }
+ { \tl_to_str:n { #2} }
+
+ }
+ }
+\cs_generate_variant:Nn \bitset_set_true_key:Nn {cn}
+\cs_generate_variant:Nn \bitset_gset_true_key:Nn {cn}
+
+% \end{macrocode}
+% \end{macro}%
+% \begin{macro}
+% {
+% \bitset_set_false_key:Nn, \bitset_set_false_key:cn,
+% \bitset_gset_false_key:Nn, \bitset_gset_false_key:cn,
+% }
+% \begin{macrocode}
+\cs_new_protected:Npn \bitset_set_false_key:Nn #1 #2
+ {
+ \prop_if_in:cnTF { g_@@_\cs_to_str:N #1 _key_prop } {#2}
+ {
+ \bitset_set_false:Nn #1
+ {
+ \prop_item:cn{ g_@@_\cs_to_str:N #1 _key_prop }{#2}
+ }
+ }
+ {
+ \__kernel_msg_warning:nnxx { kernel } { bitset-unknown-key }
+ { \token_to_str:N #1 }
+ { \tl_to_str:n { #2} }
+ }
+ }
+
+\cs_new_protected:Npn \bitset_gset_false_key:Nn #1 #2
+ {
+ \prop_if_in:cnTF { g_@@_\cs_to_str:N #1 _key_prop } {#2}
+ {
+ \bitset_gset_false:Nn #1
+ {
+ \prop_item:cn{ g_@@_\cs_to_str:N #1 _key_prop }{#2}
+ }
+ }
+ {
+ \__kernel_msg_warning:nnxx { kernel } { bitset-unknown-key }
+ { \token_to_str:N #1 }
+ { \tl_to_str:n { #2} }
+ }
+ }
+\cs_generate_variant:Nn \bitset_set_false_key:Nn {cn}
+\cs_generate_variant:Nn \bitset_gset_false_key:Nn {cn}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}
+% {
+% \bitset_key:Nn, \bitset_key:cn
+% }
+% \begin{macrocode}
+\cs_new:Npn \bitset_key:Nn #1 #2
+ {
+ \prop_if_in:cnTF { g_@@_\cs_to_str:N #1 _key_prop } {#2}
+ {
+ \int_eval:n
+ {
+ \str_item:Nn #1
+ { 0 - ( \prop_item:cn { g_@@_\cs_to_str:N #1 _key_prop }{#2} ) }
+ +0
+ }
+ }
+ {
+ 0
+ }
+ }
+\cs_generate_variant:Nn \bitset_key:Nn {cn}
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \end{macro}%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/l3experimental/l3sys-shell/l3sys-shell.ins b/l3experimental/l3bitset/l3bitset.ins
similarity index 88%
copy from l3experimental/l3sys-shell/l3sys-shell.ins
copy to l3experimental/l3bitset/l3bitset.ins
index 9ee35460c..1f693d295 100644
--- a/l3experimental/l3sys-shell/l3sys-shell.ins
+++ b/l3experimental/l3bitset/l3bitset.ins
@@ -1,8 +1,8 @@
\iffalse meta-comment
-File: l3sys-shell.ins
+File: l3bitset.ins
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2020 The LaTeX3 Project
It may be distributed and/or modified under the conditions of the
LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -34,7 +34,7 @@ license information is placed in the derived files.
\preamble
-Copyright (C) 2018-2020 The LaTeX3 Project
+Copyright (C) 2020 The LaTeX3 Project
It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
@@ -53,9 +53,9 @@ and all files in that bundle must be distributed together.
\keepsilent
-\generate{\file{l3sys-shell.sty}
+\generate{\file{l3bitset.sty}
{
- \from{l3sys-shell.dtx}{package}
+ \from{l3bitset.dtx} {package}
}
}
More information about the latex3-commits
mailing list.