Documentation
¶
Overview ¶
Package edenpress is the root of Eden Press: a clean-room, JavaScript-free Go implementation that renders Marp-compatible presentation documents from Markdown, emitting structured data (not just HTML) with no Node runtime and no headless browser for HTML/structured output.
This root package intentionally carries only the module's package documentation. The functional surface lives in subpackages:
- conformance/ — the language-neutral acceptance gate (golden corpus, CommonMark/GFM spec sweep, DOM-normalized HTML diff, and CSS-AST diff comparator) that every engine objective is validated against.
- themes/ — vendored Marp assets (default/gaia/uncover themes + browser-fit script), landing in Objective 3 under their original MIT license and Marp copyright.
- tools/ — build-time-only tooling (e.g. the throwaway corpus generator), excluded from the shipped runtime graph.
Eden Press is NOT affiliated with, endorsed by, or sponsored by the Marp team. See the repository NOTICE file for full third-party attribution.
Directories
¶
| Path | Synopsis |
|---|---|
|
bind
|
|
|
capi
command
Command capi is the JSON-in / JSON-out C-ABI front door of the DART-01 core: a cgo `package main` exposing //export PressRender / PressFree, built as a c-shared/c-archive library (see scripts/build-capi-host.sh) so a native host -- ultimately 07-05's Dart FFI client -- renders a Marp deck without mirroring any Go struct.
|
Command capi is the JSON-in / JSON-out C-ABI front door of the DART-01 core: a cgo `package main` exposing //export PressRender / PressFree, built as a c-shared/c-archive library (see scripts/build-capi-host.sh) so a native host -- ultimately 07-05's Dart FFI client -- renders a Marp deck without mirroring any Go struct. |
|
capi/core
Package core is the pure-Go, platform-agnostic JSON marshalling seam of the DART-01 C-ABI core (RenderJSON): the SINGLE JSON-in / JSON-out boundary over press.Render that every front door calls -- the cgo shim (bind/capi, this objective's TRD 07-01), the syscall/js wasm shim (07-02), and, through the compiled artifacts, 07-05's Dart client.
|
Package core is the pure-Go, platform-agnostic JSON marshalling seam of the DART-01 C-ABI core (RenderJSON): the SINGLE JSON-in / JSON-out boundary over press.Render that every front door calls -- the cgo shim (bind/capi, this objective's TRD 07-01), the syscall/js wasm shim (07-02), and, through the compiled artifacts, 07-05's Dart client. |
|
conformance
Package conformance proves DART-05: that the two compiled artifacts Objective 7 ships -- the syscall/js wasm module (bind/wasm, 07-02) and the cgo c-shared library (bind/capi, 07-01) -- answer IDENTICALLY to in-process press.Render when driven through the exact same JSON entrypoint (bind/capi/core.RenderJSON's "eden-press.capi/v1" envelope) a real Dart client uses.
|
Package conformance proves DART-05: that the two compiled artifacts Objective 7 ships -- the syscall/js wasm module (bind/wasm, 07-02) and the cgo c-shared library (bind/capi, 07-01) -- answer IDENTICALLY to in-process press.Render when driven through the exact same JSON entrypoint (bind/capi/core.RenderJSON's "eden-press.capi/v1" envelope) a real Dart client uses. |
|
wasm
command
Command wasm is the DART-03 WEB front door: a standard-Go GOOS=js GOARCH=wasm module that registers a JS-global `pressRender` calling the SAME pure-Go bind/capi/core.RenderJSON seam (07-01) the cgo shim (bind/capi) calls.
|
Command wasm is the DART-03 WEB front door: a standard-Go GOOS=js GOARCH=wasm module that registers a JS-global `pressRender` calling the SAME pure-Go bind/capi/core.RenderJSON seam (07-01) the cgo shim (bind/capi) calls. |
|
Package chase is Eden Press's internal one-parse-two-sinks entrypoint (ARCHITECTURE.md Pattern 1/Pattern 3, adapted for this objective -- no press/ batteries yet, profile resolved from the registry): Render calls chase/markdown.Parse EXACTLY ONCE, then forks that SAME finalized *ast.Document to two independent sinks -- chase/markdown.RenderDoc (HTML) and chase/model.Build (the JSON-serializable Document) -- and packs CSS via chase/theme.Pack, parameterized by the active chase/profile.Profile (profiles/slides, the only one registered today).
|
Package chase is Eden Press's internal one-parse-two-sinks entrypoint (ARCHITECTURE.md Pattern 1/Pattern 3, adapted for this objective -- no press/ batteries yet, profile resolved from the registry): Render calls chase/markdown.Parse EXACTLY ONCE, then forks that SAME finalized *ast.Document to two independent sinks -- chase/markdown.RenderDoc (HTML) and chase/model.Build (the JSON-serializable Document) -- and packs CSS via chase/theme.Pack, parameterized by the active chase/profile.Profile (profiles/slides, the only one registered today). |
|
directive
Package directive is the pure directive-resolution engine for chase: HTML comment + YAML front-matter detection (PARSE-03) and the global/local/spot carry-forward state machine (PARSE-02).
|
Package directive is the pure directive-resolution engine for chase: HTML comment + YAML front-matter detection (PARSE-03) and the global/local/spot carry-forward state machine (PARSE-02). |
|
markdown
Advanced-background 3-layer structure (PARSE-06/PARSE-07, inline-SVG mode only): when a slide carries one or more `![bg ...]` images AND inline-SVG mode is enabled, the slide's single <svg> wraps THREE <foreignObject> layers in strict DOM order -- background, content, pseudo -- mirroring markdown/background_image/advanced.js's own `md.core.ruler.after('marpit_directives_apply', 'marpit_advanced_background', ...)` pass, byte-for-byte verified against conformance/corpus/cases/marp-bg-image and marp-bg-split's expected.html fixtures.
|
Advanced-background 3-layer structure (PARSE-06/PARSE-07, inline-SVG mode only): when a slide carries one or more `![bg ...]` images AND inline-SVG mode is enabled, the slide's single <svg> wraps THREE <foreignObject> layers in strict DOM order -- background, content, pseudo -- mirroring markdown/background_image/advanced.js's own `md.core.ruler.after('marpit_directives_apply', 'marpit_advanced_background', ...)` pass, byte-for-byte verified against conformance/corpus/cases/marp-bg-image and marp-bg-split's expected.html fixtures. |
|
model
MODEL-01: Build derives a *Document by a single, direct, read-only walk of the SAME finalized post-transform AST chase/markdown/seam.go's two-phase seam (Parse then Render) produces for HTML -- never a second parse, never reverse-engineered from rendered HTML.
|
MODEL-01: Build derives a *Document by a single, direct, read-only walk of the SAME finalized post-transform AST chase/markdown/seam.go's two-phase seam (Parse then Render) produces for HTML -- never a second parse, never reverse-engineered from rendered HTML. |
|
profile
Package profile defines chase's output-profile abstraction (differentiator #1 — PROJECT.md; ARCHITECTURE.md Pattern 2): the Profile interface (profile.go) plus a small package-level registry (Register/Get/Default, registry.go) that lets an output kind ("slides" today; "paged"/"article"/"epub" later) supply exactly the tables/predicates chase's profile-agnostic parsing/directive/theme core needs — and nothing else.
|
Package profile defines chase's output-profile abstraction (differentiator #1 — PROJECT.md; ARCHITECTURE.md Pattern 2): the Profile interface (profile.go) plus a small package-level registry (Register/Get/Default, registry.go) that lets an output kind ("slides" today; "paged"/"article"/"epub" later) supply exactly the tables/predicates chase's profile-agnostic parsing/directive/theme core needs — and nothing else. |
|
theme
Package theme implements chase's owned CSS engine over github.com/tdewolff/parse/v2/css — the theme-CSS analogue of chase/directive, with ZERO dependency on markdown/goldmark: theme stylesheets are parsed completely independently of any slide content.
|
Package theme implements chase's owned CSS engine over github.com/tdewolff/parse/v2/css — the theme-CSS analogue of chase/directive, with ZERO dependency on markdown/goldmark: theme stylesheets are parsed completely independently of any slide content. |
|
theme/selector
Package selector is the standalone, independently unit-tested CSS selector-rewriter subsystem (THEME-04) for the Chase theme-scoping pipeline (see 01-04).
|
Package selector is the standalone, independently unit-tested CSS selector-rewriter subsystem (THEME-04) for the Chase theme-scoping pipeline (see 01-04). |
|
cmd
|
|
|
eden-press
command
|
|
|
eden-press-export
command
Command eden-press-export is the 05.1-01 turnkey raster export CLI: a SEPARATE, Chrome-permitting binary from cmd/eden-press.
|
Command eden-press-export is the 05.1-01 turnkey raster export CLI: a SEPARATE, Chrome-permitting binary from cmd/eden-press. |
|
eden-press/reload
Package reload implements the CLI's live-reload channel: a stdlib-only (no websocket dependency) Server-Sent-Events broadcast Hub, plus a tiny embedded EventSource client snippet.
|
Package reload implements the CLI's live-reload channel: a stdlib-only (no websocket dependency) Server-Sent-Events broadcast Hub, plus a tiny embedded EventSource client snippet. |
|
conformance
|
|
|
corpus
Package corpus defines the golden-corpus case format and loader used by the Eden Press conformance harness.
|
Package corpus defines the golden-corpus case format and loader used by the Eden Press conformance harness. |
|
corpus/xlsxtyping
Package xlsxtyping publishes the ONE cell-typing rule two independent XLSX writers must agree on: eden-press's convert/xlsx (input: markdown table text) and AODex's workbook_exporter.dart (input: a parsed 6-way CellValue union).
|
Package xlsxtyping publishes the ONE cell-typing rule two independent XLSX writers must agree on: eden-press's convert/xlsx (input: markdown table text) and AODex's workbook_exporter.dart (input: a parsed 6-way CellValue union). |
|
corpus/xlsxtyping/internal/gencases
command
Command gencases writes conformance/corpus/xlsxtyping/cases.json from the xlsxtyping package's Cases and StructuralCases.
|
Command gencases writes conformance/corpus/xlsxtyping/cases.json from the xlsxtyping package's Cases and StructuralCases. |
|
cssdiff
Package cssdiff implements the normalized, order-preserving CSS-AST model used to make real changes in theme-CSS output mechanically detectable.
|
Package cssdiff implements the normalized, order-preserving CSS-AST model used to make real changes in theme-CSS output mechanically detectable. |
|
htmldiff
Package htmldiff compares two HTML fragments after DOM normalization so that a NARROW, NAMED allow-list of provably-cosmetic differences does not count as a structural divergence.
|
Package htmldiff compares two HTML fragments after DOM normalization so that a NARROW, NAMED allow-list of provably-cosmetic differences does not count as a structural divergence. |
|
report
Package report provides SectionReport, a per-section pass/fail/pending aggregator for the Eden Press conformance harness.
|
Package report provides SectionReport, a per-section pass/fail/pending aggregator for the Eden Press conformance harness. |
|
runner
Package runner is the shared conformance-harness scaffolding that the spec sweep (00-04) and the Marp corpus runner (00-05) both build on.
|
Package runner is the shared conformance-harness scaffolding that the spec sweep (00-04) and the Marp corpus runner (00-05) both build on. |
|
spec
Package spec vendors the official CommonMark and GFM specification test suites (generated via each project's own test/spec_tests.py --dump-tests) and exposes them as go:embed-ed byte slices so the conformance sweep is hermetic — no network fetch or file read at test time.
|
Package spec vendors the official CommonMark and GFM specification test suites (generated via each project's own test/spec_tests.py --dump-tests) and exposes them as go:embed-ed byte slices so the conformance sweep is hermetic — no network fetch or file read at test time. |
|
Package convert is the ONE AND ONLY package in the eden-press module that imports github.com/chromedp/chromedp (and its cdproto companion).
|
Package convert is the ONE AND ONLY package in the eden-press module that imports github.com/chromedp/chromedp (and its cdproto companion). |
|
chrome
Package chrome implements the EXP-04 Chrome-discovery fallback chain (Discover), the one-browser-many-tabs Session pool primitive that every convert/ exporter (convert/pdf, convert/png) drives its rendering through, and the SHARED determinism substrate (determinism.go, load.go, fonts.go) those same exporters fold in exactly once: ComposeCSS/PageCSSInches (pure CSS transforms), ApplyDeterminism (the ordered CDP recipe), LoadHTML (the SetDocumentContent loader), and the embedded STIX Two Math font (EXP-04 font provisioning).
|
Package chrome implements the EXP-04 Chrome-discovery fallback chain (Discover), the one-browser-many-tabs Session pool primitive that every convert/ exporter (convert/pdf, convert/png) drives its rendering through, and the SHARED determinism substrate (determinism.go, load.go, fonts.go) those same exporters fold in exactly once: ComposeCSS/PageCSSInches (pure CSS transforms), ApplyDeterminism (the ordered CDP recipe), LoadHTML (the SetDocumentContent loader), and the embedded STIX Two Math font (EXP-04 font provisioning). |
|
docx
Package docx renders a chase/model.Document to an editable Word .docx, built DIRECTLY from the docmodel as hand-rolled OOXML -- zero rendered HTML, zero chromedp, zero Node.
|
Package docx renders a chase/model.Document to an editable Word .docx, built DIRECTLY from the docmodel as hand-rolled OOXML -- zero rendered HTML, zero chromedp, zero Node. |
|
pdf
Package pdf delivers EXP-01: deterministic PDF export of an already-rendered deck (press.Output) via chromedp's Chrome DevTools Protocol Page.PrintToPDF call, driven through convert/chrome's Session pool and its shared determinism substrate (ComposeCSS/PageCSSInches/ ApplyDeterminism/LoadHTML -- 05-02).
|
Package pdf delivers EXP-01: deterministic PDF export of an already-rendered deck (press.Output) via chromedp's Chrome DevTools Protocol Page.PrintToPDF call, driven through convert/chrome's Session pool and its shared determinism substrate (ComposeCSS/PageCSSInches/ ApplyDeterminism/LoadHTML -- 05-02). |
|
png
Package png implements EXP-02: per-slide PNG/JPEG export via chromedp element screenshots.
|
Package png implements EXP-02: per-slide PNG/JPEG export via chromedp element screenshots. |
|
pptx
Package pptx is Eden Press's hand-rolled, stdlib-only (archive/zip + encoding/xml) OOXML PresentationML writer: it emits editable-text-box .pptx files directly from chase/model.Document, with NO headless browser and NO third-party OOXML library (unioffice and its forks were evaluated and rejected -- AGPLv3 licensing / commercial license-key + network check-in; see 06-RESEARCH.md's re-confirmed decision gate).
|
Package pptx is Eden Press's hand-rolled, stdlib-only (archive/zip + encoding/xml) OOXML PresentationML writer: it emits editable-text-box .pptx files directly from chase/model.Document, with NO headless browser and NO third-party OOXML library (unioffice and its forks were evaluated and rejected -- AGPLv3 licensing / commercial license-key + network check-in; see 06-RESEARCH.md's re-confirmed decision gate). |
|
xlsx
Package xlsx renders a chase/model.Document to an Excel .xlsx workbook, built DIRECTLY from the docmodel as hand-rolled OOXML SpreadsheetML -- zero rendered HTML, zero chromedp, zero Node.
|
Package xlsx renders a chase/model.Document to an Excel .xlsx workbook, built DIRECTLY from the docmodel as hand-rolled OOXML SpreadsheetML -- zero rendered HTML, zero chromedp, zero Node. |
|
CORE-09 (03-07): auto-fit + shrink MARKER emission -- a marker/attribute-materialization battery, NOT a rendering battery.
|
CORE-09 (03-07): auto-fit + shrink MARKER emission -- a marker/attribute-materialization battery, NOT a rendering battery. |
|
math
Package math is CORE-08's BASELINE math battery: a self-contained goldmark.Option that renders Pandoc/Marp-style `$…$` (inline) and `$$…$$` (block) LaTeX. Common math becomes native MathML via the vendored latex2mathml; heavy constructs the construct-detection predicate flags (detect.go) degrade to a PNG-only raster <img> via go-latex/latex.
|
Package math is CORE-08's BASELINE math battery: a self-contained goldmark.Option that renders Pandoc/Marp-style `$…$` (inline) and `$$…$$` (block) LaTeX. Common math becomes native MathML via the vendored latex2mathml; heavy constructs the construct-detection predicate flags (detect.go) degrade to a PNG-only raster <img> via go-latex/latex. |
|
sanitize
Package sanitize authors CORE-05's always-on HTML allow-list sanitization policy: a bluemonday policy that behaviorally matches Marp's current (v4-era) `xss` allow-list, co-designed against every wave-2 battery's documented output shape so legitimate deck markup survives while XSS vectors are neutralized.
|
Package sanitize authors CORE-05's always-on HTML allow-list sanitization policy: a bluemonday policy that behaviorally matches Marp's current (v4-era) `xss` allow-list, co-designed against every wave-2 battery's documented output shape so legitimate deck markup survives while XSS vectors are neutralized. |
|
themes
Package themes builds a name-keyed *chase/theme.ThemeSet from the three official Marp themes bundled verbatim via go:embed (CORE-01).
|
Package themes builds a name-keyed *chase/theme.ThemeSet from the three official Marp themes bundled verbatim via go:embed (CORE-01). |
|
profiles
|
|
|
paged
Package paged implements chase/profile.Profile for long-form paged documents — reports and articles on A4/Letter stock, as opposed to profiles/slides' 16:9 deck.
|
Package paged implements chase/profile.Profile for long-form paged documents — reports and articles on A4/Letter stock, as opposed to profiles/slides' 16:9 deck. |
|
slides
Package slides implements chase/profile.Profile for Marp slide decks -- the only Profile implementation this repo registers (TRD 02-03, MODEL-04): every value chase/theme used to hardcode (the unit element, the size table, the slide-reset scaffold CSS, and the pagination rule) originates HERE, threaded into chase/theme's profile-agnostic scoping passes as caller-supplied parameters.
|
Package slides implements chase/profile.Profile for Marp slide decks -- the only Profile implementation this repo registers (TRD 02-03, MODEL-04): every value chase/theme used to hardcode (the unit element, the size table, the slide-reset scaffold CSS, and the pagination rule) originates HERE, threaded into chase/theme's profile-agnostic scoping passes as caller-supplied parameters. |
Click to show internal directories.
Click to hide internal directories.