The SILE Typesetter
  • Home
  • What is SILE?
  • Examples
    • Global Scripts
    • Packages
  • Manual (PDF)
  • Download
GitHub

SILE v0.13.2 Is Released

29 Jun 2022 — Caleb Maclennan

Version v0.13.2 of SILE has been released and is available for download! See the included CHANGELOG.md or review the commit history for more explicit details.

Summary of Improvements

This patch release brings both bug fixes and new goodies.

Didier Willis contributed a new package for formatting lists. Features include bullet, numbered, and mixed list types with many styling options.

Fredrick Brennan fixed zenkaku unit handling and helped refactor the jplain/jbook classes so we now have tate-capable but language-agnostic tplain/tbook classes in addition to the Japanese specific variants. He also contributed full support for Esperanto including hyphenation, number formatting, and localized output strings. Even if you don’t have a use case for Esperanto directly the issues that rooted out with language and class handling should benefit everyone.

The papersize option provided by the base class is now case insensitive and allows dashes. If you prefer A4 to a4 or ANSI-A to ansia feel free to use them. A couple new paper size presets were added in the process.

Additionally the font fallback system got an overhaul. A change from previous behavior is that TOFU handed out by the last available fallback font will be rendered instead of skipping the characters completely. Switching back and forth between the color fonts package and the font fallback package is now possible. Finally it should stop throwing bogus warnings when it successfully shapes a segment via the last available fallback.

Other minor fixes include interactions with color plus dropcaps, some bibtex errors, and errors in the pecha class.

Features

  • core: Add presets for some ANSI paper sizes and ArchE variants (0f26756)
  • languages: Add full Esperanto language support (b740709)
  • packages: Add 'lists' package (bullets and enumerations) (6af3c62)
  • packages: Add more options for custom 'lists"' styling (3167410)
  • packages: Handle font fallback when glyph named null returned on shape falure (09c0a86)
  • packages: Pass through font-specific options to fallback fonts (fb29442)

Bug Fixes

  • classes: Clarify the scopes of tate and jplain (db83e9e)

  • classes: Fix circular reference in pecha class (4501ec0)

  • classes: Fix diglot and triglot class instantiation (71af1a9)

  • core: Make paper size parser case insensitive, e.g. 'a4' or 'A4' (af441c8)

  • measurements: Move the zenkaku width (zw) unit into core (cfe5060)

  • packages: Correct fall-back font processing (d3cc59b)

  • packages: Correct package load path for colored dropcaps (41a0c17)

  • packages: Fix coding errors in untested corners of bibtex package (804b1a5)

  • packages: Fix loading TOC twice resetting pdf links (97797b8)

  • shaper: Handle switching between color & fallback shapers in single document (04f2d5d)

  • utilities: Raise Lua error instead of manually aborting if inside pcall() (6e70a17)

SILE v0.13.1 Is Released

18 Jun 2022 — Caleb Maclennan

Version v0.13.1 of SILE has been released and is available for download! See the included CHANGELOG.md or review the commit history for more explicit details.

Summary of Improvements

Hot on the heals of a major release we have small one to patch up some odds and ends. Thanks to Fredrick Brennan for correcting my oversight in not distributing some of the new localization files. If by chance you’ve on a new fangled hardware platform like RISC-V things should build out of the box now. The documentation for installation on various systems has also been cleaned up. Thanks to Didier Willis for some new rule functions and fixes to old ones plus leader alignment corrections.

Features

  • build: Update libtexpdf to support new hardware platforms (da1182e)
  • packages: Add hrulefill command to the "rules" package (ccd3371)
  • packages: Add strikethrough command to the rules package (#1422) (f230a3a)
  • packages: Use new strikethrough when rendering Panndoc's SILE writer (20d19eb)

Bug Fixes

  • build: Make sure i18n/ dir is actually distributed (#1445) (61ed8e1)

  • packages: Add more props to keep CJK from tipping over, per #1245 (381b9f1)

  • packages: Leaders shall be an explicit (non-discardable) glue (631ba21)

  • packages: The fullrule now extends over a full standalone line (8fe57c8)

SILE v0.13.0 Is Released

09 Jun 2022 — Caleb Maclennan

Version v0.13.0 of SILE has been released and is available for download! See the included CHANGELOG.md or review the commit history for more explicit details.

Summary of Improvements

In the last patch release I hinted we had bigger things coming. This release finally surfaces major internal changes I’ve been working on since 2019. If our releases had code names this one might be "class wars". The SILE code base has two distinct usages for 'class'. One usage is our document classes, cohesive bundles of features and styles used to render a document. The second usage is the object-oriented programming paradigm of class inheritance. In serendipitous naming ripe for conflation, the document class feature is itself written using programming classes, enabling document classes to inherit from each-other.

This release refactors the implementation of both types of classes. Since nearly its inception, SILE has depended on the stdlib project for many of its Lua abstractions. Unfortunately this library is not as standard as its name suggests, has not been developed or even well maintained, and has been a constant source of problems. It even tinkers with core Lua functionality making it very difficult to keep SILE working across interpreter versions and to debug problems. For some time we’ve been gradually replacing it with abstractions from the Penlight library (loosely based on Python’s standard library). While not perfect, that library of functions is much more robust and predictable. This release finally removes the last of SILE’s usage of stdlib. For this release cycle the core program will still provide the stdlib library to ease transition for downstream projects that currently assume it is present, but it is no longer used internally. Beginning with the next major release cycle, v0.14.0, it will not be provided at all. (You will of course be free to include it as a direct Lua dependency in your own projects.)

We’ve attempted to shim most of the API changes so that most old SILE documents (and in particular, custom classes) continue to work out of the box. Most simple projects should still render without intervention, but you may see many warnings about deprecated functions. A few more advanced projects may run into trouble and fail to render at all, especially if they messed around with classes (of either sort) very much. As far as possible we’ve tried to add warning notices with hints about how to use the new class models correctly. Please don’t hesitate to open issues if you are having trouble getting anything to work.

For package authors, a new hook system should make it a lot easier to write packages that do more without also having to write a dedicated class to use them.

Additionally the localization system for all language specific strings that may be rendered by SILE has been changed from the home-grown system of nested SILE commands to a more flexible i10n system based on Fluent. The Lua implementation is not at 100% feature parity with Project Fluent reference implementation, but it is 100% interopperable with other implementations for features implemented and is a much more robust localization system than just substituting strings. Besides using it to easily customize the limited set of embedded localizations (such as the Table of Contents header or chapter titles), the tooling for localizing messages and rendering them in context aware functions is exposed for package developers and document authors to use at will.

A small collection of bug fixes to the typesetter rounds out this release. Justification of lines with ligatured characters is much improved. Rules with a depth property no longer throw off baseline calculations. Empty documents now generate blank PDFs. Adding a new master frameset layout no longer destroys the current page’s frameset.

⚠ BREAKING CHANGES

  • settings: All the functions under SILE.settings.*() should now be called using the instance notation SILE.settings:*(). Usage should be shimmed with a warning for now.

    Changing this in your code is relatively easy with a search and replace. As an example with a project in Git, you could use perl like this:

    funcs="pushState|popState|declare|reset|toplevelState|get|set|temporarily|wrap"
    git ls-files | xargs -n1 perl -i -pne "s#(SILE\.settings)\.($funcs)#\1:\2#g"
    
  • typesetter: Making a new instance of the typesetter should now be done by calling SILE.defaultTypesetter() instead of copying the object. It has been changed from a std.object to a Penlight class. As such the correct initialization function is also now _init() instead of init(). A shim is in place to catch legacy usage, but this will be removed in the future.

  • deps: All calls to the Lua default string library have been using a version monkey-patched by stdlib. This has created all sorts of issues including not being able to properly use some of Lua's default features and conflicts with out explicit meta methods. Also we're busy dropping dependency stdlib altogether.

    If you were relying on it for any of your string operations, replace string.func() with std.string.func(). For now std is being provided by SILE, but if you use it in your projects please add it as a direct dependency yourself since that will eventually be removed as well.

    By the way in case anything ever git bisects back to here, one way to test if your problem is related to this change or not (especially if you have downstream code that might have built on the assumption SILE's Lua strings were monkey patched) is to load it manually yourself:

    sile -e 'require("std.string").monkey_patch()' your_file.sil
    
  • classes: This changes the way classes are represented as Lua objects and the mechanism used for inheritance. While shims will be in place to catch most cases that use old syntax it is not possible to grantee 100% API compatibility. If you have classes that do anything remotely fancy (i.e. not just copy/paste from SILE examples) they may or may not work at all; and even if they do they should be updated to explicitly use the new API.

Features

  • classes: Add hook system for more versatile packages (9287721)
  • languages: Add \ftl command to make adding fluent localizations easy (b331456)
  • languages: Add fluent() command to output translations (ad87995)
  • languages: Validate languages against CLDR database (f96a331)

Bug Fixes

  • backends: Add Pango shaper when selecting Cairo backend (bbc2817)
  • backends: Always output pdf on finish() even if no content (3af7a94)
  • backends: Correct image sizing in Cairo and Podofo backends (f2785ad)
  • core: Avoid throwing deprecation errors when just inspecting SILE's internals (b303059)
  • core: Justify lines with ligatures (workaround) (cf2cb3a)
  • core: Patch Penlight 1.9.0 compatibility issue (092fbd3)
  • languages: Correct bogus usage of resource loading / error catching (fb1fd7f)
  • packages: An hrule with depth shall not affect current baseline (c759892)
  • packages: Don't destroy frames when defining masters, only when switching to one (b7de7ca)
  • packages: Fix autodoc parsing, typeset string not series of bytes (14f6126)

Miscellaneous Chores

  • deps: Drop std.string.monkey_patch() (e8b2bdf)

Code Refactoring

  • classes: Convert class inheritance from stdlib to Penlight (f7dafe0)

  • settings: Change settings object to be self referential (dd97d05)

  • typesetter: Change typesetter instancing to Penlight model (a9400ad)

SILE v0.12.5 Is Released

18 Apr 2022 — Caleb Maclennan

Version v0.12.5 of SILE has been released and is available for download! See the included CHANGELOG.md or review the commit history for more explicit details.

Summary of Improvements

Today we have a fairly small release motivated primarily by wanting to patch a few small issues before some bigger things in the pipeline land. We cleaned up a few small scripting issues with the configure and install process that should make it easier to install from sources on BSD platforms or Linux distros such as Alpine that do not default to bash and GNU tooling.

Besides the minor tooling fixes, Didier Willis has continued to pour in contributions. This release features his feature overhaul to the leaders package so that dot fills align vertically. It also includes his fixes to whitespace handling around punctuation in French and better extraction of strings such as chapter titles to PDF bookmarks.

Features

  • packages: Align leaders vertically (#875) (8b5d418)

Bug Fixes

  • build: Catch and complete unfinished library builds (91ff438)

  • build: Use BSD compatible scripting in make selfcheck (319e0c5)

  • build: Use POSIX compatible shell syntax in configure (55e64ab)

  • deps: Correct include to work with current LuaRocks packages (#1357) (b584be5)

  • languages: French punctuation spacing must honor current font options (724daf4)

  • packages: Better TOC title extraction for PDF bookmark (#1029) (5a65701)

  • packages: The dotfill must stretch as an hfill (#1343) (c94a4b5)

SILE v0.12.4 Is Released

03 Mar 2022 — Caleb Maclennan

Version v0.12.4 of SILE has been released and is available for download! See the included CHANGELOG.md or review the commit history for more explicit details.

Summary of Improvements

This patch release fixes a bug introduced while fixing other bugs. While enabling BiDi by default for all typesetters was working, enabling it manually on typesetters would result in an infinite loop. Given that many people worked around it not being enabled by default by turning it on manually, this meant a lot of documents started taking lots (∞) of time to render. Apologies for the wasted cycles, whether CPU or brain wave.

Bug Fixes

  • docker: Fix GHCR → Docker Hub copy used when releasing (e5d83d0)

  • packages: Avoid infinite loop when re-enabling BiDi (b4d691b)

« Prev 1 2 3 4 5 6 7 8 9 10 Next »