atrep-cli 0.3.0__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- atrep_cli-0.3.0.data/scripts/atrep.exe +0 -0
- atrep_cli-0.3.0.dist-info/METADATA +491 -0
- atrep_cli-0.3.0.dist-info/RECORD +7 -0
- atrep_cli-0.3.0.dist-info/WHEEL +4 -0
- atrep_cli-0.3.0.dist-info/licenses/LICENSE-APACHE +202 -0
- atrep_cli-0.3.0.dist-info/licenses/LICENSE-MIT +21 -0
- atrep_cli-0.3.0.dist-info/sboms/atrep-cli.cyclonedx.json +2525 -0
|
Binary file
|
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: atrep-cli
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Classifier: Development Status :: 4 - Beta
|
|
5
|
+
Classifier: Intended Audience :: Developers
|
|
6
|
+
Classifier: Programming Language :: Rust
|
|
7
|
+
Classifier: Topic :: Text Processing :: Markup
|
|
8
|
+
License-File: LICENSE-MIT
|
|
9
|
+
License-File: LICENSE-APACHE
|
|
10
|
+
Summary: The atrep command-line tool: check, respellings, outline, kanonizo, endo importers, morphisms, exo rendering, collation
|
|
11
|
+
Keywords: atrep,markup,semantic,document,dialect,cli
|
|
12
|
+
Author: Bojan Đuričković
|
|
13
|
+
License-Expression: MIT OR Apache-2.0
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
16
|
+
Project-URL: Repository, https://gitlab.com/atrep/atrep-rs
|
|
17
|
+
|
|
18
|
+
# atrep-rs
|
|
19
|
+
|
|
20
|
+
Pilot Rust implementation of the **Atrep** core: parser, Dendron
|
|
21
|
+
(AST), kanonizo (canonicalization), litosis (content hashing),
|
|
22
|
+
metamorphoses (exomorphosis engine; Markdown, HTML, and
|
|
23
|
+
reStructuredText endomorphoses), and morphisms (.hom/.iso with
|
|
24
|
+
group rules and transitive route resolution, spec v0.11).
|
|
25
|
+
|
|
26
|
+
## Spec reference
|
|
27
|
+
|
|
28
|
+
This implementation targets the **Atreptos Platform Specification
|
|
29
|
+
v0.12.1** (the Dialektoi Network and Witnesses & Coordinates
|
|
30
|
+
freezes plus their addenda), as published in the `atrep/spec`
|
|
31
|
+
repository:
|
|
32
|
+
|
|
33
|
+
- tag: `v0.12.1`
|
|
34
|
+
- commit: `3c72861`
|
|
35
|
+
|
|
36
|
+
Where behavior is underspecified at that commit, the choices made
|
|
37
|
+
here are documented under "Spec gaps" below, as input for the next
|
|
38
|
+
spec revision.
|
|
39
|
+
|
|
40
|
+
## Layout
|
|
41
|
+
|
|
42
|
+
- `crates/atrep` — library: `sigil` (escaping, symbol
|
|
43
|
+
classes), `dialektos` (`.lektos`/`.dia` definitions, local
|
|
44
|
+
inheritance and import), `parser` (document to Dendron),
|
|
45
|
+
`dendron` (AST + canonical serializer), `kanonizo`, `litosis`.
|
|
46
|
+
- `crates/atrep-cli` — the `atrep` binary.
|
|
47
|
+
- `crates/atrep-lsp` — the `atrep-lsp` language server:
|
|
48
|
+
diagnostics + semantic-token highlighting for `.atd`/`.atk`
|
|
49
|
+
documents and `.dia`/`.lektos` definitions (see its README
|
|
50
|
+
for editor configuration).
|
|
51
|
+
|
|
52
|
+
## Usage
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
atrep check <file> parse + validate a document
|
|
56
|
+
(.atd/.atk) or definition
|
|
57
|
+
(.lektos/.dia)
|
|
58
|
+
atrep kanonizo <file> [-o out] .atd -> .atk
|
|
59
|
+
(+ .atk.tar.gz when media
|
|
60
|
+
is bundled);
|
|
61
|
+
.dia -> .lektos for
|
|
62
|
+
definition files
|
|
63
|
+
[--timeout <secs>] remote-fetch timeout (30)
|
|
64
|
+
[--retries <n>] remote-fetch retries (2)
|
|
65
|
+
atrep morph <file> <dialektos> [-o out]
|
|
66
|
+
map a kanon to another dialektos
|
|
67
|
+
via .hom/.iso rules or a
|
|
68
|
+
lineage-derived embedding
|
|
69
|
+
atrep litos <file> [--save-litos-file]
|
|
70
|
+
print the litos ID (SHA-256)
|
|
71
|
+
atrep exo <file> <target> [-o out]
|
|
72
|
+
render a kanon to an external
|
|
73
|
+
format via <dialektos>.<target>.exo
|
|
74
|
+
(.atd input is kanonized first)
|
|
75
|
+
atrep endo <file> [-o out] import Markdown (.md), HTML
|
|
76
|
+
(.html), reStructuredText
|
|
77
|
+
(.rst), or TEI (.xml/.tei) as
|
|
78
|
+
at-markdown/at-html/at-rst/
|
|
79
|
+
litogramma documents
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Dialektoi resolve local-only, per the v0.10 spec: the parser looks
|
|
83
|
+
for `<dialect-id>.lektos` (falling back to `<dialect-id>.dia`) in
|
|
84
|
+
the directory of the file being processed. Remote *resources*
|
|
85
|
+
(transclusion targets and media) may be `http(s)` URLs.
|
|
86
|
+
|
|
87
|
+
`scripts/pandoc-corpus.sh` uses pandoc as a specimen
|
|
88
|
+
generator: each Markdown seed converts into every imported
|
|
89
|
+
format and runs through `atrep endo`; rejections are coverage
|
|
90
|
+
findings, not gated failures.
|
|
91
|
+
|
|
92
|
+
The crate builds for `wasm32-unknown-unknown` with
|
|
93
|
+
`--no-default-features`: the `net` feature (remote resource
|
|
94
|
+
fetching) and the `bundle` feature (`.atk.tar.gz` archive
|
|
95
|
+
output) are on by default and off for wasm targets.
|
|
96
|
+
|
|
97
|
+
Milestones and zygosis (spec v0.12): `@("scheme:value")` is
|
|
98
|
+
the core global anchor — the quoted sibling of the onym
|
|
99
|
+
anchor, kanonizo-exempt (duplicates rejected) and
|
|
100
|
+
litosis-surviving. Exos render it through the `*milestone
|
|
101
|
+
[<scheme>]` pattern with `@(scheme)`/`@(value)` slots. `atrep
|
|
102
|
+
zygo a.atk b.atk --scheme stephanus --as grc,eng -o bi.atd`
|
|
103
|
+
weaves witness kanons of one dialektos into the zygoma:
|
|
104
|
+
milestone-headed segments in the merged coordinate order
|
|
105
|
+
(order-consistency checked, contradictions are errors), each
|
|
106
|
+
witness's slice on a `zyg-<id>`-tagged diaphane, blocks and
|
|
107
|
+
even inline phrases split cleanly at cut points, headings and
|
|
108
|
+
speech prefixes hoisted so they don't repeat. The TEI importer
|
|
109
|
+
emits core milestones (scheme from resp, unit as a
|
|
110
|
+
presentation genos).
|
|
111
|
+
|
|
112
|
+
Controlled vocabularies (spec v0.11): a dialektos may define
|
|
113
|
+
named term sets with multilingual aliases, bound to a sim's
|
|
114
|
+
lemma or genoses; kanonizo canonicalizes aliases
|
|
115
|
+
case-insensitively (authoring language cannot fork hashes),
|
|
116
|
+
vocabulary-bound genoses survive litosis as semantic content,
|
|
117
|
+
and exo rules gain term-keyed variants (`@-> :(auctor)`).
|
|
118
|
+
Bibliogramma drives it: Latin canonical terms, ~40 languages of
|
|
119
|
+
aliases, biblatex as the lossless export and classic BibTeX as
|
|
120
|
+
the lossy one.
|
|
121
|
+
|
|
122
|
+
Resolution is storage-agnostic behind the `source::Source` trait:
|
|
123
|
+
`DirSource` is the classical directory context, `MemorySource`
|
|
124
|
+
serves definitions, morphisms, and exos from an in-memory map
|
|
125
|
+
(embedded engines, registry services, wasm targets with no
|
|
126
|
+
filesystem). The `*_from` variants (`dialektos::resolve_from`,
|
|
127
|
+
`morph::resolve_morph_from` / `resolve_route_from`,
|
|
128
|
+
`exo::resolve_exo_from`) take any source; the path-based entry
|
|
129
|
+
points delegate to `DirSource`.
|
|
130
|
+
|
|
131
|
+
## Conformance status (spec v0.10)
|
|
132
|
+
|
|
133
|
+
Implemented:
|
|
134
|
+
|
|
135
|
+
- The three basic forms (endo-simmere, para-simmere, monosim) with
|
|
136
|
+
onym/genos/taxis annotations; both sigils (`@` / `\`) with the
|
|
137
|
+
inactive-sigil escaping rules (`\@`, `@\`, `\|`); bracket
|
|
138
|
+
matching in episims; core stichoi (`@@@=`); comments; diaphanes;
|
|
139
|
+
axiomata; verbatim and semantic inclusion (inline, block, and
|
|
140
|
+
file forms); enmedia; the deixis (`@<sym>(onym)`, spec v0.10.1) —
|
|
141
|
+
a core pointing reference to an onymized para-simmere, validated
|
|
142
|
+
against its target's sim, surviving litosis with its target's
|
|
143
|
+
onym under fresh declaration-order numbering (so stripped
|
|
144
|
+
metadata cannot influence the litos ID), and rendered via the
|
|
145
|
+
`*deixis <symbol>` exo pattern.
|
|
146
|
+
- Dialektos definitions in the `atrep` meta-dialektos: ostensive
|
|
147
|
+
sim definitions (including line-structured grammata via the
|
|
148
|
+
`stichos` keyword), descriptions, parent references, full
|
|
149
|
+
inheritance, sim import (single, aliased, list, exclusion) —
|
|
150
|
+
local-only, with conflict and cycle detection.
|
|
151
|
+
- Kanonizo: shebang removal, sigil canonicalization with escape
|
|
152
|
+
recomputation, Unicode NFC, recursive transclusion expansion
|
|
153
|
+
with cycle detection (local paths and URLs), axioma expansion,
|
|
154
|
+
axioma-enlexis resolution against onymized simmeres, onym
|
|
155
|
+
canonicalization (`o1`, `o2`, ...), taxis evaluation and
|
|
156
|
+
validation, comment and unreferenced-diaphane removal,
|
|
157
|
+
paragraph collapsing, whitespace normalization, media bundling
|
|
158
|
+
(`media/m<n>.<ext>`, manifest, deterministic `.atk.tar.gz`).
|
|
159
|
+
- Remote resources over `http(s)`: transclusion targets and
|
|
160
|
+
enmedia, with configurable timeout/retry, extension inference
|
|
161
|
+
(source extension, then Content-Type, then magic bytes), and
|
|
162
|
+
source-URL + checksum provenance in the media manifest.
|
|
163
|
+
- Definition-file kanonizo (`.dia` -> `.lektos`): inheritance and
|
|
164
|
+
imports expanded, canonical sigil, sim definitions sorted by
|
|
165
|
+
name; re-emitting a canonical `.lektos` is byte-identical.
|
|
166
|
+
- Litosis and the litos ID (SHA-256), including enmedia content
|
|
167
|
+
hashing (`@@@@[SHA256:...]`).
|
|
168
|
+
- Exomorphosis (spec v0.10.1, optional conformance class): `.exo`
|
|
169
|
+
files in the `atrep-exo` meta-dialektos — symbol-keyed template
|
|
170
|
+
rules with genos-suffix specificity, structural `*` patterns
|
|
171
|
+
(including `*solo` and `*deixis`), sigil slots with raw and
|
|
172
|
+
hanging-prefix forms, conditional sections (`@[ ... ]@`,
|
|
173
|
+
emitted only when every slot inside renders non-empty),
|
|
174
|
+
single-pass escape tables, englossis rule-set switching,
|
|
175
|
+
strict unhandled-pattern errors, deterministic output. Rule
|
|
176
|
+
inheritance follows the dialektos lineage (spec v0.10.2 draft):
|
|
177
|
+
parents' effective rule sets are pulled in declaration order
|
|
178
|
+
(later ops overriding earlier), filtered and alias-remapped
|
|
179
|
+
per import kind, then overlaid by the dialektos's own file; a
|
|
180
|
+
dialektos with no `.exo` of its own still renders through
|
|
181
|
+
inherited rules, and the most derived non-empty escape table
|
|
182
|
+
applies. The spec's worked example (`exempli.html.exo`) is a
|
|
183
|
+
golden test.
|
|
184
|
+
- A standard library, embedded in the binary and used when local
|
|
185
|
+
resolution fails: `at-html`, a syntax mapper between a useful
|
|
186
|
+
subset of HTML and atrep (each sim corresponds to one HTML
|
|
187
|
+
element; its exomorphosis and the HTML endomorphosis are
|
|
188
|
+
inverses over the canonical subset), and `at-markdown`
|
|
189
|
+
(realizing the dialektos the spec's inheritance examples treat
|
|
190
|
+
as hypothetical), which is pure lineage: every sim is inherited
|
|
191
|
+
from at-html — containers excluded (markdown is flat), emphasis
|
|
192
|
+
and strong aliased to `*`/`**` — and its HTML rendering is
|
|
193
|
+
acquired entirely through rule inheritance, with no HTML `.exo`
|
|
194
|
+
of its own. The library also carries the literary target
|
|
195
|
+
itself, promoted to core: `litogramma` and `bibliogramma`,
|
|
196
|
+
vendored byte-identical from the normative litogramma repo (a
|
|
197
|
+
drift-guard test compares the copies whenever the sibling
|
|
198
|
+
checkout is present), together with their base exomorphoses
|
|
199
|
+
(`html`, `gemtext`, `latex`; `bib`, `bibtex`) and the
|
|
200
|
+
litogramma↔at-html/at-docbook/at-tei homs — so the
|
|
201
|
+
litogramma-targeting importers (TEI, JATS, BibTeX, atramento)
|
|
202
|
+
have their target resolvable everywhere, with no local
|
|
203
|
+
definition files. The
|
|
204
|
+
publisher-register exos (Loeb, OCT, Penguin, GOST, …) remain
|
|
205
|
+
in the litogramma repo.
|
|
206
|
+
- Morphisms (spec v0.11, optional conformance class):
|
|
207
|
+
`.hom` (directional, possibly lossy) and `.iso` (rename-only,
|
|
208
|
+
bijective, one file serving both directions) in the
|
|
209
|
+
atrep-hom/atrep-iso meta-dialektoi — rename with form-
|
|
210
|
+
compatibility validation, unwrap (wrapper dissolves, content
|
|
211
|
+
splices), drop; implicit identity for same-symbol
|
|
212
|
+
form-compatible sims; core forms pass through; deixes follow
|
|
213
|
+
their target sim's rule (removed with it on drop/unwrap); the
|
|
214
|
+
output kanon is re-validated (taxis runs, deixis targets).
|
|
215
|
+
Embedding morphisms are derived from the dialektos lineage
|
|
216
|
+
with no file at all: at-markdown => at-html morphs purely from
|
|
217
|
+
its inheritance declarations, and the std
|
|
218
|
+
`at-html.at-markdown.hom` provides the lossy reverse — the
|
|
219
|
+
flat-content round trip is byte-identical. Renames may append
|
|
220
|
+
genoses (admonition kinds survive as presentation hints on
|
|
221
|
+
generic containers) and the extract rule (`@<# <sym>
|
|
222
|
+
<endo-sym>`) dissolves a lemma-bearing para-simmere into a
|
|
223
|
+
flat heading plus content. Morphisms apply **transitively**:
|
|
224
|
+
when no direct morphism resolves, the shortest route through
|
|
225
|
+
the known dialektoi applies in validated stages (ambiguous
|
|
226
|
+
routes are errors, never silent choices) — at-rst =>
|
|
227
|
+
at-markdown composes through at-html with no direct file. A
|
|
228
|
+
pair may carry several morphisms as named variants
|
|
229
|
+
(`<a>.<b>.<variant>.hom`, `atrep morph ... --variant <name>`)
|
|
230
|
+
— distinct representations of the source in the target. The
|
|
231
|
+
std graph carries its first **isomorphism**: at-djot and
|
|
232
|
+
at-markdown share one sim inventory under different symbols
|
|
233
|
+
(`at-djot.at-markdown.iso`), so the pair converts losslessly
|
|
234
|
+
both ways, round-trips to the identity morphism, and
|
|
235
|
+
collapses into one equivalence class.
|
|
236
|
+
The algebra's one sequence-level action is the **group
|
|
237
|
+
family** (`@>#` / `@><` / `@>-` / `@>:`), the flat-to-nested
|
|
238
|
+
converse of extract: a solo-heading paragraph triggers a
|
|
239
|
+
region spanning the following siblings, wrapped into a
|
|
240
|
+
para-simmere with the trigger content as lemma (or discarded,
|
|
241
|
+
or the region dropped, or the trigger relabeled/deleted, or —
|
|
242
|
+
operand-less `@>#`, the v0.11.1 deplain — stripped to a plain
|
|
243
|
+
paragraph with the region untouched);
|
|
244
|
+
rules nest by file order, the trigger's onym and genoses
|
|
245
|
+
transfer to the wrapper, and deixes follow. The
|
|
246
|
+
group-then-extract round trip recovers the flat document
|
|
247
|
+
exactly. Morphisms are **statically validated at
|
|
248
|
+
resolution**, with no documents present: every rule against
|
|
249
|
+
both dialektoi, plus *totality* — every source sim accounted
|
|
250
|
+
for by a rule, an implicit identity, or a group trigger, with
|
|
251
|
+
`@--` marking deliberate drops (derived embeddings stay
|
|
252
|
+
partial by nature).
|
|
253
|
+
Morphisms **compose symbolically**: the table algebra is
|
|
254
|
+
three actions (rename, drop, dissolve — with the lemma
|
|
255
|
+
discarded, emitted plain, or extracted into a heading endo)
|
|
256
|
+
and is closed under composition, group dispositions chasing
|
|
257
|
+
the second factor's table, so a route fuses into a single
|
|
258
|
+
composite morphism applied in one traversal (`apply_route`
|
|
259
|
+
does this by default; staged application is the reference
|
|
260
|
+
semantics it must match). Grouping bounds fusion: a grouping
|
|
261
|
+
second factor fuses only across a rename-only first factor,
|
|
262
|
+
and never across a non-injective rename onto a trigger (peer
|
|
263
|
+
triggers would share a rank the serialized form cannot
|
|
264
|
+
express; spec v0.11.1) — everywhere else `apply_route` falls
|
|
265
|
+
back to staged application automatically. `atrep compose a b [c ...]` writes
|
|
266
|
+
the composite as an ordinary `.hom` file in normal form —
|
|
267
|
+
group rules in rank order, table rules sorted, implicit
|
|
268
|
+
identities elided, with `@=via` declarations recording the
|
|
269
|
+
hops (provenance, excluded from the `normal_form` equality
|
|
270
|
+
surface) — making morphism equality a byte comparison.
|
|
271
|
+
- Endomorphoses (pilot, engine-side): **atramento**, the
|
|
272
|
+
Markdown-like authoring surface for litogramma (`.atr`,
|
|
273
|
+
text-to-text: a litogramma superset whose sugar — typewriter
|
|
274
|
+
emphasis with flanking rules, ATX headings with a declared
|
|
275
|
+
base and implied closure, Markdown lists/quotes/fences,
|
|
276
|
+
autolinks, note callout/definition/inline sugar, verse fences,
|
|
277
|
+
drama auto-closure — compiles away; the compiler is an
|
|
278
|
+
idempotent projection and canonical litogramma passes through
|
|
279
|
+
byte-identical; spec in the atramento repo); CommonMark-subset,
|
|
280
|
+
HTML-subset, and reStructuredText-subset importers into
|
|
281
|
+
`at-markdown`/`at-html`/`at-rst` (strict over the canonical
|
|
282
|
+
subsets; RST footnotes become deixis callouts, fixed adornment
|
|
283
|
+
table for title levels), Org-mode and Djot subset importers into the
|
|
284
|
+
`at-org` and `at-djot` std dialektoi, a DocBook subset
|
|
285
|
+
importer into `at-docbook` (`.dbk`); the `at-tei` std dialektos
|
|
286
|
+
applies the bibliogramma pattern to TEI — ~15 form sims with
|
|
287
|
+
the TEI element identity in vocabulary-bound genoses
|
|
288
|
+
(`@,x,@.persname`), a `tei` exo emitting real TEI XML, and a
|
|
289
|
+
litogramma hom giving litogramma TEI export via morph+exo, a BibTeX importer into
|
|
290
|
+
`bibliogramma` (`.bib`), a JATS subset importer (`.jats`) into
|
|
291
|
+
litogramma with the ref-list embedded as a bibliogramma
|
|
292
|
+
englossis — the BibTeX-isomorphic bibliography
|
|
293
|
+
extension defined beside litogramma (entry lemma = citation
|
|
294
|
+
key, genos = entry type, fields as lemma-named sims) — the first *nested* std
|
|
295
|
+
dialektos: one uniform section sim nests, so
|
|
296
|
+
structure-preserving morphisms to and from litogramma need
|
|
297
|
+
no flattening — (`.org`: star headings, the emphasis
|
|
298
|
+
family, quote/verse/example/src blocks with language genoses,
|
|
299
|
+
pipe tables as stichoi rows, footnotes as deixis callouts,
|
|
300
|
+
links), plus a TEI P5 basic-subset importer
|
|
301
|
+
into `litogramma` (`.xml`/`.tei`): teiHeader front matter,
|
|
302
|
+
nested div sectioning with type/depth laddering, lg/l verse,
|
|
303
|
+
sp/speaker drama with stage directions, epigraphs with
|
|
304
|
+
attribution, and notes as deixis callouts with footnote
|
|
305
|
+
bodies. Roundtrips are tested in all three
|
|
306
|
+
formats: the canonical form of each is a fixed point of
|
|
307
|
+
export∘import.
|
|
308
|
+
The `at-usfm` std dialektos maps scripture (`.usfm`/`.sfm`):
|
|
309
|
+
one dialektos, three export surfaces (`usfm`, `usx`, `osis`).
|
|
310
|
+
Books are vocabulary-bound lemmas (the 66 canonical plus 21
|
|
311
|
+
deuterocanonical USFM codes with English-name aliases, so
|
|
312
|
+
`@# john` and `@# jhn` hash identically); chapters and verses
|
|
313
|
+
are milestone monosims — text flows across verse boundaries,
|
|
314
|
+
the classic overlapping hierarchy; heading markers ride a
|
|
315
|
+
`markers` vocabulary on one typed solo-block sim while
|
|
316
|
+
paragraph-class markers (`\m`, `\pi1`, `\li1`, …) accumulate
|
|
317
|
+
verse flow as typed paragraphs; character markers (`\wj`,
|
|
318
|
+
`\nd`, `\add`, …) are genos-typed phrases, wordlist wrappers
|
|
319
|
+
(`\w …|attrs`, `\+w`) unwrap to their text; footnotes and
|
|
320
|
+
cross-references sit inline at their anchor with `\fr`/`\xo`
|
|
321
|
+
references as typed sub-phrases; poetry lines wrap in
|
|
322
|
+
per-line `q`-level phrases inside stichoi so indent levels
|
|
323
|
+
survive. The OSIS exo maps semantics, not styling (`\wj` →
|
|
324
|
+
`<q who="Jesus">`, `\nd` → `<divineName>`, `\add` →
|
|
325
|
+
`<transChange>`). All three surfaces import as well as
|
|
326
|
+
export: `.usfm`/`.sfm`, `.usx`, and `.osis` files (including
|
|
327
|
+
whole-Bible multi-book files, which become one book block
|
|
328
|
+
per book). The USX surface is information-complete — export
|
|
329
|
+
then import lands on the identical litos; OSIS import
|
|
330
|
+
handles both container and milestone chapter/verse forms,
|
|
331
|
+
Paratext-style sID/eID pairs, and pretty-printed sources
|
|
332
|
+
(insignificant whitespace collapses), while milestone-form
|
|
333
|
+
red-letter `<q sID/>` spans are skipped (the overlapping
|
|
334
|
+
hierarchy OSIS itself avoids in container form).
|
|
335
|
+
The `latex` surface prints it: the exo
|
|
336
|
+
emits a semantic macro layer (`\atbook`, `\atchapter`,
|
|
337
|
+
`\atverse`, `\atmarker{s1}{...}`, `\atchar{wj}{...}`,
|
|
338
|
+
`\atq`, `\atnote`) and carries the `atrep-bible` document
|
|
339
|
+
class as an **asset section** (`@=* <filename> <sentinel>`
|
|
340
|
+
... sentinel) — a presentation companion delivered
|
|
341
|
+
byte-verbatim as an unconditional auxiliary output, so the
|
|
342
|
+
exo stays one artifact under one content address. The class
|
|
343
|
+
compiles the layer into a two-column dense print Bible:
|
|
344
|
+
drop-number chapters with the first verse suppressed (or
|
|
345
|
+
centered `PSALM n` headings when the book declares `\cl`),
|
|
346
|
+
superscript verses, q-level poetry ladders with right-set
|
|
347
|
+
*Selah*, italic superscriptions, per-column footnotes with
|
|
348
|
+
bold references, running heads from `\h` (falling back to
|
|
349
|
+
`\mt1`), and a `redletter` class option. Genoses interpolate
|
|
350
|
+
as macro arguments, so vocabulary growth touches only the
|
|
351
|
+
class — unknown markers fall through to a visible fallback,
|
|
352
|
+
never an error. Named **exo variants**
|
|
353
|
+
(`<dialektos>.<target>.<variant>.exo`, `atrep exo ...
|
|
354
|
+
--variant <name>`) overlay the base rule set — the
|
|
355
|
+
`redletter` edition redefines only the document rule and
|
|
356
|
+
inherits everything else, class asset included. The class
|
|
357
|
+
sets corner running heads the print way (every verse marks
|
|
358
|
+
`BOOK c:v`; first reference on the verso's outer edge, last
|
|
359
|
+
on the recto's), opens each book at the top of a fresh
|
|
360
|
+
column, sets chapters as lettrine drop numbers, gives
|
|
361
|
+
cross-references their own symbol series beside the numbered
|
|
362
|
+
translation notes, prints a two-column dotted Contents page
|
|
363
|
+
when the document holds more than one book (with PDF
|
|
364
|
+
bookmarks via hyperref), switches to a covering serif for
|
|
365
|
+
Hebrew (right-to-left) and polytonic Greek runs in
|
|
366
|
+
footnotes, and offers a `9pt` option for a denser setting
|
|
367
|
+
and an `a5` exo variant (the classic 148×210 hand-Bible
|
|
368
|
+
format at 9pt). The geometry is calibrated against
|
|
369
|
+
distributed print Bibles (measured block proportions,
|
|
370
|
+
margins, and baseline pitch), and an ink-zone check renders
|
|
371
|
+
every page and asserts nothing prints into the gutter or
|
|
372
|
+
margins.
|
|
373
|
+
`scripts/bible-pdf.sh <src>` typesets any
|
|
374
|
+
USFM/USX/OSIS source (single book or whole Bible) to PDF;
|
|
375
|
+
the complete WEB runs 942 pages, the KJV 853.
|
|
376
|
+
Validated against the complete World English Bible (81
|
|
377
|
+
books through all three surfaces: USFM byte-level fixed
|
|
378
|
+
point with litos identity, USX import litos-identical to
|
|
379
|
+
the USFM-derived kanon, OSIS import→export fixed point,
|
|
380
|
+
well-formed XML throughout) and against the whole-Bible
|
|
381
|
+
KJV OSIS from a foreign toolchain (Haiola, 10 MB, 66 books
|
|
382
|
+
in one file — imports in ~0.2 s and passes the same
|
|
383
|
+
battery).
|
|
384
|
+
- Strict error handling: every error condition enumerated in the
|
|
385
|
+
spec's Parsing chapter maps to a typed error with file/line/
|
|
386
|
+
column and, for transcluded content, the inclusion chain.
|
|
387
|
+
|
|
388
|
+
The spec's worked-example appendix ("From Deltos to Litos") is the
|
|
389
|
+
golden test (`crates/atrep/tests/golden.rs`), including a
|
|
390
|
+
kanonizo idempotency check. Remote fetching is covered by
|
|
391
|
+
`tests/remote.rs` against an ephemeral localhost listener.
|
|
392
|
+
|
|
393
|
+
Not yet implemented:
|
|
394
|
+
|
|
395
|
+
- The `.endo` file format (still unspecified by the spec; the
|
|
396
|
+
Markdown and HTML importers are engine-side, as the spec
|
|
397
|
+
allows).
|
|
398
|
+
|
|
399
|
+
Known Markdown-pilot limitations: exported lists are loose (a
|
|
400
|
+
blank line between items); ordered lists must start at 1 (taxis
|
|
401
|
+
validation); text paragraphs beginning with a literal list
|
|
402
|
+
marker like `1. ` are not escaped and would re-import as items.
|
|
403
|
+
|
|
404
|
+
Known parsing limitation: paragraph boundaries are detected
|
|
405
|
+
line-first, so a verbatim inline (`@@"..."@@`) cannot span a line
|
|
406
|
+
that itself looks like a block construct.
|
|
407
|
+
|
|
408
|
+
## Spec gaps found while implementing
|
|
409
|
+
|
|
410
|
+
Decisions this pilot had to make where spec v0.10 is silent;
|
|
411
|
+
flagged as input for the next spec revision:
|
|
412
|
+
|
|
413
|
+
1. **Kanon blank-line layout.** "Removes extraneous blank lines"
|
|
414
|
+
does not say which blank lines remain. Pilot rule: one blank
|
|
415
|
+
line between sibling blocks, none around compact single-line
|
|
416
|
+
blocks (enmedia and monosim-shaped forms) — this reproduces
|
|
417
|
+
the spec's worked-example appendix byte-for-byte.
|
|
418
|
+
2. **Bracket-matching disablement** has no declared syntax in
|
|
419
|
+
`.lektos` files. The pilot infers it from the ostensive
|
|
420
|
+
definition: an unflipped shown episymbol means matching is
|
|
421
|
+
disabled.
|
|
422
|
+
3. **Onym-referencing monosims** are not marked as such in sim
|
|
423
|
+
definitions. The pilot treats any monosim parameter that
|
|
424
|
+
matches a declared onym as a reference (and rewrites it during
|
|
425
|
+
onym canonicalization).
|
|
426
|
+
4. **Axioma definitions in the kanon**: the spec says references
|
|
427
|
+
are expanded but not whether definitions remain. The pilot
|
|
428
|
+
removes them (the kanon is fully expanded, so they are dead
|
|
429
|
+
weight).
|
|
430
|
+
5. **Dialektos-defined stichoi**: resolved in spec v0.10.1 — the
|
|
431
|
+
`stichos` ostensive keyword (in place of `grammata`) declares
|
|
432
|
+
line-structured grammata, implemented here. Stichos whitespace
|
|
433
|
+
is likewise resolved (litogramma feedback F2): leading and
|
|
434
|
+
internal whitespace is content, preserved through kanonizo and
|
|
435
|
+
litosis (so it participates in the litos ID); only trailing
|
|
436
|
+
whitespace is trimmed. One caveat: a monosim removed by litosis
|
|
437
|
+
mid-stichos leaves its surrounding spaces as written — in verse,
|
|
438
|
+
spacing is content, so no re-normalization is applied.
|
|
439
|
+
6. **Version pinning in the kanon**: the pilot preserves the
|
|
440
|
+
declared version specifier verbatim rather than pinning the
|
|
441
|
+
resolved version.
|
|
442
|
+
7. **Remote transclusion fetch policy** is specified for media
|
|
443
|
+
only. The pilot applies the media policy to transclusion too:
|
|
444
|
+
same timeout/retry configuration, and an unavailable resource
|
|
445
|
+
fails kanonizo.
|
|
446
|
+
8. **Remote documents have no local directory.** Their dialektos
|
|
447
|
+
declarations and any relative transclusion targets resolve
|
|
448
|
+
against the *including* document's directory.
|
|
449
|
+
9. **`.lektos` sim ordering**: the spec says "alphabetically by
|
|
450
|
+
sim name" without a collation. The pilot sorts byte-wise on
|
|
451
|
+
the UTF-8 name, with the symbol (byte-wise) as tie-break —
|
|
452
|
+
duplicate names are legal via aliased imports.
|
|
453
|
+
10. **Canonical `.lektos` layout** is otherwise unpinned. The
|
|
454
|
+
pilot emits the declaration, then blank-line-separated sim
|
|
455
|
+
blocks; property sims in ASCII symbol order (`"` short
|
|
456
|
+
description, `""` long description, `^` parent); long
|
|
457
|
+
descriptions always in block form with the body verbatim.
|
|
458
|
+
11. **Axioma-enlexis to onymized simmeres**: the spec states the
|
|
459
|
+
before-first-reference rule for axiomata only, so the pilot
|
|
460
|
+
allows forward references to simmere onyms. The verbatim copy
|
|
461
|
+
is the simmere's canonical serialization minus its own onym;
|
|
462
|
+
onyms and taxis nested inside the copy keep their source
|
|
463
|
+
form; an onym whose only reference was the expanded enlexis
|
|
464
|
+
is then dropped as unreferenced.
|
|
465
|
+
12. **Standard-library resolution**: spec resolution is
|
|
466
|
+
local-only and defines no standard library. The pilot falls
|
|
467
|
+
back to definitions embedded in the binary (`at-markdown`
|
|
468
|
+
and its `md` exomorphosis) when no local file resolves.
|
|
469
|
+
13. **The `at-markdown` sim inventory**: the spec's inheritance
|
|
470
|
+
examples pin `#`..`######`, `-`, and `*` (emphasis) but no
|
|
471
|
+
full definition. The pilot adds `**` (strong), `>`
|
|
472
|
+
(blockquote), and `.` (ordered item, required taxis), and
|
|
473
|
+
maps inline code, fenced code, and images to the core
|
|
474
|
+
enlexis/enmedia forms rather than new sims.
|
|
475
|
+
14. **Monosim ostensive keyword**: the spec's examples show
|
|
476
|
+
`(param)`, but litogramma uses semantic keywords (`(onym)`,
|
|
477
|
+
`(depth)`, `(key)`). The pilot accepts any identifier except
|
|
478
|
+
the reserved `taxis` and preserves it in the canonical form.
|
|
479
|
+
15. **Comments in definition files**: the atrep-meta chapter
|
|
480
|
+
does not say which comment forms `.dia`/`.lektos` files may
|
|
481
|
+
carry. The pilot accepts line (`@@/`) and block
|
|
482
|
+
(`@@@/ ... /@@@`) comments, both removed by kanonizo.
|
|
483
|
+
|
|
484
|
+
## Development
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
cargo test # unit + golden + error-condition tests
|
|
488
|
+
cargo clippy # lint (kept warning-free)
|
|
489
|
+
cargo fmt # rustfmt (kept clean)
|
|
490
|
+
```
|
|
491
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
atrep_cli-0.3.0.data/scripts/atrep.exe,sha256=OoW6KK_NxRlb27ksb6RmCT3t_FAzLd08bOzo_f_bNuY,5438976
|
|
2
|
+
atrep_cli-0.3.0.dist-info/METADATA,sha256=yqSMeqcCZP0_kPrX4QX79eq0bXK_L3RiVvdWEKPElaI,26406
|
|
3
|
+
atrep_cli-0.3.0.dist-info/WHEEL,sha256=2zDlIYIdD4m4N3p5DVEG3iJhGLdhsBQgdH-FqVkAur8,94
|
|
4
|
+
atrep_cli-0.3.0.dist-info/licenses/LICENSE-APACHE,sha256=ynptvmAalf0iNiINivQYhPVrH0t2eEjtZwf6TQFuGt4,11552
|
|
5
|
+
atrep_cli-0.3.0.dist-info/licenses/LICENSE-MIT,sha256=a76195udV7lOnI1FPuq-Kn10vH8IuGYp23Yh8tr9NL0,1097
|
|
6
|
+
atrep_cli-0.3.0.dist-info/sboms/atrep-cli.cyclonedx.json,sha256=XGfwRk22CLko3koU4ji761Ldaq6ZTHdZLFQ8JP5ZG7o,78758
|
|
7
|
+
atrep_cli-0.3.0.dist-info/RECORD,,
|