Skip to content

Releases: sile-typesetter/sile

v0.14.12

11 Oct 16:31
aee6edc
Compare
Choose a tag to compare

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

23 Aug 03:00
fa84d15
Compare
Choose a tag to compare

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

11 Jul 09:22
1392f74
Compare
Choose a tag to compare

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 Apr 22:22
7e7026b
Compare
Choose a tag to compare

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

26 Jan 20:24
cc8486b
Compare
Choose a tag to compare

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)

v0.14.7

30 Dec 20:16
2f9e06d
Compare
Choose a tag to compare

Summary of Improvements

Some of the changes that came out in v0.14.6 were … less than optimal. The build system changes were for a good purpose, but made life a bit difficult for some distro packagers. I also managed to introduce a parsing regression. It also came to light that a previous API deprecation didn't come with the usual warning and shim for transitional support.

This release is notable for distribution packagers for two reasons. First, there is now an easier way to skip the font dependency check at build time. Second, this release is the first time using LuaJIT is at 100% parity with regular Lua. If your distro has LuaJIT available there is now little reason not to make the switch.¹ The speed increase is substantial, especially for large documents.²

While I was tinkering with smoothing out the build and fixing regressions a couple other fixes landed. @khaledhosny tackled a long standing issue with the font loader. The opsz axis can now be used as expected so fonts with OpentType FeatureVariations are usable in SILE. @raphCode also spotted and fixed some outdated code in the manual.

¹: As far as SILE core and all its Lua dependencies are concerned there is no downside. Previously some of the debug and tracing features did not give as much useful information when using LuaJIT. Now the only caveat is related to end users and their documents. If people write custom Lua code in their projects and/or use other 3rd party Lua libraries they will need to consider interpreter support.

²: As a rough comparison on my desktop machine, rendering the 115 page SILE manual takes about 48 seconds with Lua 5.4, 22 seconds with LuaJIT, and 17 seconds with OpenResty.

Features

  • build: Allow easy skip of font checks with FCMATCH=true (5c0cef6)

Bug Fixes

  • build: Only check tooling to bulid manual if really needed (e166e00)
  • inputters: Rework SIL input to handle both junk outside of document tag and fragments (4c51c55)
  • outputters: Patch up error message when failing to load font (#1671) (771d87f)
  • shaper: Correct font-variants using opsz axis (#1666) (a929583)
  • shaper: Respect variations when shaping (#1265) (#1662) (f50ae77)
  • tooling: Keep all Lua packages in same env for Nix (8fc8670)
  • utilities: Tweak breadcrumbs to work under LuaJIT limitations (32f744c)

v0.14.6

14 Dec 15:33
9893755
Compare
Choose a tag to compare

Summary of Improvements

This release has tons of fixes and even a few features, but perhaps the most interesting bit to end users might just be the documentation. Thanks to @hegjon, official SILE packages are in the works for Fedora. The procedure for installing them via COPR is documented and will be updated when they land in default repositories. Also @ctrlcctrlv added some useful notes about installing 3rd-party packages. This is really important because very useful actions like typesetting Markdown are best accomplished with external packages.

Anyone working with the source code for SILE itself should note the build system has been split so only run time dependencies are checked at configure time by default. This means no-change is needed for distro packagers and end users that are just wishing to install and move on. However checking for dependencies needed in order to develop SILE itself (including running tests) now requires different configuration. Using --enable-developer should be added as a go-to configure option for anyone hacking or wishing to contribute the to SILE sources. Also of interest to developers, using nix develop should now be a lot more seamless as far as providing a ready-to-use environment.

@Omikhleia has rebuilt the formatNumber() utility function using ICU. This increases language support from a handful of manually implemented ones to almost complete CLDR coverage. In the process a new utility function collatedSort() was added to sort Lua data with locale aware collation. He also fixed a number of little typsetter bugs and overhauled some more documentation.

First-time contributer @raphCode submitted a fix for calling citation keys in the bibtex package.

Debug output is now both faster and more robust since it can't crass the typesetter. When errors are encountered, location reports for where in the document an error was triggered are more accurate. Bundled in this release are also a batch of other small bug fixes to the typesetter, page builder, and shaper.

Features

  • build: Add ./configure --enable-developer to ease setup for SILE developers (e8a56ae)
  • core: Add SU.collatedSort for language-dependent table sorting with collation (ea7446d)
  • core: SU.formatNumber has more options and language support (ed0db29)
  • packages: Add package loaded that can later be used to track package dependencies (d48633a)
  • packages: Code block environment and raw handler for autodoc (7661330)

Bug Fixes

  • classes: Apply page/framebreak in hmode but warn the user (809cbba)
  • cli: Deduplicate Lua module loading paths when adding segments (e0f75b1)
  • cli: Escape possible path character in replacement (0161f9a)
  • cli: Make user system root not added to resource search path (4305850)
  • debug: Correct filename in debug info after includes (#1652) (4990ecc)
  • debug: Fix pagebuilder debug functions in absence of luastd (ab46bf7)
  • debug: Fix typesetter:debugState() in absence of luastd (42f6b0b)
  • inputters: Correct Lua inputter AST expectations to match others (6177b0b)
  • inputters: Work around SIL parser returning tags as part of content (ef4efb7)
  • languages: Replace custom EN/TR ordinals with ICU (82b6709)
  • nodes: Ignore empty node properties when debugging breaks (f034e05)
  • packages: Correct content position reporting in inputfilter (bb53d77)
  • packages: Don't discard grid makup vboxes at top of new pages (22b899c)
  • packages: Fix \cite{key} in bibtex package (#1655) (648bb5d)
  • packages: Use casting to restore shaper state after fallbacks (351fc68)
  • shapers: Apply tracking settings even in font-fallback shaper (55f0c9c)
  • tooling: Exempt LuaJIT from external bit32 library requirement (#1654) (d094f1b)
  • typesetter: Ensure being in horizontal mode after pushback (a82b604)
  • utilities: Correct logic in AST debugging output, also protect (97c82f0)
  • utilities: Protect debug functions so they can't crash SILE (319b96a)

v0.14.5

19 Nov 14:20
1a86520
Compare
Choose a tag to compare

Summary of Improvements

We're just squishing bugs today and making the manual a little neater. Working with STDIN streams should be a bit more robust now as the content type detection isn't so picky about whitespace and isn't so prone to false positive detections. Document file restrictions have been relaxed a little too allowing comments and whitespace before the leading document tag. Package developers should have a little bit easier time with in the event their package is loaded twice. Also a number of small typesetting issues in the user manual were cleaned up by @Omikhleia.

Bug Fixes

  • inputters: Correct false positive detection of STDIN as Lua content (d54946b)
  • inputters: Don't duplicate passthrough content in AST (07c8e87)
  • inputters: Permit content outside of the document note, e.g. comments or blanks (#1596) (f1a508a)
  • inputters: Relax SIL format sniffing to allow valid syntax (43fc4bc)
  • languages: Remove superfluous line (848b91f)
  • languages: Tidy up variable scope in languages/unicode.lua (78b453d), closes #699
  • measurements: Allow redefinition of existing units (#1608) (8d81018)
  • packages: Ensure a page switch does not break boustrophedon (#1615) (64abaf9)

v0.14.4

05 Nov 05:59
9dfdd4b
Compare
Choose a tag to compare

Summary of Improvements

Today we have a small rollup of fixes and improvements. @Omikhleia overhauled the counters packages as well as fixed up bugs in several other packages. The default center of rotation has been changed to give a more expected result. Text casing functions are accessible again from the Lua side of things, changing masters during a page output doesn't break page breaking, and using the twoside package doesn't force the use of mirroring. @OlivierNicole also stepped in to fixup some math bugs. Also thanks to @ThatGeoGuy and @snan for pointing out and fixing small issues in our documentation.

Features

  • packages: Add boolean noleadingzeros option to counter formatter (e4f8133)
  • packages: Add new command \set-multilevel-counter (11578a8)

Bug Fixes

  • classes: Always break out of hmode before processing \chapter headings (0c44d8e)
  • core: A typo in a variable prevents using -u with a class (b8f5c40), closes #1569
  • languages: Make 'und' an exception to language name canonicalization (52e9b79)
  • math: Fix insertion order of MathML children (738e9e6)
  • packages: Account for depth when calculating rotation center (289dd2a)
  • packages: Avoid forcing mirrored masters in twoside package (#1562) (8cdf6ed)
  • packages: Combine \unichar'ed chars with same font only (91a8d40)
  • packages: Correct rotation origin calculation back to pre v0.10.0 (3521936)
  • packages: Don't inhibit page breaking after switching masters mid-page (6b20f73)
  • packages: Make sure PDF initialized before rotate package directly calls it (449b2a6)
  • packages: Rework simple and multilevel counters (1e6e91a)
  • packages: Textcase package name typo preventing using methods from code (7f68766), closes #1568

Reverts

  • Revert "docs(packages): Fixup unichar documentation, work around known bug (#1549)" (03d1b11), closes #1549

v0.14.3

01 Sep 20:36
1e84ea3
Compare
Choose a tag to compare

Summary of Improvements

This release addresses a few pain points discovered using the v0.14 series in production.

For 3rd party package developers, it's now easier to find non-Lua resources you installed along with your package. Among several contributions from @Omikhleia, the output backend now returns useful information about images it embeds directly. The same work also allows specific pages of PDFs to to be emdeded as images, not just the first page. He also helped refactor existing interfaces to make them easier to extend, such as the table of contents package. A long standing issue with Turkish hyphenation has been addressed, eliminating the need for preprocessing or other workarounds. More long standing issues with the book class and chapter opening spreads have been addressed. Some priority and interactions between new CLI flags has been worked out. A few more misc bugs were also squished and relevant tests added.

Features

  • languages: Handle hyphenation of inter-word apostrophes in Turkish (50ae936)
  • packages: Add \open-spread function with more features that \open-double-page (c2ba579)
  • packages: Add ability to select a page in PDF images (a477d94)
  • packages: Allow for customized content on otherwise blank filler pages (5ae97bf)
  • packages: Provide base directory to packages (#1529) (f9ae994)
  • utilities: Return image resolution with libtexpdf backend (a9c11d3)

Bug Fixes

  • cli: Actually apply cli provided class options (505919e)
  • cli: Allow CLI option to override document specified class (5232ce8)
  • languages: Make Turkish hyphenation less bad around intraword apostrophes (008d4c4)
  • nodes: Correct calculating width of postbreak discretionaries (ea7912c)
  • nodes: Work around discressionaries being output when not wanted (c7dc439)
  • packages: Fix over-aggressive eject in \open-double-page (5620556)
  • packages: Homogenize image width and height as measurements (b91cfbb), closes #1506
  • packages: Make sure PDF initialized before PDF package does anything (#1550) (ebc3748)
  • packages: Resolve src= relative to document for SVG images (b55fc98), closes #1532

Reverts

  • Revert "chore(build): Avoid mktemp during build, breaks opensuse packaging (#1542)" (bca007f), closes #1542
  • Revert "chore(cli): Output header before doing anything that might throw warnings" (58da8ad)