Skip to content
f622ee1
Compare
Choose a tag to compare

Summary of Improvements

The first minor release in the 12.x series brings several new features relevant to paragraph shaping. @Omikhleia has fleshed out the linebreak mechanism with full parity of LaTeX's settings including hangingIndent and parShape. Having fully featured paragraph-wise hanging indent settings enabled a new package, dropcaps, to provide much more robust dropcap functionality than the previous floating frame mechanism we used for this. (Note the dropcap package documentation did not make it in the manual, see the example on the website for usage.) Additionally the paragraph shape callback function can now be used to create fancy paragraph shapes using any geometry you can specify or calculate. Bugfixes in this release cover several issues with French language, PDF metadata encoding, color fonts, book class headers, and more.

Features

  • build: Accommodate SOURCE_DATE_EPOCH for reproducible builds (16c81a8)
  • classes: Add \noop function for versatile SILE.call() use (2b04507)
  • core: Add OpenType post (v1) table parser (a985aed)
  • core: Implement Knuth's hangAfter and hangIndent (5417189)
  • core: Implement paragraph duration hanging indent settings (18ee23b)
  • core: Implement paragraph shaping (parshape) (c2c0235)
  • packages: Add dropcaps package (cb9105a)
  • packages: Add shift, raise, and size options to dropcaps (0a88948)
  • packages: Implement color option for dropcaps (d042bcf)
  • packages: Use font's post table to determine underline position (ae1b929)

Bug Fixes

  • backends: Move Lua 5.1 macro so covers whole file (9b40772)
  • classes: Reset state when calling running headers (ec0a7b8)
  • classes: Unnumbered book sections shall not display a number in running headers (4afde42)
  • Fixes name of accented math symbol, eliminates duplicate newStandardHspace assignment (4c38f1a), closes #1274
  • languages: Correct hyphenation after apostrophe in French and Catalan (4c93891)
  • languages: Correct synchronisation between indexes in French word breaking (94ca931)
  • languages: Repair broken French hyphenation patterns (c25d9d7)
  • packages: Add \pdf:metadata support for dates (1b87305)
  • packages: Apply OpenType x and y offsets to color fonts (d66dc5f), closes #1147
  • packages: Correct rebox to not output duplicate content (2802d9b)
  • packages: Don't over-isolate functions run in Pandoc imports (#1254) (84507a5)
  • utilities: Fix UTF-16 encode/decode utility functions (7180081), closes #1280
  • utilities: Set language of roman numerals to Latin to avoid casing issues (#1253) (95c4e2c)
4ce75ae
Compare
Choose a tag to compare

Summary of Improvements

While this release follows close on the heels of previous releases it represents over 2 years of work from community contributors. @harrysummer started work on a native math feature in April of 2019. While this initial phase was never completed, it did get as far as a working prototype. In November of 2020, @OlivierNicole picked up on the work and transformed the prototype into the shape as found in this release. Additional thanks to @akavel for input throughout the process.

On a conceptual level the math support is based on MathML and relies on OpenType math fonts. The input notation may be MathML (either directly using the native XML syntax or using an 1-to-1 equivalent SILE syntax) or an alternative math shorthand similar to the math notation used by TeX. See section 5.29.5 in the v0.12.0 manual for detailed documentation on the new math package. Examples are given for various formulas and syntax options. A math example has also been added to the packages example gallery on this website.

Additionally @Omikhleia contributed several new features and fixes including much more control over Table of Contents, styling options for PDF links, correct French punctuation treatment, and more.

Thanks to the contributions of @doronbehar, as of this release SILE is usable as a Nix Flake (in addition to the usual Nix package). This is an easy way to test run the latest Git HEAD version at any time from almost any OS. One you have flake support enabled, just run nix run github:sile-typesetter/sile -- <sile orguments>. This website uses this to regenerate some of the examples in the gallery.

Even though the math package is a major new feature, ultimately the major version bump was caused by a breaking change elsewhere. Previous to this release, the font used for footnotes was the SILE default unless specifically set. Setting changes were relative to the SILE default rather than the document default. This behavior was workable, but usually came as a surprise to most users. With this release, footnote and folio frame font settings default to being relative to the current document font. The font family, size, leading, and all other aspects of footnotes and folios are still configurable with the same tools as before. But this is a breaking change because those settings are now relative to a different base which might cause many documents to need updating.

BREAKING CHANGES

  • packages: Previous to this release footnote and folio frames took
    their font settings from a new typesetter with default settings. With
    this release the settings are now derived from the typesetter in the
    default frame, hence inheriting font family, size, leading, and other
    settings. Values can still be set using the same functions, but relative
    values such as font sizes are based on a different base.

Features

  • core: Add MATH variants table parser (b6c554e)
  • core: Add OpenType MATH table parser (835da21)
  • math: Add ‘debug’ option to math command (58cc9dc)
  • math: Add “big operator” support (5b9a150)
  • math: Add fixes to support less complete fonts (1c22af3)
  • math: Add italic correction to superscript; correct subscript size (d81fdee)
  • math: Add math.font.filename setting (522d70b)
  • math: Add math.font.size setting (5077d1c)
  • math: Add operator defaults (14bdf1a)
  • math: Add parameter to draw debug boxes around math components (2458d18)
  • math: Add parameters and support mathvariant param for mi tag (869dca8)
  • math: Add plain text support (3a09e9d)
  • math: Add subscript and superscript; add math constants (0489c04)
  • math: Add support for “symbol macros”, expanding to strings (27658f5)
  • math: Add support for fractions (6f4fc24)
  • math: Add tags for some mathematical symbols (b9fd771)
  • math: Add tex-like math parser (edceaf7)
  • math: Allow vertical stacking of top-level ‘mrow’s (56b553c)
  • math: Center display math neatly (8951378)
  • math: Implement and use munder and mover (61eac7a)
  • math: Implement generic bbox shaper (9c86aff)
  • math: Output error if rending with non-math font (c79617b)
  • math: Replace leading - with in numbers (f8d490c)
  • math: Support double-struck identifiers (29674bf)
  • math: Support for simple macros (5b4ecf7)
  • math: Support italic (c9b2884)
  • math: Support more integral-like operators (90a6c44)
  • math: Support of UTF-8 in texmath, support of mo, mi and mn in-grammar (959d1cc)
  • math: Turn "-" (hyphen) into "−" (minus) in math (fbed523)
  • packages: Add border style and color to hyperlinks (bb880be)
  • packages: Add function to remove last added fallback font (acf987b)
  • packages: Add linking support to toc entries (e589cb9)
  • packages: Add toc depth option and hooks for showing section numbers (c48fcde)
  • packages: Allow URLs to have many breakpoints (#1233) (b145605)
  • packages: Warn if toc contents have changed (5b6eed8)
  • tooling: Enable use as a Nix flake (8b503bb)

Bug Fixes

  • classes: Don't increment counters on unnumbered book sections (6cfca4d)
  • core: Correct --help output to reflect required values (da487ec)
  • languages: Add test 704 for French punctuations, fix expected 621 and 702 results (8e9b056)
  • languages: Correct Armenian support to use ISO 639 code ‘hy’ (ffafbe6)
  • languages: Correct punctuation rules for French (95c2398)
  • languages: Don't initialize Japanese unless actually called for (3aba931)
  • languages: Shortcut ICU soft breaks in French (ed8734c)
  • math: Fix underover error with sub wider than base but no sup (bc87393)
  • packages: Don't replace shaper unless actually initializing color-fonts package (269ca59)
  • packages: Fix deprecation warning command in package docs (a69d774)
  • packages: Reset footnote and folio settings top level state (3795a4e)
  • shaper: Fix memory leak in Harfbuzz library (#1243) (035dcc8)
3bac9a1
Compare
Choose a tag to compare

Summary of Improvements

Today's small patch release is mostly to help out downstream packagers with some small issues that cropped up. First it's a stab in the dark hoping we made things easier to get Homebrew packaging working on ARM based macOS. Secondly we added a build time check for git, which is required in order to use SILE's internal package manager. This dependency may change in the future, but since we use it now it's helpful that system compatibility is checked at build time. Lastly we fixed up some internal usage of an API we deprecated 6 releases ago and documented as going away in v0.11.0, but forgot to stop using ourselves. Notably the French language support module was affected.

Bug Fixes

  • build: Avoid implied line continuation in makefile (f2af48f)
  • build: Require Git even building tarballs, used by package manager (aba8662)
  • languages: Update deprecated syntax in language options (3fb1719)
6fea282
Compare
Choose a tag to compare

Summary of Improvements

This release brings a significant fix to the vertical grid typesetting system that was causing extra full grid spaces between paragraphs where they didn't belong. The new behavior is objectively more correct, but it does break previous workarounds. If you previous used a workaround to get the right output in spite of the bug, those documents may not render incorrectly. They can be fixed by removing whatever other workaround was in place or adding a shim that makes the paragraph spacing emulate the old behavior. Some utility functions also received bug fixes. Thanks to contributor @ctrlcctrlv, color fonts now behave themselves much better in TTB layouts and the counter display style Alpha works as documented.

Not much has been added on the feature front, just a few conveniences such as traditional units of (small) measurement and handling more attributes in documents converted via the Pandoc writer (as-yet unreleased).

Beginning with this release Docker images will now be available from GitHub Packages (also known as the GitHub Container Registry). This is an alternative to Docker Hub which has recently started limiting the features available to open source projects.

BREAKING CHANGES

  • packages: Previous to this release any and all leading between
    paragraphs (as set with document.parskip) –even a 0 height skip– would
    result in the skip of one full empty grid space — as if parskip had been
    set to something approximating a full line height. This change corrects
    the calculation so if a 0 height skip is added and everything fits, the
    next line or paragraph will continue uninterrupted in the next grid
    slot. To get the previous layout behavior back, document.parskip must
    be explicitly set to be something larger than 0. Even a minimal 1pt
    skip will result in paragraph spacing that includes one full grid height
    left blank as before:

      \set[parameter=document.parskip,value=1lh]
    
  • utilities: Previous return value for breadcrumbs:contains() was
    just an depth index with -1 indicating no match. This made sense when
    I wrote it, but coming back to it for a new project I expected a boolean
    return value. Returning two values seems like the best option, but given
    the function naming it seemed to make sense to return the boolean first,
    hence the API breakage.

Features

  • actions: Use tagged images for faster CI job spin up (6a00388)
  • build: Add configure flag --disable-dependency-checks (5caf413)
  • docker: Build, tag, and push images to GHCR (3988339)
  • measurements: Add ‘hm’ (himetric) unit (f4b6b62)
  • measurements: Add ‘twip’ unit (cf9d5a7)
  • packages: Map unnumbered class to legacy opts in Pandoc package (#1167) (2868da2)

Bug Fixes

  • core: Avoid crash on warn by using correct function (b403ad9)
  • packages: Avoid crash on warn by using correct function (5d05be1)
  • packages: Avoid unnecessary skips to next grid space (6424369)
  • packages: Correctly handle color fonts on TTB pages (9b35d6a), closes #1171

Code Refactoring

  • utilities: Change breadcrumbs:contains() to return <bool, index> (a987394)
a63ccc3
Compare
Choose a tag to compare

Summary of Improvements

This release fixes a couple of regressions and adds a couple small features. On the regression front, access to the interactive prompt has been restored and the table of contents metadata in PDFs is properly encoded again. For new features, COLR fonts are now automatically detected and the necessary support package is loaded when they are used, a new package allows spaces to be drawn using font-provided glyphs rather than assuming empty space, and another new package allows access to OpenType font features through more verbose fontspec names rather than their OpenType feature code names.

Features

  • fonts: Allow for code to be run when a font is first loaded (bdf05ab)
  • packages: Add \font-feature command (e2cf008)
  • packages: Add complex-spaces package (#1148) (b7451ae)

Bug Fixes

  • cli: Re-enable access to repl, input argument not required (a6434ee)
  • core: Allow builtin Lua bitwise operators on Lua 5.4 (5f0c2c7)
  • docker: Switch to BuildKit and make Docker Hub cooperate (783b104)
  • docker: Use patched glibc to work around outdated hosts (fa2532c)
  • docker: Use patched glibc to work around outdated hosts (#1141) (bf74417)
  • docker: Work around libtexpdf build having side effects (33510d9)
  • packages: Add CharacterVariant to features (929eca2)
  • utilities: Correct UTF-8/UTF-16 conversions (4863ed6)
175595a
Compare
Choose a tag to compare

Summary of Improvements

This release introduces a new dependency on an external Lua UTF-8 string handling library. By introducing proper string handling instead of our home grown functions we knocked out several bugs including invalid encoding in the output when error tracing was turned on. We also added some (ironically, home grown) UTF-16 string handling to sanitize output of Font meta data.

Features

  • core: Make luautf8 library available in global scope (ab7e745)

Bug Fixes

  • build: Run autoupdate to fix autoconf issues (ab8307b)
  • core: Decode UTF-16BE strings in Windows platform name entries (e7662f8)
  • debug: Use UTF8 safe substring function in trace stack (495a5bf)
  • manual: Small error (d738b62)
9b30797
Compare
Choose a tag to compare

Summary of Improvements

This release brings a few bug fixes, most notably unscrambling Arabic (and some other complex script) shaping. Since current work in process includes significant changes to the document class API and these fixes have been sitting around for a while I figured it was time to give them a release number before anything potentially more disruptive lands.

Feature-wise the only significant improvement is complete coverage for all element types in the Pandoc document AST, enabling any converted documents to compile without errors. They might not be pretty out of the box yet, but at least they render and can be styled by adding or modifying commands.

Features

  • classes: Allow footnotes in plain class if package loaded (42c1ceb)
  • classes: Run deferred package init() on late load (0224fe3)

Bug Fixes

  • backends: Add complex shaping data to debug backend (a1a6509)
  • backends: Don't crash if debug output precedes regular (19c21f2)
  • build: Don't abuse libtool internals (for NetBSD packaging) (#1084) (048c8b5)
  • classes: Define \strong weight=700, not 600 (#1097) (68abf91)
  • packages: Add default options to simpletable (1f10c97)
  • packages: Correct math operations on grid spacing (5286188)
  • packages: Turn off complex flag for items in \latin-in-tate (b20690f)
fe66c9c
Compare
Choose a tag to compare

Summary of Improvements

This release fixes just two bugs. The simpler of the stops custom styles in verbatim blocks. Much more urgently, a backend fix correctly accounts for offsets calculated during the shaping process and stops resetting the PDF cursor position. This issue primarily broke Arabic, but typesetting any fonts with cursive positioning or mark placement rules were affected.

Bug Fixes

721b80f
Compare
Choose a tag to compare

Summary of Improvements

This release supports versions of Lua Penlight newer than 1.8.0. Previous releases of Penlight have contained a long-standing bug in the class inheritance system that we were side-stepping with our own workaround. In one case our workaround was actually relying on a side-effect of said Penlight bug and never should have worked. With a proper fix finally implemented in Penlight, our workaround started to fail. This release includes an emergency patch so that SILE can be made to work on systems with the latest Penlight release. Future releases will likely remove our workarounds entirely and require a recent version of Penlight with the fixed class inheritance system.

Additionally, this is the first release that officially supports running SILE as a GitHub Action. You can now call SILE directly in CI workflows on your own projects.

Other cleanup work now allows classes to specify their own framesets without inheriting the default ones. This has no visible effect for most documents but it does make debugging framesets a lot easier because there aren't a bunch of empty frames behind the scenes inherited from other classes.

With special thanks to contributions from @ctrlcctrlv, SVG support is much improved in this release. Specifically, shapes with holes now actually render as holes. Also, thanks to @jmaibaum's contributions and careful eye, many examples from the manual which had fallen behind or had typos now actually work as documented.

Features

  • actions: Add configuration file to run as GitHub Action (ee2d509)
  • backends: Modify setCursor() to handle relative movements (7caa9c8)
  • classes: Make it possible to not use parent class framesets (99b9f50)
  • cli: Add Lua interpreter info to --version (bf5210d)

Bug Fixes

  • backends: Properly switch between normal and debug fonts (b53896e)
  • classes: Identify triglot class as triglot not diglot (495654a)
  • classes: Make declareFrames() workable by passing ids (27b6b4a)
  • classes: Move class setup code into deferred class:init() (6f470d7)
  • core: Patch Penlight 1.9.0 compatibility issue (1eb4290)
  • packages: Allow Hanmen frame creation to use optional ID arg (7853d5a)
  • packages: Fix hole drawing from svg in PDF (6521fd0)
  • packages: Remove extra space in \code in url (b90cd37), closes #1056
  • tooling: Expand variables so fonts are known dependencies of tests (88ac888)

Performance Improvements

  • backends: Reuse variables instead of recalculating values (02cce40)
94a2267
Compare
Choose a tag to compare

Summary of Improvements

This release is the first to fully support LuaJIT. For systems with a LuaJIT interpreter available this brings a full 2× speed improvement to rendering your documents over standard Lua interpreters. This speed increase is not without downsides though. Most available JIT versions do not have full Lua debugging functionality built in, limiting the usefulness of some of SILE's warning messages and especially the trace functionality. A LuaJIT build is probably what you want to use when working on content and re-rendering your documents over and over, but it may not be the best choice for doing development work, coding up your classes and functions, and so forth. To make the switch, add the configuration flag ./configure --with-luajit, then compile and install as usual. In the event you want to keep both versions around, it is actually possible to install both. SILE fully supports GNU Automake's program name transformations, you can specify a prefix, suffix, or complete alternate name to install under. See ./configure --help for details, but --program-suffix=-luajit is one way to get a sile-luajit executable that could be used alongside sile.

A few functions have been renamed and their old versions deprecated. If any of your code calls outputter functions directly these calls will need to be modified to be uniformly serf-referential method calls (i.e. :method() instead of .method()). This makes the outputter API consistent between backends, but may be a breaking change for some. Several other functions have been renamed and their old names deprecated. For these warning messages will be thrown for now, and the next version series (0.11.x) will deprecate them entirely. The most notable rename is \include-svg-file is now just \svg. In addition to the rename you can now specify a desired size by width instead of only by height.

In smaller news a large number of small fixes now draw frame debugging lines in exactly the right place instead of next to the right place, mark PDF bookmark locations at the top of the current line instead of the bottom, draw rules in the correct writing and advance directions for RTL and BTT frames. Other fixes include keeping Japanese language and tate functions from taking over documents. The \center command now disables line indentation so content is centered as expected, and attempting to set indentation after the start of a paragraph will throw a useful warning.

Features

  • build: Detect and use luajit first (601dfc4)
  • build: Detect LuaJIT if explicitly configured to want it (c3e8089)
  • classes: Add warning to \noindent if called after input (f29b9d9)
  • packages: Allow scaling SVGs by width or height (44588b5)
  • settings: Add a way to reset single setting to defaults (f318cdf)
  • settings: Bring Lua settings.set to parity with \set (d73b08c)

Bug Fixes

  • classes: Reset parindent's inside \center command (7b62f74)
  • core: Always compare like-types so LuaJIT can run (c608090)
  • core: Don't read zero-length name table entries (bcd9a9e), closes #1015
  • examples: Properly center title in showoff document (55717fb)
  • frames: Discard content (usually whitespace) inside \pagetemplate (3b7085b)
  • frames: Draw frame debug lines exactly on frame lines (db92edc)
  • languages: Stop Japanese resetting global chapter post macro (836f199)
  • packages: Align pullquote ending mark with outside margin (8b808db)
  • packages: Draw rules in the writing direction (18bca68)
  • packages: Error if asked to add bogus dependencies (59e2b56)
  • packages: Fix indentation of second paragraph in pullquotes (a8525e5)
  • packages: List \include files in makedeps (bf670ab)
  • packages: Orient rules for all 8 directions (bc4a33a)
  • packages: Place PDF bookmarks at top of current line (ce30d83)
  • utilities: Use deterministic sort for sorted pairs (99e2b59)