Skip to content

Releases: kjanat/mosaic

v0.0.1

03 Jun 21:26
v0.0.1
7d0bd3d

Choose a tag to compare

v0.0.1 Pre-release
Pre-release

Changelog

Second pre-alpha release. Publishes the bibliography and CSL foundation work, plus diagnostics,
references, LSP diagnostics, line-break controls, and PDF provenance improvements.

Added

  • Citation Style Language foundations via the new mos-csl crate: CSL item models, BibTeX-to-CSL
    mapping, and a namespace-aware CSL XML style parser that retains style options and metadata for a
    future processor.
  • Minimal BibTeX record parsing in mos-bib, producing deterministic typed bibliography records with
    duplicate-key detection and recoverable MOS0043 diagnostics.
  • #bibliography("refs.bib") source directive support in the parser and evaluator, preserving the
    literal and resolved bibliography paths for later citation resolution and rendering work.
  • Deterministic Mosaic provenance in PDF metadata via /Producer and /Creator.
  • Structured diagnostic suggestions, including nearest-label suggestions for unknown references and
    rename suggestions for duplicate labels.
  • Minimal single-key [@key] citation syntax with placeholder rendering.
  • Initial stdio LSP diagnostic server publishing compiler diagnostics for opened and changed files.
  • Author-facing line-break controls: hard breaks, soft hyphen escapes, and non-breaking spaces.

Changed

  • Diagnostics now use the registry-backed MOS#### code system with a drift-tested human catalog.
  • Reference resolution now models label targets explicitly, numbers figures independently, and renders
    figure references as Figure N.
  • Tree-sitter and Zed syntax support now match compiler line-break escape handling.

What's Changed

  • Add author-facing line-break controls (issue #26) by @kjanat in #35
  • feat(layout): greedy soft-hyphen line breaking by @kjanat in #36
  • fix(tree-sitter): align line-break escapes with compiler by @kjanat in #37
  • refactor(eval): model label targets explicitly by @kjanat in #55
  • docs: catalog diagnostic codes by @kjanat in #57
  • docs: define page reference boundary by @kjanat in #56
  • docs: define formatter trivia requirements by @kjanat in #58
  • docs: define incremental dependency boundaries by @kjanat in #59
  • feat(parse): add minimal citation syntax by @kjanat in #61
  • feat(lsp): publish compiler diagnostics by @kjanat in #60
  • docs: document supported label and reference behavior by @kjanat in #62
  • feat(mos-core): add structured Suggestion payload to diagnostics by @kjanat in #74
  • Implement figure numbering and kind-aware figure references by @kjanat in #75
  • feat(eval): suggest rename for duplicate labels by @kjanat in #77
  • feat(eval): suggest nearest labels for unknown references by @kjanat in #78
  • feat(pdf): stamp Mosaic provenance in PDF metadata by @kjanat in #80
  • feat(eval): define #bibliography source directive boundary by @kjanat in #82
  • feat(bib): parse BibTeX entries into mos-bib records by @kjanat in #83
  • feat(csl): CSL item data model, BibTeX mapping, and style parser by @kjanat in #84
  • fix(csl): improve BibTeX field mapping by @kjanat in #89
  • feat(csl): retain rendering options by @kjanat in #90
  • feat(csl): retain dependent style metadata by @kjanat in #91
  • fix(csl): close style parser leniency gaps by @kjanat in #92

Full Changelog: v0.0.0...v0.0.1

v0.0.0

31 May 20:39
v0.0.0
3e943df

Choose a tag to compare

v0.0.0 Pre-release
Pre-release

Changelog

First tagged pre-alpha. The full crate stack under crates/ (everything except the zed-mosaic
editor extension) is published to crates.io via a resumable release workflow.

Added

  • mos check: parse, lower, and resolve a .mos file or project directory, emitting
    source-anchored diagnostics with stable MOS#### codes, carets, UTF-8-accurate columns, and
    CRLF-aware spans. The CLI applies phase-barrier fail-fast (each phase runs to completion, then
    exits if any error was collected) and gates PDF emission on diagnostic severity.
  • mos build: render a document to PDF under build/<entry-stem>.pdf, or to a project-declared
    [output].pdf path. Built PDFs open automatically after a successful build.
  • CLI accepts both single .mos files and project directories.
  • Markup parser: headings, paragraphs, inline emphasis / strong / nested bold-italic, inline and
    multiline code spans, raw code blocks (including long-bracket form with literal bodies and
    preserved tabs and escapes), unordered (-) and ordered (N.) lists with hanging indent, #set,
    #image, #figure, and cross-reference labels / references.
  • Semantic lowering and resolution: a Document model with metadata, automatic hierarchical section
    numbering, a cross-reference resolver, and duplicate / unknown-label diagnostics.
  • Layout engine: greedy text flow; headings, paragraphs, and lists (with adaptive gutters and
    per-marker shaping for ordered lists); raster images and simple figures with captions; pages,
    paper sizes, and margins; #set page / text / document properties wired into layout and PDF
    metadata; NFC text normalization; and oversized-word breaking on shaped glyph clusters.
  • Fonts: a zero-dependency Adobe Font Metrics (AFM v4.x) parser; Base-14 metrics; per-glyph font
    fallback; and bundled, subsetted Noto Sans, Noto Sans Mono, and Noto Sans Math for broad Unicode
    coverage beyond the Base-14 cliff.
  • PDF backend: WinAnsi plus Latin-Extended text via per-document /Differences and /ToUnicode,
    Type 0 CID emission for embedded fonts, GPOS-positioned glyph output, PNG and JPEG image XObjects,
    title / author Info metadata, and deterministic object / font / image emission order.
  • Editor tooling: a Tree-sitter grammar and corpus (tree-sitter-mosaic) and a Zed extension
    (zed-mosaic) providing highlighting, outline, document runnables, and semantic-token defaults.
  • An in-memory cache foundation (mos-cache) backed by a HashMap.

What's Changed

  • Initial workspace scaffold for Mosaic typesetting compiler by @kjanat in #1
  • Implement MVP 0 parser, lowerer, and mos check command by @kjanat in #2
  • Implement MVP 0 layout engine and PDF backend by @kjanat in #3
  • Implement cross-reference resolver (manifest §6 stage 3, MVP 1) by @kjanat in #4
  • Implement #set directive parsing and semantic lowering (MVP 1.5) by @kjanat in #6
  • Add AFM parser crate for Adobe Font Metrics support by @kjanat in #12
  • Add pdf-base14-metrics crate with Core 14 font metrics by @kjanat in #13
  • Implement Font metrics via pdf_base14_metrics facade by @kjanat in #14
  • Extract font metrics to separate mosaic-fonts crate by @kjanat in #15
  • Widen text substitution boundary: ASCII (0x20..=0x7E) to WinAnsi/CP1252 by @kjanat in #16
  • feat(pdf): unlock Latin Extended via per-doc /Differences + /ToUnicode by @kjanat in #17
  • Embed Noto Sans + Type 0 CID font: end the W040 cliff (#9) by @kjanat in #21
  • Add support for bullet and numbered lists by @kjanat in #22
  • Add support for raster images via #image() and #figure() directives by @kjanat in #23
  • Per-glyph font fallback + bundle Noto Sans Math by @kjanat in #24
  • feat: tree-sitter-mosaic grammar + corpus by @kjanat in #29
  • feat(zed-mosaic): Zed editor extension for .mos by @kjanat in #30
  • Normalize text to NFC by @kjanat in #32
  • Preserve shaped glyph positioning by @kjanat in #33
  • Support nested emphasis by @kjanat in #34

Full Changelog: https://github.com/kjanat/mosaic/commits/v0.0.0