Skip to content

Releases: nMoncho/faradn

v1.0.0-RC2

Choose a tag to compare

@github-actions github-actions released this 31 Aug 14:33
chore: add visual reference for the two hardware tests we've

v1.0.0-RC1

Choose a tag to compare

@github-actions github-actions released this 31 Aug 03:46

Features

  • ffi add C, Python, and Rust examples (b6538 Gustavo De Micheli)
  • core add support for italics (5bc05 Gustavo De Micheli)
  • core support multiple fonts, coming from the capabitilies db, instead of from the hardcoded list (6924b Gustavo De Micheli)
  • core support colspan and styles on tables (eafd0 Gustavo De Micheli)
  • core use only CodePages supported by the loaded profile, not the hardcoded list (cfcc5 Gustavo De Micheli)
  • core load PrinterProfile from capabilities database (a0133 Gustavo De Micheli)
  • core generate capabilities configuration file from github.com/receipt-print-hq/escpos-printer-db with a script (ba957 Gustavo De Micheli)
  • core switch code pages on the fly during the print job (59769 Gustavo De Micheli)
  • core align table cell content (798d4 Gustavo De Micheli)
  • core preserve whitespace on <pre> elements (4d4de Gustavo De Micheli)
  • core render list markers on list elements (6f066 Gustavo De Micheli)
  • core add configuration options for barcodes and QR codes, such as height and HRI position (46288 Gustavo De Micheli)
  • core send a status-read as pre-flight with timeout (dfeef Gustavo De Micheli)
  • cli list usb devices with a vendor name, if exists in vendors.conf (20bda Gustavo De Micheli)
  • core implement pure Java PNG decoder so images can be print with binary (7a9c3 Gustavo De Micheli)
  • include Windows binary and FFI (eb428 Gustavo De Micheli)
  • add Foreign Function Interface (ffi) so the project can be embedded in other languages, such as C or Rust (8fba2 Gustavo De Micheli)
  • build CLI with GraalVM (47efb Gustavo De Micheli)
  • add remaining blocks, like Image, QR, BarCodes (897c0 Gustavo De Micheli)
  • introduce Transport as a way to parametrize where the printer is located (ca744 Gustavo De Micheli)
  • render e2e ticket on real hardware (01b1f Gustavo De Micheli)

Bug Fixes

  • update release workflow (ebeda Gustavo De Micheli)
  • core fix failing tests on paper-cut at end of job (8b304 Gustavo De Micheli)
  • core avoid double cutting if job already has a cut (9d5b4 Gustavo De Micheli)
  • cli update GraalVM JNI and Resource configuration to actually be able to print with binary (cc809 Gustavo De Micheli)
  • update CI matrix to use the latest macOS intel-base variant macos-26 (79b02 Gustavo De Micheli)

Dependency updates

  • bump softprops/action-gh-release from 2 to 3 (a44a4 dependabot[bot])
  • bump actions/setup-java from 4 to 5 (95a2b dependabot[bot])
  • bump actions/checkout from 4 to 7 (2099b dependabot[bot])
  • bump the maven-dependencies group with 21 updates (1d903 dependabot[bot])

Other changes

Update README: architecture, supported HTML, honest status and roadmap

  • Documents the pipeline (HTML -> DOM -> Block IR -> renderer), the
  • supported tags/CSS/barcode markup with their printer effects, and a
  • roadmap reflecting the plan (renderer, word wrap, character-grid
  • tables, code pages, capability database, raster fallback).
  • Also fixes the usage example: Printer.of("") never existed; the API
  • is Printer.from(vendorId) returning Optional. Document.of -> from too.
  • Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

d9941 Gustavo De Micheli 2026-07-09 16:56:03

Cover Utils.findStyleValue and IR construction rules with unit tests

  • UtilsTest pins down the style-declaration parser: values with and
  • without trailing semicolons, multiple declarations, whitespace
  • tolerance, case-insensitive property names, whole-name matching
  • (text-decoration vs text-decoration-line), and malformed declarations.
  • BlockValidationTest asserts every IR record's contract: rejected null
  • or empty components, Paragraph's defensive copy and immutable runs,
  • Barcode's symbology default, and Feed's positive line count.
  • Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

f2d79 Gustavo De Micheli 2026-07-09 16:55:01

Test the IR: ComputedStyle resolution and HTML-to-Block translation

  • ComputedStyleTest covers tag defaults, CSS overrides (including
  • font-weight: normal beating <b>), no-op italic identity, inheritance,
  • size validation, and a regression for style attributes without a
  • trailing semicolon.
  • BlockBuilderTest asserts HTML-to-IR as plain objects: run splitting
  • and merging, whitespace collapsing, block boundaries (<br>, <hr>,
  • block tags), alignment inheritance, style unwinding, and barcode
  • subtree consumption. The existing HTML resources (paragraph, ticket01,
  • barcode) now serve as golden IR tests instead of println drivers.
  • Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

f1f71 Gustavo De Micheli 2026-07-09 13:52:20

Add BlockBuilder: HTML to IR translation with an explicit style stack

  • Walks the body with a jsoup NodeVisitor and a Deque<ComputedStyle>:
  • push the combined style entering each element, pop leaving it. This
  • replaces the statesByElement map + parent-walking rollback of the old
  • visitors with symmetric push/pop.
    • Block-level tags, <br>, <hr>, <img> and barcodes flush pending
  • inline runs into a Paragraph; alignment comes from the first run's
  • computed style
    • Barcodes are recognized both as a <bar-code> element and as the
  • bar-code BEM class used by the existing test resources, with the
  • symbology taken from the symbology attribute or bar-code--<name>
  • modifier class
    • Whitespace is normalized HTML-style: runs collapse to one space,
  • spaces at block boundaries drop, and inter-run separators attach to
  • the preceding run so styled runs don't start with invisible styled
  • characters
    • Consecutive runs with identical styles merge
  • Document gains blocks(), the IR entry point renderers will consume.
  • Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

f00e0 Gustavo De Micheli 2026-07-09 13:50:51

Add the IR: sealed Block hierarchy with style-resolved text runs

  • The intermediate representation between the jsoup DOM and printer
  • bytes. ESC/POS is line-oriented, so the IR is a flat List<Block>
  • rather than a box-model tree:
    • Paragraph: inline TextRuns + block-level alignment
    • ImageBlock, Barcode (from the <bar-code> custom element)
    • Rule, Feed, Cut
  • TextRun carries text plus a fully resolved ComputedStyle, so renderers
  • only diff consecutive runs to emit minimal state changes; no style
  • inheritance or events survive into the IR. Tables are a future Block
  • subtype and should not require touching any of these.
  • Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

ba7b1 Gustavo De Micheli 2026-07-09 13:42:21

Add ComputedStyle: resolved, printer-realizable style model

  • First piece of the new IR. An immutable record holding only properties
  • ESC/POS can realize: bold, underline, width/height multiples (1-8 per
  • GS !), alignment, invert. No italic on purpose - most ESC/POS printers
  • have no italic command; emulation is a per-printer renderer decision.
  • process(Element) computes the style entered by an element: tag defaults
  • (b/strong/u/h1-h3/center) first, inline CSS (font-weight,
  • text-decoration, text-align) second, so CSS wins over tags. Returns
  • 'this' when nothing changes so transitions are detectable by identity.
  • Supporting fixes:
    • Utils.findStyleValue: the regex required a literal ';' after the
  • value ([;$] is a character class, not an end anchor), so
  • style="text-align: center" without a trailing semicolon never
  • matched. Replaced with a declaration split.
    • formatter-maven-plugin 2.18.0 -> 2.23.0 and eclipse-formatter.xml
  • co...
Read more