Wednesday, 16 November 2005
The main new feature of the latest version of BabelPad that I released last month is a "glyph mode" rendering option that causes complex scripts to be rendered as individual spacing glyphs, with no shaping or ligature behaviour. BabelPad has always utilised Microsoft's Uniscribe rendering engine (usp10.dll) to render text, and on the whole, if you have a recent version of Uniscribe installed on your system, this works very well for most scripts. However, I have had a number of requests to be able to disable complex script rendering, and this has now been implemented as an option that can be turned on and off at the click of the mouse (by means of the u" button on the main toolbar). I think this is a really great feature, as it allows you to visually decompose text into its constituent elements without altering the actual textual content.
The screen shot below shows some words in various complex scripts that have been decomposed into Normalization Form NFD ("Convert : Normalization Form : To NFD" from the BabelPad menu). By default the text is rendered using Uniscribe (in this case version 1.473.4067.15; but note that earlier versions may not render Tibetan and/or Mongolian correctly), and so various forms of glyph substitution and positioning are applied, depending upon the requirements of the script and the capabilities of the font (in this case XTashi for Tibetan and Code2000 for everything else).
When "glyph mode" is enabled the display immediately changes to that shown below, with each character displayed as a single, spacing glyph. Note how RTL text such as Arabic is now displayed in logical order from left to right.
This mode entirely bypasses Uniscribe, and so no shaping, positioning or glyph substitution is carried out. However, there is an option ("Options : Rendering Options : Use Uniscribe" from the menu) to render the individual glyphs using Uniscribe. When this option is applied the result is as below.
There is still no shaping behaviour, but now Uniscribe does make some cosmetic changes to the output glyphs, principally the addition of a dotted circle to some characters that normally only occur in combining sequences. The other change, which is not illustrated here, is that Uniscribe does not render glyphs for control characters such as U+206A [INHIBIT SYMMETRIC SWAPPING]. Some fonts (e.g. Code2000) provide glyphs for such characters, and although they are usually filtered out by Uniscribe, they will be displayed by BabelPad when in "glyph mode" and Uniscribe is not enabled (they will also be rendered when in normal mode and "Options : Rendering Options : Display Glyphs for Control Characters" is selected).
Index of BabelStone Blog Posts