Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Complex text layout
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Neighbour-dependent grapheme positioning}} {{Self-reference|For assistance with enabling complex text layout on your computer, see [[Help:Multilingual support]].}} {{More footnotes|date=July 2013}} [[File:JanaSanskritSans ddhrya.svg|thumb|The [[Devanagari]] ''{{IAST|ddhrya}}''-ligature, as displayed in the [https://web.archive.org/web/20110716160603/http://tdil.mit.gov.in/download/janasanskrit.htm JanaSanskritSans] font, which should be invoked by the layout engine to render the sequence द + ् + ध + ् + र + ् + य = द्ध्र्य.]] [[File:Arabicrender.png|thumb|250px|The word {{lang|ar|العربية}} ''{{Transliteration|ar|al-arabiyyah}}'', "the Arabic [language]" in Arabic, in successive stages of rendering. The first line shows the letters in left-to-right order and unjoined, as they might appear in an application without complex text layout. In the second line, bidirectional display has been applied, and in the third the [[glyph]]-shaping mechanism has rendered the letters according to context.]] '''Complex text layout''' ('''CTL''') or '''complex text rendering''' is the [[typesetting]] of [[writing system]]s in which the shape or positioning of a [[grapheme]] depends on its relation to other graphemes. The term is used in the field of software [[internationalization and localization|internationalization]], where each grapheme is a [[character (computing)|character]]. Scripts which require CTL for proper display may be known as '''complex scripts'''. Examples include the [[Arabic alphabet]] and scripts of the [[Brahmic scripts|Brahmic family]], such as [[Devanagari]], [[Khmer script]] or the [[Thai alphabet]]. Many scripts do not require CTL. For instance, the [[Latin alphabet]] or [[Chinese character]]s can be typeset by simply displaying each character one after another in straight rows or columns. However, even these scripts have alternate forms or optional features (such as [[cursive]] writing) which require CTL to produce on computers. ==Characteristics requiring CTL== The main characteristics of CTL complexity are: * [[Bi-directional text]], where characters may be written from either right-to-left or left-to-right direction. * [[Context-sensitive shaping]] and [[ligature (typography)|ligature]]s, where a character may change its shape, dependent on its location and/or the surrounding characters. For example, a character in [[Arabic script]] can have as many as four different shape-forms, depending on context. * Ordering, where the displayed order of the characters is not the same as the logical order. For example, in Devanagari, which is written from left to right, the grapheme for "short i" appears to the left of ("before") the consonant that it follows: in {{lang|sa|कि}} ''ki'', the {{lang|sa|ि}} ''-i'' should render on the left, its bow reaching until above the {{lang|sa|क}} ''k-'' to the right. Not all occurrences of these characteristics require CTL. For example, the [[Greek alphabet]] has context-sensitive shaping of the letter [[sigma]], which appears as ς at the end of a word and σ elsewhere. However, these two forms are normally stored as different characters; for instance, [[Unicode]] has both {{unichar|03C2|GREEK SMALL LETTER FINAL SIGMA}} and {{unichar|03C3|GREEK SMALL LETTER SIGMA}}, and does not treat them as [[Unicode equivalence|equivalent]]. For collation and comparison purposes, software should consider the string "δῖος Ἀχιλλεύς" equivalent to "δῖοσ Ἀχιλλεύσ",<ref>{{cite web|url = https://www.unicode.org/faq/greek.html#5|title = FAQ - Greek Language & Script|accessdate = 2013-09-13|publisher = Unicode Consortium|date = 2012-12-03|quote = It is easier to simply equate the two sigma codes for operations which are concerned with word content, for example.}}</ref> but for typesetting purposes they are distinct and CTL is not required to choose the correct form. ==Implementations== <!-- Lists in this section are in alphabetical order to avoid POV issues. --> Most text-rendering software that is capable of CTL will include information about specific scripts, and so will be able to render them correctly without [[computer font|font files]] needing to supply instructions on how to lay out characters. Such software is usually provided in a [[library (computing)|library]]; examples include: * [[Core Text]] for [[macOS]] * [[Uniscribe]] (with Universal Shaping Engine) and [[DirectWrite]] for [[Microsoft Windows]] * [[HarfBuzz]], a [[cross-platform]] library * [[Pango]], a cross-platform library which nowadays incorporates [[HarfBuzz]] However, such software is unable to properly render any script for which it lacks instructions, which can include many minority scripts. The alternative approach is to include the rendering instructions in the font file itself. Rendering software still needs to be capable of reading and following the instructions, but this is relatively simple. Examples of this latter approach include [[Apple Advanced Typography]] (AAT) and [[Graphite (SIL)|Graphite]]. Both of these names encompass both the instruction format and the software supporting it; AAT is included on [[Apple Inc.|Apple]] [[operating system]]s, while Graphite is available for [[Microsoft Windows]] and [[Linux]]-based systems. The [[OpenType]] format is primarily intended for systems using the first approach (layout knowledge in the renderer, not the font), but it has a few features that assist with CTL, such as contextual ligatures. AAT and Graphite instructions can be embedded in OpenType font files. ==See also== * [[Typography]] * [[Unicode]] * Writing systems which require complex text layout: ** [[Arabic alphabet]] ** Most of the [[Brahmic scripts|Brahmic]] family of scripts ** [[N'Ko script]] ** [[Tengwar]] (diacritics and numbers) ==References== {{Reflist}} ==External links== * [http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=CmplxRndExamples Examples of complex rendering] — [[SIL international]]'s examples of complex writing systems around the world * [http://www.opengroup.org/desktop/ctl/ Complex Text Layout] — [[The Open Group]]'s Desktop Technologies * [https://web.archive.org/web/20050206102353/http://www.mozilla.org/projects/ctl/ Supporting Indic Scripts in Mozilla] — also other CTL scripts * [https://web.archive.org/web/20121020041740/http://sila.mozdev.org/ Project SILA] — [[Graphite (SIL)|Graphite]] and [[Mozilla]] integration project * [http://developers.sun.com/techtopics/global/products_platforms/solaris/reference/whitepapers/#ctl CTL Architecture in Solaris] — Solaris Globalization Whitepapers * [http://www.microsoft.com/globaldev/DrIntl/faqs/Complex.mspx Complex Scripts] — Microsoft Global Development and Computing Portal * [http://linux.thai.net/~thep/ Theppitak's Homepage] — information about Thai language processing * [http://www.freedesktop.org/wiki/Software/HarfBuzz HarfBuzz's page] at [[Freedesktop.org]] * [http://www.d-type.com/unicode_text/ D-Type Unicode Text Module — Portable software library for complex text] * [https://github.com/salshaaban/BidiRenderer BidiRenderer] — An application that illustrates the shaping and layout of complex text in bidirectional paragraphs using FriBidi, FreeType, and HarfBuzz * [https://github.com/Tehreer/Tehreer-Android Tehreer-Android] — A library that gives full control over text related technologies such as bidirectional algorithm, open type shaping, text typesetting and text rendering *[https://github.com/Tehreer/Tehreer-Cocoa Tehreer-Cocoa] — Standalone font/text engine for iOS [[Category:Typesetting]] [[Category:Indic computing]] [[Category:Natural language and computing]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite web
(
edit
)
Template:Error
(
edit
)
Template:Hatnote
(
edit
)
Template:IAST
(
edit
)
Template:Lang
(
edit
)
Template:More footnotes
(
edit
)
Template:Reflist
(
edit
)
Template:Self-reference
(
edit
)
Template:Short description
(
edit
)
Template:Transliteration
(
edit
)
Template:Unichar
(
edit
)