Skip to content

03 Sep 2018 - Liblouis

This release implements major improvements for back-translation thanks to concerted efforts by Bue Vester-Andersen, Bert Frees, Timothy Lee and others. In particular the input/output positions are now correct also for back-translation. There are new and improved Chinese Braille tables and some long awaited improvements to UEB. The release also has some code cleanups and documentation improvements.

For a detailed list of all the changes refer to the list of closed issues.

New features

  • Added a new opcode midendnumericmodechars. Characters defined with this opcode can appear in the middle or at the end of a number without canceling numeric mode. Thanks to Bue Vester-Andersen.

Bug fixes

  • Fix another stack-based buffer overflow in input parsing reported by Henri Salo thanks to Christian Egli.
  • Fix input/output positions for back-translation. Thanks to excellent bug reports and patches by Timothy Lee, Bert Frees heroically sat down and reworked the handling of the input/output positions for back-translation. This solves numerous issues with backward translation.
  • The returned inlen and outlen now always match thanks to the above work on input/output positions by Bert Frees.
  • Major improvements in the back-translation of capitalized words (capsword) in conjunction with punctuation and numbers. Thanks to Bue Vester-Andersen
  • Fixed a problem in the back-translation of numbers in conjunction with punctuation and letters. Thanks to Rimas Kudelis and Bue Vester-Andersen
  • Fix a buffer overflow in matchCurrentInput. Thanks to Hongxu Chen for reporting and to Christian Egli for fixing it.

Braille table improvements

  • Danish grade 2 tables: Reduced hyphenation to only the hyphens necessary for correct Braille translation. Replaced the longer rules with hyphenation for better cursor positioning. Corrected some words. Thanks to Bue Vester-Andersen.
  • New Chinese Mandarin Braille Codes (Grade 1) and (Grade 2) thanks to Sunian Loomee. The first one is for Chinese Common Braille, commonly known as the old Braille where a Chinese character is composed of three Braille Symbols, consonants, vowels and tones. The second table is for Chinese double spelling Braille, commonly known as the new Braille where Chinese character is composed of two Braille Symbols, consonants and vowels and the tones are included in vowels.
  • Major update to the Urdu tables thanks to Jake Kyle.
  • Back-translation of numbers in Latvian, Polish, Portuguese, Serbian, and Swedish has been fixed thanks to Bue Vester-Andersen.
  • Improvements to UEB such as handling of BLT, BLVD and LLC, number sign placement, final-letter groupsign usage and final-letter back-translation thanks to Mike Gray.
  • Significant changes to Bopomofo-based Chinese Braille. Among other things there is now complete the support of CJK Unified Ideographs Extension A and some symbols were added for Nemeth. Thanks to Sponge Jhan and 黃偉豪. With this change we can now properly handle duoyinzi, Chinese words that have more than one pronunciation. The granularity of the cursor movement can now reflect positions of all Chinese characters.

Other changes

  • Added documentation of opcodes which were previously introduced as part of the UEB work. Thanks to Bue Vester-Andersen.
  • Test suite improvements: In addition to checking the translation the tests now also check if the provided inlen is the same as the returned inlen and retry the test with a larger output buffer.
  • Fix a problem in the Makefiles that prevented liblouis from being built with automake 1.16. This is fixed now thanks to a patch from Samuel Thibault.
  • Removal of the code for the scripting language for multipass opcodes. This code was originally introduced in 2012 but never documented. Consequently it was never used. Meanwhile the original code for multipass opcodes was much improved. So there is no more need for this (duplicate) code and we are removing it.
  • The nightly snapshots of pre-built windows binaries are now built with UCS4 enabled.

Deprecation notice

  • None

Backwards incompatible changes

  • None

New, renamed or removed tables


  • zhcn-g1.ctb
  • zhcn-g2.ctb


  • None


Tables that are only useful in the context of liblouisutdml were moved there

  • marburg.ctb
  • marburg_edit.ctb
  • nemeth.ctb
  • nemeth_edit.ctb
  • ukmaths.ctb
  • ukmaths_edit.ctb
  • wiskunde-translation.cti
  • wiskunde.ctb