diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2026-10-12 20:24:11 -0400 |
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2026-10-12 20:24:11 -0400 |
| commit | 4e4f2f8c2b2c043077390cb4ccf7ce97ffe4ac6b (patch) | |
| tree | bfafd6fb9cfa975db49fbcbcf7e3b23a4f13e0bc /gleam/src/ocda/load_pod.gleam | |
| parent | model 2.1: ocn_range, the verses a poem holds (diff) | |
format 2.1: ocda-read, the readers folded in
ocda-read, one reader where there were two. The .ssp reader and the
.ocda.db reader each had their own parser; this one is built on the
library, so every mode reads a .ssp, a .ocda.db and a pod, and says
the same thing of each. Its output modules are the .ssp reader's,
copied (the reader repositories are kept, frozen) and moved onto the
library's model; --languages and --files come from the database
reader.
ocda-read [--tree|--html|--llm-text|--llm-jsonl|--images|
--verify --image-dir=<d>|--languages|--files|
--report-unknown|--validate] <file> [lang]
In D every mode of both readers; in Gleam the modes the Gleam readers
had (the summary, --tree, --languages, --files, --report-unknown),
whose output is the D reader's, byte for byte. In each language it
lives in src/read/ and is not part of the library: dub configurations
keep it out of a dependant's build in D, and Gleam compiles all of
src/ but a dependant need not use it.
Checked over the markup document samples: against the .ssp reader on
a .ssp, byte for byte after the first line in every D mode but the
summary, whose closing hint differs; against the database reader on a
.ocda.db, --files and --languages (its id column left out); the same
output from the .ssp, the .ocda.db and the .sisupod; and D == Gleam.
The database reader's --outline is not reproduced: it ordered
headings within their own section, so that other sections' headings
fell among the body's. --outline here is --tree.
What writing it found in the library: the database loader could not
say what it had not understood. It asked for columns by name and so
never saw the rest, and reported that it had understood everything.
It now counts them on the conditions under which the .ssp writes the
same property, and --report-unknown is the same from every form.
ocda.inventory answers two questions about the file rather than the
document: its languages, in the manifest's order, each with the
markup it was made from and the sha256 of its .ssp, for every form
alike; and what a .ocda.db carries besides the abstraction. In Gleam
the sha256 comes from OTP's crypto through a four line Erlang FFI.
The flake's default is all three D programs in one result: built
separately into the same link, each replaced the one before.
(assisted by Claude-Code)
Diffstat (limited to 'gleam/src/ocda/load_pod.gleam')
| -rw-r--r-- | gleam/src/ocda/load_pod.gleam | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gleam/src/ocda/load_pod.gleam b/gleam/src/ocda/load_pod.gleam index 35483c6..05f7add 100644 --- a/gleam/src/ocda/load_pod.gleam +++ b/gleam/src/ocda/load_pod.gleam @@ -89,7 +89,7 @@ fn langs(entries: List(zip.Entry)) -> List(String) { } /// `<uid>.<lang>.ssp` -> `<lang>` -fn lang_of(name: String) -> Result(String, Nil) { +pub fn lang_of(name: String) -> Result(String, Nil) { case string.ends_with(name, ".ssp") { False -> Error(Nil) True -> { @@ -104,7 +104,7 @@ fn lang_of(name: String) -> Result(String, Nil) { /// The bytes decide, not the name: a file misnamed either way is treated by /// what it holds. -fn archive_bytes(path: String) -> Result(BitArray, String) { +pub fn archive_bytes(path: String) -> Result(BitArray, String) { case simplifile.read_bits(path) { Error(e) -> Error(path <> ": " <> simplifile.describe_error(e)) Ok(bytes) -> @@ -133,6 +133,6 @@ fn is_zstd_frame(bytes: BitArray) -> Bool { @external(erlang, "unicode", "characters_to_binary") fn bit_array_to_string_ffi(b: BitArray) -> String -fn bit_array_to_string(b: BitArray) -> Result(String, Nil) { +pub fn bit_array_to_string(b: BitArray) -> Result(String, Nil) { Ok(bit_array_to_string_ffi(b)) } |
