liblouis 3.11.0 has been released

The liblouis developer team is proud to announce the liblouis release
3.11.0. The release is available for download at:

https://github.com/liblouis/liblouis/releases

Introduction
============

Liblouis is an open-source braille translator and back-translator. It
features support for computer, literary and math braille, supports
contracted and uncontracted translation for many, many languages [1]_.
It plays an important role in an open source accessibility stack and is
used by screenreaders such as NVDA, Orca and JAWS. A companion project
liblouisutdml [2]_ deals with formatting of braille.

Noteworthy changes in this release
==================================

A tremendous amount of work by Dave Mielke and Bert Frees has gone into
this release. They have improved liblouis for use on note taker devices,
for backwards translation and a number of languages. Many other
contributors (listed below) have also helped in fixing bugs and
improving braille tables, such as Dutch, Mongolian, Polish, Ancient
Greek, Danish, Irish, Chinese, and American Braille Computer Code.

For a detailed list of all the changes refer to the list of closed
issues [3]_.

New features
------------

-  Enable ``always`` rules with a single character and a single braille
   cell for back-translation. Thanks to Bue Vester-Andersen.
-  Implement ``noUndefined`` mode for forward translation, thanks to
   Dave Mielke.
-  Use fallback braille representations (NABCC) for rendering undefined
   characters in hexadecimal notation, thanks to Dave Mielke.
-  Always render undefined characters, also ASCII characters, in
   hexadecimal notation.
-  Add a new metadata field ``index-name`` for selecting a table from a
   list fast and efficiently. It has the most important information
   first and no redundant information. It should look nice when sorted.
   This in contrast to the existing ``display-name`` field which is for
   describing a table accurately and should sound good. Thanks to Dave
   Mielke and Bert Frees.

Bug fixes
---------

-  Don't let a caps passage end on a word with no letters. Thanks to
   Bert Frees.
-  Handle word resets in the last word of an caps or emphasis passage if
   the end indicator was placed before the word. Thanks to Bert Frees.
-  Never convert to lowercase if ``capsletter`` is not defined. Thanks
   to Bert Frees.
-  Fix position mapping for back-translation when ``noUndefined`` mode
   is active. Thanks to Dave Mielke.
-  Fix bug where a translation would hang on words that match both a
   ``nocont`` and a ``repeated`` rule. Thanks to Dave Mielke.
-  Fix bug where the effect of ``capsnocont`` would leak to the next
   word if that word starts with a capital. Thanks to Bue
   Vester-Andersen.

Braille table improvements
--------------------------

-  Fix an issue with ordinal numbers inside caps passages in Dutch
   braille. Thanks to Bert Frees.
-  Improved back-translation for Mongolian thanks to Angaragerdene.
-  Fixes to Polish grade 1 and Polish computer braille thanks to Łukasz
   Golonka.
-  Improvements to Ancient Greek braille, which has been renamed
   &quot;Greek international braille&quot;. A version with composed
   accents is made available as a .uti table. Thanks to Dave Mielke and
   Μαρια Γεωργακαράκου (Maria Georgakarakou).
-  Various improvements to modern Greek thanks to Dave Mielke.
-  Improvements and fixes to Spanish contracted braille. Details in
   #741. Thanks to Juan Pablo Bello.
-  Improvements and fixes to the Danish tables. Thanks to Bue
   Vester-Andersen.
-  Add a display table to match Word CX which is used in Norway and
   Sweden, and maybe also in other countries thanks to Lars Bjørndal.
-  Fix handling of colon within number in Dutch braille, thanks to Jake
   Kyle.
-  Fix translation of bullet and dot operators in Dutch braille, thanks
   to Paul Rambags
-  Added North American Braille Computer Code table (``en-nabcc.utb``)
   which is the counterpart of the ``text_nabcc.dis`` display table.
   Thanks to Dave Mielke.
-  Add support for the International Phonetic Alphabet (IPA) to the
   Chinese bopomofo braille table, thanks to Hurt Huang and Sponge Jhan.
   Various improvements, including dot patterns and test cases, to the
   Chinese bopomofo braille table, thanks to Sponge Jhan.
-  Unified English Braille no longer displays a single underscore when
   multiple underscores are in the text, thanks to André-Abush Clause.
-  Update to Afrikaans uncontracted braille and new table for contracted
   braille. Thanks to Christo de Klerk and Greg Kearney.
-  Update Irish braille (contracted and uncontracted) to the May 2019
   version of the specification, thanks to Ronan McGuirk

Other changes
-------------

-  The python wrapper now encodes and decodes strings to/from UTF-16 and
   UTF-32 using the surrogatepass error handler. This ensures that
   single UTF-16 surrogate characters are processed correctly by the
   wrapper and don't raise an encoding/decoding error. Thanks to Leonard
   de Ruijter.
-  Metadata keys and values are now case insensitive, thanks to Dave
   Mielke.
-  Remove ``unicodedefs.cti``. It was obsolete and never meant to be
   included by any tables. Instead use the online references as
   mentioned in the documentation now. See also #696.
-  ``lou_checkyaml`` test reporting has been improved, thanks to Bert
   Frees. For example it now has a ``--verbose`` option so that printing
   of expected failures can be enabled.
-  Hyphenation tables have been removed from tables except those needed
   for ``nocross`` rules, thanks to Bert Frees.

   The idea is that the caller (for example ``odt2braille`` or
   ``liblouisutdml``) should be able to decide for themselves which
   hyphenation table to use. The case in which a table contains nocross
   rules is an exception. In this case the hyphenation patterns are a
   real part of the table. Because it is not recommended to append an
   own hyphenation table in this case, a ``#-has-nocross`` metadata
   field was added to indicate that a table contains nocross rules.
-  ``lou_hyphenate`` can now handle more than just words (sequences of
   letters), e.g compound words, thanks to Bert Frees.

Deprecation notice
------------------

-  The ``noUndefinedDots`` mode has been renamed to ``noUndefined``. For
   backwards compatibility ``noUndefinedDots`` is still available in the
   header file and in the Python bindings, as an alias for
   ``noUndefined``.

Backwards incompatible changes
------------------------------

None

Invisible changes
-----------------

-  Internally separate more clearly the display and translation phases.

New, renamed or removed tables
------------------------------

New
~~~

-  grc-international-common.uti
-  grc-international-composed.uti
-  grc-international-decomposed.uti
-  en-nabcc.utb

Renamed
~~~~~~~

-  gr-bb.ctb -&gt; grc-international-en.utb

Removed
~~~~~~~

-  unicodedefs.cti
-  fi-fi.ctb

Next release
============

The next release will be published on December 2 2019 so please keep up
the excellent work and keep those improvements coming.

Share and Enjoy!

– Christian Egli, on behalf of the liblouis developers

Footnotes
=========

.. [1]
   https://github.com/liblouis/liblouis/tree/master/tables

.. [2]
   https://github.com/liblouis/liblouisutdml

.. [3]
   https://github.com/liblouis/liblouis/milestone/21?closed=1
