cssyntax v0.1.0 – Initial Release

Control Sequence Syntax
Readable, self-documenting command names for LaTeX package authors


Overview

This is the initial public release of cssyntax, a standalone LaTeX2e
package that provides a syntax layer for writing structured,
self-describing internal command names. By temporarily activating _,
: and / as letter-category characters, it lets package authors replace
cryptic flat names with hierarchically organised ones that remain
readable years later.

The name cssyntax stands for Control Sequence Syntax: its sole purpose
is to give package code a clear, maintainable naming discipline
without changing how TeX actually works.


Features

1. Extended catcode syntax (\csSyntaxOn / \csSyntaxOff)

- Activates _, : and / as letters (catcode 11) for the current scope.
- Structured names follow the pattern
  \container_module_type_sub-type/description.
- \csSyntaxOff restores standard catcodes (_ → 8, : → 12, / → 12).
- Synonyms \csSyntaxEnabled and \csSyntaxDisabled provided for
  semantic clarity.


2. Readable aliases for TeX primitives (\_fun_ namespace)

All commands use the \_fun_ root prefix with / and : separators.
Every / command also has a : synonym (e.g. \_fun_copy:cs), created
safely with \NewCommandCopy.

Definition / copying:
  \_fun_copy/cs
  \_fun_define/cs
  \_fun_define/exp
  \_fun_define/global
  \_fun_define/global_exp
  \_fun_define/protected_exp

Expansion:
  \_fun_expand/after
  \_fun_expand/prevent

Dynamic names:
  \_fun_build/cs
  \_fun_build/def
  \_fun_build/redef

Introspection:
  \_fun_get/cs_string
  \_fun_get/cs_meaning

Grouping:
  \_fun_enter/group
  \_fun_exit/group
  \_fun_enter/token_group
  \_fun_exit/token_group

Save / use / reset / swap:
  \_fun_save/cs
  \_fun_use/cs
  \_fun_reset/cs
  \_fun_swap/cs

Selection / gobbling:
  \_fun_pick/first
  \_fun_pick/second
  \_fun_gobble/one
  \_fun_gobble/two

File loading:
  \_fun_load/
  \_fun_load/if_exists
  \_fun_enter/source
  \_fun_exit/source


3. Low-level environment declaration

\_fun_declare/env{<name>}{<enter code>}{<exit code>}
  Creates \_fun_enter/<name>, \_fun_exit/<name>, and
  \_fun_use/<name>{<content>} (plus : synonyms).
  No automatic grouping – the author controls scoping explicitly.

\_fun_declare/auto_group{<name>}{<enter code>}{<exit code>}
  Same as above, but wraps enter/exit code in
  \begingroup...\endgroup automatically.


4. Boolean handling (via xifthen)

\_fun_declare/bool{<name>}
  Declares a new boolean (prefixed _user_bool/).

\_fun_set_true/bool{<name>}
\_fun_set_false/bool{<name>}
  Set the value.

\_fun_enter/test_bool{<name>} ... \_fun_exit/test_bool
  Retrieve the conditional token for use in \ifthenelse.


5. Safe bootstrap design

The commands that define the extended syntax (\csSyntaxOn,
\csSyntaxOff, and the internal \_fun_... primitives) never contain
_, : or / in their own names. This guarantees they remain callable
before the syntax is active – a deliberate separation between the
mechanism and the layer it enables.


6. Standalone, domain-agnostic

cssyntax knows nothing about linguistics, mathematics, or page
layout. It has no opinion about what package authors do with
structured names – it only provides the naming infrastructure.
Originally the core of the lingwrit bundle, it is now a standalone
package usable by any LaTeX package or class.


Dependencies

- xifthen
- xparse
- expl3
- l3keys2e

All loaded before the extended syntax is activated.


Changelog

v0.1.0 – 2026-07-20

- Initial public release as a standalone package.
- Extended catcode syntax with \csSyntaxOn / \csSyntaxOff.
- Full \_fun_ alias set for common TeX primitives.
- / and : naming convention with automatic synonym generation.
- Low-level environment declaration (env, auto_group).
- Boolean handling via xifthen with _user_bool/ prefix.
- File loading commands (\_fun_load/, \_fun_load/if_exists).
- Save/use/reset/swap toolkit for control sequence management.
- Bootstrap-safe design: all mechanism commands are plain-letter names.


Licence

This package is released under the LaTeX Project Public License v1.3c
or later. See http://www.latex-project.org/lppl.txt
