Sile Versions Save

The SILE Typesetter — Simon’s Improved Layout Engine

v0.14.17

1 month ago

Summary of Improvements

The "big v0.15" is still brewing, but we keep coming up with little improvements that easily fit in the v0.14 series. It turns out the special hyphenation handling we added to Polish (for explicitly hyphenated words) is used by quite a few languages. At this time we've applied it by default to Croatian, Czech, Portuguese, Slovak. and Spanish. Thanks to @Omikhleia for much of the research on this as well as @jodros, @DavidLRowe, @jakubkaczor, and @tomas-vl for domain expertise.

Additionally João contributed an option for columns command to more easily set up column frames with balancing turned on or off.

Features

  • languages: Enable explicit hyphen repetition handling in Croatian (c29545d)
  • languages: Enable explicit hyphen repetition handling in Czech (b05d621)
  • languages: Enable explicit hyphen repetition handling in Portuguese (2a58d96)
  • languages: Enable explicit hyphen repetition handling in Slovak (82640b0)
  • languages: Enable explicit hyphen repetition handling in Spanish (8db7f23)
  • packages: Add balancing option to makecolums command (#1950) (b5ce8e6)

v0.14.16

2 months ago

Summary of Improvements

If goofed up some of the merges involved in the release process for v0.14.15. This doesn't bring any user facing features or fixes, only a bit of refactoring intended to be in the last release. The main purpose is to straighten out the repository so the expected branch contains the release tags. Sorry for the noise.

Bug Fixes

  • tooling: Re-merge so release tag is on master branch (e8eaf11)

v0.14.15

2 months ago

Summary of Improvements

In today's minor release we tinker with language support.

@Omikhleia contributed improvements to non-breaking space handling in French. He also setup handling of Catalan hyphenation at ela geminada and Polish hyphenation at existing hyphens. Turkish gained a new setting (on by default per the current Turkish Language Association guidelines) for handling hyphenation at apostrophes. The previous behaviour (used by some publisher style guides) is available by toggling off the new setting.

All languages gained an (on by default) setting that makes spaces after em-dashes at the start of paragraphs be fixed width. This is used in at least French and Turkish typography to typeset dialogue and the fixed spacing keeps everything lining up per expectations. Other languages may benefit as well, but also the feature can be disabled if flexible spacing is actually desired.

Details for each of these languages and their related settings are in the SILE manual.

Features

  • languages: Accomodate alternate Turkish hyphenation guidelines at apostrophes (92904fc)
  • typesetters: Support for speaker change introduced by em-dash (2afa4cb)

Bug Fixes

  • languages: Break at ela geminada in Catalan cancels the punt vola (f8c4c1e)
  • languages: Break at explicit hyphen in Polish repeats the hyphen (0f8c7aa)
  • languages: Remove multiple repetitions of U+00A0 nbsp in French (0356a49)
  • languages: U+00A0 nbsp in French causes unexpected word breaks (b93975c)

v0.14.14

3 months ago

Summary of Improvements

Merry Christmas!

Not this isn't the Rusty release you might want in your stocking. That is coming along nicely though, we're just including an abitioun rollup of breaking changes and going slow to do it right. You can preview the release notes or follow issues in the milestore for teasers. More notably there are already lots of ways to run the development release: Homebrew has --HEAD support, Docker images are available, the Nix flake works, Arch Linux has VCS packages, and more. If you want to start putting it through the paces go ahead.

Until the cookies are fully baked, this minor release has a few goodies that are not breaking changes. @Omikhleia contributed some updates to the dropcaps package to better handle fonts with descenders in their capitals. He also contributed some improvements to Unicode handling: soft hyphen and non-breaking spaces work as expected. SILE has perhaps more robust ways of defining custom hyphenation and glue nodes, but the Unicode handling is convenient is handy if you input content has such data anyway. For bonus points some CLI error messages have been dramatically improved to be more informative and less repetative.

Features

  • cli: Change module load error to suggestion for how to install 3rd party modules (c280050)
  • languages: U+00A0 non-breaking space must be stretchable by default (b769a63)
  • typesetters: Support U+00AD soft hyphen as discretionary break (285507e)

Bug Fixes

  • backends: Fix plain text backend to work in LuaJIT/Lua 5.1 (b185d49)
  • cli: Stop outputting error messages twice on failure to process main file (da5d609)
  • core: Use nil-safe and Lua-version-robust table utils (2405b23)
  • packages: Adjust dropcap logic for letters with a depth (fd6963d)

v0.14.13

4 months ago

Summary of Improvements

This minor release brings a couple improvements from a new contributor, @jodros. We have one new feature, a boolean option flag on our base class that enables landscape mode. Any paper orientation has been supported already, but the preset paper sizes only had the standard portrait orientation and landscape orientations required entering custom dimensions. This flag makes it a bit easier to swap the X and Y dimensions of the standard (or custom) value parsed from the papersize option. Additionally he fixed a bug in the frametricks package such that using the \makecolumns function doesn't break relative frame constraints used by, for example, footnote or folio frames. This fix only works for TTB-LTR automatic column setups for now.

Finally, some build system fixes and features were backported from v0.15.0 development work. Most significantly the handling of the SILE_PATH environment variable now allows multiple paths, which in turn allows a single project to utilize multiple external collections of 3rd party packages rather than having to collate them all into one location.

Features

  • classes: Add landscape option to base class (#1892) (0fb9ade)
  • cli: Allow multiple runtime SILE_PATH segments (backport from develop branch) (e7c8fe2)

Bug Fixes

  • frames: Update frame constraints with new frame IDs after \makecolumns (b2d6b4f)

v0.14.12

5 months ago

Summary of Improvements

This is another minor maintenance release. We throw a few less warning messages having dropped a few that were not actually informative. A few memory management bugs have been fixed, most notably affecting Lua 5.1. For the most part we hope you are on LuaJIT anyway (or your system's default Lua, hopefully newer than 5.1) but we do try to keep everything working smoothly on any platform. A few other minor improvements are noted below.

In other news, the v0.15.0 release is coming soon too. It is already stable enough to be used for real work and should play nice with most systems. Issue #1864 has some notes on how to run the development branch for it before it is released.

Features

  • i18n: Add Portuguese localizations for bibtex package (#1859) (f716c35)
  • utilities: Add utility function for console messages without trace info (18526ce)

Bug Fixes

  • build: Make sure vendored luarocks isn't a phony target that runs repeatedly (713434d)
  • core: Allocate exactly what we use, not a guess with an extra just in case (640ded0)
  • core: Correct usage of HarfBuzz when passing a filtered list of shapers (f488643)
  • core: Fixup class loader so cache is all Lua module specs (#1863) (7efff5b)
  • packages: Don't warn on TOC content change if not actually used (87c443d)

v0.14.11

7 months ago

Summary of Improvements

Today we only fix the things we broke yesterday. This is a very minor release with only a couple of touch-ups to actual code. The biggest motivation for the release is actually the documentation. Our documentation changes don't show up in the automatic change logs, but we fixed a number of problems with the layout of the manual. Over the last couple releases we introduced several mistakes in the documentation code causing a bit of mess. The manual still isn't perfect, but at least no bits are drawn over other bits any more! Additionally a whole new chapter on how to write modules to add input and output formats landed thanks to @Omikhleia.

Bug Fixes

  • core: Leave legacy masterFilename alone but use first input filename internally (29667a7)
  • core: Make masterFilename actually a filename (759131e)
  • packages: Avoid mix-and-matching indents in fixed-width specimin blocks (de41cac)
  • utilities: Use real semver parser for deprecation warnings (5f0fed5)

v0.14.10

8 months ago

Summary of Improvements

Not all releases bring groundbreaking changes. This one is a roll-up of bits and bops. A few small quality of live improvements, some localizations, some bug fixes, some conveniences for 3rd party package developers, and so forth. Enjoy.

Notes about the Future

If you're looking for messy fun, check out the riir branch and PR#1762. As the name suggests, this is a major project overhaul based in Rust. Have no fear! Everything is still fully customizable in Lua. We have no plans of taking away that flexibility. The current proof of concept is a CLI binary is Rust that provides it's own Lua interpreter (optionally linked to the system one or completely vendored). This normalizes the environment, allows targeting environments where Lua is hard to get running, allows parts of the system to be selectively coded in Rust for speed benefits, etc. The PoC already passes 100% of the existing tests, loads 3rd party packages as usual, and is a full drop in replacement for the current Lua based CLI. As of this writing the plan is to land this new CLI in v0.15.0, potentially enabling easy(er) installation on Windows in follow up releases.

If you are a 3rd party developer, by sure to keep an eye on your Lua support. SILE already supports Lua versions 5.1.x through 5.4.x and well as LuaJIT. The same range of support is already achievable at build time in the Rust CLI. The LuaJIT provides the usual massive improvement in speed. We plan to push for this to be the default option in distro packages in the future even on platforms where the default Lua interpreter is 5.4. Making sure your packages run under the existing LuaJIT support should future proof them to easily transition to the Rust based SILE builds.

Features

  • cli: Allow more than one input document (d20cbd8)
  • i18n: Add localized strings for Cantonese and Chinese (cb67d36)
  • packages: Add document class styling in autodoc (e70fa50)
  • packages: Provide API for registering raw handlers linked to packages (45cd3ac)

Bug Fixes

  • build: Avoid build artifacts being listed for installation (29c2ccd)

  • core: Avoid stack overflow in Harfbuzz module (#1793) (5001efe)

  • outputters: Setup --makedeps to play along without explicit --output (6ff2e16)

  • packages: Converters package no longer worked after 0.13.0 (433795c)

  • packages: Correct chord line height and chord font use (65961c6), closes #1351

v0.14.9

11 months ago

Summary of Improvements

Today we have a substantial rollup of small fixes. No one thing here is going to knock your socks off, but lots of things are just better.

On the documentation front a new contributor, @jslabovitz, stepped in with a huge copy-edit of the entire manual.

For shiny new features, @Omikhleia added a new scalebox package for reshaping other output. He also taught some existing packages new tricks, such as adding style hooks to the url package and allowing the infinitely stretchy fill glue nodes to be initialized with a starting length. The CLI gained a new --quiet flag to suppress info and warning messages for those times when you just don't want to know what the engine is telling you.

In bug extermination news, the list of squashed ones is long, and some of them had been around for a long time. Didier did a lot of work under the hood with hboxes and discretionary node handling. The upshot for end users is that a lot of weirdness with parindent settings and they way content that didn't fit on one page is pushed to the next has been smoothed over. Your indents shouldn't ever get applied twice, underlines won't apply to the indentation space, unnumbered chapters won't sometimes disappear from your ToC, and so forth.

Features

  • classes: Add Picas unit to cover all units speced in Docbook (88f03fa)
  • classes: Implement the\code command in the plain class (0d371ba)
  • cli: Add -q / --quiet flag to reduce output to essential errors (#1759) (f69ed20)
  • core: Support initializing fill glues with a width (#1765) (5bc372a)
  • packages: Introduce urlstyle hook in the url package (8f6235d)
  • packages: New scalebox package for arbitrary box re-scaling (a11f61e)
  • packages: Support migrating content in re-wrapped hboxes (da3ab6d)
  • typesetters: Implement hbox building logic in the typesetter (0f5bc69)

Bug Fixes

  • build: Distribute SVG and FTL source files in packages (7cef0ea)
  • classes: Avoid justification issues with relative parindent (3ffd272)
  • classes: Make sure un-numbered chapters make it in the ToC (e5af292)
  • classes: Parse bare number and percentage units in docbook images (8b965b9)
  • classes: Setting current.hangIndent is a measurement (e213d6e)
  • cli: Return success if --help explicitly requested (#1737) (35a229d)
  • core,typesetter: Discretionary nodes are incorrectly handled (dd7d05c)
  • core: Ensure restoring settings top-level state does not error (fce8447)
  • outputters: Update Cairo/Podofo hbox debug API to match libtexpdf (#1703) (607dcf7)
  • packages: Correct image aspect preservation logic (6ace5b1)
  • packages: Fix output of debug breaks in infonode package (#1725) (c8a1467)
  • packages: Make sure pullquotes start in block mode (#1774) (00151bc)
  • packages: Strip content position in ToC entries (#1739) (23345ea)
  • packages: Text conversion in bookmarks has spacing issues (7ef2bb4)
  • typesetter: Account for discretionary dimensions in hbox building (91cb950)
  • typesetter: Avoid initializing new line during hbox creation (ae455a1)
  • typesetter: New typesetter instances shall not reset settings (16d8a6a)
  • typesetter: Skip lines containing only discardables without ignoring next lines (9c3dc65)
  • typesetter: Top glues shall be skipped when streching/shrinking a page (8818a24)
  • typsetter: Hack around scoping issues for parindent setting (fc85298)
  • utilities: Enforce stricter type casts (SU.cast, SU.boolean) (a325eb7)

v0.14.8

1 year ago

Summary of Improvements

If you have extra cake in storage just waiting for something worth celebrating, this might be a good release to bust it out for. @khaledhosny has contributed a major new feature: support for variable fonts! This contribution was supported by a bounty grant from the MFEK Foundation. Many thanks to both Khaled and @ctrlcctrlv for making this possible.

Enabling this significant step forward requires the font instancing support introduced in HarfBuzz 6 (part of the harfbuzz-subset library). This is a new default minimum requirement for SILE. At the time of writing this is relatively new, although many platforms already have updates available. It is possible to build against older HarfBuzz versions by using the configuration option --disable-font-variations. When built this way SILE will continue to run on platforms with old HarfBuzz releases but will throw an error if you attempt to render a document using variable font features.

Features

  • build: Pass build time configuration into Lua environment (c5d8789)
  • core: Add variations support to font command (a37e7bc)
  • shapers: Instanciate variable fonts (d50881f)
  • shapers: Support named instances with FontConfig (29119b9)
  • shapers: Support named instances with macfonts (39a3242)

Bug Fixes

  • build: Package license file for vendored lunamark fork (#1686) (13df3c1)
  • classes: Coerce option values to booleans (#1696) (8368cb4)
  • packages: Absolutize parskip heights on use (1ac793f)
  • packages: Pass style & weight values to the math font loader (c92712f)
  • packages: Quote option values in documentation when necessary (41e47bb)
  • tooling: Use luaEnv properly (#1679) (a34e1c1)