2026-07-18 18:48:23 +02:00
|
|
|
# Klammertext
|
|
|
|
|
|
|
|
|
|
Klammertext is a markup language that produces multiple output formats —
|
|
|
|
|
HTML, LaTeX/PDF, and plain text — from a single source description. Its core
|
|
|
|
|
engine, the Klammermachine, is written in C++; the Standard Klammer Set (SKS)
|
|
|
|
|
adds a default library of formatting and document-structuring operators on top.
|
|
|
|
|
|
|
|
|
|
## Installing
|
|
|
|
|
|
|
|
|
|
Installation guides are in [`doc/install/`](doc/install/):
|
|
|
|
|
|
|
|
|
|
- Linux, from source — `doc/install/linux_source_install.md`
|
|
|
|
|
- macOS, from source — `doc/install/macos_source_install.md`
|
|
|
|
|
- Linux, container — `doc/install/linux_container_install.md`
|
|
|
|
|
- macOS, container — `doc/install/macos_container_install.md`
|
|
|
|
|
|
|
|
|
|
## Building from source
|
|
|
|
|
|
|
|
|
|
With a C++20 compiler and `KLAMMERTEXT_HOME` set to this directory:
|
|
|
|
|
|
|
|
|
|
make -C com
|
|
|
|
|
|
|
|
|
|
This builds the Klammermachine library (into `lib/`), the SKS components, and
|
|
|
|
|
the three commands — `ktext`, `kdesc`, `kdiag` (into `bin/`). See the
|
|
|
|
|
source-install guide for prerequisites (TeX Live for PDF output, Python, and so
|
|
|
|
|
on).
|
|
|
|
|
|
|
|
|
|
## Editor support
|
|
|
|
|
|
Editor support generalized: shared core, language server, Vim and VS Code (from dev eb5baf9cbe59)
doc/edit/ now holds a shared Python implementation of the language's
structural layer (klammertext_edit.py) and a dependency-free language
server (klammertext_ls.py), with integrations for Emacs, Sublime Text,
Vim, and Visual Studio Code. The editor test suite in tst/ covers the
core's API and CLI, the language server protocol, the VS Code
extension, headless Vim, and Emacs byte-equality.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 15:01:49 +02:00
|
|
|
Editing support for Emacs, Sublime Text, Vim, and Visual Studio Code —
|
|
|
|
|
syntax highlighting, delimiter matching, structural reindentation, table
|
|
|
|
|
alignment, diagnostics — is in [`doc/edit/`](doc/edit/), together with the
|
|
|
|
|
shared implementation and the Klammertext language server they build on.
|
2026-07-18 18:48:23 +02:00
|
|
|
|
2026-07-26 01:07:52 +02:00
|
|
|
## Provenance
|
|
|
|
|
|
|
|
|
|
This repository is a curated snapshot of Klammertext's private development
|
|
|
|
|
tree, assembled by a manifest-driven script. Its history is a series of
|
|
|
|
|
release snapshots, not a mirror of the development history, and files here
|
|
|
|
|
are regenerated on each release — patches cannot be merged directly.
|
|
|
|
|
Report problems (or send patches) to the author; accepted changes are
|
|
|
|
|
applied to the development tree and appear in a following snapshot.
|
|
|
|
|
|
Target coverage: a klammer states the targets it serves
kdesc gains --coverage, which reports for every klammer the set of targets it
can render to, and — the point of it — which klammers' coverage cannot be
derived and must therefore be declared. Three rules: coverage is DERIVED
where the definitions determine it (a general body of klammer calls covers
the intersection of what those klammers cover, by a greatest fixpoint after
loading), DECLARED where the engine cannot interpret what decides it (an
@eval body, whose targets are undecidable), and UNKNOWN where nothing is
written — which never means "deliberately unavailable".
Two new spellings in a definition's name. A comma-separated target list,
"@@table.html,tex :: ...", gives one body several targets; it is surface
syntax, expanded at registration, and each member goes through the
redefinition rules on its own. And "@@date.* :: ..." writes the general
target out, asserting that the klammer works for EVERY target including ones
not yet defined — a stronger claim than a list of the targets defined today,
and the one target declaration that could be mechanically falsified.
The Standard Klammer Set was swept accordingly: it now has no general
definitions at all, every klammer names the targets it serves, six use ".*",
and tex and pdf are at zero undecided.
kdesc's flags are reorganised on two rules: a flag reached for often gets a
single letter (-k klammers, -t targets, -c characters, -i input), a more
specialised topic a multi-letter name (--argtypes, --katoms, --rewrite,
--optionsets, --coverage, --klammerset, --font); and -v says how much to show
about PROCESSING, never what the RESULT contains — so the katom regex column
is "--katoms full" and the coverage detail "--coverage all". NOTE: "-k" now
lists klammers (optionally filtered by a name/description search); the katom
table moved to "--katoms".
Fixes carried along: an option written with no value crashed the command with
SIGSEGV instead of reporting the mistake; two required positional arguments
never parsed; kdesc and kdiag printed an error and exited 0; and definition
diagnostics counted registrations rather than what was written, so one line
could be reported as two definitions and then printed twice.
Four new test suites: target_list, coverage, command_option, kdesc.
(from dev 46f54080bd9a)
2026-08-12 17:20:23 +02:00
|
|
|
This snapshot was assembled from development commit `46f54080bd9a`.
|
2026-07-26 01:07:52 +02:00
|
|
|
|
2026-07-18 18:48:23 +02:00
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
See [`LICENSE.md`](LICENSE.md).
|