Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ProcessFile ¶
ProcessFile reads a Markdown file and produces a PDF. ProcessFile reads a Markdown file and produces a PDF. The Lua state is owned by this function: a fresh state is created for each pass via opts.SetupLua so that {lua} blocks and the companion script always see a clean environment. Auto-rerun for aux convergence is driven by opts.MaxPasses; oscillation is detected by hashing the written aux content.
func ProcessHTMLFile ¶
ProcessHTMLFile reads an HTML file and produces a PDF, driving the same multi-pass aux convergence loop as ProcessFile. Unlike Markdown mode no default CSS is applied — styling comes from <link>, <style>, inline styles, or the --css flag.
func ProcessHTMLString ¶ added in v0.0.11
ProcessHTMLString takes an HTML payload (already in memory), the directory to resolve relative CSS @import / <link> paths against, and an output PDF filename, and runs the same pipeline as ProcessHTMLFile but using the caller-supplied Lua state. Single- pass — embedders that need aux convergence drive the loop themselves (typically: htmlbag Lua bridge from a user script).
Types ¶
type Frontmatter ¶
type Frontmatter struct {
Title string `yaml:"title"`
Author string `yaml:"author"`
CSS string `yaml:"css"`
Papersize string `yaml:"papersize"`
Format string `yaml:"format"`
Lang string `yaml:"lang"`
Extra map[string]any `yaml:"-"` // all key-value pairs (including the known ones)
}
Frontmatter holds metadata extracted from the YAML front matter block.
func ExtractFrontmatter ¶ added in v0.0.16
func ExtractFrontmatter(source string) (Frontmatter, string)
ExtractFrontmatter separates YAML front matter from the Markdown body. The front matter must be delimited by "---" lines at the beginning of the file. Returns the parsed front matter and the remaining Markdown content.
type Options ¶
type Options struct {
Template bool // apply Go template expansion before processing
CSSFile string // additional CSS file to load
DebugMarkdown bool // print expanded Markdown to stdout instead of generating PDF
DebugHTML bool // print generated HTML to stdout instead of generating PDF
// Format selects a PDF conformance level. "PDF/UA" enables the
// accessibility tagging pipeline (StructTreeRoot, MarkInfo, role-mapped
// element tree, XMP pdfuaid:part 1). Empty means a plain PDF.
Format string
// Lang is the BCP47 language tag written to the PDF catalog (/Lang) and
// used as the document-wide hyphenation default. Required for PDF/UA.
Lang string
// Title becomes the document /Title (catalog + XMP dc:title). PDF/UA
// also auto-enables /DisplayDocTitle so PDF readers show the title in
// the window chrome instead of the filename.
Title string
// OutputPath is the resolved PDF output path. If empty, falls back
// to <input>.pdf alongside the input file.
OutputPath string
// MaxPasses caps the auto-rerun loop used to converge the aux file
// (forward references like total page count). Values <1 are treated
// as 1 (single pass, no rerun).
MaxPasses int
// SetupLua is called once per pass on a fresh lua.State to register
// modules. May be nil for callers that have already initialised the
// state (e.g. ProcessHTMLString from the htmlbag bridge — that path
// reuses the caller's state and ignores SetupLua entirely).
SetupLua func(l *lua.State)
// ScriptArgs becomes arg[1..n] in the Lua state. arg[0] is the
// input filename, arg[-1] is the interpreter (os.Args[0]).
ScriptArgs []string
// Result, if non-nil, is populated with end-of-pass statistics.
// The final pass's data wins. Nil disables collection.
Result *Result
// SourceDateEpoch, when non-zero, overrides the PDF CreationDate.
// Combined with baseline-pdf's already-deterministic /ID (MD5 of
// xref content) this yields byte-stable PDFs across runs with the
// same input — the SOURCE_DATE_EPOCH reproducible-builds protocol.
SourceDateEpoch time.Time
}
Options controls the Markdown processing pipeline.
type Result ¶ added in v0.0.15
type Result struct {
Pages int `json:"pages"`
Passes int `json:"passes"`
Headings []htmlbag.HeadingEntry `json:"headings"`
}
Result holds post-run statistics from ProcessFile / ProcessHTMLFile. Callers wanting a manifest pre-allocate one and pass it via Options.Result; the markdown package populates it at the end of each pass (the final pass overwrites earlier values).