summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-07-22 03:01:48 +0000
committerNorbert Preining <norbert@preining.info>2020-07-22 03:01:48 +0000
commitd3e0375ca41ebad2625c6fedf57992a8db8cd0ac (patch)
treee9e945728ba1dd3a4f802253d34e2fabc56eef34 /macros/latex/contrib
parentbd36712a3846fe8b17a13b5edfdcf10dc8787235 (diff)
CTAN sync 202007220301
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/achemso/CHANGELOG.md14
-rw-r--r--macros/latex/contrib/achemso/achemso-demo.pdfbin359004 -> 358998 bytes
-rw-r--r--macros/latex/contrib/achemso/achemso.dtx180
-rw-r--r--macros/latex/contrib/achemso/achemso.ins41
-rw-r--r--macros/latex/contrib/achemso/achemso.pdfbin514502 -> 515534 bytes
-rw-r--r--macros/latex/contrib/horoscop/README28
-rw-r--r--macros/latex/contrib/horoscop/horoscop.dtx510
-rw-r--r--macros/latex/contrib/horoscop/horoscop.pdfbin696390 -> 701179 bytes
-rw-r--r--macros/latex/contrib/semantex/README.md2
-rw-r--r--macros/latex/contrib/semantex/semantex.pdfbin235556 -> 239643 bytes
-rw-r--r--macros/latex/contrib/semantex/semantex.sty3745
-rw-r--r--macros/latex/contrib/semantex/semantex.tex504
12 files changed, 3350 insertions, 1674 deletions
diff --git a/macros/latex/contrib/achemso/CHANGELOG.md b/macros/latex/contrib/achemso/CHANGELOG.md
index c2b7a3dac8..3c6c98dbad 100644
--- a/macros/latex/contrib/achemso/CHANGELOG.md
+++ b/macros/latex/contrib/achemso/CHANGELOG.md
@@ -4,8 +4,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a
Changelog](https://keepachangelog.com/en/1.0.0/).
+## [Unreleased]
+
+## [v3.13b]
+### Added
+- Style for _Acc. Mater. Res._ (`amrcda`)
+- Style for _ACS Agr. Sci. Tech._ (`aastgj`)
+- Style for _ACS Food Sci. Tech._ (`afsthl`)
+
## [v3.13a]
-## Fixed
+### Fixed
- Swap TOC height and width to give landscape output
## [v3.13]
@@ -455,7 +463,9 @@ Changelog](https://keepachangelog.com/en/1.0.0/).
### Added
- Initial release of package by Mats Dahlgren
-[Unreleased]: https://github.com/josephwright/achemso/compare/v3.13...HEAD
+[Unreleased]: https://github.com/josephwright/achemso/compare/v3.13b...HEAD
+[v3.13b]: https://github.com/josephwright/achemso/compare/v3.13...v3.13b
+[v3.13a]: https://github.com/josephwright/achemso/compare/v3.13...v3.13a
[v3.13]: https://github.com/josephwright/achemso/compare/v3.12a...v3.13
[v3.12a]: https://github.com/josephwright/achemso/compare/v3.12...v3.12a
[v3.12]: https://github.com/josephwright/achemso/compare/v3.11b...v3.12
diff --git a/macros/latex/contrib/achemso/achemso-demo.pdf b/macros/latex/contrib/achemso/achemso-demo.pdf
index ff7bde7bbb..a873bdf444 100644
--- a/macros/latex/contrib/achemso/achemso-demo.pdf
+++ b/macros/latex/contrib/achemso/achemso-demo.pdf
Binary files differ
diff --git a/macros/latex/contrib/achemso/achemso.dtx b/macros/latex/contrib/achemso/achemso.dtx
index 7fcc65541e..b64421f0bc 100644
--- a/macros/latex/contrib/achemso/achemso.dtx
+++ b/macros/latex/contrib/achemso/achemso.dtx
@@ -289,13 +289,17 @@
% Journal & \rmfamily Setting & Journal & \rmfamily Setting \\
% \midrule
% Acc.\ Chem.\ Res. & achre4 &
+% Bioconjugate Chem. & bcches \\
+% Acc.\ Mater.\ Res. & amrcda &
+% Biomacromolecules & bomaf6 \\
+% ACS Agri.\ Sci. Tech. & aastgj &
% Chem.\ Mater. & cmatex \\
% ACS Appl.\ Energy Mater. & aaemcq &
-% Chem.\ Res.\ Toxicol. & crtoec \\
-% ACS Appl.\ Electron.\ Mater. & aaembp &
% Chem.\ Rev. & chreay \\
-% ACS Appl.\ Mater.\ Interfaces & aamick &
+% ACS Appl.\ Electron.\ Mater. & aaembp &
% Cryst.\ Growth Des. & cgdefu \\
+% ACS Appl.\ Mater.\ Interfaces & aamick &
+% Chem.\ Res.\ Toxicol. & crtoec \\
% ACS Appl.\ Nano Mater. & aanmf6 &
% Environ.\ Sci.\ Technol. & esthag \\
% ACS Appl.\ Polym.\ Mater. & aapmcd &
@@ -320,33 +324,32 @@
% J.~Med.\ Chem. & jmcmar \\
% ACS ES\&T Water & aewcaa &
% J.~Nat.\ Prod. & jnprdf \\
-% ACS Infect.\ Dis. & ascefj &
+% ACS Food Sci. Tech. & afsthl &
% J.~Org.\ Chem. & joceah \\
-% ACS Macro Lett. & amlccd &
+% ACS Infect.\ Dis. & ascefj &
% J.~Phys.\ Chem.~A & jpcafh \\
-% ACS Mater.\ Lett. & amlcef &
+% ACS Macro Lett. & amlccd &
% J.~Phys.\ Chem.~B & jpcbfk \\
-% ACS Med.\ Chem.\ Lett. & amclct &
+% ACS Mater.\ Lett. & amlcef &
% J.~Phys.\ Chem.~C & jpccck \\
-% ACS Nano & ancac3 &
+% ACS Med.\ Chem.\ Lett. & amclct &
% J.~Phys.\ Chem.\ Lett. & jpclcd \\
-% ACS Omega & acsodf &
+% ACS Nano & ancac3 &
% J.~Proteome Res. & jprobs \\
-% ACS Photon. & apchd5 &
+% ACS Omega & acsodf &
% J.~Am.\ Chem.\ Soc. & jacsat \\
-% ACS Sensors & ascefj &
+% ACS Photon. & apchd5 &
% Langmuir & langd5 \\
-% ACS Sustainable Chem.\ Eng. & ascecg &
+% ACS Sensors & ascefj &
% Macromolecules & mamobx \\
-% ACS Synth.\ Biol. & asbcd6 &
+% ACS Sustainable Chem.\ Eng. & ascecg &
% Mol.\ Pharm. & mpohbp \\
-% Anal.\ Chem. & ancham &
+% ACS Synth.\ Biol. & asbcd6 &
% Nano Lett. & nalefd \\
-% Biochemistry & bichaw &
+% Anal.\ Chem. & ancham &
% Org.\ Lett. & orlef7 \\
-% Bioconjugate Chem. & bcches &
+% Biochemistry & bichaw &
% Organometallics & orgnd7 \\
-% Biomacromolecules & bomaf6 \\
% \bottomrule
% \end{tabular}
% \caption{Values for \opt{journal} option}
@@ -762,7 +765,7 @@
% \begin{macrocode}
%<*class>
\ProvidesClass{achemso}
- [2020-05-27 v3.13a Submission to ACS journals]
+ [2020-07-21 v3.13b Submission to ACS journals]
\LoadClass[12pt,letter]{article}
% \end{macrocode}
%
@@ -782,7 +785,7 @@
% \begin{macrocode}
%<*package>
\ProvidesPackage{achemso}
- [2020-05-27 v3.13a Support for ACS journals]
+ [2020-07-21 v3.13b Support for ACS journals]
\@ifclassloaded{achemso}{%
\PackageInfo{achemso}{%
You have already loaded the `achemso' class:\MessageBreak
@@ -3309,64 +3312,70 @@
% \begin{macrocode}
%<*achre4>
\ProvidesFile{achemso-achre4.cfg}
- [2020-05-27 v3.13a achemso configuration: Acc. Chem. Res.]
+ [2020-07-21 v3.13b achemso configuration: Acc. Chem. Res.]
\setkeys{acs}{biblabel = plain}
\def\acs@type@list{article,suppinfo}
\def\abstractname{Conspectus}
%</achre4>
%<*aaembp>
\ProvidesFile{achemso-aaembp.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Appl. Electron. Mater.]
+ [2020-07-21 v3.13b achemso configuration: ACS Appl. Electron. Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aaembp>
%<*aaemcq>
\ProvidesFile{achemso-aaemcq.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Appl. Energy Mater.]
+ [2020-07-21 v3.13b achemso configuration: ACS Appl. Energy Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aaemcq>
%<*aamick>
\ProvidesFile{achemso-aamick.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Appl. Mater. Interfaces]
+ [2020-07-21 v3.13b achemso configuration: ACS Appl. Mater. Interfaces]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aamick>
%<*aanmf6>
\ProvidesFile{achemso-aanmf6.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Appl. Nano Mater.]
+ [2020-07-21 v3.13b achemso configuration: ACS Appl. Nano Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aanmf6>
%<*aapmcd>
\ProvidesFile{achemso-aapmcd.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Appl. Polym. Mater.]
+ [2020-07-21 v3.13b achemso configuration: ACS Appl. Polym. Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aapmcd>
+%<*aastgj>
+\ProvidesFile{achemso-aastgj.cfg}
+ [2020-07-21 v3.13b achemso configuration: ACS Agri. Sci. Tech.]
+\def\acs@type@list{account,article,letter,retraction,review,viewpoint,suppinfo}
+\setkeys{acs}{keywords = true}
+%</aastgj>
%<*abseba>
\ProvidesFile{achemso-abseba.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Biomater. Sci. Eng.]
+ [2020-07-21 v3.13b achemso configuration: ACS Biomater. Sci. Eng.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,review,suppinfo}
%</abseba>
%<*accacs>
\ProvidesFile{achemso-accacs.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Catal.]
+ [2020-07-21 v3.13b achemso configuration: ACS Catal.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,letter,perspective,review,viewpoints,suppinfo}
\SectionNumbersOff
%</accacs>
%<*acscii>
\ProvidesFile{achemso-acscii.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Central Sci.]
+ [2020-07-21 v3.13b achemso configuration: ACS Central Sci.]
\def\acs@type@list{article,review,suppinfo}
\setkeys{acs}{doi = true}
\SectionNumbersOff
%</acscii>
%<*acbcct>
\ProvidesFile{achemso-acbcct.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Chem. Biol.]
+ [2020-07-21 v3.13b achemso configuration: ACS Chem. Biol.]
\setkeys{acs}{
biblabel = fullstop,
biochem = true,
@@ -3377,7 +3386,7 @@
%</acbcct>
%<*acncdm>
\ProvidesFile{achemso-acncdm.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Chem. Neurosci.]
+ [2020-07-21 v3.13b achemso configuration: ACS Chem. Neurosci.]
\def\acs@type@list{article,review,letter,suppinfo,viewpoint}
\setkeys{acs}{
biblabel = fullstop,
@@ -3388,43 +3397,49 @@
%</acncdm>
%<*acsccc>
\ProvidesFile{achemso-acsccc.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Combinatorial Sci.]
+ [2020-07-21 v3.13b achemso configuration: ACS Combinatorial Sci.]
\def\acs@type@list{article,letter,review,perspective,account,note,suppinfo}
\setkeys{acs}{keywords = true}
\SectionNumbersOff
%</acsccc>
%<*aesccq>
\ProvidesFile{achemso-aesccq.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Earth Space Chem.]
+ [2020-07-21 v3.13b achemso configuration: ACS Earth Space Chem.]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{keywords = true}
%</aesccq>
%<*aelccp>
\ProvidesFile{achemso-aelccp.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Energy Lett.]
+ [2020-07-21 v3.13b achemso configuration: ACS Energy Lett.]
\def\acs@type@list{letter,perspective,review,viewpoint,focus}
\SectionsOff
%</aelccp>
%<*aeecco>
\ProvidesFile{achemso-aeecco.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS ES&T Eng.]
+ [2020-07-21 v3.13b achemso configuration: ACS ES&T Eng.]
\def\acs@type@list{article,feature,perspective,review,viewpoint}
%</aeecco>
%<*aewcaa>
\ProvidesFile{achemso-aewcaa.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS ES&T Water]
+ [2020-07-21 v3.13b achemso configuration: ACS ES&T Water]
\def\acs@type@list{article,feature,perspective,review,viewpoint}
%</aewcaa>
+%<*afsthl>
+\ProvidesFile{achemso-afsthl.cfg}
+ [2020-07-21 v3.13b achemso configuration: ACS Food Sci. Tech.]
+\def\acs@type@list{account,article,perspective,retraction,review,viewpoint}
+\setkeys{acs}{keywords = true}
+%</afsthl>
%<*ascefj>
\ProvidesFile{achemso-ascefj.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Infect. Dis.]
+ [2020-07-21 v3.13b achemso configuration: ACS Infect. Dis.]
\def\acs@type@list{article,letter,perspective,review,viewpoint,suppinfo}
\setkeys{acs}{keywords = true}
\SectionsOff
%</ascefj>
%<*amlccd>
\ProvidesFile{achemso-amlccd.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Macro Lett.]
+ [2020-07-21 v3.13b achemso configuration: ACS Macro Lett.]
\def\acs@type@list{letter,suppinfo}
\SectionsOff
\setlength{\acs@tocentry@height}{8 cm}
@@ -3432,19 +3447,24 @@
%</amlccd>
%<*amlcef>
\ProvidesFile{achemso-amlcef.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Mater. Lett.]
+ [2020-07-21 v3.13b achemso configuration: ACS Mater. Lett.]
\def\acs@type@list{letter,perspective,review,viewpoint,focus}
\SectionsOff
%</amlcef>
%<*amclct>
\ProvidesFile{achemso-amclct.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Med. Chem. Lett.]
+ [2020-07-21 v3.13b achemso configuration: ACS Med. Chem. Lett.]
\def\acs@type@list{article,letter,perspective,suppinfo}
\SectionNumbersOff
%</amclct>
+%<*amrcda>
+\ProvidesFile{achemso-amrcda.cfg}
+ [2020-07-21 v3.13b achemso configuration: Acc. Mater. Res.]
+\def\acs@type@list{account,article,editorial,retraction,suppinfo}
+%</amrcda>
%<*ancac3>
\ProvidesFile{achemso-ancac3.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Nano]
+ [2020-07-21 v3.13b achemso configuration: ACS Nano]
\setkeys{acs}{
abbreviations = true,
biblabel = fullstop,
@@ -3458,12 +3478,12 @@
%</ancac3>
%<*acsodf>
\ProvidesFile{achemso-acsodf.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Omega.]
+ [2020-07-21 v3.13b achemso configuration: ACS Omega.]
\def\acs@type@list{article}
%</acsodf>
%<*apchd5>
\ProvidesFile{achemso-apchd5.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Photon.]
+ [2020-07-21 v3.13b achemso configuration: ACS Photon.]
\def\acs@type@list{article,letter,perspective,review,suppinfo}
\setkeys{acs}{keywords = true}
\ifx\acs@manuscript\acs@manuscript@letter
@@ -3472,14 +3492,14 @@
%</apchd5>
%<*aidcbc>
\ProvidesFile{achemso-aidcbc.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Sensors]
+ [2020-07-21 v3.13b achemso configuration: ACS Sensors]
\def\acs@type@list{article,letter,perspective,review,suppinfo}
\setkeys{acs}{keywords = true}
\SectionNumbersOff
%</aidcbc>
%<*ascecg>
\ProvidesFile{achemso-ascecg.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Sustainable Chem Eng.]
+ [2020-07-21 v3.13b achemso configuration: ACS Sustainable Chem Eng.]
\setkeys{acs}{
biblabel = fullstop,
keywords = true
@@ -3489,7 +3509,7 @@
%</ascecg>
%<*asbcd6>
\ProvidesFile{achemso-asbcd6.cfg}
- [2020-05-27 v3.13a achemso configuration: ACS Synth. Biol.]
+ [2020-07-21 v3.13b achemso configuration: ACS Synth. Biol.]
\setkeys{acs}{
abbreviations = true,
biblabel = fullstop,
@@ -3501,13 +3521,13 @@
%</asbcd6>
%<*ancham>
\ProvidesFile{achemso-ancham.cfg}
- [2020-05-27 v3.13a achemso configuration: Anal. Chem.]
+ [2020-07-21 v3.13b achemso configuration: Anal. Chem.]
\def\acs@type@list{article,note,suppinfo}
\SectionNumbersOff
%</ancham>
%<*bichaw>
\ProvidesFile{achemso-bichaw.cfg}
- [2020-05-27 v3.13a achemso configuration: Biochemistry]
+ [2020-07-21 v3.13b achemso configuration: Biochemistry]
\setkeys{acs}{
abbreviations = true,
biblabel = brackets,
@@ -3555,7 +3575,7 @@
%</bichaw>
%<*bcches>
\ProvidesFile{achemso-bcches.cfg}
- [2020-05-27 v3.13a achemso configuration: Bioconjugate Chem.]
+ [2020-07-21 v3.13b achemso configuration: Bioconjugate Chem.]
\setkeys{acs}{
biochem = true,
super = false
@@ -3564,14 +3584,14 @@
%</bcches>
%<*bomaf6>
\ProvidesFile{achemso-bomaf6.cfg}
- [2020-05-27 v3.13a achemso configuration: Biomacromolecules]
+ [2020-07-21 v3.13b achemso configuration: Biomacromolecules]
\def\acs@type@list{article,comment,communication,note,review,suppinfo}
\SectionNumbersOff
\AtEndOfClass{\SectionsOn}
%</bomaf6>
%<*crtoec>
\ProvidesFile{achemso-crtoec.cfg}
- [2020-05-27 v3.13a achemso configuration: Chem. Res. Toxicol.]
+ [2020-07-21 v3.13b achemso configuration: Chem. Res. Toxicol.]
\setkeys{acs}{
abbreviations = true,
biochem = true,
@@ -3588,7 +3608,7 @@
%</crtoec>
%<*chreay>
\ProvidesFile{achemso-chreay.cfg}
- [2020-05-27 v3.13a achemso configuration: Chem. Rev.]
+ [2020-07-21 v3.13b achemso configuration: Chem. Rev.]
\def\acs@type@default{review}
\def\acs@type@list{review}
% \end{macrocode}
@@ -3599,7 +3619,7 @@
%<*cmatex>
% \begin{macrocode}
\ProvidesFile{achemso-cmatex.cfg}
- [2020-05-27 v3.13a achemso configuration: Chem. Mater.]
+ [2020-07-21 v3.13b achemso configuration: Chem. Mater.]
\setkeys{acs}{keywords = true}
\SectionNumbersOff
\ifx\acs@manuscript\acs@manuscript@communication
@@ -3609,7 +3629,7 @@
%</cmatex>
%<*cgdefu>
\ProvidesFile{achemso-cgdefu.cfg}
- [2020-05-27 v3.13a achemso configuration: Cryst. Growth Des.]
+ [2020-07-21 v3.13b achemso configuration: Cryst. Growth Des.]
\def\acs@type@list{%
article,communication,perspective,suppinfo%
}
@@ -3622,31 +3642,31 @@
%</cgdefu>
%<*enfuem>
\ProvidesFile{achemso-enfuem.cfg}
- [2020-05-27 v3.13a achemso configuration: Energy Fuels]
+ [2020-07-21 v3.13b achemso configuration: Energy Fuels]
\def\acs@type@list{article,review,suppinfo}
\SectionNumbersOff
%</enfuem>
%<*esthag>
\ProvidesFile{achemso-esthag.cfg}
- [2020-05-27 v3.13a achemso configuration: Environ. Sci. Technol.]
+ [2020-07-21 v3.13b achemso configuration: Environ. Sci. Technol.]
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</esthag>
%<*estlcu>
\ProvidesFile{achemso-estlcu.cfg}
- [2020-05-27 v3.13a achemso configuration: Environ. Sci. Technol. Lett.]
+ [2020-07-21 v3.13b achemso configuration: Environ. Sci. Technol. Lett.]
\def\acs@type@list{letter,suppinfo}
\SectionNumbersOff
%</estlcu>
%<*iecred>
\ProvidesFile{achemso-iecred.cfg}
- [2020-05-27 v3.13a achemso configuration: Ind. Eng. Chem. Res.]
+ [2020-07-21 v3.13b achemso configuration: Ind. Eng. Chem. Res.]
\setkeys{acs}{biblabel = brackets}
\SectionNumbersOff
%</iecred>
%<*inoraj>
\ProvidesFile{achemso-inoraj.cfg}
- [2020-05-27 v3.13a achemso configuration: Inorg. Chem.]
+ [2020-07-21 v3.13b achemso configuration: Inorg. Chem.]
\SectionNumbersOff
\ifx\acs@manuscript\acs@manuscript@communication
\AbstractOff
@@ -3656,14 +3676,14 @@
%</inoraj>
%<*jafcau>
\ProvidesFile{achemso-jafcau.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Agric. Food Chem.]
+ [2020-07-21 v3.13b achemso configuration: J. Agric. Food Chem.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</jafcau>
%<*jceda8>
\ProvidesFile{achemso-jceda8.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Chem. Ed.]
+ [2020-07-21 v3.13b achemso configuration: J. Chem. Ed.]
\setkeys{acs}{keywords = true}
\SectionNumbersOff
\def\acs@type@list{article,suppinfo}
@@ -3671,26 +3691,26 @@
%</jceda8>
%<*jceaax>
\ProvidesFile{achemso-jceaax.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Chem. Eng. Data]
+ [2020-07-21 v3.13b achemso configuration: J. Chem. Eng. Data]
\def\acs@type@list{article,suppinfo}
\def\refname{Literature Cited}
\SectionNumbersOff
%</jceaax>
%<*jcisd8>
\ProvidesFile{achemso-jcisd8.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Chem. Inf. Model.]
+ [2020-07-21 v3.13b achemso configuration: J. Chem. Inf. Model.]
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</jcisd8>
%<*jctcce>
\ProvidesFile{achemso-jctcce.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Chem. Theory Comput.]
+ [2020-07-21 v3.13b achemso configuration: J. Chem. Theory Comput.]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{maxauthors = 0}
%</jctcce>
%<*jmcmar>
\ProvidesFile{achemso-jmcmar.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Med. Chem.]
+ [2020-07-21 v3.13b achemso configuration: J. Med. Chem.]
\def\acs@type@list{article,letter,perspective,suppinfo}
\SectionNumbersOff
\setlength{\acs@tocentry@height}{5.5cm}
@@ -3698,7 +3718,7 @@
%</jmcmar>
%<*jnprdf>
\ProvidesFile{achemso-jnprdf.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Nat. Prod.]
+ [2020-07-21 v3.13b achemso configuration: J. Nat. Prod.]
\renewcommand*{\abstractname}{ABSTRACT}
\renewcommand*{\acknowledgementname}{ACKNOWLEDGEMENT}
\renewcommand*{\suppinfoname}{ASSOCIATED CONTENT}
@@ -3720,7 +3740,7 @@
%</jnprdf>
%<*joceah>
\ProvidesFile{achemso-joceah.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Org. Chem.]
+ [2020-07-21 v3.13b achemso configuration: J. Org. Chem.]
\ifx\acs@manuscript\acs@manuscript@communication
\AbstractOff
\SectionsOff
@@ -3734,7 +3754,7 @@
% \begin{macrocode}
%<*jpcafh>
\ProvidesFile{achemso-jpcafh.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. A]
+ [2020-07-21 v3.13b achemso configuration: J. Phys. Chem. A]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{
etalmode = truncate,
@@ -3749,7 +3769,7 @@
%</jpcafh>
%<*jpcbfk>
\ProvidesFile{achemso-jpcbfk.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. B]
+ [2020-07-21 v3.13b achemso configuration: J. Phys. Chem. B]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{
etalmode = truncate,
@@ -3761,7 +3781,7 @@
%</jpcbfk>
%<*jpccck>
\ProvidesFile{achemso-jpccck.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. C]
+ [2020-07-21 v3.13b achemso configuration: J. Phys. Chem. C]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{
etalmode = truncate,
@@ -3775,7 +3795,7 @@
% \begin{macrocode}
%<*jpclcd>
\ProvidesFile{achemso-jpclcd.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. Lett.]
+ [2020-07-21 v3.13b achemso configuration: J. Phys. Chem. Lett.]
\setkeys{acs}{
etalmode = truncate,
maxauthors = 10
@@ -3800,7 +3820,7 @@
%</jpclcd>
%<*jprobs>
\ProvidesFile{achemso-jprobs.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Proteome Res.]
+ [2020-07-21 v3.13b achemso configuration: J. Proteome Res.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,review,suppinfo}
\SectionNumbersOff
@@ -3812,7 +3832,7 @@
% \begin{macrocode}
%<*jacsat>
\ProvidesFile{achemso-jacsat.cfg}
- [2020-05-27 v3.13a achemso configuration: J. Am. Chem. Soc.]
+ [2020-07-21 v3.13b achemso configuration: J. Am. Chem. Soc.]
\SectionNumbersOff
\ifx\acs@manuscript\acs@manuscript@communication\else
\expandafter\endinput
@@ -4016,26 +4036,26 @@
%</jacsat>
%<*langd5>
\ProvidesFile{achemso-langd5.cfg}
- [2020-05-27 v3.13a achemso configuration: Langmuir]
+ [2020-07-21 v3.13b achemso configuration: Langmuir]
\def\acs@type@list{article,letter,suppinfo}
\SectionNumbersOff
%</langd5>
%<*mamobx>
\ProvidesFile{achemso-mamobx.cfg}
- [2020-05-27 v3.13a achemso configuration: Macromolecules]
+ [2020-07-21 v3.13b achemso configuration: Macromolecules]
\SectionNumbersOff
\setkeys{acs}{doi = true}
%</mamobx>
%<*mpohbp>
\ProvidesFile{achemso-mpohbp.cfg}
- [2020-05-27 v3.13a achemso configuration: Mol. Pharm.]
+ [2020-07-21 v3.13b achemso configuration: Mol. Pharm.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</mpohbp>
%<*nalefd>
\ProvidesFile{achemso-nalefd.cfg}
- [2020-05-27 v3.13a achemso configuration: Nano Lett.]
+ [2020-07-21 v3.13b achemso configuration: Nano Lett.]
\setkeys{acs}{keywords = true}
\def\acs@type@default{letter}
\def\acs@type@list{letter}
@@ -4043,7 +4063,7 @@
%</nalefd>
%<*orlef7>
\ProvidesFile{achemso-orlef7.cfg}
- [2020-05-27 v3.13a achemso configuration: Org. Lett.]
+ [2020-07-21 v3.13b achemso configuration: Org. Lett.]
\def\acs@type@default{communication}
\def\acs@type@list{communication}
\SectionNumbersOff
@@ -4053,13 +4073,13 @@
%</orlef7>
%<*oprdfk>
\ProvidesFile{achemso-oprdfk.cfg}
- [2020-05-27 v3.13a achemso configuration: Org. Proc. Res. Dev.]
+ [2020-07-21 v3.13b achemso configuration: Org. Proc. Res. Dev.]
\def\acs@type@list{article,highlight,review,suppinfo}
\SectionNumbersOff
%</oprdfk>
%<*orgnd7>
\ProvidesFile{achemso-orgnd7.cfg}
- [2020-05-27 v3.13a achemso configuration: Organometallics]
+ [2020-07-21 v3.13b achemso configuration: Organometallics]
\SectionNumbersOff
%</orgnd7>
% \end{macrocode}
@@ -4724,7 +4744,7 @@ FUNCTION { count.entries } {
% Start and end of bibliography functions
FUNCTION { begin.bib } {
- "achemso 2020-05-27 v3.13a" top$
+ "achemso 2020-07-21 v3.13b" top$
preamble$ empty$
{ }
{
diff --git a/macros/latex/contrib/achemso/achemso.ins b/macros/latex/contrib/achemso/achemso.ins
index a1237e114a..55bd49fc09 100644
--- a/macros/latex/contrib/achemso/achemso.ins
+++ b/macros/latex/contrib/achemso/achemso.ins
@@ -77,65 +77,68 @@ This work consists of the files achemso.dtx,
\file{achemso-aamick.cfg}{\from{achemso.dtx}{aamick}}
\file{achemso-aanmf6.cfg}{\from{achemso.dtx}{aanmf6}}
\file{achemso-aapmcd.cfg}{\from{achemso.dtx}{aapmcd}}
+ \file{achemso-aastgj.cfg}{\from{achemso.dtx}{aastgj}}
\file{achemso-abseba.cfg}{\from{achemso.dtx}{abseba}}
\file{achemso-accacs.cfg}{\from{achemso.dtx}{accacs}}
- \file{achemso-achre4.cfg}{\from{achemso.dtx}{achre4}}
}
-\generate{\file{achemso-acscii.cfg}{\from{achemso.dtx}{acscii}}
+\generate{\file{achemso-achre4.cfg}{\from{achemso.dtx}{achre4}}
+ \file{achemso-acscii.cfg}{\from{achemso.dtx}{acscii}}
\file{achemso-acbcct.cfg}{\from{achemso.dtx}{acbcct}}
\file{achemso-acncdm.cfg}{\from{achemso.dtx}{acncdm}}
\file{achemso-acsccc.cfg}{\from{achemso.dtx}{acsccc}}
\file{achemso-aeecco.cfg}{\from{achemso.dtx}{aeecco}}
\file{achemso-aesccq.cfg}{\from{achemso.dtx}{aesccq}}
\file{achemso-aelccp.cfg}{\from{achemso.dtx}{aelccp}}
- \file{achemso-aewcaa.cfg}{\from{achemso.dtx}{aewcaa}}
}
-\generate{\file{achemso-ascefj.cfg}{\from{achemso.dtx}{ascefj}}
+\generate{\file{achemso-aewcaa.cfg}{\from{achemso.dtx}{aewcaa}}
+ \file{achemso-afsthl.cfg}{\from{achemso.dtx}{afsthl}}
+ \file{achemso-ascefj.cfg}{\from{achemso.dtx}{ascefj}}
\file{achemso-amlccd.cfg}{\from{achemso.dtx}{amlccd}}
\file{achemso-amlcef.cfg}{\from{achemso.dtx}{amlcef}}
\file{achemso-amclct.cfg}{\from{achemso.dtx}{amclct}}
+ \file{achemso-amrcda.cfg}{\from{achemso.dtx}{amrcda}}
\file{achemso-ancac3.cfg}{\from{achemso.dtx}{ancac3}}
- \file{achemso-acsodf.cfg}{\from{achemso.dtx}{acsodf}}
+}
+\generate{\file{achemso-acsodf.cfg}{\from{achemso.dtx}{acsodf}}
\file{achemso-apchd5.cfg}{\from{achemso.dtx}{apchd5}}
\file{achemso-aidcbc.cfg}{\from{achemso.dtx}{aidcbc}}
-}
-\generate{\file{achemso-ascecg.cfg}{\from{achemso.dtx}{ascecg}}
+ \file{achemso-ascecg.cfg}{\from{achemso.dtx}{ascecg}}
\file{achemso-asbcd6.cfg}{\from{achemso.dtx}{asbcd6}}
\file{achemso-ancham.cfg}{\from{achemso.dtx}{ancham}}
\file{achemso-bichaw.cfg}{\from{achemso.dtx}{bichaw}}
\file{achemso-bcches.cfg}{\from{achemso.dtx}{bcches}}
- \file{achemso-bomaf6.cfg}{\from{achemso.dtx}{bomaf6}}
+}
+\generate{\file{achemso-bomaf6.cfg}{\from{achemso.dtx}{bomaf6}}
\file{achemso-crtoec.cfg}{\from{achemso.dtx}{crtoec}}
\file{achemso-chreay.cfg}{\from{achemso.dtx}{chreay}}
-}
-\generate{\file{achemso-cmatex.cfg}{\from{achemso.dtx}{cmatex}}
+ \file{achemso-cmatex.cfg}{\from{achemso.dtx}{cmatex}}
\file{achemso-cgdefu.cfg}{\from{achemso.dtx}{cgdefu}}
\file{achemso-enfuem.cfg}{\from{achemso.dtx}{enfuem}}
\file{achemso-esthag.cfg}{\from{achemso.dtx}{esthag}}
\file{achemso-estlcu.cfg}{\from{achemso.dtx}{estlcu}}
- \file{achemso-iecred.cfg}{\from{achemso.dtx}{iecred}}
+}
+\generate{\file{achemso-iecred.cfg}{\from{achemso.dtx}{iecred}}
\file{achemso-inoraj.cfg}{\from{achemso.dtx}{inoraj}}
\file{achemso-jafcau.cfg}{\from{achemso.dtx}{jafcau}}
-}
-\generate{\file{achemso-jceda8.cfg}{\from{achemso.dtx}{jceda8}}
+ \file{achemso-jceda8.cfg}{\from{achemso.dtx}{jceda8}}
\file{achemso-jceaax.cfg}{\from{achemso.dtx}{jceaax}}
\file{achemso-jcisd8.cfg}{\from{achemso.dtx}{jcisd8}}
\file{achemso-jctcce.cfg}{\from{achemso.dtx}{jctcce}}
\file{achemso-jmcmar.cfg}{\from{achemso.dtx}{jmcmar}}
- \file{achemso-jnprdf.cfg}{\from{achemso.dtx}{jnprdf}}
+}
+\generate{\file{achemso-jnprdf.cfg}{\from{achemso.dtx}{jnprdf}}
\file{achemso-joceah.cfg}{\from{achemso.dtx}{joceah}}
\file{achemso-jpcafh.cfg}{\from{achemso.dtx}{jpcafh}}
-}
-\generate{\file{achemso-jpcbfk.cfg}{\from{achemso.dtx}{jpcbfk}}
+ \file{achemso-jpcbfk.cfg}{\from{achemso.dtx}{jpcbfk}}
\file{achemso-jpccck.cfg}{\from{achemso.dtx}{jpccck}}
\file{achemso-jpclcd.cfg}{\from{achemso.dtx}{jpclcd}}
\file{achemso-jprobs.cfg}{\from{achemso.dtx}{jprobs}}
\file{achemso-jacsat.cfg}{\from{achemso.dtx}{jacsat}}
- \file{achemso-langd5.cfg}{\from{achemso.dtx}{langd5}}
+}
+\generate{\file{achemso-langd5.cfg}{\from{achemso.dtx}{langd5}}
\file{achemso-mamobx.cfg}{\from{achemso.dtx}{mamobx}}
\file{achemso-mpohbp.cfg}{\from{achemso.dtx}{mpohbp}}
-}
-\generate{\file{achemso-nalefd.cfg}{\from{achemso.dtx}{nalefd}}
+ \file{achemso-nalefd.cfg}{\from{achemso.dtx}{nalefd}}
\file{achemso-orlef7.cfg}{\from{achemso.dtx}{orlef7}}
\file{achemso-oprdfk.cfg}{\from{achemso.dtx}{oprdfk}}
\file{achemso-orgnd7.cfg}{\from{achemso.dtx}{orgnd7}}
diff --git a/macros/latex/contrib/achemso/achemso.pdf b/macros/latex/contrib/achemso/achemso.pdf
index 5fa9b9e2b1..decb0adfeb 100644
--- a/macros/latex/contrib/achemso/achemso.pdf
+++ b/macros/latex/contrib/achemso/achemso.pdf
Binary files differ
diff --git a/macros/latex/contrib/horoscop/README b/macros/latex/contrib/horoscop/README
index 0f1f53d116..5fbcef74bd 100644
--- a/macros/latex/contrib/horoscop/README
+++ b/macros/latex/contrib/horoscop/README
@@ -1,10 +1,11 @@
-This is version 0.92 of the horoscop package for typesetting astrological
+This is version 1.0 of the horoscop package for typesetting astrological
charts in LaTeX.
Features include:
* A unified interface for astrological symbols/glyphs, supporting three
- different astrological fonts as well as text abbreviations.
+ different astrological fonts as well as text abbreviations and Unicode
+ astrological symbol code points.
* Support for invoking Astrolog or Swiss Ephemeris to calculate charts.
Positions can also be specified manually.
* Loading and saving object and cusp positions into TeX macros.
@@ -63,7 +64,9 @@ Typesetting astrological symbols requires an appropriate font. The horoscop
package can work with the marvosym, wasysym, and starfont LaTeX packages,
with varying quality in the results; starfont is recommended and default.
It can also use text-only substitutes if none of those packages are
-available.
+available, or in XeLaTeX or LuaTeX it can use Unicode code points, in which
+case font management to typeset those code points is left to the TeX
+enginge to resolve.
Other, less significant, dependencies may exist; consult the PDF manual.
@@ -73,12 +76,21 @@ The horoscop package is public domain. External calculation software might
not be; you are responsible for any relevant licensing issues for any other
software you use.
-CONTACT AND LINKS
+LINKS AND TUG 2016 PRESENTATION
-LaTeX astrology page: http://ansuz.sooke.bc.ca/entry/107
-GitHub repository: http://github.com/mskala/horoscop
-Online demo: http://ansuz.sooke.bc.ca/astrology/makechart.php
+LaTeX astrology page: https://ansuz.sooke.bc.ca/entry/107
+Online demo: https://edifyingfellowship.org/astro/
+
+Skala, M. 2016. Astrological charts with horoscop and starfont. TUGboat,
+37(2):p. 182. Proceedings of the 37th Annual Meeting of the TeX Users
+Group (TUG 2016), Toronto, Ontario, July 25-27, 2016.
+
+PDF from proceedings: https://tug.org/TUGboat/tb37-2/tb116skala.pdf
+PDF of slides: https://tug.org/tug2016/slides/skala.pdf
+Video of talk: http://zeeba.tv/astrological-charts-with-horoscop-and-starfont/
+
+CONTACT
Matthew Skala
mskala@ansuz.sooke.bc.ca
-http://ansuz.sooke.bc.ca/
+https://ansuz.sooke.bc.ca/
diff --git a/macros/latex/contrib/horoscop/horoscop.dtx b/macros/latex/contrib/horoscop/horoscop.dtx
index 12ea6a98fe..dfcf84b7af 100644
--- a/macros/latex/contrib/horoscop/horoscop.dtx
+++ b/macros/latex/contrib/horoscop/horoscop.dtx
@@ -2,13 +2,13 @@
%
% This work is hereby released into the Public Domain. To view a
% copy of the public domain dedication, visit
-% http://creativecommons.org/licenses/publicdomain/
+% https://creativecommons.org/licenses/publicdomain/
% or send a letter to Creative Commons, 171 Second Street, Suite 300,
% San Francisco, California, 94105, USA.
%
% Matthew Skala
% mskala@ansuz.sooke.bc.ca
-% http://ansuz.sooke.bc.ca/
+% https://ansuz.sooke.bc.ca/
% August 30, 2008
%
% \fi
@@ -22,8 +22,9 @@
\usepackage{fmtcount}
\usepackage{graphicx}
\usepackage[scaled=0.9]{helvet}
-\usepackage[textsym,wasysym,marvosym,starfont]{horoscop}[2013/05/16]
+\usepackage[textsym,unicode,wasysym,marvosym,starfont]{horoscop}[2020/07/21]
\usepackage{mathpazo}
+\usepackage{metalogo}
\usepackage{titlesec}
\usepackage[letterpaper,breaklinks,bookmarks,plainpages=false,
colorlinks,pagebackref,citecolor=darkgreen,linkcolor=purplish]{hyperref}
@@ -81,7 +82,7 @@
%</driver>
% \fi
%
-% \CheckSum{4087}
+% \CheckSum{4317}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -113,38 +114,40 @@
%
% \title{Typesetting astrology with \textsf{horoscop}}
% \author{Matthew Skala}
-% \date{May 16, 2013}
+% \date{July 21, 2020}
%
-% \begin{titlepage}
-% \phantomsection
-% \mybookmark{section}{Title Page}
-% \centering
-% \vspace{0.75in}
-% {\Huge\scshape Typesetting}
+% \thispagestyle{empty}
+% \phantomsection
+% \mybookmark{section}{Title Page}
+% {\centering
+% \vspace{0.75in}
+% {\Huge\scshape Typesetting}
%
-% \vspace{2pc}
-% {\Huge\scshape Astrology}
+% \vspace{2pc}
+% {\Huge\scshape Astrology}
%
-% \vspace{2pc}
-% {\LARGE\itshape with}
+% \vspace{2pc}
+% {\LARGE\itshape with}
%
-% \vspace{2pc}
-% {\Huge\sffamily horoscop}
+% \vspace{2pc}
+% {\Huge\sffamily horoscop}
%
-% \vspace{3pc}
-% {\Huge\docornament}
+% \vspace{3pc}
+% {\Huge\docornament}
%
-% \vspace{\fill}
-% {\Large{\scshape Matthew Skala}\\
-% \href{mailto:mskala@ansuz.sooke.bc.ca}%
-% {\nolinkurl{mskala@ansuz.sooke.bc.ca}}}
+% \vspace{\fill}
+% {\Large{\scshape Matthew Skala}\\
+% \href{mailto:mskala@ansuz.sooke.bc.ca}%
+% {\nolinkurl{mskala@ansuz.sooke.bc.ca}}}
%
-% \vspace{0.5in}
-% {\Large\itshape Version 0.92, May 16, 2013}
-% \vspace{2.5pc}
-% \end{titlepage}
+% \vspace{0.5in}
+% {\Large\itshape Version 1.0, July 21, 2020}
+% \vspace{2.5pc}
+% \par}
%
% \clearpage
+% \changes{v1.0}{2020/07/20}{Make page after title page page 2 for clearer
+% numbering in PDF}
% \phantomsection
% \mybookmark{section}{Contents}
% \tableofcontents
@@ -153,13 +156,15 @@
%
% \section{Introduction}
%
+% \changes{v1.0}{2020/07/20}{General updates to intro after seven years}
% This document describes the design and use of a \LaTeX\ package named
% \textsf{horoscop}, which supports typesetting of astrological charts.
% Features include:
%
% \begin{itemize}
% \item A unified interface for astrological symbols/glyphs, supporting three
-% different astrological fonts as well as text abbreviations.
+% different astrological fonts as well as text abbreviations and Unicode
+% astrological symbol code points.
% \item Support for invoking Astrolog or Swiss Ephemeris to calculate
% charts. Positions can also be specified manually.
% \item Loading and saving object and cusp positions into \TeX\ macros.
@@ -216,21 +221,59 @@
% whatever comes out of the calculation software but it will be your own
% fault if that is nonsense.
%
-% This 0.92 release is the first one to be submitted to CTAN. I still feel
-% like \textsf{horoscop} is beta software, but it has existed since 2004, it
-% has not changed much in years, the recent switch to \textsf{pict2e} makes
-% it a lot more useful with modern \TeX\ installations, and I think the time
-% has come to share it more widely. Next version will probably be 1.0.
-%
-% This package has a GitHub repository at
-% \url{http://github.com/mskala/horoscop}. Bug reports should be filed
-% there using GitHub's issue tracking system.
-%
+% I presented this package at TUG~2016, with a one-page summary in the
+% conference proceedings: Skala, M. 2016. Astrological
+% charts with \textsf{horoscop} and \textsf{starfont}.
+% \emph{TUGboat,} 37(2):p.\ 182. Proceedings of the 37th Annual Meeting of
+% the TeX Users Group (TUG 2016), Toronto, Ontario, July 25-27, 2016. A PDF
+% of the summary is at \url{https://tug.org/TUGboat/tb37-2/tb116skala.pdf};
+% a PDF of the slides from my talk is at
+% \url{https://tug.org/tug2016/slides/skala.pdf}; and there is video of most
+% of the presentation at
+% \url{http://zeeba.tv/astrological-charts-with-horoscop-and-starfont/}.
+%
+% This release, version 1.0, represents a mature version of the package.
+% The last release, version 0.92, was called a beta test, but it has
+% been in use seven years now without needing any significant bug fixing or
+% updates. The most serious issue in 0.92 was in the documentation of
+% how to enter manually-calculated object positions; the underlying macros
+% for it worked well.
+%
+% So this 1.0 release is primarily an update to the documentation to fix
+% that issue, as well as to bump the version number and recognize the fact
+% that the package is mature and fully usable. I have also taken the
+% opportunity to add the Unicode-symbols feature, to reduce
+% \textsf{horoscop}'s ties to classical \TeX\ and its font systems as users
+% increasingly move toward Unicode engines and Unicode-based font selection;
+% and I have updated such things as Web links and development contacts to
+% reflect the inevitable changes in human institutitons over the years.
+%
+% \changes{v1.0}{2020/07/20}{In memoriam Axel}
+% I encourage readers to think of Axel Harvey, a close friend of mine and
+% a professional astrologer who contributed greatly to the testing of this
+% software and its associated Web service. He died in 2016, and is missed.
+%
+% \changes{v1.0}{2020/07/20}{New links for my own Web sites}
% There is an online chart service demonstrating \textsf{horoscop} at
-% \url{http://ansuz.sooke.bc.ca/astrology/makechart.php}. I also maintain a
-% page pointing to recent versions of this, my \textsf{starfont} package,
-% and any other \LaTeX\ astrology resources I can find, at
-% \url{http://ansuz.sooke.bc.ca/entry/107}.
+% \href{https://edifyingfellowship.org/astro/}{\nolinkurl https://edifying}
+% \href{https://edifyingfellowship.org/astro/}{\nolinkurl fellowship.org/astro/}.
+% I also maintain a page pointing to \LaTeX\ astrology resources, at
+% \url{https://ansuz.sooke.bc.ca/entry/107}.
+%
+% I no longer encourage the use of GitHub and it is unlikely that the
+% existing GitHub repository for \textsf{horoscop} will be updated further.
+% Bug reports and other correspondence related to \textsf{horoscop} should
+% be directed to \href{mailto:mskala@ansuz.sooke.bc.ca}%
+% {\nolinkurl{mskala@ansuz.sooke.bc.ca}}.
+%
+% As of 2016, I am no longer pursuing a career in academic computer science.
+% I have started a business selling modules of my own design for
+% Eurorack modular synthesizers, and kits for building them, through a Web
+% storefront at \url{https://northcoastsynthesis.com/}. If you are
+% interested in electronic music, please consider buying my products; if
+% not, please pass on the link to others. My ability to spend time
+% making free resources to share, such as the \textsf{horoscop} package,
+% depends on the success of my business.
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -249,14 +292,20 @@
% missing or unsuitable.
% Instead of using an astrological font
% at all, the |textsym| option may be used to substitute abbreviations
-% written in \LaTeX's ordinary text font.
+% written in \LaTeX's ordinary text font, which should work in any
+% \LaTeX\ environment; or the |unicode| option may
+% \changes{v1.0}{2020/07/20}{\texttt{unicode} option}
+% be used with \XeLaTeX\ or \LuaLaTeX\@. With |unicode|, \textsf{horoscop}
+% will use Unicode code points for the astrological symbols and leave it up to
+% the Unicode-supporting \TeX\ engine to typeset them in an appropriate font.
%
% Sources for astrological font packages:
% \changes{v0.92}{2013/05/16}{Update links for font packages}
+% \changes{v1.0}{2020/07/20}{Upgrade links to HTTPS}
% \begin{itemize}
-% \item \textsf{marvosym}: \url{http://www.ctan.org/pkg/marvosym}
-% \item \textsf{starfont}: \url{http://www.ctan.org/pkg/starfont}
-% \item \textsf{wasysym}: \url{http://www.ctan.org/pkg/wasysym}
+% \item \textsf{marvosym}: \url{https://ctan.org/pkg/marvosym}
+% \item \textsf{starfont}: \url{https://ctan.org/pkg/starfont}
+% \item \textsf{wasysym}: \url{https://ctan.org/pkg/wasysym}
% \end{itemize}
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -285,12 +334,13 @@
% using this feature, by coding all the object locations into the \LaTeX\
% source file instead of having them calculated on the fly.
%
+% \changes{v1.0}{2020/07/20}{Upgrade links to HTTPS}
% Sources for external calculation programs:
% \begin{itemize}
% \item Astrolog:
-% \url{http://www.astrolog.org/astrolog.htm}
+% \url{https://www.astrolog.org/astrolog.htm}
% \item Swiss Ephemeris:
-% \url{http://www.astro.com/swisseph/}
+% \url{https://www.astro.com/swisseph/}
% \end{itemize}
%
% {\em External calculation programs require |\write18| support in \TeX.}
@@ -356,7 +406,8 @@
%
% \subsection{Astrological Symbol Options}
%
-% The options |textsym|, |wasysym|, |marvosym|, and |starfont| control the
+% The options |textsym|, |unicode|, |wasysym|, |marvosym|, and
+% |starfont| control the
% font used for astrological symbols. You may choose more than one of these
% options, in which case more than one set will be available in your
% document. The set in force at the start of the document will be the last
@@ -374,16 +425,28 @@
% The abbreviations are also used to replace missing symbols in the other
% sets.
%
+% \changes{v1.0}{2020/07/20}{\texttt{unicode} option}
+% The |unicode| option is normally only useful in \XeLaTeX\ and \LuaLaTeX;
+% it causes \textsf{horoscop} to use non-ASCII Unicode characters for
+% astrological symbols. It is up to the \TeX\ engine, or the user, to
+% select a font or combination of fonts in which these characters can be
+% typeset. Both \XeLaTeX\ and \LuaLaTeX\ offer relevant font-selection
+% features, and if \textsf{horoscop} detects (using the \textsf{iftex}
+% package) some other engine, it will fall back to a text indication of
+% the desired code points, which looks like $\langle$U+263D$\rangle$.
+%
% \DescribeMacro{\horotextsym}
+% \DescribeMacro{\horounicode}
% \DescribeMacro{\horowasysym}
% \DescribeMacro{\horomarvosym}
% \DescribeMacro{\horostarfont}
-% The macros |\horotextsym|, |\horowasysym|, |\horomarvosym|, and
-% |\horostar|-|font| switch to the corresponding set of astrological symbols,
+% The macros |\horotextsym|, |\horounicode|, |\horowasysym|,
+% |\horomarvosym|, and |\horostarfont| switch to the corresponding set
+% of astrological symbols,
% so that documents can mix the different sets. Any symbols not defined by
% the new set remain in the state left by the old set. To use these macros
% the corresponding symbol sets must have been loaded with the appropriate
-% package options, except |\horotextsym| which is always available.
+% package options, except that |\horotextsym| is always available.
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -583,154 +646,188 @@
% the entire zodiac by redefining |\Zodiac| instead of redefining individual
% symbols.
%
-% \begin{tabular}{lcccc}
-% macro & |textsym| & |wasysym| & |marvosym| & |starfont| \\
+% {\setlength{\tabcolsep}{0.2em}
+% \begin{tabular}{lccccc}
+% macro & |textsym| & |unicode| & |wasysym| & |marvosym| & |starfont| \\
% |\AriesSymbol| & \horotextsym\AriesSymbol
+% & \horounicode\AriesSymbol
% & \horowasysym\AriesSymbol
% & \horomarvosym\AriesSymbol
% & \horostarfont\AriesSymbol \\
% |\TaurusSymbol| & \horotextsym\TaurusSymbol
+% & \horounicode\TaurusSymbol
% & \horowasysym\TaurusSymbol
% & \horomarvosym\TaurusSymbol
% & \horostarfont\TaurusSymbol \\
% |\GeminiSymbol| & \horotextsym\GeminiSymbol
+% & \horounicode\GeminiSymbol
% & \horowasysym\GeminiSymbol
% & \horomarvosym\GeminiSymbol
% & \horostarfont\GeminiSymbol \\
% |\CancerSymbol| & \horotextsym\CancerSymbol
+% & \horounicode\CancerSymbol
% & \horowasysym\CancerSymbol
% & \horomarvosym\CancerSymbol
% & \horostarfont\CancerSymbol \\
% |\LeoSymbol| & \horotextsym\LeoSymbol
+% & \horounicode\LeoSymbol
% & \horowasysym\LeoSymbol
% & \horomarvosym\LeoSymbol
% & \horostarfont\LeoSymbol \\
% |\VirgoSymbol| & \horotextsym\VirgoSymbol
+% & \horounicode\VirgoSymbol
% & \horowasysym\VirgoSymbol
% & \horomarvosym\VirgoSymbol
% & \horostarfont\VirgoSymbol \\
% |\LibraSymbol| & \horotextsym\LibraSymbol
+% & \horounicode\LibraSymbol
% & \horowasysym\LibraSymbol
% & \horomarvosym\LibraSymbol
% & \horostarfont\LibraSymbol \\
% |\ScorpioSymbol| & \horotextsym\ScorpioSymbol
+% & \horounicode\ScorpioSymbol
% & \horowasysym\ScorpioSymbol
% & \horomarvosym\ScorpioSymbol
% & \horostarfont\ScorpioSymbol \\
% |\SagittariusSymbol| & \horotextsym\SagittariusSymbol
+% & \horounicode\SagittariusSymbol
% & \horowasysym\SagittariusSymbol
% & \horomarvosym\SagittariusSymbol
% & \horostarfont\SagittariusSymbol \\
% |\CapricornSymbol| & \horotextsym\CapricornSymbol
+% & \horounicode\CapricornSymbol
% & \horowasysym\CapricornSymbol
% & \horomarvosym\CapricornSymbol
% & \horostarfont\CapricornSymbol \\
% |\AquariusSymbol| & \horotextsym\AquariusSymbol
+% & \horounicode\AquariusSymbol
% & \horowasysym\AquariusSymbol
% & \horomarvosym\AquariusSymbol
% & \horostarfont\AquariusSymbol \\
% |\PiscesSymbol| & \horotextsym\PiscesSymbol
+% & \horounicode\PiscesSymbol
% & \horowasysym\PiscesSymbol
% & \horomarvosym\PiscesSymbol
% & \horostarfont\PiscesSymbol
-% \end{tabular}
+% \end{tabular}}
%
% \subsubsection{Luminaries and traditional planets}
%
% These are well-supported by the various fonts.
%
-% \begin{tabular}{lcccc}
-% macro & |textsym| & |wasysym| & |marvosym| & |starfont| \\
+% {\setlength{\tabcolsep}{0.2em}
+% \begin{tabular}{lccccc}
+% macro & |textsym| & |unicode| & |wasysym| & |marvosym| & |starfont| \\
% |\SunSymbol| & \horotextsym\SunSymbol
+% & \horounicode\SunSymbol
% & \horowasysym\SunSymbol
% & \horomarvosym\SunSymbol
% & \horostarfont\SunSymbol \\
% |\MoonSymbol| & \horotextsym\MoonSymbol
+% & \horounicode\MoonSymbol
% & \horowasysym\MoonSymbol
% & \horomarvosym\MoonSymbol
% & \horostarfont\MoonSymbol \\
% |\MercurySymbol| & \horotextsym\MercurySymbol
+% & \horounicode\MercurySymbol
% & \horowasysym\MercurySymbol
% & \horomarvosym\MercurySymbol
% & \horostarfont\MercurySymbol \\
% |\VenusSymbol| & \horotextsym\VenusSymbol
+% & \horounicode\VenusSymbol
% & \horowasysym\VenusSymbol
% & \horomarvosym\VenusSymbol
% & \horostarfont\VenusSymbol \\
% |\MarsSymbol| & \horotextsym\MarsSymbol
+% & \horounicode\MarsSymbol
% & \horowasysym\MarsSymbol
% & \horomarvosym\MarsSymbol
% & \horostarfont\MarsSymbol \\
% |\JupiterSymbol| & \horotextsym\JupiterSymbol
+% & \horounicode\JupiterSymbol
% & \horowasysym\JupiterSymbol
% & \horomarvosym\JupiterSymbol
% & \horostarfont\JupiterSymbol \\
% |\SaturnSymbol| & \horotextsym\SaturnSymbol
+% & \horounicode\SaturnSymbol
% & \horowasysym\SaturnSymbol
% & \horomarvosym\SaturnSymbol
% & \horostarfont\SaturnSymbol \\
% |\UranusSymbol| & \horotextsym\UranusSymbol
+% & \horounicode\UranusSymbol
% & \horowasysym\UranusSymbol
% & \horomarvosym\UranusSymbol
% & \horostarfont\UranusSymbol \\
% |\NeptuneSymbol| & \horotextsym\NeptuneSymbol
+% & \horounicode\NeptuneSymbol
% & \horowasysym\NeptuneSymbol
% & \horomarvosym\NeptuneSymbol
% & \horostarfont\NeptuneSymbol \\
% |\PlutoSymbol| & \horotextsym\PlutoSymbol
+% & \horounicode\PlutoSymbol
% & \horowasysym\PlutoSymbol
% & \horomarvosym\PlutoSymbol
% & \horostarfont\PlutoSymbol
-% \end{tabular}
+% \end{tabular}}
%
% \subsubsection{Other objects, cusps, and angles}
% The \textsf{starfont} package provides symbols for asteroids, derived
% points, angles, and so on. Without it, these things default to the
-% |textsym| abbreviations. Cusp symbols are listed here too, although they
+% |textsym| abbreviations. The |unicode| option also has code points for
+% these. Cusp symbols are listed in this table, but they
% generally do not appear in the default templates and will seldom be used
% in actual practice.
%
-% \begin{tabular}{lcc}
-% macro & |textsym| & |starfont| \\
+% {\setlength{\tabcolsep}{0.2em}
+% \begin{tabular}{lccc}
+% macro & |textsym| & |unicode| &|starfont| \\
% |\ChironSymbol| & \horotextsym\ChironSymbol
+% & \horounicode\ChironSymbol
% & \horostarfont\ChironSymbol \\
% |\CeresSymbol| & \horotextsym\CeresSymbol
+% & \horounicode\CeresSymbol
% & \horostarfont\CeresSymbol \\
% |\PallasSymbol| & \horotextsym\PallasSymbol
+% & \horounicode\PallasSymbol
% & \horostarfont\PallasSymbol \\
% |\JunoSymbol| & \horotextsym\JunoSymbol
+% & \horounicode\JunoSymbol
% & \horostarfont\JunoSymbol \\
% |\VestaSymbol| & \horotextsym\VestaSymbol
+% & \horounicode\VestaSymbol
% & \horostarfont\VestaSymbol \\
% |\NorthNodeSymbol| & \horotextsym\NorthNodeSymbol
+% & \horounicode\NorthNodeSymbol
% & \horostarfont\NorthNodeSymbol \\
% |\SouthNodeSymbol| & \horotextsym\SouthNodeSymbol
+% & \horounicode\SouthNodeSymbol
% & \horostarfont\SouthNodeSymbol \\
% |\LilithSymbol| & \horotextsym\LilithSymbol
+% & \horounicode\LilithSymbol
% & \horostarfont\LilithSymbol \\
% |\CuspISymbol| & \horotextsym\CuspISymbol
-% & \horostarfont\CuspISymbol \\
+% & & \horostarfont\CuspISymbol \\
% |\CuspIISymbol| & \horotextsym\CuspIISymbol & \\
% |\CuspIIISymbol| & \horotextsym\CuspIIISymbol & \\
% |\CuspIVSymbol| & \horotextsym\CuspIVSymbol
-% & \horostarfont\CuspIVSymbol \\
+% & & \horostarfont\CuspIVSymbol \\
% |\CuspVSymbol| & \horotextsym\CuspVSymbol & \\
% |\CuspVISymbol| & \horotextsym\CuspVISymbol & \\
% |\CuspVIISymbol| & \horotextsym\CuspVIISymbol
-% & \horostarfont\CuspVIISymbol \\
+% & & \horostarfont\CuspVIISymbol \\
% |\CuspVIIISymbol| & \horotextsym\CuspVIIISymbol & \\
% |\CuspIXSymbol| & \horotextsym\CuspIXSymbol & \\
% |\CuspXSymbol| & \horotextsym\CuspXSymbol
-% & \horostarfont\CuspXSymbol \\
+% & & \horostarfont\CuspXSymbol \\
% |\CuspXISymbol| & \horotextsym\CuspXISymbol & \\
% |\CuspXIISymbol| & \horotextsym\CuspXIISymbol & \\
% |\AscendantSymbol| & \horotextsym\AscendantSymbol
-% & \horostarfont\AscendantSymbol \\
+% & & \horostarfont\AscendantSymbol \\
% |\MCSymbol| & \horotextsym\MCSymbol
-% & \horostarfont\MCSymbol \\
+% & & \horostarfont\MCSymbol \\
% |\VertexSymbol| & \horotextsym\VertexSymbol
-% & \horostarfont\VertexSymbol \\
-% \end{tabular}
+% & & \horostarfont\VertexSymbol \\
+% \end{tabular}}
%
% Note that \textsf{wasysym} provides a symbol it calls |\ascnode|, but it's
% actually identical to the symbol it calls |\leo|, and the symbol (\leo)
@@ -770,35 +867,44 @@
% below also shows the default angles and orbs for the aspects; see
% Subsection~\ref{sub:aspect-web}.
%
-% {\renewcommand{\tabcolsep}{0.2em}
-% \begin{tabular}{lcccc}
-% macro & |textsym| & |wasysym| & |starfont| & angle\\
+% \noindent{\setlength{\tabcolsep}{0.1em}
+% \begin{tabular}{lccccc}
+% macro & |textsym| & |unicode| & |wasysym| & |starfont| & angle\\
% |\horoConjunctionSymbol| & \horotextsym\horoConjunctionSymbol
+% & \horounicode\horoConjunctionSymbol
% & \horowasysym\horoConjunctionSymbol
% & \horostarfont\horoConjunctionSymbol & $0\horodegrees\pm6\horodegrees$ \\
% |\horoOppositionSymbol| & \horotextsym\horoOppositionSymbol
+% & \horounicode\horoOppositionSymbol
% & \horowasysym\horoOppositionSymbol
% & \horostarfont\horoOppositionSymbol & $180\horodegrees\pm6\horodegrees$ \\
% |\horoTrineSymbol| & \horotextsym\horoTrineSymbol
+% & \horounicode\horoTrineSymbol
% & \horowasysym\horoTrineSymbol
% & \horostarfont\horoTrineSymbol & $120\horodegrees\pm5\horodegrees$ \\
% |\horoSquareSymbol| & \horotextsym\horoSquareSymbol
+% & \horounicode\horoSquareSymbol
% & \horowasysym\horoSquareSymbol
% & \horostarfont\horoSquareSymbol & $90\horodegrees\pm5\horodegrees$ \\
% |\horoQuintileSymbol| & \horotextsym\horoQuintileSymbol
-% & & \horostarfont\horoQuintileSymbol & $72\horodegrees\pm2\horodegrees$ \\
+% & & & \horostarfont\horoQuintileSymbol & $72\horodegrees\pm2\horodegrees$ \\
% |\horoBiquintileSymbol| & \horotextsym\horoBiquintileSymbol
-% & & \horostarfont\horoBiquintileSymbol & $144\horodegrees\pm2\horodegrees$ \\
+% & & & \horostarfont\horoBiquintileSymbol & $144\horodegrees\pm2\horodegrees$ \\
% |\horoSextileSymbol| & \horotextsym\horoSextileSymbol
+% & \horounicode\horoSextileSymbol
% & \horowasysym\horoSextileSymbol
% & \horostarfont\horoSextileSymbol & $60\horodegrees\pm4\horodegrees$ \\
% |\horoQuincunxSymbol| & \horotextsym\horoQuincunxSymbol
+% & \horounicode\horoQuincunxSymbol
% & & \horostarfont\horoQuincunxSymbol & $150\horodegrees\pm3\horodegrees$ \\
% |\horoSemisextileSymbol| & \horotextsym\horoSemisextileSymbol
+% & \horounicode\horoSemisextileSymbol
% & & \horostarfont\horoSemisextileSymbol & $30\horodegrees\pm3\horodegrees$ \\
% |\horoSemisquareSymbol| & \horotextsym\horoSemisquareSymbol
+% & \horounicode\horoSemisquareSymbol
% & & \horostarfont\horoSemisquareSymbol & $45\horodegrees\pm2\horodegrees$ \\
% |\horoSesquiquadrateSymbol| & \horotextsym\horoSesquiquadrateSymbol
+% & \horounicode\horoSesquiquadrateSymbol
% & & \horostarfont\horoSesquiquadrateSymbol & $135\horodegrees\pm2\horodegrees$
% \end{tabular}}
%
@@ -967,7 +1073,8 @@
% would be better to assign house positions in a way that takes latitude
% into account. See the article ``The Problems of House Division'' by
% Deborah Houlding, available online at
-% \url{http://www.skyscript.co.uk/houprob_print.html}, for more discussion
+% \changes{v1.0}{2020/07/20}{Upgrade links to HTTPS}
+% \url{https://www.skyscript.co.uk/houprob_print.html}, for more discussion
% of this issue. In some future version \textsf{horoscop} may be extended
% to provide more options for handling of this kind of thing.
%
@@ -995,6 +1102,7 @@
% that would be created by |\horocalculate| simply need to be created
% directly, as in the example below.
%
+% \changes{v1.0}{2020/07/20}{Correct macro names for manual position example}
% \begin{verbatim}
% \def\horoSunPos{267.5002492}\def\horoSunVel{1.0185515}
% \def\horoMoonPos{229.2067659}\def\horoMoonVel{11.9237313}
@@ -1008,18 +1116,18 @@
% \def\horoPlutoPos{133.0955746}\def\horoPlutoVel{-0.0150157}
% \def\horoNorthNodePos{70.7814892}\def\horoNorthNodeVel{-0.0529425}
% \def\horoLilithPos{265.3475147}\def\horoLilithVel{0.1108368}
-% \def\horoCuspI{207.9120843}
-% \def\horoCuspII{236.5553269}
-% \def\horoCuspIII{267.6976404}
-% \def\horoCuspIV{300.5365877}
-% \def\horoCuspV{332.9973490}
-% \def\horoCuspVI{2.5292853}
-% \def\horoCuspVII{27.9120843}
-% \def\horoCuspVIII{56.5553269}
-% \def\horoCuspIX{87.6976404}
-% \def\horoCuspX{120.5365877}
-% \def\horoCuspXI{152.9973490}
-% \def\horoCuspXII{182.5292853}
+% \def\horoCuspPosI{207.9120843}
+% \def\horoCuspPosII{236.5553269}
+% \def\horoCuspPosIII{267.6976404}
+% \def\horoCuspPosIV{300.5365877}
+% \def\horoCuspPosV{332.9973490}
+% \def\horoCuspPosVI{2.5292853}
+% \def\horoCuspPosVII{27.9120843}
+% \def\horoCuspPosVIII{56.5553269}
+% \def\horoCuspPosIX{87.6976404}
+% \def\horoCuspPosX{120.5365877}
+% \def\horoCuspPosXI{152.9973490}
+% \def\horoCuspPosXII{182.5292853}
% \end{verbatim}
%
% A few less obvious macros also need to be set for manually-entered
@@ -1185,6 +1293,20 @@
% |\horowheelVancouver|, as in the birth chart for John Lennon shown in
% Figure~\ref{fig:basic-wheel}.
%
+% \changes{v1.0}{2020/07/21}{Emphasize that template names do not determine
+% geographic locations of charts}
+% Please note that the standard templates are named after Canadian cities,
+% but these names are only \emph{thematic names for the visual styles of the
+% charts}\footnote{I was inspired to use this naming theme by Ruskey and
+% Weston's work on Venn diagrams; see
+% \url{https://www.combinatorics.org/files/Surveys/ds5/ds5v3-2005/VennEJC.html}.}
+% and the names of the templates have no connection with the geographic
+% locations the charts refer to. You can plot a chart for any location in
+% Vancouver style, and you can plot a chart that does happen to be for
+% Vancouver (any of the multiple places in the world with that name) using any
+% template. The geographic location for the chart must be specified by
+% latitude and longitude, independently of the template name.
+%
% \begin{figure}
% \horocalcparms{1940}{10}{9}{17:30:0}{W2:55:0}{N53:25:0}
% \horocalculate
@@ -2081,7 +2203,8 @@
% exist \emph{even in theory}. He was probably joking, but so might I be.
% See \emph{``Real'' Analysis is a Degenerate Case of Discrete Analysis},
% D.~Zeilberger,
-% \url{http://www.math.rutgers.edu/~zeilberg/mamarim/mamarimhtml/real.html}.}
+% \changes{v1.0}{2020/07/20}{Upgrade links to HTTPS}
+% \url{https://sites.math.rutgers.edu/~zeilberg/mamarim/mamarimhtml/real.html}.}
% so the decision on how to represent truly exact cusps seems not to be of
% much practical consequence anyway.
%
@@ -2552,7 +2675,7 @@
%
% Note that the spring strength settings are for adjusting
% the {\em relative} strengths of the different kind of adjustments. It
-% will not work to increase or decrese all three uniformly to make
+% will not work to increase or decrease all three uniformly to make
% the overall layout looser or tighter, because the system will simply make
% more or fewer iterations and end up with substantially the same solution.
% Overall looser-tighter control should instead be exercised by changing
@@ -2878,12 +3001,15 @@
%
% These can all be turned on and off independently.
%
+% \changes{v1.0}{2020/07/20}{\texttt{unicode} option}
% \begin{macrocode}
\newif\ifhoro@textsym\horo@textsymfalse
+\newif\ifhoro@unicode\horo@unicodefalse
\newif\ifhoro@wasysym\horo@wasysymfalse
\newif\ifhoro@marvosym\horo@marvosymfalse
\newif\ifhoro@starfont\horo@starfontfalse
\DeclareOption{textsym}{\horo@textsymtrue}
+\DeclareOption{unicode}{\horo@unicodetrue}
\DeclareOption{wasysym}{\horo@wasysymtrue}
\DeclareOption{marvosym}{\horo@marvosymtrue}
\DeclareOption{starfont}{\horo@starfonttrue}
@@ -2935,14 +3061,25 @@
%
% \begin{macrocode}
\ifhoro@textsym\else
- \ifhoro@wasysym\else
- \ifhoro@marvosym\else
- \horo@starfonttrue
+ \ifhoro@unicode\else
+ \ifhoro@wasysym\else
+ \ifhoro@marvosym\else
+ \horo@starfonttrue
+ \fi
\fi
\fi
\fi
% \end{macrocode}
%
+% Because \textsf{iftex} defines conditionals, we must load it
+% unconditionally. Otherwise the parse of our style file (when it skims
+% over not-taken conditional bodies) fails.
+%
+% \changes{v1.0}{2020/07/02}{Require \textsf{iftex}}
+% \begin{macrocode}
+\RequirePackage{iftex}%
+% \end{macrocode}
+%
% Load other packages as needed by the selected options. Since
% there are some name conflicts between macros defined by in different
% packages and we want to retain access to both versions, we save each
@@ -3150,12 +3287,195 @@
\horotextsym
% \end{macrocode}
%
+% \subsubsection{Unicode astrological symbols}
+%
+% \changes{v1.0}{2020/07/20}{\texttt{unicode} option}
+% As with |textsym|, the actual setting of the symbol macros is all inside a
+% |unicode|-specific macro so that we can switch back to it easily
+% after using other symbol sets. The macro |\horounicode@| contains the
+% actual code points in caret notation, which traditional \TeX\ engines
+% cannot process; this macro is called by |\horounicode| conditionally
+% on its detecting a Unicode-compatible engine.
+%
+% \begin{macro}{\horounicode@}
+% \begin{macrocode}
+\ifhoro@unicode\newcommand{\horounicode@}{%
+% \end{macrocode}
+%
+% Signs of the Zodiac:
+% \begin{macrocode}
+\gdef\AriesSymbol{^^^^2648}%
+\gdef\TaurusSymbol{^^^^2649}%
+\gdef\GeminiSymbol{^^^^264a}%
+\gdef\CancerSymbol{^^^^264b}%
+\gdef\LeoSymbol{^^^^264c}%
+\gdef\VirgoSymbol{^^^^264d}%
+\gdef\LibraSymbol{^^^^264e}%
+\gdef\ScorpioSymbol{^^^^264f}%
+\gdef\SagittariusSymbol{^^^^2650}%
+\gdef\CapricornSymbol{^^^^2651}%
+\gdef\AquariusSymbol{^^^^2652}%
+\gdef\PiscesSymbol{^^^^2653}%
+% \end{macrocode}
+%
+% Traditional planets and luminaries:
+% \begin{macrocode}
+\gdef\SunSymbol{^^^^2609}%
+\gdef\MoonSymbol{^^^^263d}%
+\gdef\MercurySymbol{^^^^263f}%
+\gdef\VenusSymbol{^^^^2640}%
+\gdef\MarsSymbol{^^^^2642}%
+\gdef\JupiterSymbol{^^^^2643}%
+\gdef\SaturnSymbol{^^^^2644}%
+\gdef\UranusSymbol{^^^^2645}%
+\gdef\NeptuneSymbol{^^^^2646}%
+\gdef\PlutoSymbol{^^^^2647}%
+% \end{macrocode}
+%
+% Minor planets:
+% \begin{macrocode}
+\gdef\ChironSymbol{^^^^26b7}%
+\gdef\CeresSymbol{^^^^26b3}%
+\gdef\PallasSymbol{^^^^26b4}%
+\gdef\JunoSymbol{^^^^26b5}%
+\gdef\VestaSymbol{^^^^26b6}%
+% \end{macrocode}
+%
+% Derived points:
+% \begin{macrocode}
+\gdef\NorthNodeSymbol{^^^^260a}%
+\gdef\SouthNodeSymbol{^^^^260b}%
+\gdef\LilithSymbol{^^^^26b8}%
+% \end{macrocode}
+%
+% Direction:
+% \begin{macrocode}
+\gdef\horoRetrogradeSymbol{^^^^211e}%
+% \end{macrocode}
+%
+% Aspects:
+% \begin{macrocode}
+\gdef\horoConjunctionSymbol{^^^^260c}%
+\gdef\horoOppositionSymbol{^^^^260d}%
+\gdef\horoTrineSymbol{^^^^25b3}%
+\gdef\horoSquareSymbol{^^^^25a1}%
+\gdef\horoSextileSymbol{^^^^26b9}%
+\gdef\horoQuincunxSymbol{^^^^26bb}%
+\gdef\horoSemisextileSymbol{^^^^26ba}%
+\gdef\horoSemisquareSymbol{^^^^2220}%
+\gdef\horoSesquiquadrateSymbol{^^^^26bc}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% This helper macro typesets a notation that describes a code point in text:
+%
+% \begin{macro}{\horounicode@point}
+% \begin{macrocode}
+\newcommand{\horounicode@point}[1]{\ensuremath{\langle\mbox{U+#1}\rangle}}
+% \end{macrocode}
+% \end{macro}
+%
+% The |\horounicode| driver can either call |\horounicode@| to really
+% use Unicode, or display text-based descriptions of the Unicode code points
+% it wants, depending on the engine. Factoring |\horounicode@| into a
+% separate macro reduces repetition, since |\horounicode| wants to call it in
+% two different places.
+%
+% \begin{macro}{\horounicode}
+% \changes{v1.0}{2020/07/20}{New macro}
+% \begin{macrocode}
+\newcommand{\horounicode}{%
+% \end{macrocode}
+%
+% Call |\horounicode@| if it is safe to do so:
+% \begin{macrocode}
+\ifxetex\horounicode@\else
+\ifluatex\horounicode@\else
+% \end{macrocode}
+%
+% Now define all the code points, as above, but in text notation.
+%
+% Signs of the Zodiac:
+% \begin{macrocode}
+\gdef\AriesSymbol{\horounicode@point{2648}}%
+\gdef\TaurusSymbol{\horounicode@point{2649}}%
+\gdef\GeminiSymbol{\horounicode@point{264A}}%
+\gdef\CancerSymbol{\horounicode@point{264B}}%
+\gdef\LeoSymbol{\horounicode@point{264C}}%
+\gdef\VirgoSymbol{\horounicode@point{264D}}%
+\gdef\LibraSymbol{\horounicode@point{264E}}%
+\gdef\ScorpioSymbol{\horounicode@point{264F}}%
+\gdef\SagittariusSymbol{\horounicode@point{2650}}%
+\gdef\CapricornSymbol{\horounicode@point{2651}}%
+\gdef\AquariusSymbol{\horounicode@point{2652}}%
+\gdef\PiscesSymbol{\horounicode@point{2653}}%
+% \end{macrocode}
+%
+% Traditional planets and luminaries:
+% \begin{macrocode}
+\gdef\SunSymbol{\horounicode@point{2609}}%
+\gdef\MoonSymbol{\horounicode@point{263D}}%
+\gdef\MercurySymbol{\horounicode@point{263F}}%
+\gdef\VenusSymbol{\horounicode@point{2640}}%
+\gdef\MarsSymbol{\horounicode@point{2642}}%
+\gdef\JupiterSymbol{\horounicode@point{2643}}%
+\gdef\SaturnSymbol{\horounicode@point{2644}}%
+\gdef\UranusSymbol{\horounicode@point{2645}}%
+\gdef\NeptuneSymbol{\horounicode@point{2646}}%
+\gdef\PlutoSymbol{\horounicode@point{2647}}%
+% \end{macrocode}
+%
+% Minor planets:
+% \begin{macrocode}
+\gdef\ChironSymbol{\horounicode@point{26B7}}%
+\gdef\CeresSymbol{\horounicode@point{26B3}}%
+\gdef\PallasSymbol{\horounicode@point{26B4}}%
+\gdef\JunoSymbol{\horounicode@point{26B5}}%
+\gdef\VestaSymbol{\horounicode@point{26B6}}%
+% \end{macrocode}
+%
+% Derived points:
+% \begin{macrocode}
+\gdef\NorthNodeSymbol{\horounicode@point{260A}}%
+\gdef\SouthNodeSymbol{\horounicode@point{260B}}%
+\gdef\LilithSymbol{\horounicode@point{26B8}}%
+% \end{macrocode}
+%
+% Direction:
+% \begin{macrocode}
+\gdef\horoRetrogradeSymbol{\horounicode@point{211E}}%
+% \end{macrocode}
+%
+% Aspects:
+% \begin{macrocode}
+\gdef\horoConjunctionSymbol{\horounicode@point{260C}}%
+\gdef\horoOppositionSymbol{\horounicode@point{260D}}%
+\gdef\horoTrineSymbol{\horounicode@point{25B3}}%
+\gdef\horoSquareSymbol{\horounicode@point{25A1}}%
+\gdef\horoSextileSymbol{\horounicode@point{26B9}}%
+\gdef\horoQuincunxSymbol{\horounicode@point{26BB}}%
+\gdef\horoSemisextileSymbol{\horounicode@point{26BA}}%
+\gdef\horoSemisquareSymbol{\horounicode@point{2220}}%
+\gdef\horoSesquiquadrateSymbol{\horounicode@point{26BC}}%
+\fi\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Now invoke |\horounicode| to make these symbols default at the start of
+% the document, except for the few (house cusps, and quintiles) that
+% don't exist in Unicode.
+% \begin{macrocode}
+\horounicode
+\fi
+% \end{macrocode}
+%
% \subsubsection{Symbols from \textsf{wasysym}}
%
% \begin{macro}{\horowasysym}
-% As with |textsym|, the actual setting of the symbol macros is all inside a
-% \textsf{wasysym}-specific macro so that we can switch back to it easily
-% after using other symbol sets.
+% These, too, are inside a macro specific to the package so that we can
+% switch among multiple symbol sets when more than one is loaded.
% \begin{macrocode}
\ifhoro@wasysym\newcommand{\horowasysym}{%
% \end{macrocode}
diff --git a/macros/latex/contrib/horoscop/horoscop.pdf b/macros/latex/contrib/horoscop/horoscop.pdf
index 34bff09192..d7874d4c46 100644
--- a/macros/latex/contrib/horoscop/horoscop.pdf
+++ b/macros/latex/contrib/horoscop/horoscop.pdf
Binary files differ
diff --git a/macros/latex/contrib/semantex/README.md b/macros/latex/contrib/semantex/README.md
index fc47222981..6da44d3d9c 100644
--- a/macros/latex/contrib/semantex/README.md
+++ b/macros/latex/contrib/semantex/README.md
@@ -1,4 +1,4 @@
-SemanTeX - object-oriented mathematics
+SemanTeX - semantic mathematics
--------------------------------------
The SemanTeX package for LaTeX delivers a more semantic,
diff --git a/macros/latex/contrib/semantex/semantex.pdf b/macros/latex/contrib/semantex/semantex.pdf
index 8c9f32df7e..240ae06b3c 100644
--- a/macros/latex/contrib/semantex/semantex.pdf
+++ b/macros/latex/contrib/semantex/semantex.pdf
Binary files differ
diff --git a/macros/latex/contrib/semantex/semantex.sty b/macros/latex/contrib/semantex/semantex.sty
index 1fb42b0bbd..e5125e921f 100644
--- a/macros/latex/contrib/semantex/semantex.sty
+++ b/macros/latex/contrib/semantex/semantex.sty
@@ -1,5 +1,16 @@
\RequirePackage{expl3,xparse}
-\ProvidesExplPackage{semantex}{2020/07/07}{0.201alpha}{}
+\ProvidesExplPackage{semantex}{2020/07/21}{0.3alpha}{}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SemanTeX -- semantic mathematics %
+% https://ctan.org/pkg/semantex %
+% (C) 2020 Sebastian Ørsted %
+% sorsted@gmail.com %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -32,9 +43,15 @@
\msg_new:nnnn { semantex } { object_not_found } { You~set~#1~as~#2~of~unknown~object~#3~on~line~\msg_line_number: } {}
-\msg_new:nnnn { semantex } { created_object_of_unknown_class } { Unknown~class~#1~declared~as~class~of~object~#2~on~line~\msg_line_number: } {}
+\msg_new:nnnn { semantex } { created_object_of_unknown_class } { Unknown~class~#1~declared~as~class~of~#2~on~line~\msg_line_number: } {}
+
+\msg_new:nnnn { semantex } { setup_unknown_class } { You~tried~setting~up~an~unknown~#1~on~line~\msg_line_number: } {}
-\msg_new:nnnn { semantex } { created_a_SemantexVariable } { Never~create~objects~of~class~\SemantexVariable;~create~a~new~class~yourself~instead.~You~created~the~object~#1~on~line~\msg_line_number: } {}
+\msg_new:nnnn { semantex } { setup_unknown_object } { You~tried~setting~up~an~unknown~#1~on~line~\msg_line_number: } {}
+
+\msg_new:nnnn { semantex } { created_a_SemantexBaseObject } { Never~create~objects~of~class~\SemantexBaseObject;~create~a~new~class~yourself~instead.~You~created~the~object~#1~on~line~\msg_line_number: } {}
+
+\msg_new:nnnn { semantex } { generic_error } { #2~#1~on~line~\msg_line_number: } {}
\cs_generate_variant:Nn \msg_error:nnnn { nnnx }
@@ -50,6 +67,8 @@
\tl_set_eq:NN #2 \l__semantex_error_output_format_temp
}
+\cs_generate_variant:Nn \semantex_error_output_format:nN { xN }
+
\cs_generate_variant:Nn \msg_error:nnnnn { nnxnn }
\cs_generate_variant:Nn \msg_error:nnnn { nnxn }
@@ -87,29 +106,89 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DeclareDocumentCommand\semantex_new_plain_class:Nw{mO{}} % new simple-type class
+{
+ % #1 = class name
+ % #2 = options
+ \semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
+ %\semantex_new_class:Nn { #1 } { #2 }
+ \DeclareDocumentCommand{#1}{m}{
+ % the actual \#1 command
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ }
+ }
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_class_\cs_to_str:N #1_with_options:nnw}{mm}{
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ }
+ }
+ \exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_class_\cs_to_str:N #1:Nw}{mgO{}}
+ {
+ % the command for creating a new object of class #1
+ % ##1 = command name, with backslash
+ % ##2 = symbol
+ % ##3 = options
+ \IfValueTF{##2}
+ {
+ \semantex_new_object:NNn #1 ##1 {
+ \semantex_object_set_symbol:Nn ##1 { ##2 }
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
+ }
+ {
+ \semantex_new_object:NNn #1 ##1 {
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
+ }
+ % create the object with name ##1
+ \DeclareDocumentCommand{##1}{}{
+ % the actual \##1 command
+ \semantex_render_object:Nn ##1 { }
+ }
+ }
+}
+
+\tl_set_eq:NN\NewPlainClass\semantex_new_plain_class:Nw
\DeclareDocumentCommand\semantex_new_simple_class:Nw{mO{}} % new simple-type class
{
% #1 = class name
% #2 = options
- \semantex_new_class:Nn { #1 } { #2 }
+ \semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
+ %\semantex_new_class:Nn { #1 } { #2 }
\DeclareDocumentCommand{#1}{mo}{
% the actual \#1 command
\IfValueTF{##2}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##1 }, ##2 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol = { ##1 } }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ }
}
}
\exp_args:Nc\DeclareDocumentCommand{__semantex_make_object_of_class_\cs_to_str:N #1_with_options:nnw}{mmo}{
\IfValueTF{##3}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##2 }, ##1, ##3 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol = { ##2 }, ##1 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ }
}
}
\exp_args:Nc\DeclareDocumentCommand{__semantex_new_object_of_class_\cs_to_str:N #1:Nw}{mgO{}}
@@ -120,17 +199,25 @@
% ##3 = options
\IfValueTF{##2}
{
- \semantex_new_object:NNn { #1 } ##1 { symbol = { ##2 }, ##3 }
+ \semantex_new_object:NNn #1 ##1 {
+ \semantex_object_set_symbol:Nn ##1 { ##2 }
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
}
{
- \semantex_new_object:NNn { #1 } ##1 { ##3 }
+ \semantex_new_object:NNn #1 ##1 {
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
}
% create the object with name ##1
\DeclareDocumentCommand{##1}{o}{
% the actual \##1 command
\IfValueTF { ####1 }
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1 }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ }
}
{
\semantex_render_object:Nn ##1 { }
@@ -147,26 +234,42 @@
{
% #1 = class name
% #2 = options
- \semantex_new_class:Nn { #1 } { #2 }
+ \semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
+ %\semantex_new_class:Nn #1 { #2 }
\DeclareDocumentCommand{#1}{mog}{
% the actual \#1 command
\IfValueTF { ##2 }
{
\IfValueTF { ##3 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1},##2,arg={##3} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_set_arg:Nn #1 { ##3 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1},##2}
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ }
}
}
{
\IfValueTF { ##3 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1},arg={##3} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_arg:Nn #1 { ##3 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol={##1} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ }
}
}
}
@@ -174,19 +277,38 @@
\IfValueTF { ##3 }
{
\IfValueTF { ##4 }{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1, ##3,arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1, ##3 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ }
}
}
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1,arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol={##2}, ##1 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ }
}
}
}
@@ -198,10 +320,15 @@
% ##3 = options
\IfValueTF{##2}
{
- \semantex_new_object:NNn { #1 } ##1 { symbol = { ##2 }, ##3 }
+ \semantex_new_object:NNn #1 ##1 {
+ \semantex_object_set_symbol:Nn ##1 { ##2 }
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
}
{
- \semantex_new_object:NNn { #1 } ##1 { ##3 }
+ \semantex_new_object:NNn #1 ##1 {
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
}
% creates the object with name ##1
\DeclareDocumentCommand{##1}{og}{
@@ -209,16 +336,26 @@
\IfValueTF{####1}{
\IfValueTF{####2}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1, arg={####2} }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_set_arg:Nn ##1 { ####2 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1}
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ }
}
}
{
\IfValueTF{####2}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,arg={####2} }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_arg:Nn ##1 { ####2 }
+ }
}
{
\semantex_render_object:Nn ##1 {}
@@ -234,7 +371,7 @@
{
% #1 = class name
% #2 = options
- \semantex_new_class:Nn { #1 } { #2 }
+ \semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
\DeclareDocumentCommand{#1}{mogg}{
% the actual \#1 command
\IfValueTF{##2}
@@ -245,10 +382,21 @@
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2, *, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_use_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2, * }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_use_bullet:N #1
+ }
}
}
{
@@ -256,19 +404,41 @@
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2, **, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_use_double_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2, ** }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_use_double_bullet:N #1
+ }
}
}
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2, degreedefault={##3}, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_set_degreedefault:Nn #1 { ##3 }
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2, degreedefault={##3} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_set_degreedefault:Nn #1 { ##3 }
+ }
}
}
}
@@ -276,10 +446,19 @@
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ##2 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ }
}
}
}
@@ -290,10 +469,19 @@
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##1}, *, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:N #1 { ##1 }
+ \semantex_class_use_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##1}, *}
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:N #1 { ##1 }
+ \semantex_class_use_bullet:N #1
+ }
}
}
{
@@ -301,19 +489,37 @@
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, **, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:N #1 { ##1 }
+ \semantex_class_use_double_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, ** }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:N #1 { ##1 }
+ \semantex_class_use_double_bullet:N #1
+ }
}
}
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, degreedefault={##3}, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:N #1 { ##1 }
+ \semantex_class_set_degreedefault:Nn #1 { ##3 }
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, degreedefault={##3} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:N #1 { ##1 }
+ \semantex_class_set_degreedefault:Nn #1 { ##3 }
+ }
}
}
}
@@ -321,10 +527,16 @@
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##1}, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol={##1}, arg={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ }
}
}
}
@@ -338,10 +550,23 @@
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1, ##3, *, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_use_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1, ##3, * }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_use_bullet:N #1
+ }
}
}
{
@@ -349,19 +574,45 @@
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 {ifoutput=true, symbol={##2}, ##1, ##3, **, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_use_double_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 {ifoutput=true, symbol={##2}, ##1, ##3, ** }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_use_double_bullet:N #1
+ }
}
}
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1,##3, degreedefault={##4}, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_set_degreedefault:Nn #1 { ##4 }
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1,##3, degreedefault={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_set_degreedefault:Nn #1 { ##4 }
+ }
}
}
}
@@ -369,10 +620,21 @@
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1, ##3, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1, ##3 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ }
}
}
}
@@ -383,10 +645,21 @@
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##2} ,##1, *, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_use_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##2} ,##1, *}
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_use_bullet:N #1
+ }
}
}
{
@@ -394,19 +667,41 @@
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##2} , ##1, **, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_use_double_bullet:N #1
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##2} , ##1, ** }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_use_double_bullet:N #1
+ }
}
}
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##2}, ##1, degreedefault={##4}, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_degreedefault:Nn #1 { ##4 }
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol={##2}, ##1, degreedefault={##4} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_degreedefault:Nn #1 { ##4 }
+ }
}
}
}
@@ -414,10 +709,18 @@
{
\IfValueTF { ##5 }
{
- \semantex_render_class:Nn #1 { ifoutput=true,symbol={##2}, ##1, arg={##5} }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_arg:Nn #1 { ##5 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol={##2}, ##1 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ }
}
}
}
@@ -430,10 +733,15 @@
% ##3 = options
\IfValueTF{##2}
{
- \semantex_new_object:NNn { #1 } { ##1 }{ symbol = { ##2 }, ##3 }
+ \semantex_new_object:NNn #1 { ##1 }{
+ \semantex_object_set_symbol:Nn ##1 { ##2 }
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
}
{
- \semantex_new_object:NNn { #1 } { ##1 }{ ##3 }
+ \semantex_new_object:NNn #1 { ##1 }{
+ \semantex_object_set_keys:Nn ##1 { ##3 }
+ }
}
% creates the object with name ##1
\DeclareDocumentCommand{##1}{ogg}{
@@ -446,10 +754,19 @@
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1, *, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_use_bullet:N ##1
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1, * }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_use_bullet:N ##1
+ }
}
}
{
@@ -457,19 +774,37 @@
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true, ####1, **, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_use_double_bullet:N ##1
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true, ####1, ** }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_use_double_bullet:N ##1
+ }
}
}
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1, degreedefault={ ####2 }, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_set_degreedefault:Nn ##1 { ####2 }
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1, degreedefault={ ####2 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_set_degreedefault:Nn ##1 { ####2 }
+ }
}
}
}
@@ -477,10 +812,17 @@
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1 }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ }
}
}
}
@@ -491,10 +833,17 @@
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true, *, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_use_bullet:N ##1
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true, * }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_use_bullet:N ##1
+ }
}
}
{
@@ -502,19 +851,33 @@
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,**, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_use_double_bullet:N ##1
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,** }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_use_double_bullet:N ##1
+ }
}
}
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,degreedefault={ ####2 }, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_degreedefault:Nn ##1 { ####2 }
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,degreedefault={ ####2 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_degreedefault:Nn ##1 { ####2 }
+ }
}
}
}
@@ -522,7 +885,10 @@
{
\IfValueTF{####3}
{
- \semantex_render_object:Nn ##1 { ifoutput=true, arg={ ####3 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_arg:Nn ##1 { ####3 }
+ }
}
{
\semantex_render_object:Nn ##1 { }
@@ -539,28 +905,41 @@
{
% #1 = class name
% #2 = options
- \semantex_new_class:Nn { #1 } {
- #2
- }
+ \semantex_new_class:Nn { #1 } { \semantex_class_set_keys:Nn #1 { #2 } }
\DeclareDocumentCommand{#1}{mog} % maybe this does not even make sense for delimiters
{
\IfValueTF { ##2 }
{
\IfValueTF { ##3 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##1 }, ##2, arg = { ##3 } }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ \semantex_class_set_arg:Nn #1 { ##3 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##1 }, ##2 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_keys:Nn #1 { ##2 }
+ }
}
}
{
\IfValueTF { ##3 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##1 }, arg = { ##3 } }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ \semantex_class_set_arg:Nn #1 { ##3 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol = { ##1 } }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##1 }
+ }
}
}
}
@@ -571,19 +950,38 @@
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##2 }, ##1, ##3, arg = { ##4 } }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1 { ##3 }
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##2 }, ##1, ##3 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_keys:Nn #1{ ##3 }
+ }
}
}
{
\IfValueTF { ##4 }
{
- \semantex_render_class:Nn #1 { ifoutput=true, symbol = { ##2 }, ##1, arg = { ##4 } }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_do_output:N #1
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ \semantex_class_set_arg:Nn #1 { ##4 }
+ }
}
{
- \semantex_render_class:Nn #1 { symbol = { ##2 }, ##1 }
+ \semantex_render_class:Nn #1 {
+ \semantex_class_set_symbol:Nn #1 { ##2 }
+ ##1
+ }
}
}
}
@@ -593,7 +991,11 @@
% ##1 = command name, with backslash
% ##2 = symbol
% ##3 = options
- \semantex_new_object:NNn { #1 } { ##1 }{ leftpar = { ##2 }, rightpar = { ##3 }, ##4 }
+ \semantex_new_object:NNn #1 { ##1 }{
+ \semantex_object_set_leftpar:Nn ##1 { ##2 }
+ \semantex_object_set_rightpar:Nn ##1 { ##3 }
+ \semantex_object_set_keys:Nn ##1 { ##4 }
+ }
% creates the object with name ##1
\DeclareDocumentCommand{##1}{og}{
% the actual \##1 command
@@ -601,16 +1003,26 @@
{
\IfValueTF { ####2 }
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1, arg = { ####2 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ \semantex_object_set_arg:Nn ##1 { ####2 }
+ }
}
{
- \semantex_render_object:Nn ##1 { ifoutput=true,####1 }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_keys:Nn ##1 { ####1 }
+ }
}
}
{
\IfValueTF { ####2 }
{
- \semantex_render_object:Nn ##1 { ifoutput=true, arg = { ####2 } }
+ \semantex_render_object:Nn ##1 {
+ \semantex_object_do_output:N ##1
+ \semantex_object_set_arg:Nn ##1 { ####2 }
+ }
}
{
\semantex_render_object:Nn ##1 { }
@@ -636,35 +1048,36 @@
}
}
-%\cs_new:Npn\MakeObject#1{ \use:c { __semantex_make_object_of_class_#1:nw } }
-
-\cs_new:Npn \__semantex_new_class_or_object:nn#1#2{
+\cs_new:Npn \__semantex_new_class_or_object:nn#1#2
+{
% create new object
% #1 = name of command, without backslash
% #2 = standard keyval setup
\semantex_data_tl_provide:nn { #1 } { parent }
- \semantex_data_tl_set:nnn { #1 } { parent } { class_SemantexVariable }
+ \semantex_data_tl_set:nnn { #1 } { parent } { class_SemantexBaseObject }
\cs_set:cpn { __semantex_data_cs_#1_valuekey:nn } ##1##2 % command controlling valuekeys
- { \semantex_valuekey:nnn { ##2 } { ##1 } { #1 } }
+ { \semantex_valuekey:nnn { #1 } { ##1 } { ##2 } }
\cs_set:cpn { __semantex_data_cs_#1_singlekey:n } ##1 % command controlling singlekeys
- { \semantex_singlekey:nn { ##1 } { #1 } }
-
+ { \semantex_singlekey:nn { #1 } { ##1 } }
+
% Now a similar collection of keyval commands for the *argument*
\cs_set:cpn { __semantex_data_cs_#1_arg_valuekey:nn } ##1##2
- { \semantex_arg_valuekey:nnn { ##2 } { ##1 }{ #1 } }
+ { \semantex_arg_valuekey:nnn { #1 } { ##1 } { ##2 } }
\cs_set:cpn { __semantex_data_cs_#1_arg_singlekey:n } ##1
- { \semantex_arg_singlekey:nn { ##1 } { #1 } }
+ { \semantex_arg_singlekey:nn { #1 } { ##1 } }
- % initially sets up the keyval interface of the object
- \semantex_keys_set:nn { #1 } { #2 }
+ \cs_set:cpn { __semantex_data_cs_#1_outputoptions:n } ##1 {}
+
+ \cs_set:cpn { __semantex_data_cs_#1_parseoptions:n } ##1 {}
-% \seq_put_right:Nx \g__semantex_all_objects_seq { #1 }
+ % This is used to set up the class/object when creating it
+ #2
}
\cs_generate_variant:Nn \__semantex_new_class_or_object:nn { xn }
@@ -672,29 +1085,134 @@
\cs_new:Npn \semantex_new_class:Nn#1#2{
% create a new class
% #1 = name of class
- % #2 = standard keyval setup; the parent class by default is SemantexVariable
- \semantex_class_if_exist:NTF { #1 }
+ % #2 = standard keyval setup; the parent class by default is SemantexBaseObject
+ \semantex_class_if_exist:NTF #1
{
\msg_error:nnn { semantex } { class_already_defined } { #1 }
}
{
- \semantex_class_register:N { #1 }
+ \semantex_class_register:N #1
\__semantex_new_class_or_object:xn { class_\cs_to_str:N #1 } { #2 }
}
}
\cs_set:Npn \semantex_new_object:NNn#1#2#3
{
- \semantex_object_if_exist:NTF { #2 }
+ \semantex_object_if_exist:NTF #2
{
\msg_error:nnn { semantex } { object_already_defined } { #2 }
}
{
- \semantex_object_register:N { #2 }
- \__semantex_new_class_or_object:xn { object_\cs_to_str:N #2 } { class=#1, #3 }
+ \semantex_object_register:N #2
+ \__semantex_new_class_or_object:xn { object_\cs_to_str:N #2 } {
+ %class=#1, #3
+ \semantex_object_set_class:Nn #2 { #1 }
+ #3
+ }
}
}
+% The following commands are used in the code for creating class types:
+
+\cs_set:Npn\semantex_class_set_symbol:Nn#1#2
+{
+ %\semantex_data_tl_set:xnn { class_\cs_to_str:N#1 } { symbol } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:xn { class_\cs_to_str:N #1 } { #2 }
+}
+
+\cs_set:Npn\semantex_object_set_symbol:Nn#1#2
+{
+ %\semantex_data_tl_set:xnn { object_\cs_to_str:N#1 } { symbol } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:xn { object_\cs_to_str:N #1 } { #2 }
+}
+
+\cs_set:Npn\semantex_class_do_output:N#1
+{
+ \semantex_data_bool_set_true:xn { class_\cs_to_str:N#1 } { output }
+}
+
+\cs_set:Npn\semantex_object_do_output:N#1
+{
+ \semantex_data_bool_set_true:xn { object_\cs_to_str:N#1 } { output }
+}
+
+\cs_set:Npn\semantex_class_set_keys:Nn#1#2
+{
+ \semantex_keys_set:xn { class_\cs_to_str:N #1 } { #2 }
+}
+
+\cs_set:Npn\semantex_object_set_keys:Nn#1#2
+{
+ \semantex_keys_set:xn { object_\cs_to_str:N #1 } { #2 }
+}
+
+\cs_set:Npn\semantex_class_set_arg:Nn#1#2
+{
+ \semantex_valuekey:xnn { class_\cs_to_str:N#1 } { arg } { #2 }
+}
+
+\cs_set:Npn\semantex_object_set_arg:Nn#1#2
+{
+ \semantex_valuekey:xnn { object_\cs_to_str:N#1 } { arg } { #2 }
+}
+
+\cs_set:Npn\semantex_class_set_degreedefault:Nn#1#2
+{
+ \semantex_valuekey:xnn { class_\cs_to_str:N#1 } { degreedefault } { #2 }
+ % should there be \exp_not:n around #2? Probably not, based on the above
+}
+
+\cs_set:Npn\semantex_object_set_degreedefault:Nn#1#2
+{
+ \semantex_valuekey:xnn { object_\cs_to_str:N#1 } { degreedefault } { #2 }
+ % should there be \exp_not:n around #2? Probably not, based on the above
+}
+
+\cs_set:Npn\semantex_class_use_bullet:N#1
+{
+ \semantex_singlekey:xn { class_\cs_to_str:N#1 } { * }
+}
+
+\cs_set:Npn\semantex_object_use_bullet:N#1
+{
+ \semantex_singlekey:xn { object_\cs_to_str:N#1 } { * }
+}
+
+\cs_set:Npn\semantex_class_use_double_bullet:N#1
+{
+ \semantex_singlekey:xn { class_\cs_to_str:N#1 } { * }
+}
+
+\cs_set:Npn\semantex_object_use_double_bullet:N#1
+{
+ \semantex_singlekey:xn { object_\cs_to_str:N#1 } { * }
+}
+
+\cs_set:Npn\semantex_class_set_leftpar:Nn#1#2
+{
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:xn { class_\cs_to_str:N#1 } { #2 }
+}
+
+\cs_set:Npn\semantex_object_set_leftpar:Nn#1#2
+{
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:xn { object_\cs_to_str:N#1 } { #2 }
+}
+
+\cs_set:Npn\semantex_class_set_rightpar:Nn#1#2
+{
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:xn { class_\cs_to_str:N#1 } { #2 }
+}
+
+\cs_set:Npn\semantex_object_set_rightpar:Nn#1#2
+{
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:xn { object_\cs_to_str:N#1 } { #2 }
+}
+
+\cs_set:Npn\semantex_object_set_class:Nn#1#2
+{
+ \semantex_data_class_set:xn { object_\cs_to_str:N #1 } { #2 }
+}
+
\seq_new:N \g__semantex_all_classes_seq % a register for all objects created
\cs_new:Npn\semantex_class_register:N#1
@@ -733,20 +1251,22 @@
% #1 = name of object
% #2 = options
\group_begin:
+ \semantex_provide_user_commands:n { #1 }
\semantex_data_tl_inherit:nn { #1 } { symbol } % Inherit the symbol from parent if not done already
- \semantex_keys_set:nn { #1 } { #2 } % Setup the keys
- \semantex_primitive_valuekey_parse:nn { #1 } { } % Run the "parse" routine, i.e. the collection of code that the user has added to the parse register
+ %\semantex_keys_set:nn { #1 } { #2 } % Setup the keys
+ #2
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parse:nn { #1 } { } % Run the "parse" routine, i.e. the collection of code that the user has added to the parse register
\semantex_data_bool_get:nnTF { #1 } { output } % Checks if the object/class is supposed to output
{
- \semantex_primitive_valuekey_innerreturn:nn { #1 }{}
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_innerreturn:nn { #1 }{}
\semantex_data_int_if_positive:nnTF { #1 } { numberofarguments } % Checks if more than one argument has been received, i.e. whether we want to render any argument
{
\semantex_data_bool_get:nnTF { #1 } { leftargument } % Checks if left or right argument
{
- \semantex_primitive_valuekey_leftreturn:nn { #1 }{}
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftreturn:nn { #1 }{}
}
{
- \semantex_primitive_valuekey_rightreturn:nn { #1 }{}
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightreturn:nn { #1 }{}
}
}
{
@@ -759,20 +1279,28 @@
__semantex_make_object_of_\semantex_data_tl_get:nn { #1 } { output }_with_options:nnw
} % This is for outputting -- the command \__semantex_make_object_of_class_???_with_options:nnw makes a one-time object of class ??? and allows us to immediately parse options to it
{
- upperputleft={\semantex_data_tl_get_exp_not:nn { #1 } { upper }},
- lowerputleft={\semantex_data_tl_get_exp_not:nn { #1 } { lower }},
- upperleftputright={\semantex_data_tl_get_exp_not:nn { #1 } { upperleft }},
- lowerleftputright={\semantex_data_tl_get_exp_not:nn { #1 } { lowerleft }},
- preupper={\semantex_data_tl_get_exp_not:nn { #1 } { preupper }},
- postupper={\semantex_data_tl_get_exp_not:nn { #1 } { postupper }},
- prelower={\semantex_data_tl_get_exp_not:nn { #1 } { prelower }},
- postlower={\semantex_data_tl_get_exp_not:nn { #1 } { postlower }},
- preupperleft={\semantex_data_tl_get_exp_not:nn { #1 } { preupperleft }},
- postupperleft={\semantex_data_tl_get_exp_not:nn { #1 } { postupperleft }},
- prelowerleft={\semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft }},
- postlowerleft={\semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft }},
- texclass={\semantex_data_tl_get:nn { #1 } { texclass }},
- \semantex_data_tl_get_exp_not:nn { #1 } { outputoptions },
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperputleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { upper } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerputleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { lower } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftputright:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { upperleft } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftputright:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { lowerleft } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { preupper } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postupper } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { prelower } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postlower } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupperleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { preupperleft } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupperleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postupperleft } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelowerleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { prelowerleft } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlowerleft:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { postlowerleft } }
+ \exp_not:N\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_texclass:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get:nn { #1 } { texclass } }
+ %\exp_not:N\semantex_keys_set:nn { \semantex_data_tl_get:nn { #1 } { output } } { \semantex_data_tl_get_exp_not:nn { #1 } { outputoptions } }
+ %\semantex_data_tl_get_exp_not:nn { #1 } { outputoptions }
+ %\exp_not:c
+% \exp_args:Nc\exp_not:N
+% { __semantex_data_cs_#1_outputoptions:n } {
+% \semantex_data_tl_get:nn { #1 } { output }
+% }
+% \semantex_data_cs_get_exp_not:nn { #1 } { outputoptions:n } { \semantex_data_tl_get:nn { #1 } { output } }
+ \semantex_data_cs_get:nn { #1 } { outputoptions:n } { \semantex_data_tl_get:nn { #1 } { output } }
% These are the options we parse to our object -- this is all
% information that we pass on to the output class so that it
% can eventually render it
@@ -781,7 +1309,7 @@
}
}
{
- \semantex_primitive_valuekey_return:nn { #1 }{} % Returns the object/class, i.e. adds all remaining indices and arguments to it
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn { #1 }{} % Returns the object/class, i.e. adds all remaining indices and arguments to it
\tl_if_blank:xTF { \semantex_data_tl_get:nn { #1 } { texclass } }
% Checks whether the texclass register has been declared -- this is
% where you store \mathord, \mathbin, \mathrel, etc., if you want
@@ -801,6 +1329,20 @@
\l__semantex_render_temp % This neat trick allows outputting to different classes to work as expected
}
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperputleft:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerputleft:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftputright:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftputright:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupperleft:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupperleft:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelowerleft:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlowerleft:nn { nx }
+%\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_texclass:nn { nx }
+
\cs_generate_variant:Nn \__semantex_render:nn { xn }
\cs_set:Npn\semantex_render_class:Nn#1#2 % a front-end command
@@ -1019,7 +1561,7 @@
% \use:c { g__semantex_data_tl_#1_#2 }
% }
% {
-% \tl_if_eq:nnTF { #1 } { SemantexVariable }
+% \tl_if_eq:nnTF { #1 } { SemantexBaseObject }
% {
% \msg_error:nnnn { semantex } { data_tl_not_found } { #2 } { #3 }
% }
@@ -1052,8 +1594,8 @@
\tl_set:cx { g__semantex_data_tl_#1_parent } { class_\cs_to_str:N#2 }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_parent_set_temp
- \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_parent_set_temp } { parent } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_parent_set_temp_tl
+ \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_parent_set_temp_tl } { parent } { #2 }
}
}
@@ -1064,11 +1606,13 @@
\tl_set:cx { g__semantex_data_tl_#1_parent } { class_\cs_to_str:N#2 }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_class_set_temp
- \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_class_set_temp } { class } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_class_set_temp_tl
+ \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_class_set_temp_tl } { class } { #2 }
}
}
+\cs_generate_variant:Nn \semantex_data_class_set:nn { xn }
+
\cs_new:Npn \semantex_data_copy_object:nn#1#2
{
\semantex_object_if_exist:NTF { #2 }
@@ -1076,8 +1620,8 @@
\tl_set:cx { g__semantex_data_tl_#1_parent } { object_\cs_to_str:N#2 }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_copy_object_temp
- \msg_error:nnxnn { semantex } { object_not_found } { \l__semantex_data_copy_object_temp } { copy } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_copy_object_temp_tl
+ \msg_error:nnxnn { semantex } { object_not_found } { \l__semantex_data_copy_object_temp_tl } { copy } { #2 }
}
}
@@ -1088,11 +1632,69 @@
\tl_set:cx { g__semantex_data_tl_#1_parent } { object_\cs_to_str:N#2 }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_data_clone_object_temp
- \msg_error:nnxnn { semantex } { object_not_found } { \l__semantex_data_clone_object_temp } { clone } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_clone_object_temp_tl
+ \msg_error:nnxnn { semantex } { object_not_found } { \l__semantex_data_clone_object_temp_tl } { clone } { #2 }
+ }
+}
+
+% COMMANDS FOR HANDLING DATA CONSISTING OF COMMAND SEQUENCES:
+
+\cs_new:Npn\semantex_data_cs_set:nnn#1#2#3
+{
+ \cs_set:cn { __semantex_data_cs_#1_#2 } { #3 }
+}
+
+\cs_generate_variant:Nn \cs_set:Nn { cn }
+
+\cs_generate_variant:Nn \semantex_data_cs_set:nnn { nno , nnV , nnv }
+
+\cs_new:Npn\semantex_data_cs_get:nn#1#2
+{
+ % #1 = name of the object
+ % #2 = command sequence to get
+ \cs_if_exist:cTF { __semantex_data_cs_#1_#2 }
+ {
+ \use:c { __semantex_data_cs_#1_#2 }
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ {
+ % should probably throw an error by now, but later!
+ }
+ {
+ \semantex_data_cs_get:fn { \semantex_data_parent_get:n {#1} } { #2 }
+ }
}
}
+\cs_generate_variant:Nn \semantex_data_cs_get:nn { fn }
+
+\cs_new:Npn\semantex_data_cs_get_exp_not:nn#1#2
+{
+ % #1 = name of the object
+ % #2 = command sequence to get
+ \cs_if_exist:cTF { __semantex_data_cs_#1_#2 }
+ {
+ \exp_not:c { __semantex_data_cs_#1_#2 }
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ {
+ % should probably throw an error by now, but later!
+ }
+ {
+ \semantex_data_cs_get_exp_not:fn { \semantex_data_parent_get:n {#1} } { #2 }
+ }
+ }
+}
+
+\cs_generate_variant:Nn \semantex_data_cs_get_exp_not:nn { fn }
+
+\cs_new:Npn\semantex_data_cs_clear:nn#1#2
+{
+ \cs_set:cn { __semantex_data_cs_#1_#2 } {}
+}
+
% COMMANDS FOR HANDLING DATA CONSISTING OF TOKEN LISTS
\cs_new:Npn \semantex_data_tl_get:nn#1#2
@@ -1116,10 +1718,10 @@
\use:c { g__semantex_data_tl_#1_#2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable } % Apparently, f-type expansion seemed to work here for once
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject } % Apparently, f-type expansion seemed to work here for once
{
- \semantex_error_output_format:nN { #3 } \__semantex_data_tl_get_auxiliary_temp
- \msg_error:nnxn { semantex } { data_tl_not_found } { \__semantex_data_tl_get_auxiliary_temp } { #2 }
+ \semantex_error_output_format:nN { #3 } \l__semantex_data_tl_get_auxiliary_temp_tl
+ \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_auxiliary_temp_tl } { #2 }
}
{
\__semantex_data_tl_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1159,10 +1761,10 @@
\exp_not:v { g__semantex_data_tl_#1_#2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable } % Apparently, f-type expansion seemed to work here for once
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject } % Apparently, f-type expansion seemed to work here for once
{
- \semantex_error_output_format:nN { #3 } \l__semantex_data_tl_get_exp_not_auxiliary_temp
- \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_exp_not_auxiliary_temp } { #2 }
+ \semantex_error_output_format:nN { #3 } \l__semantex_data_tl_get_exp_not_auxiliary_temp_tl
+ \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_exp_not_auxiliary_temp_tl } { #2 }
}
{
\__semantex_data_tl_get_exp_not_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1191,10 +1793,10 @@
\tl_set_eq:Nc #3 { g__semantex_data_tl_#1_#2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_data_tl_get_store_auxiliary_temp
- \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_store_auxiliary_temp } { #2 }
+ \semantex_error_output_format:nN { #4 } \l__semantex_data_tl_get_store_auxiliary_temp_tl
+ \msg_error:nnxn { semantex } { data_tl_not_found } { \l__semantex_data_tl_get_store_auxiliary_temp_tl } { #2 }
}
{
\__semantex_data_tl_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -1240,7 +1842,7 @@
\tl_set:cn { g__semantex_data_tl_#1_#2 } { #3 }
}
-\cs_generate_variant:Nn \semantex_data_tl_set:nnn { nnx }
+\cs_generate_variant:Nn \semantex_data_tl_set:nnn { nnx , xnn , xnx }
\cs_new:Npn \semantex_data_tl_put_right:nnn#1#2#3
{
@@ -1318,10 +1920,10 @@
\int_use:c { g__semantex_data_int_#1_#2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #3 } \__semantex_data_int_get_auxiliary_temp
- \msg_error:nnxn { semantex } { data_int_not_found } { \__semantex_data_int_get_auxiliary_temp } { #2 }
+ \semantex_error_output_format:nN { #3 } \__semantex_data_int_get_auxiliary_temp_tl
+ \msg_error:nnxn { semantex } { data_int_not_found } { \__semantex_data_int_get_auxiliary_temp_tl } { #2 }
}
{
\__semantex_data_int_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1329,10 +1931,10 @@
}
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #3 } \__semantex_data_int_get_auxiliary_temp
- \msg_error:nnxn { semantex } { data_int_not_found } { \__semantex_data_int_get_auxiliary_temp } { #2 }
+ \semantex_error_output_format:nN { #3 } \__semantex_data_int_get_auxiliary_temp_tl
+ \msg_error:nnxn { semantex } { data_int_not_found } { \__semantex_data_int_get_auxiliary_temp_tl } { #2 }
}
{
\__semantex_data_int_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -1361,10 +1963,10 @@
\int_set_eq:Nc#3 { g__semantex_data_int_#1_#2 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_data_int_get_store_auxiliary_temp
- \msg_error:nnxn { semantex } { data_int_not_found } { \l__semantex_data_int_get_store_auxiliary_temp } { #2 }
+ \semantex_error_output_format:nN { #4 } \l__semantex_data_int_get_store_auxiliary_temp_tl
+ \msg_error:nnxn { semantex } { data_int_not_found } { \l__semantex_data_int_get_store_auxiliary_temp_tl } { #2 }
}
{
\__semantex_data_int_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -1372,10 +1974,10 @@
}
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_error_output_format:nN { #4 } \l__semantex_data_int_get_store_auxiliary_temp
- \msg_error:nnxn { semantex } { data_int_not_found } { \l__semantex_data_int_get_store_auxiliary_temp } { #2 }
+ \semantex_error_output_format:nN { #4 } \l__semantex_data_int_get_store_auxiliary_temp_tl
+ \msg_error:nnxn { semantex } { data_int_not_found } { \l__semantex_data_int_get_store_auxiliary_temp_tl } { #2 }
}
{
\__semantex_data_int_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -1424,6 +2026,21 @@
\semantex_data_int_if_greater_than_one:nnTF { #1 } { #2 } { } { #3 }
}
+\cs_new:Npn\semantex_data_int_if_greater_than:nnnTF#1#2#3#4#5
+{
+ \int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } > { #3 } { #4 } { #5 }
+}
+
+\cs_new:Npn\semantex_data_int_if_less_than:nnnTF#1#2#3#4#5
+{
+ \int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } < { #3 } { #4 } { #5 }
+}
+
+\cs_new:Npn\semantex_data_int_if_equal:nnnTF#1#2#3#4#5
+{
+ \int_compare:nNnTF { \semantex_data_int_get:nn { #1 } { #2 } } < { #3 } { #4 } { #5 }
+}
+
\cs_new:Npn\semantex_data_int_clear:nn#1#2
{
\semantex_data_int_provide:nn { #1 } { #2 }
@@ -1499,143 +2116,6 @@
\seq_clear:c { g__semantex_data_seq_#1_#2 }
}
-% COMMANDS FOR HANDLING DATA OF TYPE PROPERTY LIST:
-
-\cs_new:Npn \semantex_data_prop_provide:nn#1#2
-{
- % #1 = name of the object
- % #2 = name of the prop
- \prop_if_exist:cF { g__semantex_data_prop_#1_#2 } { \prop_new:c { g__semantex_data_prop_#1_#2 } }
-}
-
-\cs_new:Npn \semantex_data_prop_put:nnnn#1#2#3#4
-{
- \semantex_data_prop_provide:nn { #1 } { #2 } % important that we do not inherit! This is crucial for getting the right inheritance for key interfaces
- \prop_put:cnn { g__semantex_data_prop_#1_#2 } { #3 } { #4 }
-}
-
-\cs_new:Npn\semantex_data_prop_remove:nnn#1#2#3
-{
- \prop_if_exist:cT { g__semantex_data_prop_#1_#2 }
- {
- \prop_remove:cn { g__semantex_data_prop_#1_#2 } { #3 }
- }
-}
-
-
-\cs_new:Npn \semantex_valuekey_get:nnNTF#1#2#3#4#5{%
- % #1 = name of the object
- % #2 = keyval data to get
- % #3 = command to store possible data in
- % #4 = if true (not to be used)
- % #5 = if false
- \prop_get:cnNTF { g__semantex_data_prop_#1_custom_valuekeys } { #2 } #3
- {
- #4
- }
- {
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
- {
- #5
- }
- {
- \semantex_valuekey_get:fnNTF { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 } { #5 }
- }
- }
-}
-
-\cs_new:Npn\semantex_valuekey_remove:nn#1#2
-{
- \semantex_data_prop_remove:nnn { #1 } { custom_valuekeys } { #2 }
-}
-
-\cs_generate_variant:Nn \semantex_valuekey_get:nnNTF { fnNTF, vnNTF, xnNTF }
-
-\cs_new:Npn \semantex_singlekey_get:nnNTF#1#2#3#4#5{%
- % #1 = name of the object
- % #2 = singlekey data to get
- % #3 = command to store possible data in
- % #4 = if true (not to be used)
- % #5 = if false
- \prop_get:cnNTF { g__semantex_data_prop_#1_custom_singlekeys } { #2 } #3
- {
- #4
- }
- {
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
- {
- #5
- }
- {
- \semantex_singlekey_get:fnNTF { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 } { #5 }
- }
- }
-}
-
-\cs_new:Npn\semantex_singlekey_remove:nn#1#2
-{
- \semantex_data_prop_remove:nnn { #1 } { custom_singlekeys } { #2 }
-}
-
-\cs_generate_variant:Nn \semantex_singlekey_get:nnNTF { fnNTF, vnNTF, xnNTF }
-
-\cs_new:Npn \semantex_arg_valuekey_get:nnNTF#1#2#3#4#5{%
- % #1 = name of the object
- % #2 = keyval data to get
- % #3 = command to store possible data in
- % #4 = if true (not to be used)
- % #5 = if false
- \prop_get:cnNTF { g__semantex_data_prop_#1_custom_arg_valuekeys } { #2 }#3%\l_semantex_valuekey_get_temp
- {
- #4
- }
- {
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
- {
- #5
- }
- {
- \semantex_arg_valuekey_get:fnNTF { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 } { #5 }
- }
- }
-}
-
-\cs_generate_variant:Nn \semantex_arg_valuekey_get:nnNTF { fnNTF, vnNTF, xnNTF }
-
-\cs_new:Npn\semantex_arg_valuekey_remove:nn#1#2
-{
- \semantex_data_prop_remove:nnn { #1 } { custom_arg_valuekeys } { #2 }
-}
-
-
-\cs_new:Npn \semantex_arg_singlekey_get:nnNTF#1#2#3#4#5{%
- % #1 = name of the object
- % #2 = singlekey data to get
- % #3 = command to store possible data in
- % #4 = if true (not to be used)
- % #5 = if false
- \prop_get:cnNTF { g__semantex_data_prop_#1_custom_arg_singlekeys } { #2 } #3
- {
- #4
- }
- {
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
- {
- #5
- }
- {
- \semantex_arg_singlekey_get:fnNTF { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 } { #5 }
- }
- }
-}
-
-\cs_generate_variant:Nn \semantex_arg_singlekey_get:nnNTF { fnNTF, vnNTF, xnNTF }
-
-\cs_new:Npn\semantex_arg_singlekey_remove:nn#1#2
-{
- \semantex_data_prop_remove:nnn { #1 } { custom_arg_singlekeys } { #2 }
-}
-
% COMMANDS FOR HANDLING DATA OF TYPE BOOLEAN:
\cs_new:Npn\semantex_data_bool_get:nnTF#1#2#3#4
@@ -1651,7 +2131,7 @@
\bool_if:cTF { g__semantex_data_bool_#1_if_#2 } { #3 } { #4 }
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
#4
}
@@ -1661,7 +2141,7 @@
}
}
{
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
#4
}
@@ -1704,6 +2184,8 @@
\bool_set_true:c { g__semantex_data_bool_#1_if_#2 }
}
+\cs_generate_variant:Nn \semantex_data_bool_set_true:nn { xn }
+
\cs_new:Npn\semantex_data_bool_set_false:nn#1#2
{
% #1 = name of the object
@@ -1714,36 +2196,15 @@
% COMMANDS FOR HANDLING COMMAND SEQUENCE DATA AND KEYVAL SYNTAX:
-\cs_new:Npn\semantex_data_cs_get:nnn#1#2#3
-{
- % #1 = name of the object
- % #2 = command sequence to get
- % #3 = what to apply said command sequence to
- \cs_if_exist:cTF { __semantex_data_cs_#1_#2:n }
- {
- \use:c { __semantex_data_cs_#1_#2:n } { #3 }
- }
- {
- \str_if_eq:nnTF { #1 } { class_SemantexVariable }
- {
- % should probably throw an error by now, but later!
- }
- {
- \semantex_data_cs_get:xnn { \semantex_data_parent_get:n {#1} } { #2 } { #3 }
- }
- }
-}
-
-\cs_generate_variant:Nn \semantex_data_cs_get:nnn { xnn }
-
-\cs_generate_variant:Nn \keyval_parse:NNn { cco }
+\cs_generate_variant:Nn \keyval_parse:NNn { cco , ccn }
\cs_new:Npn \semantex_keys_set:nn#1#2
{
+ \semantex_provide_user_commands:n { #1 }
% The central command for doing keyval setup
% #1 = object
% #2 = keys
- \keyval_parse:cco % Could be nice to get rid of o-type expansion, but so far has not been possible
+ \keyval_parse:ccn % Used to use o-type expansions, but no longer seems necessary
{ __semantex_data_cs_#1_singlekey:n }
{ __semantex_data_cs_#1_valuekey:nn }
{ #2 }
@@ -1754,7 +2215,7 @@
% The central command for doing keyval setup for the argument
% #1 = object
% #2 = keys
- \keyval_parse:cco % See last command
+ \keyval_parse:ccn % See last command
{ __semantex_data_cs_#1_arg_singlekey:n }
{ __semantex_data_cs_#1_arg_valuekey:nn }
{ #2 }
@@ -1775,35 +2236,163 @@
\DeclareDocumentCommand\SetupClass{mm}{ % a user-level command for setting up the object
% #1 = class
% #2 = setup
- \semantex_keys_set:xn { class_\cs_to_str:N #1 }{ #2 }
+ \semantex_class_if_exist:NTF #1
+ {
+ \semantex_keys_set:xn { class_\cs_to_str:N #1 }{ #2 }
+ }
+ {
+ \semantex_error_output_format:xN { class_\cs_to_str:N #1 } \l__setup_class_temp_tl
+ \msg_error:nnx { semantex } { setup_unknown_class } { \l__setup_class_temp_tl }
+ }
}
\DeclareDocumentCommand\SetupObject{mm}{%
% #1 = object
% #2 = setup
- \semantex_keys_set:xn { object_\cs_to_str:N #1 } { #2 }
+ \semantex_object_if_exist:NTF #1
+ {
+ \semantex_keys_set:xn { object_\cs_to_str:N #1 }{ #2 }
+ }
+ {
+ \semantex_error_output_format:xN { object_\cs_to_str:N #1 } \l__setup_object_temp_tl
+ \msg_error:nnx { semantex } { setup_unknown_object } { \l__setup_object_temp_tl }
+ }
+}
+
+\cs_new:Npn\semantex_valuekey:nnn#1#2#3
+{
+ \__semantex_valuekey:nnnn { #1 } { #2 } { #3 } { #1 }
+}
+
+\cs_new:Npn \__semantex_valuekey:nnnn#1#2#3#4
+{
+ % Takes care of valuekeys, keys taking a value
+ % #1 = class/object
+ % #2 = name of the key
+ % #3 = value
+ \cs_if_exist:cTF { __semantex_data_cs_custom_valuekey_#1_#2:nn }
+ {
+ \use:c { __semantex_data_cs_custom_valuekey_#1_#2:nn } { #4 } { #3 }
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
+ {
+ \semantex_error_output_format:nN { #4 } \l__semantex_valuekey_unknown_key_temp_tl
+ \msg_error:nnxn { semantex } { valuekey_not_found } { \l__semantex_valuekey_unknown_key_temp_tl } { #2 }
+ }
+ {
+ \__semantex_valuekey:fnnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 }
+ }
+ }
+}
+
+\cs_generate_variant:Nn \__semantex_valuekey:nnnn { fnnn }
+
+\cs_generate_variant:Nn \semantex_valuekey:nnn { xnn }
+
+\cs_new:Npn\semantex_singlekey:nn#1#2
+{
+ \__semantex_singlekey:nnn { #1 } { #2 } { #1 }
+}
+
+\cs_new:Npn\__semantex_singlekey:nnn#1#2#3
+{
+ % #1 = class/object
+ % #2 = name of the key
+ \cs_if_exist:cTF { \tl_to_str:n{__semantex_data_cs_custom_singlekey_#1_#2:n } }
+ {
+ \use:c { __semantex_data_cs_custom_singlekey_#1_#2:n } { #3 }
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
+ {
+ \semantex_valuekey:nnn { #3 } { default } { #2 }
+ %#2
+ }
+ {
+ \__semantex_singlekey:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
+ }
+ }
+}
+
+\cs_generate_variant:Nn \__semantex_singlekey:nnn { fnn }
+
+\cs_generate_variant:Nn \semantex_singlekey:nn { xn }
+
+\cs_new:Npn\semantex_arg_valuekey:nnn#1#2#3
+{
+ % CHANGE ORDER OF KEYS
+ \__semantex_arg_valuekey:nnnn { #1 } { #2 } { #3 } { #1 }
}
+\cs_new:Npn \__semantex_arg_valuekey:nnnn#1#2#3#4
+{
+ % Takes care of valuekeys, keys with a value
+ % For the sake of implementation, the arguments
+ % come in a strange order
+ % #1 = class/object
+ % #2 = name of the key
+ % #3 = value of the key
+ \cs_if_exist:cTF { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn }
+ {
+ \use:c { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn } { #4 } { #3 }
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
+ {
+ \semantex_error_output_format:nN { #4 } \l__semantex_valuekey_unknown_arg_key_temp_tl
+ \msg_error:nnxn { semantex } { arg_valuekey_not_found } { \l__semantex_valuekey_unknown_arg_key_temp_tl } { #2 }
+ }
+ {
+ \__semantex_arg_valuekey:fnnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 }
+ }
+ }
+}
+
+\cs_generate_variant:Nn \__semantex_arg_valuekey:nnnn { fnnn }
+
+\cs_new:Npn \semantex_arg_singlekey:nn#1#2
+{
+ \__semantex_arg_singlekey:nnn { #1 } { #2 } { #1 }
+}
+
+\cs_new:Npn \__semantex_arg_singlekey:nnn#1#2#3
+{
+ % #1 = class/object
+ % #2 = name of the key
+ \cs_if_exist:cTF { \tl_to_str:n{__semantex_data_cs_custom_arg_singlekey_#1_#2:n } }
+ {
+ \use:c { __semantex_data_cs_custom_arg_singlekey_#1_#2:n } { #3 }
+ }
+ {
+ \str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
+ {
+ \semantex_arg_valuekey:nnn { #3 } { default } { #2 }
+ %#2
+ }
+ {
+ \__semantex_arg_singlekey:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
+ }
+ }
+}
+
+\cs_generate_variant:Nn \__semantex_arg_singlekey:nnn { fnn }
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% THE PRIMITIVE VALUEKEYS
+% THE VALUEKEYS FOR \SemantexBaseObject
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Now for the commands that are the basis of the keyval interface.
-% This basis consists of a collection of so-called "primitive"
-% valuekeys, which all use the syntax
-% \semantex_primitive_<nameOfValuekey>:nn
-% These are like primitive TeX commands -- they are not defined in
-% terms of other keys, and all other keys have to defined in terms
-% of these, one way or another.
+% Now for the commands that are the basis of the keyval interface,
+% namely the keys providing the keyval interface for the
+% class \SemantexBaseObject. For historical reasons, they are defined
+% as below as standalone commands and not when delcaring the
+% class \SemantexBaseObject. I hope to change this in the future, but
+% this is purely a matter of aesthetics, with no practical consequences.
% For all of them, #1 = name of the class/object, and #2 = value of
-% the key. To keep the system as simple as possible, I chose only to
-% make primitive valuekeys, so there is no such thing as a primitive
-% singlekey. Therefore, for instance, the singlekey "return" is
-% defined as "return=", where return is a primitive valuekey that
-% does not use the value of the key for anything.
+% the key.
% First, some very simple keys that we shall need over and over again:
@@ -1870,22 +2459,22 @@
\cs_generate_variant:Nn \tl_if_blank:nF { xF }
-\cs_new:Npn\semantex_primitive_valuekey_execute:nn#1#2
+\cs_new:Npn\semantex_provide_user_commands:n#1
{
% This keys just executes whatever data you plug into it.
% Possibly, going forward, it might make more sense to define all
% of these commands in the keyval handling command
% so that the get commands are accessible from all keys.
- \cs_set:Npn\SemantexDataProvide##1{\semantex_data_tl_provide:nn{#1}{##1}}
- \cs_set:Npn\SemantexDataSet##1##2{\semantex_data_tl_set:nnn{#1}{##1}{##2}}
- \cs_set:Npn\SemantexDataSetx##1##2{\semantex_data_tl_set:nnx{#1}{##1}{##2}}
- \cs_set:Npn\SemantexDataPutRight##1##2{\semantex_data_tl_put_right:nnn{#1}{##1}{##2}}
- \cs_set:Npn\SemantexDataPutRightx##1##2{\semantex_data_tl_put_right:nnx{#1}{##1}{##2}}
- \cs_set:Npn\SemantexDataPutLeft##1##2{\semantex_data_tl_put_left:nnn{#1}{##1}{##2}}
- \cs_set:Npn\SemantexDataPutLeftx##1##2{\semantex_data_tl_put_left:nnx{#1}{##1}{##2}}
- \cs_set:Npn\SemantexDataGet##1{\semantex_data_tl_get:nn{#1}{##1}}
- \cs_set:Npn\SemantexDataGetExpNot##1{\semantex_data_tl_get_exp_not:nn{#1}{##1}}
- \cs_set:Npn\SemantexDataClear##1{\semantex_data_tl_clear:nn{#1}{##1}}
+ \cs_set:Npn\SemantexDataProvide##1{\semantex_data_tl_provide:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexDataSet##1##2{\semantex_data_tl_set:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
+ \cs_set:Npn\SemantexDataSetx##1##2{\semantex_data_tl_set:nnx{#1}{\tl_trim_spaces:n{##1}}{##2}}
+ \cs_set:Npn\SemantexDataPutRight##1##2{\semantex_data_tl_put_right:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
+ \cs_set:Npn\SemantexDataPutRightx##1##2{\semantex_data_tl_put_right:nnx{#1}{\tl_trim_spaces:n{##1}}{##2}}
+ \cs_set:Npn\SemantexDataPutLeft##1##2{\semantex_data_tl_put_left:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
+ \cs_set:Npn\SemantexDataPutLeftx##1##2{\semantex_data_tl_put_left:nnx{#1}{\tl_trim_spaces:n{##1}}{##2}}
+ \cs_set:Npn\SemantexDataGet##1{\semantex_data_tl_get:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexDataGetExpNot##1{\semantex_data_tl_get_exp_not:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexDataClear##1{\semantex_data_tl_clear:nn{#1}{\tl_trim_spaces:n{##1}}}
\cs_set:Npn\SemantexKeysSet##1{\semantex_keys_set:nn{#1}{##1}}
\cs_set:Npn\SemantexKeysSetx##1{\semantex_keys_set:nx{#1}{##1}}
\cs_set:Npn\SemantexStrIfEqTF##1##2##3##4{\str_if_eq:xxTF{##1}{##2}{##3}{##4}}
@@ -1894,56 +2483,515 @@
\cs_set:Npn\SemantexIfBlankTF##1##2##3{\tl_if_blank:xTF{##1}{##2}{##3}}
\cs_set:Npn\SemantexIfBlankT##1##2{\tl_if_blank:xT{##1}{##2}}
\cs_set:Npn\SemantexIfBlankF##1##2{\tl_if_blank:xF{##1}{##2}}
- \cs_set:Npn\SemantexBoolProvide##1{\semantex_data_bool_provide:nn{#1}{##1}}
- \cs_set:Npn\SemantexBoolSetTrue##1{\semantex_data_bool_set_true:nn{#1}{##1}}
- \cs_set:Npn\SemantexBoolSetFalse##1{\semantex_data_bool_set_false:nn{#1}{##1}}
- \cs_set:Npn\SemantexBoolIfTF##1##2##3{\semantex_data_bool_get:nnTF{#1}{##1}{##2}{##3}}
- \cs_set:Npn\SemantexBoolIfT##1##2{\semantex_data_bool_get:nnTF{#1}{##1}{##2}{}}
- \cs_set:Npn\SemantexBoolIfF##1##2{\semantex_data_bool_get:nnTF{#1}{##1}{}{##2}}
- \cs_set:Npn\SemantexIntProvide##1{\semantex_data_int_provide:nn{#1}{##1}}
- \cs_set:Npn\SemantexIntGet##1{\semantex_data_int_get:nn{#1}{##1}}
- \cs_set:Npn\SemantexIntClear##1{\semantex_data_int_clear:nn{#1}{##1}}
- \cs_set:Npn\SemantexIntIncr##1{\semantex_data_int_incr:nn{#1}{##1}}
- \cs_set:Npn\SemantexIntSet##1##2{\semantex_data_int_set:nnn{#1}{##1}{##2}}
- \cs_set:Npn\SemantexIntIfPositiveTF##1##2##3{\semantex_data_int_if_positive:nnTF{#1}{##1}{##2}{##3}}
- \cs_set:Npn\SemantexIntIfPositiveT##1##2{\semantex_data_int_if_positive:nnT{#1}{##1}{##2}}
- \cs_set:Npn\SemantexIntIfPositiveF##1##2{\semantex_data_int_if_positive:nnF{#1}{##1}{##2}}
- \cs_set:Npn\SemantexIntIfGreaterThanOneTF##1##2##3{\semantex_data_int_if_greater_than_one:nnTF{#1}{##1}{##2}{##3}}
- \cs_set:Npn\SemantexIntIfGreaterThanOneT##1##2{\semantex_data_int_if_greater_than_one:nnT{#1}{##1}{##2}}
- \cs_set:Npn\SemantexIntIfGreaterThanOneF##1##2{\semantex_data_int_if_greater_than_one:nnF{#1}{##1}{##2}}
+ \cs_set:Npn\SemantexBoolProvide##1{\semantex_data_bool_provide:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexBoolSetTrue##1{\semantex_data_bool_set_true:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexBoolSetFalse##1{\semantex_data_bool_set_false:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexBoolIfTF##1##2##3{\semantex_data_bool_get:nnTF{#1}{\tl_trim_spaces:n{##1}}{##2}{##3}}
+ \cs_set:Npn\SemantexBoolIfT##1##2{\semantex_data_bool_get:nnTF{#1}{\tl_trim_spaces:n{##1}}{##2}{}}
+ \cs_set:Npn\SemantexBoolIfF##1##2{\semantex_data_bool_get:nnTF{#1}{\tl_trim_spaces:n{##1}}{}{##2}}
+ \cs_set:Npn\SemantexIntProvide##1{\semantex_data_int_provide:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexIntGet##1{\semantex_data_int_get:nn{#1}{\tl_trim_spaces:n{\tl_trim_spaces:n{##1}}}}
+ \cs_set:Npn\SemantexIntClear##1{\semantex_data_int_clear:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexIntIncr##1{\semantex_data_int_incr:nn{#1}{\tl_trim_spaces:n{##1}}}
+ \cs_set:Npn\SemantexIntSet##1##2{\semantex_data_int_set:nnn{#1}{\tl_trim_spaces:n{##1}}{##2}}
+ \cs_set:Npn\SemantexIntIfGreaterThanTF##1##2##3##4
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ >
+ { ##2 }
+ { ##3 }
+ { ##4 }
+ }
+ \cs_set:Npn\SemantexIntIfGreaterThanT##1##2##3
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ >
+ { ##2 }
+ { ##3 }
+ { }
+ }
+ \cs_set:Npn\SemantexIntIfGreaterThanF##1##2##3
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ >
+ { ##2 }
+ { }
+ { ##3 }
+ }
+ \cs_set:Npn\SemantexIntIfEqualTF##1##2##3##4
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ =
+ { ##2 }
+ { ##3 }
+ { ##4 }
+ }
+ \cs_set:Npn\SemantexIntIfEqualT##1##2##3
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ =
+ { ##2 }
+ { ##3 }
+ { }
+ }
+ \cs_set:Npn\SemantexIntIfEqualF##1##2##3
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ =
+ { ##2 }
+ { }
+ { ##3 }
+ }
+ \cs_set:Npn\SemantexIntIfLessThanTF##1##2##3##4
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ <
+ { ##2 }
+ { ##3 }
+ { ##4 }
+ }
+ \cs_set:Npn\SemantexIntIfLessThanT##1##2##3
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ <
+ { ##2 }
+ { ##3 }
+ { }
+ }
+ \cs_set:Npn\SemantexIntIfLessThanF##1##2##3
+ {
+ \int_compare:nNnTF
+ { ##1 }
+ <
+ { ##2 }
+ { }
+ { ##3 }
+ }
\cs_set:Npn\SemantexExpNot##1{\exp_not:n{##1}}
+ \cs_set:Npn\SemantexERRORKeyValueNotFound##1
+ {
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl
+ \msg_error:nnxoo { semantex } { key_value_not_found }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl }
+ { \semantex_grab_first_argument_of_two:nn ##1 }
+ { \semantex_grab_second_argument_of_two:nn ##1 }
+ }
+
+ \cs_set:Npn\SemantexERROR##1
+ {
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl
+ \msg_error:nnxoo { semantex } { generic_error }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl }
+ { \semantex_grab_first_argument_of_two:nn ##1 }
+ { \semantex_grab_second_argument_of_two:nn ##1 }
+ }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataprovide:nn#1#2
+{
+ \semantex_data_tl_provide:nn { #1 } { #2 }
+}
+
+\cs_generate_variant:Nn \semantex_data_tl_set:nnn { noo , nox , nno , nnx }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataset:nn#1#2
+{
+ \semantex_data_tl_set:nno { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_datasetx:nn#1#2
+{
+ \semantex_data_tl_set:nnx { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_generate_variant:Nn \semantex_data_tl_put_right:nnn { noo , nox }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputright:nn#1#2{
+ \semantex_data_tl_put_right:nno { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputrightx:nn#1#2{
+ \semantex_data_tl_put_right:nnx { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_generate_variant:Nn \semantex_data_tl_put_left:nnn { noo , nox }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputleft:nn#1#2
+{
+ \semantex_data_tl_put_left:nno { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataputleftx:nn#1#2
+{
+ \semantex_data_tl_put_left:nnx { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dataclear:nn#1#2
+{
+ \semantex_data_tl_clear:nn { #1 } { \tl_trim_spaces:n { #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keysset:nn#1#2
+{
+ \semantex_keys_set:nn { #1 } { #2 }
+}
+
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setkeys:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keysset:nn
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keyssetx:nn#1#2
+{
+ \semantex_keys_set:nx { #1 }{ #2 }
+}
+
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setkeysx:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_keyssetx:nn
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifeqTF:nn#1#2
+{
+ \str_if_eq:xxTF
+ { \semantex_grab_first_argument_of_four:nnnn #2 }
+ { \semantex_grab_second_argument_of_four:nnnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
+}
+
+\cs_generate_variant:Nn \str_if_eq:nnTF { ffTF }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifeqT:nn#1#2
+{
+ \str_if_eq:xxTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+ { }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifeqF:nn#1#2
+{
+ \str_if_eq:xxTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+}
+
+\cs_generate_variant:Nn \semantex_keys_set:nn { no }
+
+\cs_generate_variant:Nn \tl_if_blank:nTF { fTF }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifblankTF:nn#1#2
+{
+ \tl_if_blank:xTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_three:nnn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifblankT:nn#1#2
+{
+ \tl_if_blank:xTF
+ { \semantex_grab_first_argument_of_two:nn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
+ { }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifblankF:nn#1#2
+{
+ \tl_if_blank:xTF
+ { \semantex_grab_first_argument_of_two:nn #2 }
+ { }
+ { semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
+}
+
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolprovide:nn#1#2
+{
+ \semantex_data_bool_provide:nn { #1 } { \tl_trim_spaces:n { #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolsettrue:nn#1#2
+{
+ \semantex_data_bool_set_true:nn { #1 } { \tl_trim_spaces:n { #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolsetfalse:nn#1#2
+{
+ \semantex_data_bool_set_false:nn { #1 } { \tl_trim_spaces:n { #2 } }
+}
+
+\cs_generate_variant:Nn \semantex_data_bool_get:nnTF { noTF, nfTF , neTF , ffTF }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolifTF:nn#1#2
+{
+ \semantex_data_bool_get:nnTF { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_three:nnn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_three:nnn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolifT:nn#1#2
+{
+ \semantex_data_bool_get:nnTF { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
+ { }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_boolifF:nn#1#2
+{
+ \semantex_data_bool_get:nnTF { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_second_argument_of_two:nn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intprovide:nn#1#2
+{
+ \semantex_data_int_provide:nn { #1 } { \tl_trim_spaces:n { #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intclear:nn#1#2
+{
+ \semantex_data_int_clear:nn { #1 } { \tl_trim_spaces:n { #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intincr:nn#1#2
+{
+ \semantex_data_int_incr:nn { #1 } { \tl_trim_spaces:n { #2 } }
+}
+
+\cs_generate_variant:Nn \semantex_data_int_set:nnn { noo , nno }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intset:nn#1#2
+{
+ \semantex_data_int_set:noo { #1 }
+ { \tl_trim_spaces:n { \semantex_grab_first_argument_of_two:nn #2 } }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_generate_variant:Nn \int_compare:nNnTF { oNoTF , fNfTF , xNxTF }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifgreaterthanTF:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_four:nnnn #2 }
+ >
+ { \semantex_grab_second_argument_of_four:nnnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifgreaterthanT:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ >
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+ { }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifgreaterthanF:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ >
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifequalTF:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_four:nnnn #2 }
+ =
+ { \semantex_grab_second_argument_of_four:nnnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifequalT:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ =
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+ { }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intifequalF:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ =
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intiflessthanTF:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_four:nnnn #2 }
+ <
+ { \semantex_grab_second_argument_of_four:nnnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_four:nnnn #2 } }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_fourth_argument_of_four:nnnn #2 } }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intiflessthanT:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ <
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+ { }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_intiflessthanF:nn#1#2
+{
+ \int_compare:oNoTF
+ { \semantex_grab_first_argument_of_three:nnn #2 }
+ <
+ { \semantex_grab_second_argument_of_three:nnn #2 }
+ { }
+ { \semantex_keys_set:no { #1 } { \semantex_grab_third_argument_of_three:nnn #2 } }
+}
+
+\cs_generate_variant:Nn\msg_error:nnnnn { nnxoo }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound:nn#1#2
+{
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl
+ \msg_error:nnxoo { semantex } { key_value_not_found }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERRORkeyvaluenotfound_temp_tl }
+ { \semantex_grab_first_argument_of_two:nn #2 }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR:nn#1#2
+{
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl
+ \msg_error:nnxoo { semantex } { generic_error }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ERROR_temp_tl }
+ { \semantex_grab_first_argument_of_two:nn #2 }
+ { \semantex_grab_second_argument_of_two:nn #2 }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_execute:nn#1#2
+{
%\exp_not:n{#2}
% how about forget?
#2
}
-\cs_new:Npn\semantex_primitive_valuekey_parse:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parse:nn#1#2
{
% This command runs all the keys that the user may have
% stored via the parseoptions key
%\semantex_data_tl_inherit:nn { #1 } { parseoptions }
- \semantex_keys_set:nx { #1 } {
+% \semantex_keys_set:nx { #1 } {
+% \semantex_data_tl_get_exp_not:nn { #1 } { parseoptions }
+% }
+% \semantex_data_tl_clear:nn { #1 } { parseoptions } % this is probably necessary
+ \semantex_data_cs_get:nn { #1 } { parseoptions:n } { #1 }
+ \semantex_data_tl_clear:nn { #1 } { parseoptions } % this is probably necessary
+ \semantex_data_cs_clear:nn { #1 } { parseoptions:n }
+}
+
+%\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parseoptions:nn#1#2
+%{
+% % This adds keys to the parseoptions token list
+% \semantex_data_tl_put_right:nnn { #1 } { parseoptions } { #2 }
+%}
+
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parseoptions:nn#1#2{
+ \tl_set:Nn\l__semantex_parseoptions_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_parseoptions_auxiliary_singlekey_temp_cs:n##1
+ {
+ \__semantex_parseoptions_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_parseoptions_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_parseoptions_auxiliary_valuekey_temp_cs:nn##1##2
+ {
+ \__semantex_parseoptions_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_parseoptions_auxiliary_temp_tl
+ }
+ \keyval_parse:NNn
+ \l__semantex_parseoptions_auxiliary_singlekey_temp_cs:n
+ \l__semantex_parseoptions_auxiliary_valuekey_temp_cs:nn
+ { #2 }
+ \semantex_data_tl_put_right:nno { #1 } { parseoptions } { \l__semantex_parseoptions_auxiliary_temp_tl }
+ %\exp_args:NNno\exp_args:Nno\cs_set:co { __semantex_data_cs_#1_parseoptions:n }
+ %\exp_args:Nnno
+ \semantex_data_cs_set:nnx { #1 } { parseoptions:n }
+ {
+% g__semantex_data_tl_#1_parseoptions
+% \semantex_data_tl_get:nn { #1 } { parseoptions }
\semantex_data_tl_get_exp_not:nn { #1 } { parseoptions }
+ %\l__semantex_parseoptions_auxiliary_temp_tl
+ }
+}
+
+
+\cs_new:Npn\__semantex_parseoptions_process_singlekey:nnN#1#2#3
+{
+ \tl_put_right:Nn#3
+ {
+ \semantex_singlekey:nn { #1 } { #2 }
}
- \semantex_data_tl_clear:nn { #1 } { parseoptions } % this is probably necessary
}
-\cs_new:Npn\semantex_primitive_valuekey_parseoptions:nn#1#2
+\cs_new:Npn\__semantex_parseoptions_process_valuekey:nnnN#1#2#3#4
{
- % This adds keys to the parseoptions token list
- \semantex_data_tl_put_right:nnn { #1 } { parseoptions } { #2 }
+ \tl_if_eq:nnTF { #2 } { execute }
+ {
+ \tl_put_right:Nn#4
+ {
+ #3
+ }
+ }
+ {
+ \tl_put_right:Nn#4
+ {
+ \semantex_valuekey:nnn { #1 } { #2 } { #3 }
+ }
+ }
}
-\cs_new:Npn\semantex_primitive_valuekey_return:nn#1#2
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn#1#2
{
% This is an umbrella key that runs all of the three
% return routines, innerreturn, rightreturn, and leftreturn
- \semantex_primitive_valuekey_innerreturn:nn { #1 }{}
- \semantex_primitive_valuekey_rightreturn:nn { #1 }{}
- \semantex_primitive_valuekey_leftreturn:nn { #1 }{}
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_innerreturn:nn { #1 }{}
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightreturn:nn { #1 }{}
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftreturn:nn { #1 }{}
}
-\cs_new:Npn\semantex_primitive_valuekey_innerreturn:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_innerreturn:nn#1#2
{
% This adds all of the commands added via the command key
% to the symbol
@@ -1966,7 +3014,7 @@
\cs_generate_variant:Nn \semantex_keys_set:nn { nx , no }
-\cs_new:Npn\semantex_primitive_valuekey_rightreturn:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightreturn:nn#1#2
{
\semantex_right_indices_return_store:nN { #1 } \l_semantex_rightreturn_right_indices_temp
\semantex_data_tl_put_right:nnx { #1 } { symbol }
@@ -1987,7 +3035,7 @@
}
-\cs_new:Npn\semantex_primitive_valuekey_leftreturn:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftreturn:nn#1#2
{
\semantex_left_indices_return_store:nN { #1 } \l_semantex_leftreturn_left_indices_temp
\semantex_data_tl_put_left:nnx { #1 } { symbol }
@@ -2081,13 +3129,13 @@
\semantex_data_tl_inherit_x:nn { #1 } { arg }
\semantex_data_int_inherit:nn { #1 } { numberofarguments }
%\semantex_data_tl_inherit:nn { #1 } { parsize } % This was necessary for unkonwn reasons -- otherwise it will fail when doing inheritance
- \semantex_data_tl_get_store:nnN { #1 } { parsize } \l__semantex_primitive_valuekey_rightreturn_parsize_temp
+ \semantex_data_tl_get_store:nnN { #1 } { parsize } \l__arg_return_store_parsize_temp_tl
\semantex_data_bool_get:nnTF { #1 } { par }
{
\semantex_data_int_if_positive:nnTF { #1 } { numberofarguments }
{
\__semantex_parentheses_store:nnnnN
- { \l__semantex_primitive_valuekey_rightreturn_parsize_temp }
+ { \l__arg_return_store_parsize_temp_tl }
{ \semantex_data_tl_get_exp_not:nn { #1 } { leftpar } }
{ \semantex_data_tl_get_exp_not:nn { #1 } { rightpar } }
{
@@ -2107,7 +3155,7 @@
\semantex_data_int_if_greater_than_one:nnTF { #1 } { numberofarguments }
{
\__semantex_parentheses_store:nnnnN
- { \l__semantex_primitive_valuekey_rightreturn_parsize_temp }
+ { \l__arg_return_store_parsize_temp_tl }
{ \semantex_data_tl_get_exp_not:nn { #1 } { leftpar } }
{ \semantex_data_tl_get_exp_not:nn { #1 } { rightpar } }
{
@@ -2210,724 +3258,818 @@
-\cs_new:Npn\semantex_primitive_valuekey_parent:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parent:nn#1#2{
% Must inherit everything from the parent class
\semantex_data_parent_set:nn { #1 } { #2 }
}
-\cs_new:Npn\semantex_primitive_valuekey_class:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_class:nn#1#2{
% Must inherit everything from the parent class
\semantex_data_class_set:nn { #1 } { #2 }
}
-\cs_new:Npn\semantex_primitive_valuekey_copy:nn#1#2{
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_class:nn { xn }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_copy:nn#1#2{
% Similarly to parent and class, but inherits from other objects rather than classes
\semantex_data_copy_object:nn { #1 } { #2 }
}
-\cs_new:Npn\semantex_primitive_valuekey_clone:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clone:nn#1#2{
% Similarly to parent and class, but inherits from other objects rather than classes
\semantex_data_clone_object:nn { #1 } { #2 }
}
-\cs_new:Npn\semantex_primitive_valuekey_valuekeys:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_valuekeys:nn#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_valuekey_format_auxiliary:nnn{#1}##1
+ }
+}
+
+\cs_new:Npn\__semantex_process_singlekey:nnN#1#2#3
+{
+ \tl_put_right:Nn#3
+ {
+ \semantex_singlekey:nn { #1 } { #2 }
}
}
-\cs_generate_variant:Nn\semantex_data_prop_put:nnnn {nnno}
+\cs_generate_variant:Nn \semantex_valuekey:nnn { nnx }
-\cs_new:Npn\__semantex_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_process_valuekey:nnnN#1#2#3#4
{
- \cs_set:Npn\l__semantex_valuekey_equality_format_auxiliary_temp:n##1{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \tl_if_eq:nnTF { #2 } { execute }
{
- \l__semantex_valuekey_equality_format_auxiliary_temp:n
+ \tl_put_right:Nn#4
{
- \l__semantex_key_value_temp
+ #3
}
}
- %IM Remove spaces in #2
+ {
+ \tl_put_right:Nn#4
+ {
+ \semantex_valuekey:nnn { #1 } { #2 } { #3 }
+ }
+ }
+}
+
+\cs_new:Npn\__semantex_valuekey_format_auxiliary:nnn#1#2#3
+{
+ \tl_set:Nn\l__semantex_valuekey_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_valuekey_auxiliary_singlekey_temp_cs:n##1
+ {
+ \__semantex_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_valuekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_valuekey_auxiliary_valuekey_temp_cs:nn##1##2
+ {
+ \__semantex_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_valuekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_valuekey_auxiliary_temp_cs:n##1 { #3 }
+ \keyval_parse:NNo
+ \l__semantex_valuekey_auxiliary_singlekey_temp_cs:n
+ \l__semantex_valuekey_auxiliary_valuekey_temp_cs:nn
+ {
+ \l__semantex_valuekey_auxiliary_temp_cs:n { ##2 }
+ }
+ \cs_set:cpo { __semantex_data_cs_custom_valuekey_#1_#2:nn } ##1##2 {
+ \l__semantex_valuekey_auxiliary_temp_tl
+ }
+ % remove spaces
+}
+
+\cs_generate_variant:Nn \cs_set:Npn { cpo }
+
+\cs_generate_variant:Nn \keyval_parse:NNn { NNo }
+
+%CHECK
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_singlekeys:nn#1#2{
+ % Add keys taking no values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_singlekeys_format_auxiliary:nnn{#1}##1
+ }
+}
+
+\cs_new:Npn \__semantex_singlekeys_format_auxiliary:nnn#1#2#3{
+ \tl_set:Nn\l__semantex_singlekey_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_singlekey_auxiliary_singlekey_temp_cs:n##1
+ {
+ \__semantex_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_singlekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_singlekey_auxiliary_valuekey_temp_cs:nn##1##2
+ {
+ \__semantex_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_singlekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_singlekey_auxiliary_temp_cs: { #3 }
+ \keyval_parse:NNo
+ \l__semantex_singlekey_auxiliary_singlekey_temp_cs:n
+ \l__semantex_singlekey_auxiliary_valuekey_temp_cs:nn
+ { \l__semantex_singlekey_auxiliary_temp_cs: }
+ \cs_set:cpo { __semantex_data_cs_custom_singlekey_#1_#2:n } ##1 {
+ \l__semantex_singlekey_auxiliary_temp_tl
+ }
+% \seq_put_right:cn { g__semantex_data_seq_#1_list_of_singlekeys } { #2 }
+% %IM Remove spaces in #2
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removesinglekey:nn#1#2
+{
+ \cs_undefine:c { __semantex_data_cs_custom_singlekey_#1_#2:n }
}
-\cs_new:Npn\semantex_primitive_valuekey_removevaluekey:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removevaluekey:nn#1#2
{
- \semantex_valuekey_remove:nn { #1 } { #2 }
+ \cs_undefine:c { __semantex_data_cs_custom_valuekey_#1_#2:nn }
}
-\cs_set_eq:cN { semantex_primitive_valuekey_1valuekeys:nn } \semantex_primitive_valuekey_valuekeys:nn
+\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_1valuekeys:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_valuekeys:nn
-\cs_new:cpn { semantex_primitive_valuekey_2valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_2valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_two_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_two_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_two_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_two_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_two_valuekey_equality_format_auxiliary_temp:nn##1##2{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_two_valuekey_format_auxiliary_temp:nn##1##2{#3}
+ %IM Remove spaces in #2
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_two_valuekey_equality_format_auxiliary_temp:nn
+ \l__semantex_two_valuekey_format_auxiliary_temp:nn
{
- \exp_not:N\semantex_grab_first_argument_of_two:nn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_two:nn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_two:nn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_two:nn ##1
}
}
- %IM Remove spaces in #2
}
+\cs_generate_variant:Nn \__semantex_valuekey_format_auxiliary:nnn { nno }
-\cs_new:cpn { semantex_primitive_valuekey_3valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_3valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_three_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_three_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_three_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_three_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_three_valuekey_equality_format_auxiliary_temp:nnn##1##2##3{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_three_valuekey_format_auxiliary_temp:nnn##1##2##3{#3}
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_three_valuekey_equality_format_auxiliary_temp:nnn
+ \l__semantex_three_valuekey_format_auxiliary_temp:nnn
{
- \exp_not:N\semantex_grab_first_argument_of_three:nnn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_three:nnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_three:nnn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_three:nnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_three:nnn\l__semantex_key_value_temp
+ \semantex_grab_third_argument_of_three:nnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_4valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_4valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_four_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_four_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_four_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_four_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_four_valuekey_equality_format_auxiliary_temp:nnnn##1##2##3##4{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_four_valuekey_format_auxiliary_temp:nnnn##1##2##3##4{#3}
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_four_valuekey_equality_format_auxiliary_temp:nnnn
+ \l__semantex_four_valuekey_format_auxiliary_temp:nnnn
{
- \exp_not:N\semantex_grab_first_argument_of_four:nnnn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_four:nnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_four:nnnn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_four:nnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_four:nnnn\l__semantex_key_value_temp
+ \semantex_grab_third_argument_of_four:nnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_four:nnnn\l__semantex_key_value_temp
+ \semantex_grab_fourth_argument_of_four:nnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_5valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_5valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_five_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_five_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_five_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_five_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_five_valuekey_equality_format_auxiliary_temp:nnnnn##1##2##3##4##5{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_five_valuekey_format_auxiliary_temp:nnnnn##1##2##3##4##5{#3}
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_five_valuekey_equality_format_auxiliary_temp:nnnnn
+ \l__semantex_five_valuekey_format_auxiliary_temp:nnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_five:nnnnn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_five:nnnnn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_five:nnnnn\l__semantex_key_value_temp
+ \semantex_grab_third_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_five:nnnnn\l__semantex_key_value_temp
+ \semantex_grab_fourth_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_five:nnnnn\l__semantex_key_value_temp
+ \semantex_grab_fifth_argument_of_five:nnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_6valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_6valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_six_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_six_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_six_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_six_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_six_valuekey_equality_format_auxiliary_temp:nnnnnn##1##2##3##4##5##6{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_six_valuekey_format_auxiliary_temp:nnnnnn##1##2##3##4##5##6{#3}
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_six_valuekey_equality_format_auxiliary_temp:nnnnnn
+ \l__semantex_six_valuekey_format_auxiliary_temp:nnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_six:nnnnnn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_six:nnnnnn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_six:nnnnnn\l__semantex_key_value_temp
+ \semantex_grab_third_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_six:nnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fourth_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_six:nnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fifth_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_six:nnnnnn\l__semantex_key_value_temp
+ \semantex_grab_sixth_argument_of_six:nnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_7valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_7valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_seven_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_seven_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_seven_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_seven_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_seven_valuekey_equality_format_auxiliary_temp:nnnnnnn##1##2##3##4##5##6##7{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_seven_valuekey_format_auxiliary_temp:nnnnnnn##1##2##3##4##5##6##7{#3}
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_seven_valuekey_equality_format_auxiliary_temp:nnnnnnn
+ \l__semantex_seven_valuekey_format_auxiliary_temp:nnnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_seven:nnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_seven:nnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_seven:nnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_third_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_seven:nnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fourth_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_seven:nnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fifth_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_seven:nnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_sixth_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_seventh_argument_of_seven:nnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_seventh_argument_of_seven:nnnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_8valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_8valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_eight_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_eight_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_eight_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_eight_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_eight_valuekey_equality_format_auxiliary_temp:nnnnnnnn##1##2##3##4##5##6##7##8{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_eight_valuekey_format_auxiliary_temp:nnnnnnnn##1##2##3##4##5##6##7##8{#3}
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_eight_valuekey_equality_format_auxiliary_temp:nnnnnnnn
+ \l__semantex_eight_valuekey_format_auxiliary_temp:nnnnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_third_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fourth_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fifth_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_sixth_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_seventh_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_seventh_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_eighth_argument_of_eight:nnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_eighth_argument_of_eight:nnnnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_9valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_9valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_nine_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_nine_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_nine_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_nine_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_nine_valuekey_equality_format_auxiliary_temp:nnnnnnnnn##1##2##3##4##5##6##7##8##9{#3}
- \semantex_data_prop_put:nnno {#1} {custom_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_nine_valuekey_format_auxiliary_temp:nnnnnnnnn##1##2##3##4##5##6##7##8##9{#3}
+ \__semantex_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_nine_valuekey_equality_format_auxiliary_temp:nnnnnnnnn
+ \l__semantex_nine_valuekey_format_auxiliary_temp:nnnnnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_first_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_second_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_third_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fourth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_fifth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_sixth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_seventh_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_seventh_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_eighth_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_eighth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_ninth_argument_of_nine:nnnnnnnnn\l__semantex_key_value_temp
+ \semantex_grab_ninth_argument_of_nine:nnnnnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:Npn\semantex_primitive_valuekey_singlekeys:nn#1#2{
- % Add keys taking no values
- \semantex_data_prop_provide:nn { #1 } { custom_singlekeys }
- \clist_map_inline:nn { #2 }{
- \__semantex_singlekeys_noequality_format_auxiliary:nnn{#1}##1
- }
-}
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_novaluekeys:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_singlekeys:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-\cs_new:Npn \__semantex_singlekeys_noequality_format_auxiliary:nnn#1#2#3{
- \semantex_data_prop_put:nnnn {#1} {custom_singlekeys} {#2} {#3}
-}
+\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_0valuekeys:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_singlekeys:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_novaluekeys:nn\semantex_primitive_valuekey_singlekeys:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-\cs_set_eq:cN { semantex_primitive_valuekey_0valuekeys:nn } \semantex_primitive_valuekey_singlekeys:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removenovaluekey:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removesinglekey:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
+
+\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_remove0valuekey:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removesinglekey:nn
+
+% KEYS FOR SETTING UP THE ARGUMENT KEYVAL INTERFACE:
-\cs_new:Npn\semantex_primitive_valuekey_removesinglekey:nn#1#2
+\cs_new:Npn\__semantex_process_arg_singlekey:nnN#1#2#3
{
- \semantex_singlekey_remove:nn { #1 } { #2 }
+ \tl_put_right:Nn#3
+ {
+ \semantex_arg_singlekey:nn { #1 } { #2 }
+ }
}
-\cs_set_eq:NN\semantex_primitive_valuekey_removenovaluekey:nn\semantex_primitive_valuekey_removesinglekey:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-
-\cs_set_eq:cN { semantex_primitive_valuekey_remove0valuekey:nn } \semantex_primitive_valuekey_removesinglekey:nn
+\cs_generate_variant:Nn \semantex_valuekey:nnn { nnx }
-% KEYS FOR SETTING UP THE ARGUMENT KEYVAL INTERFACE:
+\cs_new:Npn\__semantex_process_arg_valuekey:nnnN#1#2#3#4
+{
+ \tl_put_right:Nn#4
+ {
+ \semantex_arg_valuekey:nnn { #1 } { #2 } { #3 }
+ }
+}
-\cs_new:Npn\semantex_primitive_valuekey_argvaluekeys:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argvaluekeys:nn#1#2{
% Add argument valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn \__semantex_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn \__semantex_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_arg_valuekey_equality_format_auxiliary_temp:n##1{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \tl_set:Nn\l__semantex_arg_valuekey_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_arg_valuekey_auxiliary_singlekey_temp_cs:n##1
+ {
+ \__semantex_process_arg_singlekey:nnN { ####1 } { ##1 } \l__semantex_arg_valuekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_arg_valuekey_auxiliary_valuekey_temp_cs:nn##1##2
{
- \l__semantex_arg_valuekey_equality_format_auxiliary_temp:n{
- \l__semantex_arg_key_value_temp
+ \__semantex_process_arg_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_arg_valuekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_arg_valuekey_auxiliary_temp_cs:n##1 { #3 }
+ \keyval_parse:NNo
+ \l__semantex_arg_valuekey_auxiliary_singlekey_temp_cs:n
+ \l__semantex_arg_valuekey_auxiliary_valuekey_temp_cs:nn
+ {
+ \l__semantex_arg_valuekey_auxiliary_temp_cs:n { ##2 }
}
+ \cs_set:cpo { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn } ##1##2 {
+ \l__semantex_arg_valuekey_auxiliary_temp_tl
+ }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argsinglekeys:nn#1#2{
+ % Add argument keys taking no values
+ \clist_map_inline:nn { #2 }{
+ \__semantex_arg_singlekeys_format_auxiliary:nnn{#1}##1
+ }
+}
+
+\cs_new:Npn \__semantex_arg_singlekeys_format_auxiliary:nnn#1#2#3{
+ \tl_set:Nn\l__semantex_arg_singlekey_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_arg_singlekey_auxiliary_singlekey_temp_cs:n##1
+ {
+ \__semantex_process_arg_singlekey:nnN { ####1 } { ##1 } \l__semantex_arg_singlekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_arg_singlekey_auxiliary_valuekey_temp_cs:nn##1##2
+ {
+ \__semantex_process_arg_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_arg_singlekey_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_arg_singlekey_auxiliary_temp_cs: { #3 }
+ \keyval_parse:NNo
+ \l__semantex_arg_singlekey_auxiliary_singlekey_temp_cs:n
+ \l__semantex_arg_singlekey_auxiliary_valuekey_temp_cs:nn
+ { \l__semantex_arg_singlekey_auxiliary_temp_cs: }
+ \cs_set:cpo { __semantex_data_cs_custom_arg_singlekey_#1_#2:n } ##1 {
+ \l__semantex_arg_singlekey_auxiliary_temp_tl
}
}
-\cs_new:Npn\semantex_primitive_valuekey_removeargvaluekey:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargsinglekey:nn#1#2
+{
+ \cs_undefine:c { __semantex_data_cs_custom_arg_singlekey_#1_#2:n }
+}
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargvaluekey:nn#1#2
{
- \semantex_arg_valuekey_remove:nn { #1 } { #2 }
+ \cs_undefine:c { __semantex_data_cs_custom_arg_valuekey_#1_#2:nn }
}
-\cs_set_eq:cN { semantex_primitive_valuekey_arg1valuekeys:nn } \semantex_primitive_arg_valuekey_arg_valuekeys:nn
+\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg1valuekeys:nn } \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_arg_valuekeys:nn
-\cs_new:cpn { semantex_primitive_valuekey_arg2valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg2valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_two_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_two_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_two_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_generate_variant:Nn \__semantex_arg_valuekey_format_auxiliary:nnn { nno }
+
+\cs_new:Npn\__semantex_two_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_two_arg_valuekey_equality_format_auxiliary_temp:nn##1##2{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_two_arg_valuekey_format_auxiliary_temp:nn##1##2{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_two_arg_valuekey_equality_format_auxiliary_temp:nn
+ \l__semantex_two_arg_valuekey_format_auxiliary_temp:nn
{
- \exp_not:N\semantex_grab_first_argument_of_two:nn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_two:nn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_two:nn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_two:nn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_arg3valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg3valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_three_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_three_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_three_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_three_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_three_arg_valuekey_equality_format_auxiliary_temp:nnn##1##2##3{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_three_arg_valuekey_format_auxiliary_temp:nnn##1##2##3{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_three_arg_valuekey_equality_format_auxiliary_temp:nnn
+ \l__semantex_three_arg_valuekey_format_auxiliary_temp:nnn
{
- \exp_not:N\semantex_grab_first_argument_of_three:nnn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_three:nnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_three:nnn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_three:nnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_three:nnn\l__semantex_arg_key_value_temp
+ \semantex_grab_third_argument_of_three:nnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_arg4valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg4valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_four_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_four_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_four_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_four_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_four_arg_valuekey_equality_format_auxiliary_temp:nnnn##1##2##3##4{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_four_arg_valuekey_format_auxiliary_temp:nnnn##1##2##3##4{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_four_arg_valuekey_equality_format_auxiliary_temp:nnnn
+ \l__semantex_four_arg_valuekey_format_auxiliary_temp:nnnn
{
- \exp_not:N\semantex_grab_first_argument_of_four:nnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_four:nnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_four:nnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_four:nnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_four:nnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_third_argument_of_four:nnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_four:nnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fourth_argument_of_four:nnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_arg5valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg5valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_five_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_five_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_five_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_five_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_five_arg_valuekey_equality_format_auxiliary_temp:nnnnn##1##2##3##4##5{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_five_arg_valuekey_format_auxiliary_temp:nnnnn##1##2##3##4##5{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_five_arg_valuekey_equality_format_auxiliary_temp:nnnnn
+ \l__semantex_five_arg_valuekey_format_auxiliary_temp:nnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_five:nnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_five:nnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_five:nnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_third_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_five:nnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fourth_argument_of_five:nnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_five:nnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fifth_argument_of_five:nnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_arg6valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg6valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_six_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_six_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_six_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_six_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_six_arg_valuekey_equality_format_auxiliary_temp:nnnnnn##1##2##3##4##5##6{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_six_arg_valuekey_format_auxiliary_temp:nnnnnn##1##2##3##4##5##6{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_six_arg_valuekey_equality_format_auxiliary_temp:nnnnnn
+ \l__semantex_six_arg_valuekey_format_auxiliary_temp:nnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_six:nnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_six:nnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_six:nnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_third_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_six:nnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fourth_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_six:nnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fifth_argument_of_six:nnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_six:nnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_sixth_argument_of_six:nnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_arg7valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg7valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_seven_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_seven_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_seven_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_seven_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_seven_arg_valuekey_equality_format_auxiliary_temp:nnnnnnn##1##2##3##4##5##6##7{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_seven_arg_valuekey_format_auxiliary_temp:nnnnnnn##1##2##3##4##5##6##7{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_seven_arg_valuekey_equality_format_auxiliary_temp:nnnnnnn
+ \l__semantex_seven_arg_valuekey_format_auxiliary_temp:nnnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_seven:nnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_seven:nnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_seven:nnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_third_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_seven:nnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fourth_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_seven:nnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fifth_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_seven:nnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_sixth_argument_of_seven:nnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_seventh_argument_of_seven:nnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_seventh_argument_of_seven:nnnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_arg8valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg8valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_eight_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_eight_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_eight_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_eight_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_eight_arg_valuekey_equality_format_auxiliary_temp:nnnnnnnn##1##2##3##4##5##6##7##8{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_eight_arg_valuekey_format_auxiliary_temp:nnnnnnnn##1##2##3##4##5##6##7##8{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_eight_arg_valuekey_equality_format_auxiliary_temp:nnnnnnnn
+ \l__semantex_eight_arg_valuekey_format_auxiliary_temp:nnnnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_third_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fourth_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fifth_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_sixth_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_seventh_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_seventh_argument_of_eight:nnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_eighth_argument_of_eight:nnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_eighth_argument_of_eight:nnnnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:cpn { semantex_primitive_valuekey_arg9valuekeys:nn }#1#2{
+\cs_new:cpn { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_arg9valuekeys:nn }#1#2{
% Add new valuekeys
- \semantex_data_prop_provide:nn { #1 } { custom_arg_valuekeys }
\clist_map_inline:nn { #2 }{
- \__semantex_nine_arg_valuekey_equality_format_auxiliary:nnn{#1}##1
+ \__semantex_nine_arg_valuekey_format_auxiliary:nnn{#1}##1
}
}
-\cs_new:Npn\__semantex_nine_arg_valuekey_equality_format_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_nine_arg_valuekey_format_auxiliary:nnn#1#2#3
{
- \cs_set:Npn\l__semantex_nine_arg_valuekey_equality_format_auxiliary_temp:nnnnnnnnn##1##2##3##4##5##6##7##8##9{#3}
- \semantex_data_prop_put:nnno {#1} {custom_arg_valuekeys} {#2}
+ \cs_set:Npn\l__semantex_nine_arg_valuekey_format_auxiliary_temp:nnnnnnnnn##1##2##3##4##5##6##7##8##9{#3}
+ \__semantex_arg_valuekey_format_auxiliary:nno { #1 } { #2 }
{
- \l__semantex_nine_arg_valuekey_equality_format_auxiliary_temp:nnnnnnnnn
+ \l__semantex_nine_arg_valuekey_format_auxiliary_temp:nnnnnnnnn
{
- \exp_not:N\semantex_grab_first_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_first_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_second_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_second_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_third_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_third_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fourth_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fourth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_fifth_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_fifth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_sixth_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_sixth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_seventh_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_seventh_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_eighth_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_eighth_argument_of_nine:nnnnnnnnn ##1
}
{
- \exp_not:N\semantex_grab_ninth_argument_of_nine:nnnnnnnnn\l__semantex_arg_key_value_temp
+ \semantex_grab_ninth_argument_of_nine:nnnnnnnnn ##1
}
}
%IM Remove spaces in #2
}
-\cs_new:Npn\semantex_primitive_valuekey_argsinglekeys:nn#1#2{
- % Add argument keys taking no values
- \semantex_data_prop_provide:nn { #1 } { custom_arg_singlekeys }
- \clist_map_inline:nn { #2 }{
- \__semantex_arg_singlekeys_noequality_format_auxiliary:nnn{#1}##1
- }
-}
-
-\cs_new:Npn \__semantex_arg_singlekeys_noequality_format_auxiliary:nnn#1#2#3{
- \semantex_data_prop_put:nnnn {#1} {custom_arg_singlekeys} {#2} {#3}
-}
-
-\cs_set_eq:NN\semantex_primitive_valuekey_argnovaluekeys:nn\semantex_primitive_valuekey_argsinglekeys:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-
-\cs_new:Npn\semantex_primitive_valuekey_removeargsinglekey:nn#1#2
-{
- \semantex_arg_singlekey_remove:nn { #1 } { #2 }
-}
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argnovaluekeys:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argsinglekeys:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-\cs_set_eq:NN\semantex_primitive_valuekey_removeargnovaluekey:nn\semantex_primitive_valuekey_removeargsinglekey:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargnovaluekey:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargsinglekey:nn % Previously, "singlekeys" was called "novaluekeys", so I am keeping this alias for backwards compatibility
-\cs_set_eq:cN { semantex_primitive_valuekey_removearg0valuekey:nn } \semantex_primitive_valuekey_removeargsinglekey:nn
+\cs_set_eq:cN { __semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removearg0valuekey:nn } \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_removeargsinglekey:nn
% THESE ARE REALLY THE COMMANDS MANIPULATING DATA:
-\cs_new:Npn\semantex_primitive_valuekey_symbol:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:nn#1#2{
% Sets the value of the symbol
\semantex_data_tl_set:nnn { #1 } { symbol } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_texclass:nn#1#2{
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbol:nn { xn }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_texclass:nn#1#2{
% Sets the TeX class of the output, e.g. \mathord, \mathbin, \mathop etc.
\semantex_data_tl_set:nnn { #1 } { texclass } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setslot:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setslot:nn#1#2{
% Sets the argument slot, i.e. the - in f(-,x)
\semantex_data_tl_set:nnn { #1 } { argslot } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_symbolputright:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbolputright:nn#1#2{
% Add something to the right of the symbol
\semantex_data_tl_put_right:nnn { #1 } { symbol } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_symbolputleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_symbolputleft:nn#1#2{
% Add something to the left of the symbol
\semantex_data_tl_put_left:nnn { #1 } { symbol } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_command:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_command:nn#1#2{
% Adds one entry on the left of the command
% sequence to be applied to the symbol
\semantex_data_seq_put_right:nnn { #1 } { commands_sequence } { #2 } %IM maybe \exp_not:n { #2 }?
}
-\cs_new:Npn\semantex_primitive_valuekey_clearcommand:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearcommand:nn#1#2{
% Adds one entry on the left of the command
% sequence to be applied to the symbol
\semantex_data_seq_clear:nn { #1 } { commands_sequence }
}
-\cs_new:Npn\semantex_primitive_valuekey_argwithkeyval:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithkeyval:nn#1#2{
% Sets the argument (allows keyval interface)
\semantex_arg_keys_set:nn { #1 } { #2 }
%IMPORTANT: Previously, we needed three braces around #2, but suddenly
@@ -2936,17 +4078,17 @@
% to arg keyvals)
}
-\cs_new:Npn\semantex_primitive_valuekey_argwithsinglekeys:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithsinglekeys:nn#1#2{
% Sets the argument (only allows singlekeys)
\semantex_arg_singlekeys_set:nn { #1 } { #2 }
}
-\cs_new:Npn\semantex_primitive_valuekey_argwithonesinglekey:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithonesinglekey:nn#1#2{
% Sets the argument (only allows one singlekey)
- \use:c { __semantex_data_cs_#1_arg_singlekey:n } {{{{ #2 }}}}
+ \use:c { __semantex_data_cs_#1_arg_singlekey:n } { #2 }
}
-\cs_new:Npn\semantex_primitive_valuekey_argwithoutkeyval:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_argwithoutkeyval:nn#1#2{
% Sets the argument (no keyval interface allowed)
\semantex_data_tl_put_right:nnn { #1 } { arg } { \exp_not:n { #2 } }
\semantex_data_int_incr:nn { #1 } { numberofarguments } % Check if this has been added elsewhere
@@ -2954,26 +4096,26 @@
}
-\cs_new:Npn\semantex_primitive_valuekey_setargsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setargsep:nn#1#2
{
% Sets the argument separator
\semantex_data_tl_set:nnn { #1 } { argsep } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setargdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setargdots:nn#1#2
{
% Sets the argument dot command
\semantex_data_tl_set:nnn { #1 } { argdots } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setargslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setargslot:nn#1#2
{
% Sets the argument dot command
\semantex_data_tl_set:nnn { #1 } { argslot } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_prearg:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prearg:nn#1#2{
% Sets something to write before the argument
\tl_if_blank:nF{#2}
{
@@ -2981,12 +4123,12 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_clearprearg:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprearg:nn#1#2
{
\semantex_data_tl_clear:nn { #1 } { prearg }
}
-\cs_new:Npn\semantex_primitive_valuekey_postarg:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postarg:nn#1#2{
% Sets something to write after the argument
\tl_if_blank:nF{#2}
{
@@ -2994,12 +4136,12 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_clearpostarg:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostarg:nn#1#2
{
\semantex_data_tl_clear:nn { #1 } { postarg }
}
-\cs_new:Npn\semantex_primitive_valuekey_output:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_output:nn#1#2
{
% Tells what class the object is supposed to output
\semantex_class_if_exist:NTF { #2 }
@@ -3007,19 +4149,74 @@
\semantex_data_tl_set:nnx { #1 } { output } { class_\cs_to_str:N #2 }
}
{
- \semantex_error_output_format:nN { #1 } \__semantex_primitive_valuekey_output_temp
- \msg_error:nnxnn { semantex } { class_not_found } { \__semantex_primitive_valuekey_output_temp } { output } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_output_temp_tl
+ \msg_error:nnxnn { semantex } { class_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_output_temp_tl } { output } { #2 }
}
% Maybe allow output=self
}
-\cs_new:Npn\semantex_primitive_valuekey_outputoptions:nn#1#2{
- % Sets possible options to pass to the output class
- \semantex_data_tl_put_right:nnn { #1 } { outputoptions } { ,#2, }
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_outputoptions:nn#1#2{
+ \tl_set:Nn\l__semantex_outputoptions_auxiliary_temp_tl{}
+ \cs_set:Npn\l__semantex_outputoptions_auxiliary_singlekey_temp_cs:n##1
+ {
+ \__semantex_outputoptions_process_singlekey:nnN { ####1 } { ##1 } \l__semantex_outputoptions_auxiliary_temp_tl
+ }
+ \cs_set:Npn\l__semantex_outputoptions_auxiliary_valuekey_temp_cs:nn##1##2
+ {
+ \__semantex_outputoptions_process_valuekey:nnnN { ####1 } { ##1 } { ##2 } \l__semantex_outputoptions_auxiliary_temp_tl
+ }
+ \keyval_parse:NNn
+ \l__semantex_outputoptions_auxiliary_singlekey_temp_cs:n
+ \l__semantex_outputoptions_auxiliary_valuekey_temp_cs:nn
+ { #2 }
+ \semantex_data_tl_put_right:nno { #1 } { outputoptions } { \l__semantex_outputoptions_auxiliary_temp_tl }
+ %\exp_args:NNno\exp_args:Nno\cs_set:co { __semantex_data_cs_#1_outputoptions:n }
+ %\exp_args:Nnno
+ \semantex_data_cs_set:nnx { #1 } { outputoptions:n }
+ {
+% g__semantex_data_tl_#1_outputoptions
+% \semantex_data_tl_get:nn { #1 } { outputoptions }
+ \semantex_data_tl_get_exp_not:nn { #1 } { outputoptions }
+ %\l__semantex_outputoptions_auxiliary_temp_tl
+ }
+}
+
+\cs_generate_variant:Nn \semantex_data_cs_set:nnn { nnf , nnv , nnx }
+
+\cs_generate_variant:Nn \semantex_data_tl_put_right:nnn { nno }
+
+
+\cs_new:Npn\__semantex_outputoptions_process_singlekey:nnN#1#2#3
+{
+ \tl_put_right:Nn#3
+ {
+ \exp_not:N\semantex_singlekey:nn { #1 } { \exp_not:n { #2 } }
+ }
+}
+
+\cs_generate_variant:Nn \semantex_valuekey:nnn { nnx }
+
+\cs_new:Npn\__semantex_outputoptions_process_valuekey:nnnN#1#2#3#4
+{
+ \tl_if_eq:nnTF { #2 } { execute }
+ {
+ \tl_put_right:Nn#4
+ {
+ \exp_not:n { #3 }
+ }
+ }
+ {
+ \tl_put_right:Nn#4
+ {
+ \exp_not:N\semantex_valuekey:nnn { #1 } { #2 } { \exp_not:n { #3 } }
+ }
+ }
}
-\cs_new:Npn\semantex_primitive_valuekey_ifleftargument:nn#1#2{
+%----------------
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifleftargument:nn#1#2{
% Tells whether to rightreturn before rendering the output.
\str_if_eq:nnTF { #2 } { true }
{
@@ -3031,13 +4228,13 @@
\semantex_data_bool_set_false:nn { #1 } { leftargument }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifleftargumen_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifleftargumen_temp } { ifleftargument } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifleftargumen_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifleftargumen_temp_tl } { ifleftargument } { #2 }
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_ifoutput:nn#1#2{ %IMPLEMENT THIS
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput:nn#1#2{ %IMPLEMENT THIS
% Tells whether to output or not
\str_if_eq:nnTF { #2 } { true }
{
@@ -3049,13 +4246,13 @@
\semantex_data_bool_set_false:nn { #1 } { output }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifoutput_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifoutput_temp } { ifoutput } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput_temp_tl } { ifoutput } { #2 }
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_gradingposition:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition:nn#1#2{
% Tells whether to use upper or lower indices
\semantex_data_bool_provide:nn { #1 } { uppergrading }
\str_if_eq:nnTF { #2 } { upper }
@@ -3068,17 +4265,17 @@
\semantex_data_bool_set_false:nn { #1 } { uppergrading }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_gradingposition_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_gradingposition_temp } { gradingposition } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition_temp_tl } { gradingposition } { #2 }
}
}
}
-\cs_set_eq:NN \semantex_primitive_valuekey_gradingpos:nn \semantex_primitive_valuekey_gradingposition:nn
+\cs_set_eq:NN \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingpos:nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_gradingposition:nn
% Upper and lower right indices:
-\cs_new:Npn\semantex_primitive_valuekey_upper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn#1#2{
% adds to the upper index
\tl_if_blank:nF{#2}{
\semantex_data_tl_put_right:nnn { #1 } { upper } { \exp_not:n{ #2 } }
@@ -3089,7 +4286,7 @@
-\cs_new:Npn\semantex_primitive_valuekey_supper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn#1#2{
% Adds to the upper index, with a separator
\tl_if_blank:nF{#2}
{
@@ -3107,7 +4304,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_upperputleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperputleft:nn#1#2{
% Adds to the left of the upper index
\tl_if_blank:nF{#2}{
\semantex_data_tl_put_left:nnn { #1 } { upper } { \exp_not:n{ #2 } }
@@ -3116,14 +4313,14 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_preupper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn#1#2{
% Sets what to write before upper
\tl_if_blank:nF{#2}
{
- \semantex_data_tl_put_left:cn { #1 } { preupper } { \exp_not:n{ #2 } }
+ \semantex_data_tl_put_left:nnn { #1 } { preupper } { \exp_not:n{ #2 } }
}
}
-\cs_new:Npn\semantex_primitive_valuekey_postupper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn#1#2{
% Sets what to write after upper
\tl_if_blank:nF{#2}
{
@@ -3131,79 +4328,79 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_clearupper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupper:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { upper }
\semantex_data_bool_set_false:nn { #1 } { nextupperwithsep }
\semantex_data_int_clear:nn { #1 } { numberofupperindices }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearpreupper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupper:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { preupper }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearpostupper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupper:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { postupper }
}
-\cs_new:Npn\semantex_primitive_valuekey_setupperdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperdots:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { upperdots } { \exp_not:n { #2 } }
}
-\cs_generate_variant:Nn\semantex_primitive_valuekey_upper:nn { nx }
+\cs_generate_variant:Nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_upperdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdots:nn#1#2
{
- \semantex_primitive_valuekey_upper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setupperslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperslot:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { upperslot } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_upperslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslot:nn#1#2
{
- \semantex_primitive_valuekey_upper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_supper:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_supperdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperdots:nn#1#2
{
- \semantex_primitive_valuekey_supper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_supperslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperslot:nn#1#2
{
- \semantex_primitive_valuekey_supper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_cupper:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_cupperdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperdots:nn#1#2
{
- \semantex_primitive_valuekey_cupper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_cupperslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperslot:nn#1#2
{
- \semantex_primitive_valuekey_cupper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_upperwithothersep:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_upperdotswithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdotswithothersep:nn#1#2
{
- \semantex_primitive_valuekey_upperwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperdots } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperdots } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_upperslotwithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslotwithothersep:nn#1#2
{
- \semantex_primitive_valuekey_upperwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperslot } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperslot } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_lower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn#1#2{
% Adds to the lower index
\tl_if_blank:nF{#2}
{
@@ -3213,7 +4410,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_slower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn#1#2{
% Adds to the lower index, with a separator
\tl_if_blank:nF{#2}
{
@@ -3231,7 +4428,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerputleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerputleft:nn#1#2{
% Adds to the lower index
\tl_if_blank:nF{#2}
{
@@ -3241,7 +4438,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_prelower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn#1#2{
% Sets what to write before the lower index
\tl_if_blank:nF{#2}
{
@@ -3249,7 +4446,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_postlower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn#1#2{
% Sets what to write after the lower index
\tl_if_blank:nF{#2}
{
@@ -3257,79 +4454,79 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_clearlower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlower:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { lower }
\semantex_data_bool_set_false:nn { #1 } { nextlowerwithsep }
\semantex_data_int_clear:nn { #1 } { numberoflowerindices }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearprelower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelower:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { prelower }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearpostlower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlower:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { postlower }
}
-\cs_new:Npn\semantex_primitive_valuekey_setlowerdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerdots:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { lowerdots } { \exp_not:n { #2 } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_lower:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_lowerdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdots:nn#1#2
{
- \semantex_primitive_valuekey_lower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setlowerslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerslot:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { lowerslot } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslot:nn#1#2
{
- \semantex_primitive_valuekey_lower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_slower:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_slowerdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerdots:nn#1#2
{
- \semantex_primitive_valuekey_slower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_slowerslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerslot:nn#1#2
{
- \semantex_primitive_valuekey_slower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_clower:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_clowerdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerdots:nn#1#2
{
- \semantex_primitive_valuekey_clower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_clowerslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerslot:nn#1#2
{
- \semantex_primitive_valuekey_clower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_lowerwithothersep:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_lowerdotswithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdotswithothersep:nn#1#2
{
- \semantex_primitive_valuekey_lowerwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerdots } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerdots } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerslotwithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslotwithothersep:nn#1#2
{
- \semantex_primitive_valuekey_lowerwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerslot } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerslot } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_upperwithothersep:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn#1#2{
% upperwithsep={separator}{contents} adds contents to the upper index
% with the appropriate index separator
\semantex_data_bool_get:nnTF { #1 } { nextupperwithsep }
@@ -3353,7 +4550,7 @@
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerwithothersep:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn#1#2{
% lowerwithsep={separator}{contents} adds contents to the lower index
% with the appropriate index separator
\semantex_data_bool_get:nnTF { #1 } { nextlowerwithsep }
@@ -3376,7 +4573,7 @@
\semantex_data_int_incr:nn { #1 } { numberofupperindices }
}
-\cs_new:Npn\semantex_primitive_valuekey_cupper:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn#1#2{
% Adds to the upper index, with a comma as separator
\tl_if_blank:nF{#2}
{
@@ -3393,7 +4590,7 @@
}
-\cs_new:Npn\semantex_primitive_valuekey_clower:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn#1#2{
% Adds to the lower index, with a comma as separator
\tl_if_blank:nF{#2}
{
@@ -3409,7 +4606,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_ifnextupperwithsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn#1#2
{
% Tells whether the upper index is the first one
\tl_if_eq:nnTF { #2 } { false }
@@ -3422,13 +4619,13 @@
\semantex_data_bool_set_true:nn { #1 } { nextupperwithsep }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifnextupperwithsep_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifnextupperwithsep_temp } { ifnextupperwithsep } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep_temp_tl } { ifnextupperwithsep } { #2 }
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_ifnextlowerwithsep:nn#1#2 % should be removed later
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn#1#2 % should be removed later
{
% Tells whether the lower index is the first one
\tl_if_eq:nnTF { #2 } { false }
@@ -3441,19 +4638,19 @@
\semantex_data_bool_set_true:nn { #1 } { nextlowerwithsep }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifnextlowerwithsep_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifnextlowerwithsep_temp } { ifnextlowerwithsep } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep_temp_tl } { ifnextlowerwithsep } { #2 }
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_setuppersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setuppersep:nn#1#2
{
% Sets the separator for the upper index
\semantex_data_tl_set:nnn { #1 } { uppersep } { \exp_not:n { #2 }}
}
-\cs_new:Npn\semantex_primitive_valuekey_setlowersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowersep:nn#1#2
{
% Sets the separator for the lower index
\semantex_data_tl_set:nnn { #1 } { lowersep } { \exp_not:n { #2 }}
@@ -3461,7 +4658,7 @@
%--------------- Left indices: (I don't repeat all of the documentation)
-\cs_new:Npn\semantex_primitive_valuekey_upperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nn#1#2{
% adds to the upper left index
\tl_if_blank:nF{#2}{
\semantex_data_tl_put_left:nnn { #1 } { upperleft } { \exp_not:n{ #2 } }
@@ -3470,7 +4667,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_supperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_bool_get:nnTF { #1 } { nextupperwithsep }
@@ -3487,7 +4684,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_upperleftputright:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftputright:nn#1#2{
\tl_if_blank:nF{#2}{
\semantex_data_tl_put_right:nnn { #1 } { upperleft } { \exp_not:n{ #2 } }
\semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
@@ -3495,14 +4692,14 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_preupperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupperleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_tl_put_left:nnn { #1 } { preupperleft } { \exp_not:n{ #2 } }
}
}
-\cs_new:Npn\semantex_primitive_valuekey_postupperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupperleft:nn#1#2{
% adds to the lower index
\tl_if_blank:nF{#2}
{
@@ -3510,79 +4707,79 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_clearupperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupperleft:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { upperleft }
\semantex_data_bool_set_false:nn { #1 } { nextupperleftwithsep }
\semantex_data_int_clear:nn { #1 } { numberofupperleftindices }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearpreupperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupperleft:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { preupperleft }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearpostupperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupperleft:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { preupperleft }
}
-\cs_new:Npn\semantex_primitive_valuekey_setupperleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperleftdots:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { upperleftdots } { \exp_not:n { #2 } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_upperleft:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_upperleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftdots:nn#1#2
{
- \semantex_primitive_valuekey_upperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setupperleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperleftslot:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { upperleftslot } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_upperleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftslot:nn#1#2
{
- \semantex_primitive_valuekey_upperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_supperleft:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_supperleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleftdots:nn#1#2
{
- \semantex_primitive_valuekey_supperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_supperleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleftslot:nn#1#2
{
- \semantex_primitive_valuekey_supperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_cupperleft:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_cupperleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleftdots:nn#1#2
{
- \semantex_primitive_valuekey_cupperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_cupperleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleftslot:nn#1#2
{
- \semantex_primitive_valuekey_cupperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { upperleftslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_upperleftwithothersep:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_upperleftdotswithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftdotswithothersep:nn#1#2
{
- \semantex_primitive_valuekey_upperleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperleftdots } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperleftdots } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_upperleftslotwithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftslotwithothersep:nn#1#2
{
- \semantex_primitive_valuekey_upperleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperleftslot } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { upperleftslot } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_tl_put_left:nnn { #1 } { lowerleft } { \exp_not:n{ #2 } }
@@ -3591,7 +4788,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_slowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_bool_get:nnTF { #1 } { nextlowerleftwithsep }
@@ -3608,7 +4805,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerleftputright:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftputright:nn#1#2{
\tl_if_blank:nF{#2} %This test really shouldn’t be made.
{
\semantex_data_tl_put_right:nnn { #1 } { lowerleft } { \exp_not:n{ #2 } }
@@ -3617,21 +4814,21 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_prelowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelowerleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_tl_put_left:nnn { #1 } { prelowerleft } { \exp_not:n{ #2 } }
}
}
-\cs_new:Npn\semantex_primitive_valuekey_postlowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlowerleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_tl_put_right:nnn { #1 } { postlowerleft } { \exp_not:n{ #2 } }
}
}
-\cs_new:Npn\semantex_primitive_valuekey_upperleftwithothersep:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperleftwithothersep:nn#1#2{
\semantex_data_bool_get:nnTF { #1 } { nextupperleftwithsep }
{
\semantex_data_tl_put_left:nnn { #1 } { upperleft } {
@@ -3648,7 +4845,7 @@
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerleftwithothersep:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nn#1#2{
\semantex_data_bool_get:nnTF { #1 } { nextlowerleftwithsep }
{
\semantex_data_tl_put_left:nnn { #1 } { lowerleft } {
@@ -3664,79 +4861,79 @@
\semantex_data_int_incr:nn { #1 } { numberoflowerleftindices }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearlowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlowerleft:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { lowerleft }
\semantex_data_bool_set_false:nn { #1 } { nextlowerleftwithsep }
\semantex_data_int_clear:nn { #1 } { numberoflowerleftindices }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearprelowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelowerleft:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { prelowerleft }
}
-\cs_new:Npn\semantex_primitive_valuekey_clearpostlowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlowerleft:nn#1#2{
\semantex_data_tl_clear:nn { #1 } { prelowerleft }
}
-\cs_new:Npn\semantex_primitive_valuekey_setlowerleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerleftdots:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { lowerleftdots } { \exp_not:n { #2 } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_lowerleft:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_lowerleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftdots:nn#1#2
{
- \semantex_primitive_valuekey_lowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setlowerleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerleftslot:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { lowerleftslot } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftslot:nn#1#2
{
- \semantex_primitive_valuekey_lowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_slowerleft:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_slowerleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleftdots:nn#1#2
{
- \semantex_primitive_valuekey_slowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_slowerleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleftslot:nn#1#2
{
- \semantex_primitive_valuekey_slowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_clowerleft:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_clowerleftdots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleftdots:nn#1#2
{
- \semantex_primitive_valuekey_clowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } }
}
-\cs_new:Npn\semantex_primitive_valuekey_clowerleftslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleftslot:nn#1#2
{
- \semantex_primitive_valuekey_clowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nx { #1 } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } }
}
-\cs_generate_variant:Nn \semantex_primitive_valuekey_lowerleftwithothersep:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nn { nx }
-\cs_new:Npn\semantex_primitive_valuekey_lowerleftdotswithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftdotswithothersep:nn#1#2
{
- \semantex_primitive_valuekey_lowerleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerleftdots } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_lowerleftslotwithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftslotwithothersep:nn#1#2
{
- \semantex_primitive_valuekey_lowerleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } } }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerleftwithothersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get:nn { #1 } { lowerleftslot } } }
}
-\cs_new:Npn\semantex_primitive_valuekey_cupperleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_bool_get:nnTF { #1 } { nextupperleftwithsep }
@@ -3752,7 +4949,7 @@
}
-\cs_new:Npn\semantex_primitive_valuekey_clowerleft:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerleft:nn#1#2{
\tl_if_blank:nF{#2}
{
\semantex_data_bool_get:nnTF { #1 } { nextlowerleftwithsep }
@@ -3767,7 +4964,7 @@
}
}
-\cs_new:Npn\semantex_primitive_valuekey_ifnextupperleftwithsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperleftwithsep:nn#1#2
{
\tl_if_eq:nnTF { #2 } { false }
{
@@ -3779,14 +4976,14 @@
\semantex_data_bool_set_true:nn { #1 } { nextupperleftwithsep }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifnextupperleftwithsep_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifnextupperleftwithsep_temp } { ifnextupperleftwithsep } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperleftwithsep_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperleftwithsep_temp_tl } { ifnextupperleftwithsep } { #2 }
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_ifnextlowerleftwithsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerleftwithsep:nn#1#2
{
\tl_if_eq:nnTF { #2 } { false }
{
@@ -3798,18 +4995,18 @@
\semantex_data_bool_set_true:nn { #1 } { nextlowerleftwithsep }
}
{
- semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifnextlowerleftwithsep_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifnextlowerleftwithsep_temp } { ifnextlowerleftwithsep } { #2 }
+ semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerleftwithsep_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerleftwithsep_temp_tl } { ifnextlowerleftwithsep } { #2 }
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_setupperleftsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperleftsep:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { upperleftsep } { \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_setlowerleftsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerleftsep:nn#1#2
{
\semantex_data_tl_set:nnn { #1 } { lowerleftsep } { \exp_not:n { #2 } }
}
@@ -3817,351 +5014,351 @@
% Contrary to what you might think, the following commands ARE
% sometimes needed.
-\cs_new:Npn\semantex_primitive_valuekey_ifnextdwithsep:nn#1#2 % should be removed later
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep:nn#1#2 % should be removed later
{
% Tells whether the d (degree) is empty or not
\str_if_eq:nnTF { #2 } { true }
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \semantex_primitive_valuekey_ifnextupperwithsep:nn { #1 } { #2 } }
- { \semantex_primitive_valuekey_ifnextlowerwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
}
{
\str_if_eq:nnTF { #2 } { false }
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \semantex_primitive_valuekey_ifnextupperwithsep:nn { #1 } { #2 } }
- { \semantex_primitive_valuekey_ifnextlowerwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifnextdwithsep_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifnextdwithsep_temp } { ifnextdwithsep } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep_temp_tl } { ifnextdwithsep } { #2 }
}
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_ifnextdegwithsep:nn\semantex_primitive_valuekey_ifnextdwithsep
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdegwithsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep
-\cs_set_eq:NN\semantex_primitive_valuekey_ifnextdegreewithsep:nn\semantex_primitive_valuekey_ifnextdwithsep
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdegreewithsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextdwithsep
-\cs_new:Npn\semantex_primitive_valuekey_ifnextiwithsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep:nn#1#2
{
% Tells whether the i (index) is empty or not
\str_if_eq:nnTF { #2 } { true }
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \semantex_primitive_valuekey_ifnextlowerwithsep:nn { #1 } { #2 } }
- { \semantex_primitive_valuekey_ifnextupperwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
}
{
\str_if_eq:nnTF { #2 } { false }
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
- { \semantex_primitive_valuekey_ifnextlowerwithsep:nn { #1 } { #2 } }
- { \semantex_primitive_valuekey_ifnextupperwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextlowerwithsep:nn { #1 } { #2 } }
+ { \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextupperwithsep:nn { #1 } { #2 } }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifnextiwithsep_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifnextiwithsep_temp } { ifnextiwithsep } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep_temp_tl } { ifnextiwithsep } { #2 }
}
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_ifnextindexwithsep:nn\semantex_primitive_valuekey_ifnextiwithsep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextindexwithsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextiwithsep:nn
-\cs_new:Npn\semantex_primitive_valuekey_d:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_d:nn#1#2
{
% adds to the d-index (upper by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_upper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_lower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_deg:nn\semantex_primitive_valuekey_d:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_deg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_d:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degree:nn\semantex_primitive_valuekey_d:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_d:nn
-\cs_new:Npn\semantex_primitive_valuekey_sd:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sd:nn#1#2
{
% adds to the d-index (upper by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_supper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_slower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_sdeg:nn\semantex_primitive_valuekey_sd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sd:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegree:nn\semantex_primitive_valuekey_sd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sd:nn
-\cs_new:Npn\semantex_primitive_valuekey_cd:nn#1#2{ %IM Maybe remove this.
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cd:nn#1#2{ %IM Maybe remove this.
% adds to the d-index (upper by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_cupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_sdeg:nn\semantex_primitive_valuekey_cd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cd:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegree:nn\semantex_primitive_valuekey_cd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cd:nn
-\cs_new:Npn\semantex_primitive_valuekey_i:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_i:nn#1#2{
% adds to the i-index (lower by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_lower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_upper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_index:nn\semantex_primitive_valuekey_i:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_index:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_i:nn
-\cs_new:Npn\semantex_primitive_valuekey_si:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_si:nn#1#2{
% adds to the i-index (lower by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_slower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_supper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_sindex:nn\semantex_primitive_valuekey_si:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_si:nn
-\cs_new:Npn\semantex_primitive_valuekey_ci:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ci:nn#1#2{
% adds to the i-index (lower by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_cupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_cindex:nn\semantex_primitive_valuekey_ci:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ci:nn
-\cs_new:Npn\semantex_primitive_valuekey_dwithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dwithothersep:nn#1#2
{
% adds to the d-index (upper by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_upperwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_lowerwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_degwithothersep:nn\semantex_primitive_valuekey_dwithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dwithothersep:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreewithothersep:nn\semantex_primitive_valuekey_dwithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreewithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dwithothersep:nn
-\cs_new:Npn\semantex_primitive_valuekey_iwithothersep:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_iwithothersep:nn#1#2{
% adds to the i-index (lower by default)
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_lowerwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerwithothersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_upperwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperwithothersep:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_indexwithothersep:nn\semantex_primitive_valuekey_iwithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_iwithothersep:nn
-\cs_new:Npn\semantex_primitive_valuekey_setdsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdsep:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_setuppersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setuppersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_setlowersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowersep:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegsep:nn\semantex_primitive_valuekey_setdsep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdsep:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegreesep:nn\semantex_primitive_valuekey_setdsep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreesep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdsep:nn
-\cs_new:Npn\semantex_primitive_valuekey_setisep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setisep:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_setlowersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_setuppersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setuppersep:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_setindexsep:nn\semantex_primitive_valuekey_setisep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setindexsep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setisep:nn
-\cs_new:Npn\semantex_primitive_valuekey_pred:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_pred:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_preupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_prelower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_predeg:nn\semantex_primitive_valuekey_pred:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_predeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_pred:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_predegree:nn\semantex_primitive_valuekey_pred:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_predegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_pred:nn
-\cs_new:Npn\semantex_primitive_valuekey_postd:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postd:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_postupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_postlower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_postdeg:nn\semantex_primitive_valuekey_postd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postd:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_postdegree:nn\semantex_primitive_valuekey_postd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postd:nn
-\cs_set:Npn\semantex_primitive_valuekey_cleard:nn#1#2
+\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleard:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clearupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clearlower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_cleardeg:nn\semantex_primitive_valuekey_cleard:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleardeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleard:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_cleardegree:nn\semantex_primitive_valuekey_cleard:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleardegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleard:nn
-\cs_set:Npn\semantex_primitive_valuekey_clearpred:nn#1#2
+\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpred:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clearpreupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clearprelower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_clearpredeg:nn\semantex_primitive_valuekey_clearpred:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpredeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpred:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_clearpredegree:nn\semantex_primitive_valuekey_clearpred:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpredegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpred:nn
-\cs_set:Npn\semantex_primitive_valuekey_clearpostd:nn#1#2
+\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostd:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clearpostupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupper:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clearpostlower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlower:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_clearpostdeg:nn\semantex_primitive_valuekey_clearpostd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostdeg:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostd:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_clearpostdegree:nn\semantex_primitive_valuekey_clearpostd:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostdegree:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostd:nn
-\cs_new:Npn\semantex_primitive_valuekey_prei:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prei:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_prelower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prelower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_preupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preupper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_preindex:nn\semantex_primitive_valuekey_prei:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_preindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_prei:nn
-\cs_new:Npn\semantex_primitive_valuekey_posti:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_posti:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_postlower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postlower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_postupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postupper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_postindex:nn\semantex_primitive_valuekey_posti:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_postindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_posti:nn
-\cs_set:Npn\semantex_primitive_valuekey_cleari:nn#1#2
+\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleari:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clearlower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearlower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clearupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearupper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_clearindex:nn\semantex_primitive_valuekey_cleari:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cleari:nn
-\cs_set:Npn\semantex_primitive_valuekey_clearprei:nn#1#2
+\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprei:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clearprelower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprelower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clearpreupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreupper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_clearpreindex:nn\semantex_primitive_valuekey_clearprei:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpreindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearprei:nn
-\cs_set:Npn\semantex_primitive_valuekey_clearposti:nn#1#2
+\cs_set:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearposti:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clearpostlower:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostlower:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clearpostupper:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostupper:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_clearpostindex:nn\semantex_primitive_valuekey_clearposti:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearpostindex:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clearposti:nn
-\cs_new:Npn\semantex_primitive_valuekey_setddots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setddots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
@@ -4172,139 +5369,139 @@
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegdots:nn\semantex_primitive_valuekey_setddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setddots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegreedots:nn\semantex_primitive_valuekey_setddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setddots:nn
-\cs_new:Npn\semantex_primitive_valuekey_ddots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_upperdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdots:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_lowerdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdots:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_degdots:nn\semantex_primitive_valuekey_ddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreedots:nn\semantex_primitive_valuekey_ddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddots:nn
-\cs_new:Npn\semantex_primitive_valuekey_setdslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdslot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_setupperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_setlowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegslot:nn\semantex_primitive_valuekey_setdslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdslot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegreeslot:nn\semantex_primitive_valuekey_setdslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdslot:nn
-\cs_new:Npn\semantex_primitive_valuekey_dslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_upperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_lowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_degslot:nn\semantex_primitive_valuekey_dslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreeslot:nn\semantex_primitive_valuekey_dslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslot:nn
-\cs_new:Npn\semantex_primitive_valuekey_sddots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sddots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_supperdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperdots:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_slowerdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerdots:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegdots:nn\semantex_primitive_valuekey_sddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sddots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegreedots:nn\semantex_primitive_valuekey_sddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sddots:nn
-\cs_new:Npn\semantex_primitive_valuekey_sdslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdslot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_supperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_slowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegslot:nn\semantex_primitive_valuekey_sdslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdslot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegreeslot:nn\semantex_primitive_valuekey_sdslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdslot:nn
-\cs_new:Npn\semantex_primitive_valuekey_cddots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cddots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_cupperdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperdots:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clowerdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerdots:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_cdegdots:nn\semantex_primitive_valuekey_cddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cddots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_cdegreedots:nn\semantex_primitive_valuekey_cddots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cddots:nn
-\cs_new:Npn\semantex_primitive_valuekey_cdslot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdslot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_cupperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_clowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_cdegslot:nn\semantex_primitive_valuekey_cdslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdslot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_cdegreeslot:nn\semantex_primitive_valuekey_cdslot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdslot:nn
-\cs_new:Npn\semantex_primitive_valuekey_ddotswithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddotswithothersep:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_upperdotswithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdotswithothersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_lowerdotswithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdotswithothersep:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_degdotswithothersep:nn\semantex_primitive_valuekey_ddotswithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degdotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddotswithothersep:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreedotswithothersep:nn\semantex_primitive_valuekey_ddotswithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ddotswithothersep:nn
-\cs_new:Npn\semantex_primitive_valuekey_dslotwithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslotwithothersep:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_upperslotwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslotwithothersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_lowerslotwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslotwithothersep:nn { #1 } { #2 }
}
}
@@ -4312,7 +5509,7 @@
%----------------------------------------------------------
-\cs_new:Npn\semantex_primitive_valuekey_setidots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setidots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
@@ -4323,168 +5520,172 @@
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_setindexdots:nn\semantex_primitive_valuekey_setidots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setindexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setidots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegreedots:nn\semantex_primitive_valuekey_setidots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setidots:nn
-\cs_new:Npn\semantex_primitive_valuekey_idots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_lowerdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdots:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_upperdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdots:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_indexdots:nn\semantex_primitive_valuekey_idots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreedots:nn\semantex_primitive_valuekey_idots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idots:nn
-\cs_new:Npn\semantex_primitive_valuekey_setislot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setislot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_setlowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setlowerslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_setupperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setupperslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_setindexslot:nn\semantex_primitive_valuekey_setislot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setindexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setislot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_setdegreeslot:nn\semantex_primitive_valuekey_setislot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_setislot:nn
-\cs_new:Npn\semantex_primitive_valuekey_islot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_lowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_upperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_indexslot:nn\semantex_primitive_valuekey_islot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreeslot:nn\semantex_primitive_valuekey_islot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islot:nn
-\cs_new:Npn\semantex_primitive_valuekey_sidots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sidots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_slowerdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerdots:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_supperdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperdots:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_sindexdots:nn\semantex_primitive_valuekey_sidots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sindexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sidots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegreedots:nn\semantex_primitive_valuekey_sidots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sidots:nn
-\cs_new:Npn\semantex_primitive_valuekey_sislot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sislot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_slowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_slowerslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_supperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_supperslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_sindexslot:nn\semantex_primitive_valuekey_sislot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sindexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sislot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_sdegreeslot:nn\semantex_primitive_valuekey_sislot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sislot:nn
-\cs_new:Npn\semantex_primitive_valuekey_cidots:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cidots:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clowerdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerdots:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_cupperdots:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperdots:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_cindexdots:nn\semantex_primitive_valuekey_cidots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cindexdots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cidots:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_cdegreedots:nn\semantex_primitive_valuekey_cidots:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreedots:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cidots:nn
-\cs_new:Npn\semantex_primitive_valuekey_cislot:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cislot:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_clowerslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_clowerslot:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_cupperslot:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cupperslot:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_cindexslot:nn\semantex_primitive_valuekey_cislot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cindexslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cislot:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_cdegreeslot:nn\semantex_primitive_valuekey_cislot:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cdegreeslot:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_cislot:nn
-\cs_new:Npn\semantex_primitive_valuekey_idotswithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idotswithothersep:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_lowerdotswithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerdotswithothersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_upperdotswithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperdotswithothersep:nn { #1 } { #2 }
}
}
-\cs_set_eq:NN\semantex_primitive_valuekey_indexdotswithothersep:nn\semantex_primitive_valuekey_idotswithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_indexdotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idotswithothersep:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreedotswithothersep:nn\semantex_primitive_valuekey_idotswithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreedotswithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_idotswithothersep:nn
-\cs_new:Npn\semantex_primitive_valuekey_islotwithothersep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_islotwithothersep:nn#1#2
{
\semantex_data_bool_get:nnTF { #1 } { uppergrading }
{
- \semantex_primitive_valuekey_lowerslotwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_lowerslotwithothersep:nn { #1 } { #2 }
}
{
- \semantex_primitive_valuekey_upperslotwithothersep:nn { #1 } { #2 }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_upperslotwithothersep:nn { #1 } { #2 }
}
}
%----------------------------------------------------------
-\cs_set_eq:NN\semantex_primitive_valuekey_degslotwithothersep:nn\semantex_primitive_valuekey_dslotwithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degslotwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslotwithothersep:nn
-\cs_set_eq:NN\semantex_primitive_valuekey_degreeslotwithothersep:nn\semantex_primitive_valuekey_dslotwithothersep:nn
+\cs_set_eq:NN\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_degreeslotwithothersep:nn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_dslotwithothersep:nn
-\cs_new:Npn\semantex_primitive_valuekey_par:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_par:nn#1#2{
% Turns parentheses on, and sets their size
\semantex_data_tl_set:nnn { #1 } { parsize }{ \exp_not:n { #2 } }
- \semantex_primitive_valuekey_ifpar:nn { #1 } { true }
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar:nn { #1 } { true }
}
-\cs_new:Npn\semantex_primitive_valuekey_parsize:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_parsize:nn#1#2{
% Sets the size of the parentheses
\semantex_data_tl_set:nnn { #1 } { parsize }{ \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_leftpar:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:nn#1#2{
\semantex_data_tl_set:nnn { #1 } { leftpar }{ \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_rightpar:nn#1#2{
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftpar:nn { xn }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:nn#1#2{
\semantex_data_tl_set:nnn { #1 } { rightpar }{ \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_ifpar:nn#1#2{ %IMPLEMENT THIS
+\cs_generate_variant:Nn \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightpar:nn { xn }
+
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar:nn#1#2{ %IMPLEMENT THIS
% tells whether to use the output class or not
\semantex_data_bool_provide:nn { #1 } { par }
\str_if_eq:nnTF { #2 } { true }
@@ -4505,50 +5706,50 @@
\semantex_data_bool_set_true:nn { #1 } { flexpar }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifpar_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifpar_temp } { ifpar } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifpar_temp_tl } { ifpar } { #2 }
}
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_spar:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar:nn#1#2
{
% Abbreviation for "symbol parentheses"
% Adds parentheses around the current symbol
- \semantex_primitive_valuekey_return:nn { #1 }{}
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn { #1 }{}
\semantex_data_tl_inherit:nn { #1 } { symbol } % Check if really necessary
\tl_if_blank:nTF { #2 }
{
- \semantex_data_tl_get_store:nnN { #1 } { sparsize } \l__semantex_primitive_valuekey_spar_sparsize_temp
+ \semantex_data_tl_get_store:nnN { #1 } { sparsize } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl
\__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_primitive_valuekey_spar_sparsize_temp }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl }
{ \semantex_data_tl_get:nn { #1 } { leftspar } }
{ \semantex_data_tl_get:nn { #1 } { rightspar } }
{ \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_primitive_valuekey_spar_temp
+ \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
\semantex_data_tl_set:nnx { #1 } { symbol }
{
- \exp_not:V\l__semantex_primitive_valuekey_spar_temp
+ \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
}
}
{
- \tl_set:Nn \l__semantex_primitive_valuekey_spar_sparsize_temp { \exp_not:n { #2 } }
+ \tl_set:Nn \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl { \exp_not:n { #2 } }
\__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_primitive_valuekey_spar_sparsize_temp }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_sparsize_temp_tl }
{ \semantex_data_tl_get:nn { #1 } { leftspar } }
{ \semantex_data_tl_get:nn { #1 } { rightspar } }
{ \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_primitive_valuekey_spar_temp
+ \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
\semantex_data_tl_set:nnx { #1 } { symbol }
{
- \exp_not:V\l__semantex_primitive_valuekey_spar_temp
+ \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_spar_temp_tl
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_ifnextargwithsep:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextargwithsep:nn#1#2
{
% Tells whether it is the first argument or not
\tl_if_eq:nnTF { #2 } { true }
@@ -4561,72 +5762,72 @@
\semantex_data_bool_set_false:nn { #1 } { nextargwithsep }
}
{
- \semantex_error_output_format:nN { #1 } \l__semantex_primitive_valuekey_ifnextargwithsep_temp
- \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_primitive_valuekey_ifnextargwithsep_temp } { ifnextargwithsep } { #2 }
+ \semantex_error_output_format:nN { #1 } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextargwithsep_temp_tl
+ \msg_error:nnxnn { semantex } { key_value_not_found } { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifnextargwithsep_temp_tl } { ifnextargwithsep } { #2 }
}
}
}
-\cs_new:Npn\semantex_primitive_valuekey_otherspar:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar:nn#1#2
{
% Uses the syntax otherspar={leftpar}{rightpar}
% Adds a new spar, but with these as parentheses
- \__semantex_primitive_valuekey_otherspar_auxiliary:nnn { #1 } #2
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_auxiliary:nnn { #1 } #2
}
-\cs_new:Npn\__semantex_primitive_valuekey_otherspar_auxiliary:nnn#1#2#3
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_auxiliary:nnn#1#2#3
{
\semantex_data_tl_inherit:nn { #1 } { sparsize } % This is necessary for unknown reasons -- otherwise, it will crash when inheriting sparsize
\semantex_data_tl_inherit:nn { #1 } { symbol }
- \semantex_primitive_valuekey_return:nn { #1 }{}
- \semantex_data_tl_get_store:nnN { #1 } { sparsize } \l__semantex_primitive_valuekey_otherspar_sparsize_temp
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_return:nn { #1 }{}
+ \semantex_data_tl_get_store:nnN { #1 } { sparsize } \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_sparsize_temp_tl
\__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_primitive_valuekey_otherspar_sparsize_temp }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_sparsize_temp_tl }
{ \exp_not:n { \exp_not:n { #2 } } }
{ \exp_not:n { \exp_not:n { #3 } } }
{ \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_primitive_valuekey_otherspar_temp
+ \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_temp_tl
\semantex_data_tl_set:nnx { #1 } { symbol }
{
- \exp_not:V\l__semantex_primitive_valuekey_otherspar_temp
+ \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_otherspar_temp_tl
}
}
-\cs_new:Npn\semantex_primitive_valuekey_Otherspar:nn#1#2
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar:nn#1#2
{
% Uses the syntax otherspar={leftpar}{rightpar}{size}
% Adds a new spar, but with these as parentheses and size
- \__semantex_primitive_valuekey_Otherspar_auxiliary:nnnn { #1 } #2
+ \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_auxiliary:nnnn { #1 } #2
}
-\cs_new:Npn\__semantex_primitive_valuekey_Otherspar_auxiliary:nnnn#1#2#3#4
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_auxiliary:nnnn#1#2#3#4
{
- \tl_set:Nn\l__semantex_primitive_valuekey_Otherspar_sparsize_temp
+ \tl_set:Nn\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_sparsize_temp_tl
{ \exp_not:n { #4 } }
\__semantex_symbol_parentheses_store:nnnnN
- { \l__semantex_primitive_valuekey_Otherspar_sparsize_temp }
+ { \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_sparsize_temp_tl }
{ \exp_not:n { \exp_not:n { #2 } } }
{ \exp_not:n { \exp_not:n { #3 } } }
{ \semantex_data_tl_get_exp_not:nn { #1 } { symbol } }
- \l__semantex_primitive_valuekey_Otherspar_temp
+ \l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_temp_tl
\semantex_data_tl_set:nnx { #1 } { symbol }
{
- \exp_not:V\l__semantex_primitive_valuekey_Otherspar_temp
+ \exp_not:V\l__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_Otherspar_temp_tl
}
}
-\cs_new:Npn\semantex_primitive_valuekey_sparsize:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_sparsize:nn#1#2{
% sets the size of the parentheses
\semantex_data_tl_set:nnn { #1 } { sparsize }{ \exp_not:n { #2 } }
}
-\cs_new:Npn\semantex_primitive_valuekey_leftspar:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_leftspar:nn#1#2{
\semantex_data_tl_set:nnn { #1 } { leftspar }{ \exp_not:n { \exp_not:n { #2 } } }
%IM Two \exp_not necessary for unknown reasons
%IM Doing the same at leftpar yields an error.
}
-\cs_new:Npn\semantex_primitive_valuekey_rightspar:nn#1#2{
+\cs_new:Npn\__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_rightspar:nn#1#2{
\semantex_data_tl_set:nnn { #1 } { rightspar }{ \exp_not:n { \exp_not:n { #2 } } }
%IM Two \exp_not necessary for unknown reasons
%IM Doing the same at leftpar yields an error.
@@ -4634,56 +5835,13 @@
\cs_generate_variant:Nn \semantex_keys_set:nn { nx, no, nV } % Only the first one is currently being used
-\cs_new:Npn \semantex_valuekey:nnn#1#2#3{
- % Takes care of valuekeys, keys taking a value
- % For the sake of implementation, the arguments
- % come in a strange order
- % #1 = value of key
- % #2 = name of the key
- % #3 = object
- \tl_set:Nn\l__semantex_key_value_temp{\exp_not:n{#1}}
- %IM think about using extra {...} to avoid interference with keyval str
- \semantex_valuekey_get:nnNTF { #3 } { #2 } \l__semantex_custom_valuekey_temp
- {
- \semantex_keys_set:nx { #3 }
- { \l__semantex_custom_valuekey_temp }
- }
- {
- \cs_if_exist:cTF { semantex_primitive_valuekey_#2:nn }
- {
- \use:c { semantex_primitive_valuekey_#2:nn }{ #3 }{ #1 }
- }
- {
- \semantex_error_output_format:nN { #3 } \__semantex_valuekey_unknown_key_temp
- \msg_error:nnxn { semantex } { valuekey_not_found } { \__semantex_valuekey_unknown_key_temp } { #2 }
- }
- }
-}
-
-\cs_new:Npn \semantex_singlekey:nn#1#2
-{
- % #1 = name of the key
- % #2 = object
-% Takes care of single keys, keys without a value
- \semantex_singlekey_get:nnNTF { #2 } { #1 } \l__semantex_custom_singlekey_temp
- {
- \semantex_keys_set:nx { #2 }
- {
- \l__semantex_custom_singlekey_temp
- }
- }
- {
- \semantex_keys_set:nn { #2 } { default = { #1 } }
- }
-}
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% COMMANDS CONTROLLING THE ARGUMENT KEYVAL INTERFACE
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\cs_new:Npn \semantex_primitive_arg_valuekey_othersep:nn#1#2
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nn#1#2
{
% Uses syntax sep={separator}{argument}; adds an argument
% with the specified separator
@@ -4708,7 +5866,9 @@
\semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
}
-\cs_new:Npn \semantex_primitive_arg_valuekey_s:nn#1#2
+\cs_generate_variant:Nn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nn { nx }
+
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nn#1#2
{
% Adds to the argument, with the standard separator
\semantex_data_bool_get:nnTF { #1 } { nextargwithsep }
@@ -4725,207 +5885,204 @@
% this was mostly to create symmetry with the below case where
% cx is strictly necessary.
}
-% \semantex_primitive_valuekey_ifoutput:nn { #1 } { true }
+% \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput:nn { #1 } { true }
+ \semantex_data_int_incr:nn { #1 } { numberofarguments }
+ \semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
+}
+
+\cs_generate_variant:Nn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nn { nx }
+
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nn#1#2
+{
+ % Adds to the argument, with the standard separator
+ \semantex_data_bool_get:nnTF { #1 } { nextargwithsep }
+ {
+ \semantex_data_tl_put_right:nnn { #1 } { arg } { , \exp_not:n { #2 } }
+ % As an experiment, I tried changing cx to cn, and it failed
+ % when changing the separator on the fly.
+ }
+ {
+ \semantex_data_tl_put_right:nnn { #1 } { arg } { \exp_not:n { #2 } }
+ %IM Recently corrected
+ % Previously, this was cx, but I didn’t see any point of this;
+ % this was mostly to create symmetry with the below case where
+ % cx is strictly necessary.
+ }
+% \__semantex_data_cs_custom_valuekey_class_SemantexBaseObject_ifoutput:nn { #1 } { true }
\semantex_data_int_incr:nn { #1 } { numberofarguments }
\semantex_data_bool_set_true:nn { #1 } { nextargwithsep }
}
-\cs_generate_variant:Nn \semantex_primitive_arg_valuekey_s:nn { nx }
+\cs_generate_variant:Nn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nn { nx }
-\cs_new:Npn \semantex_primitive_arg_valuekey_dots:nn#1#2
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_dots:nn#1#2
{
% Writes dots in the argument
- \semantex_primitive_arg_valuekey_s:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argdots } }
+ \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argdots } }
}
-\cs_new:Npn \semantex_primitive_arg_valuekey_slot:nn#1#2
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_slot:nn#1#2
{
% Writes the slot in teh argument
- \semantex_primitive_arg_valuekey_s:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argslot } }
+ \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_s:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argslot } }
}
-\cs_generate_variant:Nn \semantex_arg_keys_set:nn { nx }
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_cdots:nn#1#2
+{
+ % Writes dots in the argument
+ \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argdots } }
+}
-\cs_new:Npn \semantex_arg_valuekey:nnn#1#2#3
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_cslot:nn#1#2
{
- % Takes care of valuekeys, keys with a value
- % For the sake of implementation, the arguments
- % come in a strange order
- % #1 = value of key
- % #2 = name of the key
- % #3 = object
- \tl_set:Nn\l__semantex_arg_key_value_temp{\exp_not:n{#1}} % stores the content of the key in the temporary command \l__semantex_key_value_temp
- \semantex_arg_valuekey_get:nnNTF { #3 } { #2 } \l__semantex_custom_arg_valuekey_temp
- {
- \semantex_arg_keys_set:nx { #3 } { \l__semantex_custom_arg_valuekey_temp }
- }
- {
- \cs_if_exist:cTF { semantex_primitive_arg_valuekey_#2:nn }
- {
- \use:c { semantex_primitive_arg_valuekey_#2:nn }{ #3 }{ #1 }
- }
- {
-% \msg_error:nnnn { semantex } { arg_valuekey_not_found } { #2 } { #3 }
- \semantex_error_output_format:nN { #3 } \__semantex_arg_valuekey_unknown_key_temp
- \msg_error:nnxn { semantex } { arg_valuekey_not_found } { \__semantex_arg_valuekey_unknown_key_temp } { #2 }
- }
- }
+ % Writes the slot in teh argument
+ \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_c:nx { #1 } { \semantex_data_tl_get_exp_not:nn { #1 } { argslot } }
}
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_dotswithothersep:nn#1#2
+{
+ % Writes dots in the argument
+ \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get_exp_not:nn { #1 } { argdots } } }
+}
-\cs_new:Npn \semantex_arg_singlekey:nn#1#2
+\cs_new:Npn \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_slotwithothersep:nn#1#2
{
- % #1 = name of the key
- % #2 = object
-% % takes care of single keys, keys without a value
-% the class key is not actually necessary
- \semantex_arg_singlekey_get:nnNTF { #2 } { #1 } \l__semantex_custom_arg_singlekey_temp
- {
- %\exp_args:NNno
- %\exp_args:Nno
- \semantex_arg_keys_set:nx { #2 }
- {
- \l__semantex_custom_arg_singlekey_temp
- }
- }
- {
- \semantex_data_tl_inherit_x:nn { #2 } { arg }
- \semantex_arg_keys_set:nn { #2 } { default={\exp_not:n { #1 } }}
- %IM THis \exp_not:n was added late, might be needed elsewhere, too.
- }
+ % Writes the slot in teh argument
+ \__semantex_data_cs_custom_arg_valuekey_class_SemantexBaseObject_othersep:nx { #1 } { { \exp_not:n { #2 } } { \semantex_data_tl_get_exp_not:nn { #1 } { argslot } } }
}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% SETTING UP THE BASE CLASS SemantexVariable
+% SETTING UP THE BASE CLASS SemantexBaseObject
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\semantex_data_tl_provide:nn { class_SemantexVariable } { output }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { output }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { output } { class_SemantexVariable }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { output } { class_SemantexBaseObject }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { upper }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upper }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { uppersep }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { uppersep }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { uppersep } { , }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { uppersep } { , }
%IM Also, need commands like forgetupperindex, reverting to the class standard
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lower }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lower }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lowersep }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowersep }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { lowersep } { , }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { lowersep } { , }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { preupper }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { preupper }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { postupper }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postupper }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { prelower }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { prelower }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { postlower }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postlower }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { upperleft }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleft }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { upperleftsep }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleftsep }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { upperleftsep } { , }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { upperleftsep } { , }
%IM do the same with all the others, INCLUDING if_uppergrading and symbol
%IM Also, need commands like forgetupperindex, reverting to the class standard
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lowerleft }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleft }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lowerleftsep }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleftsep }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { lowerleftsep } { , }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { lowerleftsep } { , }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { preupperleft }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { preupperleft }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { postupperleft }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postupperleft }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { prelowerleft }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { prelowerleft }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { postlowerleft }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postlowerleft }
-\semantex_data_int_provide:nn { class_SemantexVariable } { numberofarguments }
+\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberofarguments }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { nextargwithsep }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextargwithsep }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { nextupperleftwithsep }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { nextlowerleftwithsep }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextupperleftwithsep }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextlowerleftwithsep }
-\semantex_data_int_provide:nn { class_SemantexVariable } { numberofupperleftindices }
-\semantex_data_int_provide:nn { class_SemantexVariable } { numberoflowerleftindices }
+\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberofupperleftindices }
+\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberoflowerleftindices }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { prearg }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { prearg }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { postarg }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { postarg }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { arg }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { arg }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { argsep }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { argsep } {,}
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { argsep }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { argsep } {,}
-\semantex_data_tl_provide:nn { class_SemantexVariable } { argslot }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { argslot } { \SemantexSlot }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { argslot }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { argslot } { \SemantexSlot }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { argdots }
-\semantex_data_tl_set:nnn { class_SemantexVariable } { argdots } {\dots}
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { argdots }
+\semantex_data_tl_set:nnn { class_SemantexBaseObject } { argdots } {\dots}
-\semantex_data_tl_provide:nn { class_SemantexVariable } { symbol }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { symbol }
-\semantex_data_seq_provide:nn { class_SemantexVariable } { commands_sequence }
+\semantex_data_seq_provide:nn { class_SemantexBaseObject } { commands_sequence }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { uppergrading }
-\semantex_data_bool_set_true:nn { class_SemantexVariable } { uppergrading }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { uppergrading }
+\semantex_data_bool_set_true:nn { class_SemantexBaseObject } { uppergrading }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { output }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { output }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { outputoptions }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { outputoptions }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { nextupperwithsep }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { nextlowerwithsep }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextupperwithsep }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { nextlowerwithsep }
-\semantex_data_int_provide:nn { class_SemantexVariable } { numberofupperindices }
-\semantex_data_int_provide:nn { class_SemantexVariable } { numberoflowerindices }
+\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberofupperindices }
+\semantex_data_int_provide:nn { class_SemantexBaseObject } { numberoflowerindices }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { par }
-\semantex_data_bool_set_true:nn { class_SemantexVariable } { par }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { par }
+\semantex_data_bool_set_true:nn { class_SemantexBaseObject } { par }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { flexpar }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { flexpar }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { parseoptions }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { parseoptions }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { texclass }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { texclass }
-\semantex_data_bool_provide:nn { class_SemantexVariable } { leftargument }
+\semantex_data_bool_provide:nn { class_SemantexBaseObject } { leftargument }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { upperdots }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { upperslot }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperdots }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperslot }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lowerdots }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lowerslot }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerdots }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerslot }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { upperleftdots }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { upperleftslot }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleftdots }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { upperleftslot }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lowerleftdots }
-\semantex_data_tl_provide:nn { class_SemantexVariable } { lowerleftslot }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleftdots }
+\semantex_data_tl_provide:nn { class_SemantexBaseObject } { lowerleftslot }
-%\tl_set:Nn\g_objectmath_SemantexVariable_upper { hej }
-%\tl_set:Nn \SemantexVariable_output { class_SemantexVariable }
-%\bool_new:N \SemantexVariable_output_if_provided
-%\bool_set_true:N \SemantexVariable_output_if_provided
+%\tl_set:Nn\g_objectmath_SemantexBaseObject_upper { hej }
+%\tl_set:Nn \SemantexBaseObject_output { class_SemantexBaseObject }
+%\bool_new:N \SemantexBaseObject_output_if_provided
+%\bool_set_true:N \SemantexBaseObject_output_if_provided
-\semantex_new_variable_class:Nw \SemantexVariable [
- %parent=SemantexVariable,
- output=\SemantexVariable,
+\semantex_new_plain_class:Nw \SemantexBaseObject [
+ %parent=SemantexBaseObject,
+ output=\SemantexBaseObject,
ifoutput=false,
symbol=,
gradingposition=upper,
@@ -4983,14 +6140,37 @@
{si**}{si=\g_semantex_double_bullet},
{ci*}{ci=\g_semantex_bullet},
{ci**}{ci=\g_semantex_double_bullet},
- {smash}{command=\noexpand\smash},
-% (widebar}{command=\noexpand\widebar},%For unknown reasons, this only seems to work when run as a primitive
- {tilde}{command=\noexpand\tilde},
+ {upper*}{upper=\g_semantex_bullet},
+ {upper**}{upper=\g_semantex_double_bullet},
+ {supper*}{supper=\g_semantex_bullet},
+ {supper**}{supper=\g_semantex_double_bullet},
+ {cupper*}{cupper=\g_semantex_bullet},
+ {cupper**}{cupper=\g_semantex_double_bullet},
+ {lower*}{lower=\g_semantex_bullet},
+ {lower**}{lower=\g_semantex_double_bullet},
+ {slower*}{slower=\g_semantex_bullet},
+ {slower**}{slower=\g_semantex_double_bullet},
+ {clower*}{clower=\g_semantex_bullet},
+ {clower**}{clower=\g_semantex_double_bullet},
+ {upperleft*}{upperleft=\g_semantex_bullet},
+ {upperleft**}{upperleft=\g_semantex_double_bullet},
+ {supperleft*}{supperleft=\g_semantex_bullet},
+ {supperleft**}{supperleft=\g_semantex_double_bullet},
+ {cupperleft*}{cupperleft=\g_semantex_bullet},
+ {cupperleft**}{cupperleft=\g_semantex_double_bullet},
+ {lowerleft*}{lowerleft=\g_semantex_bullet},
+ {lowerleft**}{lowerleft=\g_semantex_double_bullet},
+ {slowerleft*}{slowerleft=\g_semantex_bullet},
+ {slowerleft**}{slowerleft=\g_semantex_double_bullet},
+ {clowerleft*}{clowerleft=\g_semantex_bullet},
+ {clowerleft**}{clowerleft=\g_semantex_double_bullet},
+ {smash}{command=\smash},
+ {tilde}{command=\tilde},
{widetilde}{command=\widetilde},
- {overline}{command=\noexpand\overline},
- {bar}{command=\noexpand\bar},
- {bold}{command=\noexpand\mathbf},
- {roman}{command=\noexpand\mathrm},
+ {overline}{command=\overline},
+ {bar}{command=\bar},
+ {bold}{command=\mathbf},
+ {roman}{command=\mathrm},
{mathord}{texclass=\mathord},
{mathbin}{texclass=\mathbin},
{mathop}{texclass=\mathop},
@@ -5124,32 +6304,29 @@
{sdegree-}{sdegreeslot=},
{...}{sidots=},
{-}{sislot=},
- % The following four commands do not work due to expansion issues:
-% {useargwithkeyval}{useargwithkeyval=},
% {argwithkeyval}{
% valuekeys={
-% {arg}{argwithkeyval={\noexpand\l__semantex_key_value_temp}},
+% {arg}{argwithkeyval={####1}},
% },
% },
% {argwithsinglekeys}{
% valuekeys={
-% {arg}{argwithsinglekeys={\noexpand\l__semantex_key_value_temp}},
+% {arg}{argwithsinglekeys={####1}},
% },
% },
% {argwithoutkeyval}{
% valuekeys={
-% {arg}{argwithoutkeyval={\noexpand\l__semantex_key_value_temp}},
+% {arg}{argwithoutkeyval={####1}},
% },
% },
% {argwithonesinglekey}{
% valuekeys={
-% {arg}{argwithonesinglekey={\noexpand\l__semantex_key_value_temp}},
+% {arg}{argwithonesinglekey={####1}},
% },
% },
},
valuekeys={
{default}{sindex={#1}},
-% {arg}{argwithkeyval={#1}},
{arg}{argwithsinglekeys={#1}},
{degreedefault}{sdegree={#1}},
{*withothersep}{degreewithothersep={#1}{\g_semantex_bullet}},
@@ -5164,25 +6341,87 @@
{index**withothersep}{indexwithothersep={#1}{\g_semantex_double_bullet}},
{i*withothersep}{iwithothersep={#1}{\g_semantex_bullet}},
{i**withothersep}{iwithothersep={#1}{\g_semantex_double_bullet}},
+ {upper*withothersep}{upperwithothersep={#1}{\g_semantex_bullet}},
+ {upper**withothersep}{upperwithothersep={#1}{\g_semantex_double_bullet}},
+ {lower*withothersep}{lowerwithothersep={#1}{\g_semantex_bullet}},
+ {lower**withothersep}{lowerwithothersep={#1}{\g_semantex_double_bullet}},
+ {upperleft*withothersep}{upperleftwithothersep={#1}{\g_semantex_bullet}},
+ {upperleft**withothersep}{upperleftwithothersep={#1}{\g_semantex_double_bullet}},
+ {lowerleft*withothersep}{lowerleftwithothersep={#1}{\g_semantex_bullet}},
+ {lowerleft**withothersep}{lowerleftwithothersep={#1}{\g_semantex_double_bullet}},
+ {sarg}{argwithkeyval={s={#1}}},
+ {carg}{argwithkeyval={c={#1}}},
+ {argwithothersep}{argwithkeyval={othersep={#1}}},
+ {argdots}{argwithkeyval={...}},
+ {arg...}{argwithkeyval={...}},
+ {cargdots}{argwithkeyval={cdots=}},
+ {carg...}{argwithkeyval={cdots=}},
+ {argdotswithothersep}{argwithkeyval={dotswithothersep={#1}}},
+ {arg...withothersep}{argwithkeyval={dotswithothersep={#1}}},
+ {argdots}{argwithkeyval={-}},
+ {arg-}{argwithkeyval={-}},
+ {cargslot}{argwithkeyval={cslot=}},
+ {carg-}{argwithkeyval={cslot=}},
+ {argslotwithothersep}{argwithkeyval={slotwithothersep={#1}}},
+ {arg-withothersep}{argwithkeyval={slotwithothersep={#1}}},
+ {argkeyval}{
+ ifeqTF={#1}{true}
+ {
+ valuekeys={
+ {arg}{argwithkeyval={####1}},
+ },
+ }
+ {
+ ifeqTF={#1}{false}
+ {
+ valuekeys={
+ {arg}{argwithoutkeyval={####1}},
+ },
+ }
+ {
+ ifeqTF={#1}{singlekeys}
+ {
+ valuekeys={
+ {arg}{argwithsinglekeys={####1}},
+ },
+ }
+ {
+ ifeqTF={#1}{onesinglekey}
+ {
+ valuekeys={
+ {arg}{argwithonesinglekey={####1}},
+ },
+ }
+ {
+ ERRORkeyvaluenotfound={argkeyval}{#1},
+ },
+ },
+ },
+ },
+ },
},
-% argwithsinglekeys,
argvaluekeys={
{default}{s={#1}},
+ {-withothersep}{slotwithothersep={#1}},
+ {...withothersep}{dotswithothersep={#1}},
},
argsinglekeys={
{slot}{slot=},
{-}{slot=},
+ {cslot}{cslot=},
+ {c-}{cslot=},
% {*}{slot=}, % would be confusing since * does not correspond to slot in the indices
+ {dots}{dots=},
{...}{dots=},
+ {cdots}{cdots=},
+ {c...}{cdots=},
},
- %command=,
-% useargwithkeyval,
]
-\cs_set_eq:NN\__semantex_old_version_of_semantex_new_object_of_class_SemantexVariable:Nw \__semantex_new_object_of_class_SemantexVariable:Nw
+\cs_set_eq:NN\__semantex_old_version_of_semantex_new_object_of_class_SemantexBaseObject:Nw \__semantex_new_object_of_class_SemantexBaseObject:Nw
-\cs_set:Npn \__semantex_new_object_of_class_SemantexVariable:Nw#1
+\cs_set:Npn \__semantex_new_object_of_class_SemantexBaseObject:Nw#1
{
- \msg_error:nnn { semantex } { created_a_SemantexVariable } { #1 }
- \__semantex_old_version_of_semantex_new_object_of_class_SemantexVariable:Nw #1
+ \msg_error:nnn { semantex } { created_a_SemantexBaseObject } { #1 }
+ \__semantex_old_version_of_semantex_new_object_of_class_SemantexBaseObject:Nw #1
} \ No newline at end of file
diff --git a/macros/latex/contrib/semantex/semantex.tex b/macros/latex/contrib/semantex/semantex.tex
index 2a3bee0153..f4cf279f0e 100644
--- a/macros/latex/contrib/semantex/semantex.tex
+++ b/macros/latex/contrib/semantex/semantex.tex
@@ -34,7 +34,7 @@
\usepackage[nameinlink]{cleveref}
-\title{Seman\!\TeX: Semantic mathematics (v$0.201\alpha$)}
+\title{Seman\!\TeX: Semantic mathematics (v$0.3\alpha$)}
\date{\today}
\author{Sebastian Ørsted (\href{mailto:sorsted@gmail.com}{sorsted@gmail.com})}
@@ -293,6 +293,7 @@ $ \vh[inverseimage]{\sheafF}[spar,stalk=\vp]
\NewObject\MyVar\vn{n}
\NewObject\MyVar\vp{p}
\NewObject\MyVar\vU{U}
+\NewObject\MyVar\vx{x}
\NewObject\MyVar\sheafF{\mathcal{F}}
% Now we set up the class \MyVar:
@@ -318,7 +319,7 @@ $ \vh[inverseimage]{\sheafF}[spar,stalk=\vp]
$ \vf[conj,der=\vn] $
-$ \vg[inv,res=\vU]{x} $
+$ \vg[inv,res=\vU]{\vx} $
$ \vh[inverseimage]{\sheafF}[spar,stalk=\vp]
= \sheafF[stalk=\vh{\vp}] $
@@ -335,7 +336,7 @@ with
\usepackage{semantex}
\end{lstlisting}
The \semantex system is object-oriented; all entities are objects of some class. When you load the package, there
-is only one class by default, which is simply called \lstinline!\SemantexVariable!.
+is only one class by default, which is simply called \lstinline!\SemantexBaseObject!.
You should think of this as a low-level class, the parent of all other classes. Therefore, I highly advice against using it directly or modifying it.
Instead, we create a new, more high-level variable class.
We choose to call it \lstinline!\MyVar!.
@@ -771,19 +772,19 @@ Adding support for free algebras, power series, and Laurent series is almost as
},
{freealg}{
par,
- leftpar=\noexpand\langle,
- rightpar=\noexpand\rangle,
+ leftpar=\langle,
+ rightpar=\rangle,
},
{powerseries}{
par,
- leftpar=\noexpand\llbracket,
- rightpar=\noexpand\rrbracket,
+ leftpar=\llbracket,
+ rightpar=\rrbracket,
},
{laurent}{
par,
leftpar=(, rightpar=),
- prearg={\!\!\noexpand\SemantexDelimiterSize(},
- postarg={\noexpand\SemantexDelimiterSize)\!\!},
+ prearg={\!\!\SemantexDelimiterSize(},
+ postarg={\SemantexDelimiterSize)\!\!},
% These are printed before and after the argument.
% The command "\SemantexDelimiterSize" is substituted
% by \big, \Big, ..., or whatever size the
@@ -796,19 +797,19 @@ Adding support for free algebras, power series, and Laurent series is almost as
singlekeys={
{freealg}{
par,
- leftpar=\noexpand\langle,
- rightpar=\noexpand\rangle,
+ leftpar=\langle,
+ rightpar=\rangle,
},
{powerseries}{
par,
- leftpar=\noexpand\llbracket,
- rightpar=\noexpand\rrbracket,
+ leftpar=\llbracket,
+ rightpar=\rrbracket,
},
{laurent}{
par,
leftpar=(, rightpar=),
- prearg={\!\!\noexpand\SemantexDelimiterSize(},
- postarg={\noexpand\SemantexDelimiterSize)\!\!},
+ prearg={\!\!\SemantexDelimiterSize(},
+ postarg={\SemantexDelimiterSize)\!\!},
% These are printed before and after the argument.
% The command "\SemantexDelimiterSize" is substituted
% by \big, \Big, ..., or whatever size the
@@ -816,10 +817,7 @@ Adding support for free algebras, power series, and Laurent series is almost as
},
},
}
-For expansion reasons (which I am not completely sure of),
-we need \lstinline!\noexpand! before these commands.
-In general, whenever something fails, try throwing in \lstinline!\noexpand!'s in front of suspicious-looking commands,
-and things will usually work out just fine. See for yourself:
+See for yourself:
\begin{LTXexample}
$\vk[freealg]{\vx}$,
$\vk[powerseries]{\vy}$,
@@ -831,7 +829,7 @@ Let us look at some other algebraic operations that we can control via \semantex
\begin{lstlisting}
\SetupClass\MyVar{
singlekeys={
- {op}{upper={\noexpand\mathrm{op}}},
+ {op}{upper={\mathrm{op}}},
% opposite groups, rings, categories, etc.
{algclosure}{overline},
% algebraic closure
@@ -863,7 +861,7 @@ Let us look at some other algebraic operations that we can control via \semantex
\end{lstlisting}
\SetupClass\MyVar{
singlekeys={
- {op}{upper={\noexpand\mathrm{op}}},
+ {op}{upper={\mathrm{op}}},
% opposite groups, rings, categories, etc.
{algclosure}{overline},
% algebraic closure
@@ -1015,26 +1013,26 @@ In fact, you could have defined the \lstinline!overline! yourself as follows:
\begin{lstlisting}
\SetupClass\MyVar{
singlekeys={
- {overline}{command=\noexpand\overline},
+ {overline}{command=\overline},
},
}
\end{lstlisting}
\SetupClass\MyVar{
singlekeys={
- {overline}{command=\noexpand\overline},
+ {overline}{command=\overline},
},
}
-This is how the key \lstinline!overline! is defined internally, except it is defined on the level of the superclass \lstinline!\SemantexVariable! instead. We need the key \lstinline!\noexpand! in order for everything to expand properly. This is only necessary for some commands, and to tell the truth, I haven't quite figured out the system of which commands need it and which ones do not. However, as usual, if something does not work, try throwing in some \lstinline!\noexpand!'s and see if it solves the problem.
+This is how the key \lstinline!overline! is defined internally, except it is defined on the level of the superclass \lstinline!\SemantexBaseObject! instead.
Here are some more examples of predefined keys that use the command key:
\begin{lstlisting}
\SetupClass\MyVar{ % do not add these -- they are already predefined!
novalueskeys={
- {smash}{command=\noexpand\smash},
- {tilde}{command=\noexpand\tilde},
+ {smash}{command=\smash},
+ {tilde}{command=\tilde},
{widetilde}{command=\widetilde},
- {bar}{command=\noexpand\bar},
- {bold}{command=\noexpand\mathbf},
- {roman}{command=\noexpand\mathrm},
+ {bar}{command=\bar},
+ {bold}{command=\mathbf},
+ {roman}{command=\mathrm},
},
}
\end{lstlisting}
@@ -1339,16 +1337,16 @@ and hypercohomology. This is quite easy with the \lstinline!command! key:
\SetupClass\MyVar{
singlekeys={
{reduced}{command=\widetilde},
- {cech}{command=\noexpand\check},
- {hyper{command=\noexpand\mathbb},
+ {cech}{command=\check},
+ {hyper{command=\mathbb},
},
}
\end{lstlisting}
\SetupClass\MyVar{
singlekeys={
{reduced}{command=\widetilde},
- {cech}{command=\noexpand\check},
- {hyper}{command=\noexpand\mathbb},
+ {cech}{command=\check},
+ {hyper}{command=\mathbb},
},
}
@@ -1380,21 +1378,21 @@ This can be done the following way:
valuekeys={
{Lder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{L}^{#1},
+ symbolputleft=\mathbb{L}^{#1},
},
{Rder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{R}^{#1},
+ symbolputleft=\mathbb{R}^{#1},
},
},
singlekeys={
{Lder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{L},
+ symbolputleft=\mathbb{L},
},
{Rder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{R},
+ symbolputleft=\mathbb{R},
},
},
}
@@ -1403,21 +1401,21 @@ This can be done the following way:
valuekeys={
{Lder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{L}^{#1},
+ symbolputleft=\mathbb{L}^{#1},
},
{Rder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{R}^{#1},
+ symbolputleft=\mathbb{R}^{#1},
},
},
singlekeys={
{Lder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{L},
+ symbolputleft=\mathbb{L},
},
{Rder} {
innerreturn,leftreturn,
- symbolputleft=\noexpand\mathbb{R},
+ symbolputleft=\mathbb{R},
},
},
}
@@ -1470,27 +1468,19 @@ In order to customize this, there are two extra keys:
These work exactly like \lstinline!singlekeys! and~\lstinline!valuekeys!.
\begin{lstlisting}
\SetupClass\MyVar{
+ argkeyval=true, % this turns keyval syntax in arguments on
argvaluekeys={
{coef}{ othersep={;}{#1} },
},
}
\end{lstlisting}
-(But it will not quite work yet -- stay tuned for a moment!)
The key \lstinline!othersep! is a key that controls the separator
between the current argument and the previous argument (it will only be printed if there was a previous argument). By default, this separator is a comma. So in the syntax~\lstinline!\co{*}{\vX,coef=\vR}!,
there are two arguments, \lstinline!\vX! and~\lstinline!\vR!, and the separator is a semicolon.
-However, even with the above setup, the notation \lstinline!\co{*}{\vX,coef=\vR}! will not work
-just yet. For the keys you define using \lstinline!argvaluekeys!
-are turned off by default. To turn them on for the object~\lstinline!\co!, run the following code:
-\begin{lstlisting}
-\SetupObject\co{
- valuekeys={
- {arg}{argwithkeyval={#1}},
- },
-}
-\end{lstlisting}
-The reason the keys are turned off by default is that keys in arguments that support values are only used in very rare cases, like cohomology with coefficients. If such keys were turned on in general, it would mess up
+As you see above, we had to turn keyval syntax on in order for it to work.
+By default, only singlekeys are turned on in the argument, not valuekeys.
+The reason is that valuekeys in arguments are only useful in very rare cases, like cohomology with coefficients. If such keys were turned on in general, it would mess up
every occurrence of an equality sign in arguments, and the following
would not work:
\begin{LTXexample}
@@ -1500,9 +1490,12 @@ $\Hom[\sheafreg[\vU]]{
}$
\end{LTXexample}
+The key~\lstinline!argkeyval! can take four arguments: \lstinline!true! (as above),
+\lstinline!false! (no singlekeys or valuekeys allowed), \lstinline!singlekeys! (the default behaviour where only singlekeys are turned on), and \lstinline!onesinglekey! (only allows one singlekey).
+
It should be noted that there are several predefined
-keys (of type \mbox{\lstinline!singlekey!)} which are defined on the level
-of the class \lstinline!\SemantexVariable!. The full list is:\fxfatal{Finish this}
+singlekeys which are defined on the level
+of the class \lstinline!\SemantexBaseObject!. The full list is:\fxfatal{Finish this}
\begin{itemize}
\item slot, \ldots
@@ -1677,6 +1670,9 @@ class types:
Let me add that \semantex uses a very clear separation between the input syntax and the underlying machinery. Because of this, if the user needs a different kind of class type, it is not very hard to create one. You must simply open the source code of \semantex, find the class you want to modify, and then copy the definition of the command~\lstinline!\New⟨Class type⟩Class! and modify it in whatever way you want.
+There is another class type, called the \lstinline!plain! class type, which is the class
+type of the class~\lstinline!\SemantexBaseObject!. This class is pretty useless as all it does is print its symbol, without allowing any keyval syntax, so don't use it.
+
\chapter{The \texorpdfstring{\texttt{Delimiter}}{Delimiter} class type}
\NewDelimiterClass\MyDelim[parent=\MyVar]
@@ -1824,7 +1820,7 @@ $\int \vf \wedgeD{\vx[1],
\chapter{The \texttt{parse} routine}
-As you can see above, \semantex has a ``waterfall-like'' behaviour. It runs keys in the order it receives them. This works fine most of the time, but for some more complicated constructions, it is useful to be able to provide a data set in any order and have them printed in a fixed order. For this purpose, we have the \lstinline!parse! routine.
+As you can see above, \semantex has a \enquote{waterfall-like} behaviour. It runs keys in the order it receives them. This works fine most of the time, but for some more complicated constructions, it is useful to be able to provide a data set in any order and have them printed in a fixed order. For this purpose, we have the \lstinline!parse! routine.
@@ -1834,98 +1830,130 @@ Suppose we want to be able to write the set of \( \vn \times \vm \)-matrices wit
\operatorname{Mat}}
$ \Mat[\vn\times\vm]{\vk} $.
\end{LTXexample}\endgroup%
-\noindent However, this is not quite as systematic and semantic as we might have wanted. Indeed, what if later you would like to change the notation to~\( \MyVar{\operatorname{Mat}}[\vn,\vm]{\vk} \)?
-Therefore, we do something like the following instead (we explain the notation below):
-\begin{lstlisting}
\NewObject\MyVar\Mat{\operatorname{Mat}}[
- execute={
- \SemantexDataProvide{rows}
- \SemantexDataProvide{columns}
- % provides data sets for number of rows and columns
- % for this object
- },
+ % We provide data sets "rows" and "columns" to
+ % be set up by the user later
+ dataprovide={rows},
+ dataprovide={columns},
valuekeys={
- {rows}{
- execute={
- \SemantexDataSet{rows}{#1}
+ {rows}{ dataset={rows}{#1} }, % set the rows data set
+ {columns}{ dataset={columns}{#1} }, % set the columns data set
+ },
+ parseoptions={ % Here we add code to the parse routine
+ % We check whether columns = rows. If so, we only write
+ % the number once
+ ifeqTF={\SemantexDataGetExpNot{columns}}{\SemantexDataGetExpNot{rows}}
+ {
+ % We use a very weird key called "setkeysx" -- this
+ % fully executes the content of the keys before
+ % setting them
+ setkeysx={
+ lower={\SemantexDataGetExpNot{columns}},
},
- },
- {columns}{
- execute={
- \SemantexDataSet{columns}{#1}
+ }
+ {
+ setkeysx={
+ lower={
+ \SemantexDataGetExpNot{rows}
+ \times
+ \SemantexDataGetExpNot{columns}
+ },
},
},
},
- parseoptions={
- execute={
- \SemantexStrIfEqTF{\SemantexDataGetExpNot{columns}}
- {\SemantexDataGetExpNot{rows}}
- % tests if rows = columns
- {
- \SemantexKeysSetx{
- lower={
- \SemantexDataGetExpNot{columns}
- }
- }
- }
- {
- \SemantexKeysSetx{
- lower={
- \SemantexDataGetExpNot{rows}
- \times
- \SemantexDataGetExpNot{columns}
- }
- }
- }
- },
- },
-]
-\end{lstlisting}%
+]%
+\noindent However, this is not quite as systematic and semantic as we might have wanted. Indeed, what if later you would like to change the notation to~\( \MyVar{\operatorname{Mat}}[\vn,\vm]{\vk} \)? (In this case, you could use multi-value keys, though.)
+In this chapter, we show how to eanble a syntax like the following instead:
+\begin{LTXexample}
+$ \Mat[rows=\vn,columns=\vm]{\vk} $, $ \Mat[rows=\vn,columns=\vn]{\vk} $
+\end{LTXexample}
+
+The important ingredient here is the \lstinline!parse! routine. This routine is executed right before the function is being rendered, and you can add code to it via the
+key~\lstinline!parseoptions!. However, we need a bit more programming keys to make it work. Let us see it in action and explain the syntax below:
+\begin{lstlisting}
\NewObject\MyVar\Mat{\operatorname{Mat}}[
- execute={
- \SemantexDataProvide{rows}
- \SemantexDataProvide{columns}
- },
+ % We provide data sets "rows" and "columns" to
+ % be set up by the user later
+ dataprovide={rows},
+ dataprovide={columns},
valuekeys={
- {rows}{
- execute={
- \SemantexDataSet{rows}{#1}
+ {rows}{ dataset={rows}{#1} }, % set the rows data set
+ {columns}{ dataset={columns}{#1} }, % set the columns data set
+ },
+ parseoptions={ % Here we add code to the parse routine
+ % We check whether columns = rows. If so, we only write
+ % the number once
+ ifeqTF={\SemantexDataGetExpNot{columns}}
+ {\SemantexDataGetExpNot{rows}}
+ {
+ % We use a very weird key called "setkeysx" -- this
+ % fully executes the content of the keys before
+ % setting them
+ setkeysx={
+ lower={\SemantexDataGetExpNot{columns}},
},
- },
- {columns}{
- execute={
- \SemantexDataSet{columns}{#1}
+ }
+ {
+ setkeysx={
+ lower={
+ \SemantexDataGetExpNot{rows}
+ \times
+ \SemantexDataGetExpNot{columns}
+ },
},
},
},
- parseoptions={
- execute={
- \SemantexStrIfEqTF{\SemantexDataGetExpNot{columns}}{\SemantexDataGetExpNot{rows}}
- {
- \SemantexKeysSetx{
- lower={
- \SemantexDataGetExpNot{columns}
- }
- }
- }
- {
- \SemantexKeysSetx{
- lower={
- \SemantexDataGetExpNot{rows}
- \times
- \SemantexDataGetExpNot{columns}
- }
- }
- }
- },
- },
-]%
-Now we can do the following:
-\begin{LTXexample}
-$ \Mat[rows=\vn,columns=\vm]{\vk} $, $ \Mat[rows=\vn,columns=\vn]{\vk} $
-\end{LTXexample}
+]
+\end{lstlisting}
+
+Here we used a lot of programmking keys. Let us see the full list of them.
+(An important notice: For some of these keys, such as \lstinline!boolifTF!, you currently cannot use spaces in the \lstinline!⟨bool⟩! argument, so e.g. \lstinline!boolifTF{ mybool } { ... } { ... }! will not work; you have to write \lstinline!boolifTF{mybool}!. I am trying to solve this problem, but have not yet been able to do so.)
+
+\begin{lstlisting}
+dataprovide={⟨data⟩}, % provides data
+dataset={⟨data⟩}{⟨value⟩}, % sets data
+datasetx={⟨data⟩}{⟨value⟩}, % sets data after expanding it
+dataputright={⟨data⟩}{⟨value⟩}, % adds to the right of data
+dataputrightx={⟨data⟩}{⟨value⟩}, % adds to the right of data after expanding it
+dataputleft={⟨data⟩}{⟨value⟩}, % adds to the left of data
+dataputleftx={⟨data⟩}{⟨value⟩}, % adds to the left of data after expanding it
+dataclear={⟨data⟩,} % clears a piece of data
+setkeys={⟨keys⟩}, % sets the keys in question, which is rather useless since you could have just written those keys directly instead
+keysset={⟨keys⟩}, % equivalent to setkeys
+setkeysx={⟨keys⟩}, % executes the keys in question after expanding them
+keysset={⟨keys⟩}, % equivalent to setkeysx
+ifeqTF={⟨str1⟩}{⟨str2⟩}{⟨if true⟩}{⟨if false⟩}, % checks if strings are equal
+ifeqT={⟨str1⟩}{⟨str2⟩}{⟨if true⟩},
+ifeqF={⟨str1⟩}{⟨str2⟩}{⟨if false⟩},
+ifblankTF={⟨str⟩}{⟨if true⟩}{⟨if false⟩}, % checks if string is blank
+ifblankT={⟨str⟩}{⟨if true⟩},
+ifblankF={⟨str⟩}{⟨if false⟩},
+boolprovide={⟨bool⟩}, % provides a boolean
+boolsettrue={⟨bool⟩}, % sets the boolean to true
+boolsetfalse={⟨bool⟩}, % sets the boolean to false
+boolifTF={⟨bool⟩}{⟨if true⟩}{⟨if false⟩}, % checks if boolean is true
+boolifT={⟨bool⟩}{⟨if true⟩},
+boolifF={⟨bool⟩}{⟨if false⟩,
+intprovide={⟨int⟩}, % provides an integer
+intclear={⟨int⟩}, % sets the integer to 0
+intincr={⟨int⟩}, % adds 1 to the integer
+intset={⟨int⟩}{⟨value⟩}, % sts the integer
+intifgreaterthanTF={⟨num1⟩}{num2⟩}{⟨if true⟩}{⟨if false⟩}, % checks which number of greater
+intifgreaterthanT={⟨num1⟩}⟨{num2⟩}{⟨if true⟩},
+intifgreaterthanF={⟨num1⟩}{⟨num2⟩}{⟨if false⟩},
+intifequalTF={⟨num1⟩}{num2⟩}{⟨if true⟩}{⟨if false⟩}, % checks if the numbers are equal
+intifequalT={⟨num1⟩}⟨{num2⟩}{⟨if true⟩},
+intifequalF={⟨num1⟩}{⟨num2⟩}{⟨if false⟩},
+intiflessthanTF={⟨num1⟩}{num2⟩}{⟨if true⟩}{⟨if false⟩}, % checks which number of less
+intiflessthanT={⟨num1⟩}⟨{num2⟩}{⟨if true⟩},
+intiflessthanF={⟨num1⟩}{⟨num2⟩}{⟨if false⟩},
+ERRORkeyvaluenotfound={⟨key⟩}{⟨value⟩}, % throws an error saying that the key has been set to an unkonwn value
+ERROR={⟨error text⟩}, % throws a general error with the provided error test
+execute={⟨error text⟩}, % executes the code in question
+\end{lstlisting}
+
+When using these keys (including inside the key~\lstinline!execute!), you can use a number of commands that provide and manipulate data. Most of them are just command versions of the keys above, and for now, I leave it to the reader to guess what they do based on the above picture:
-The key~\lstinline!execute! is a key that basically just executes code. You can in principle write any \TeX\ code there, and it will be applied right at the spot. However, inside the \lstinline!execute!~key, you can also use the following locally defined commands. These can be used to handle the data that is associated with the object in question. I don't have time to document them right now, so you'll have to guess what they do from the name for now, or you can find their definition in the source code of the package.
\begin{lstlisting}
\SemantexDataProvide
\SemantexDataSet
@@ -1956,88 +1984,110 @@ The key~\lstinline!execute! is a key that basically just executes code. You can
\SemantexIntClear
\SemantexIntIncr
\SemantexIntSet
-\SemantexIntIfPositiveTF
-\SemantexIntIfPositiveT
-\SemantexIntIfPositiveF
-\SemantexIntIfGreaterThanOneTF
-\SemantexIntIfGreaterThanOneT
-\SemantexIntIfGreaterThanOneF
-\SemantexExpNot
+\SemantexIntIfGreaterThanTF
+\SemantexIntIfGreaterThanT
+\SemantexIntIfGreaterThanF
+\SemantexIntIfEqualTF
+\SemantexIntIfEqualT
+\SemantexIntIfEqualF
+\SemantexIntIfLessThanTF
+\SemantexIntIfLessThanT
+\SemantexIntIfLessThanF
+\SemantexExpNot##1
+\SemantexERRORKeyValueNotFound
+\SemantexERROR
\end{lstlisting}
-The key~\lstinline!parseoptions! is a key that is executed right before rendering the object. This is where you write whatever the system is supposed to \emph{do} with the data sets you provide. You can also force it to be applied at any point by using the \lstinline!parse!~key.
-
Let us look at a more complicated example: Let us create a command for partial derivatives:
\NewObject\MyVar\partialdif[
nopar,
- execute={
- \SemantexBoolProvide{raisedfunction}
- \SemantexBoolSetTrue{raisedfunction}
- },
+ boolprovide={raisefunction},
+ boolsettrue={raisefunction},
setidots=\cdots,
setisep=\,,
valuekeys={
{default}{
si={\partial #1},
},
- },
- singlekeys={
- {raisedfunction}{
- execute={
- \SemantexBoolSetTrue{raisedfunction}
- },
- },
- {noraisedfunction}{
- execute={
- \SemantexBoolSetFalse{raisedfunction}
+ {raise}{
+ ifeqTF={#1}{true}
+ {
+ boolsettrue={raisefunction},
+ }
+ {
+ ifeqTF={#1}{false}
+ {
+ boolsetfalse={raisefunction},
+ }
+ {
+ ERRORkeyvaluenotfound={raise}{#1},
+ },
},
},
},
parseoptions={
- execute={
- \SemantexIfBlankTF{ \SemantexDataGet{upper} }
+ ifblankTF={ \SemantexDataGet{upper} }
+ {
+ intifgreaterthanTF={ \SemantexIntGet{numberoflowerindices} } { 1 }
{
- \SemantexKeysSetx{
+ setkeysx={
symbol={
\frac
{
\partial ^ { \SemantexIntGet{numberoflowerindices} }
- \SemantexBoolIfT{raisedfunction}
+ \SemantexBoolIfT{raisefunction}
{
- \SemantexDataGetExpNot{arg}
+ \SemantexDataGet{arg}
}
}
{
- \SemantexDataGetExpNot{lower}
+ \SemantexDataGet{lower}
}
},
- }
+ },
}
{
- \SemantexKeysSetx{
+ setkeysx={
symbol={
\frac
{
- \partial ^ { \SemantexDataGet{upper} }
- \SemantexBoolIfT{raisedfunction}
+ \partial
+ \SemantexBoolIfT{raisefunction}
{
- \SemantexDataGetExpNot{arg}
+ \SemantexDataGet{arg}
}
}
{
- \SemantexDataGetExpNot{lower}
+ \SemantexDataGet{lower}
}
},
}
- }
- \SemantexDataClear{lower}
- \SemantexDataClear{upper}
- \SemantexBoolIfT{raisedfunction}
- {
- \SemantexDataClear{arg}
- \SemantexIntClear{numberofarguments}
- }
+ },
+ }
+ {
+ setkeysx={
+ symbol={
+ \frac
+ {
+ \partial ^ { \SemantexDataGet{upper} }
+ \SemantexBoolIfT{raisefunction}
+ {
+ \SemantexDataGet{arg}
+ }
+ }
+ {
+ \SemantexDataGet{lower}
+ }
+ },
+ },
+ },
+ dataclear={lower},
+ dataclear={upper},
+ boolifT={raisefunction}
+ {
+ dataclear={arg},
+ dataclear={numberofarguments},
},
},
]
@@ -2045,73 +2095,92 @@ Let us look at a more complicated example: Let us create a command for partial d
\begin{lstlisting}
\NewObject\MyVar\partialdif[
nopar,
- execute={
- \SemantexBoolProvide{raisedfunction}
- \SemantexBoolSetTrue{raisedfunction}
- },
+ boolprovide={raisefunction},
+ boolsettrue={raisefunction},
setidots=\cdots,
setisep=\,,
valuekeys={
{default}{
si={\partial #1},
},
- },
- singlekeys={
- {raisedfunction}{
- execute={
- \SemantexBoolSetTrue{raisedfunction}
- },
- },
- {noraisedfunction}{
- execute={
- \SemantexBoolSetFalse{raisedfunction}
+ {raise}{
+ ifeqTF={#1}{true}
+ {
+ boolsettrue={raisefunction},
+ }
+ {
+ ifeqTF={#1}{false}
+ {
+ boolsetfalse={raisefunction},
+ }
+ {
+ ERRORkeyvaluenotfound={raise}{#1},
+ },
},
},
},
parseoptions={
- execute={
- \SemantexIfBlankTF{ \SemantexDataGet{upper} }
+ ifblankTF={ \SemantexDataGet{upper} }
+ {
+ intifgreaterthanTF={ \SemantexIntGet{numberoflowerindices} } { 1 }
{
- \SemantexKeysSetx{
+ setkeysx={
symbol={
\frac
{
\partial ^ { \SemantexIntGet{numberoflowerindices} }
- \SemantexBoolIfT{raisedfunction}
+ \SemantexBoolIfT{raisefunction}
{
- \SemantexDataGetExpNot{arg}
+ \SemantexDataGet{arg}
}
}
{
- \SemantexDataGetExpNot{lower}
+ \SemantexDataGet{lower}
}
},
- }
+ },
}
{
- \SemantexKeysSetx{
+ setkeysx={
symbol={
\frac
{
- \partial ^ { \SemantexDataGet{upper} }
- \SemantexBoolIfT{raisedfunction}
+ \partial
+ \SemantexBoolIfT{raisefunction}
{
- \SemantexDataGetExpNot{arg}
+ \SemantexDataGet{arg}
}
}
{
- \SemantexDataGetExpNot{lower}
+ \SemantexDataGet{lower}
}
},
}
- }
- \SemantexDataClear{lower}
- \SemantexDataClear{upper}
- \SemantexBoolIfT{raisedfunction}
- {
- \SemantexDataClear{arg}
- \SemantexIntClear{numberofarguments}
- }
+ },
+ }
+ {
+ setkeysx={
+ symbol={
+ \frac
+ {
+ \partial ^ { \SemantexDataGet{upper} }
+ \SemantexBoolIfT{raisefunction}
+ {
+ \SemantexDataGet{arg}
+ }
+ }
+ {
+ \SemantexDataGet{lower}
+ }
+ },
+ },
+ },
+ dataclear={lower},
+ dataclear={upper},
+ boolifT={raisefunction}
+ {
+ dataclear={arg},
+ dataclear={numberofarguments},
},
},
]
@@ -2128,13 +2197,13 @@ Let us see it in action:
d=\vn]{ \vf }
\]
\[
- \partialdif[\vx,\vy,\vz,noraisedfunction]{ \vf } ,
+ \partialdif[\vx,\vy,\vz,raise=false]{ \vf } ,
\partialdif[\vu^2,\vv^2,
- d=4,noraisedfunction]{
+ d=4,raise=false]{
\vf },
\partialdif[\vx[1],
\vx[2],...,\vx[\vn],
- d=\vn,noraisedfunction]{
+ d=\vn,raise=false]{
\vf }
\]
\end{LTXexample}
@@ -2151,7 +2220,10 @@ As you see, we use the \lstinline!d!~key to tell the command what superscript it
\chapter{Bugs}
-Lots of things can be improved in the system, including the order in which things are being expanded internally. I am not going to explain this is detail for now, but hope to correct this in the future. For now, the system seems to work fine as long as you do \enquote{normal} things and insert~\lstinline!\noexpand!'s whenever something goes wrong. The only real bug that I currently know of occurs if you use the key~\lstinline!Otherspar! in a heading. Then it all dies painfully.
+The biggest unsolved problem I know of is how to correctly strip spaces in programming keys such as \lstinline!boolifTF!. Similarly, I would also like to allow keys to be defined using the
+syntax~\lstinline!{ inv } { upper=-1 }! rather than~\lstinline!{inv}{ upper=-1 }!. This will hopefully be solved soon.
+
+For now, the system seems to work fine as long as you do \enquote{normal} things. The only real bug that I currently know of occurs if you use the key~\lstinline!Otherspar! in a heading. Then it all dies painfully.
Then again, why the heck would you do that in the first place? Who scales parentheses in headings?
%\input{testground}