Developing fonts > Specifications

Developing OpenType Fonts
for Bengali Script (3 of 3):
Features

The features listed below have been defined to create the basic forms for the languages that are supported on Bengali systems. Regardless of the model an application chooses for supporting layout of complex scripts, the shaping engine requires a fixed order for executing features within a run of text to consistently obtain the proper basic form.

The features of the basic shaping forms are applied one at a time to the cluster or portion of the cluster. The result impacts the analysis in terms of the conjoining behavior and final reordering. The features of the presentation forms are applied next, to the entire cluster simultaneously. Mandatory features must always be applied; the discretionary presentation-forms features listed should be applied by default, but can be suppressed by a client (normally at the discretion of the user).

The order of the lookups within each feature is also very important. For more information on lookups and defining features in OpenType fonts, see the Encoding section of the OpenType Font Development document.

OpenType features used for Bengali scripts, applied in the following order:

Feature

Feature function

Layout operation

Localized forms:

locl

Localization form substitution

GSUB

Basic shaping forms:

nukt

Nukta form substitution

GSUB

akhn

Akhand ligature substitution

GSUB

rphf

Reph form substitution

GSUB

blwf

Below-base form substitution

GSUB

half

Half-form substitution

GSUB

pstf

Post-base form substitution

GSUB

vatu

Vattu variants

GSUB

cjct

Conjunct form substitution

GSUB

Mandatory presentation forms:

init

Initial form

GSUB

pres

Pre-base substitution

GSUB

abvs

Above-base substitution

GSUB

blws

Below-base substitution

GSUB

psts

Post-base substitution

GSUB

haln

Halant form substitution

GSUB

Discretionary presentation forms:

calt

Contextual alternates

GSUB

Positioning features:

kern

Kerning

GPOS

dist

Distances

GPOS

abvm

Above-base mark positioning

GPOS

blwm

Below-base mark positioning

GPOS

[GSUB = glyph substitution, GPOS = glyph positioning]

Feature examples

Many of the registered features described and illustrated in this document are based on the Microsoft OpenType font Vrinda. Vrinda contains layout information and glyphs to support all of the required features for the Bengali script and language systems supported.

The illustrations in the following examples show the result of that particular feature being applied. Features must be written to match glyph sequences after re-ordering has occurred. Note that the input context for a feature may be the result of a previous feature having already been applied.

Localized forms

Feature Tag: "locl"

This feature is used in association with OpenType language system tags to trigger lookups that will select alternate glyphs needed for language-specific typographic conventions. The ‘locl’ should not be used in association with the default language system, but only used with other language system tags. See the Appendix of this document for language system tags associated with the Bengali script.

Basic shaping forms

Nukta

Feature Tag: "nukt"

The nukta alters the way a preceding consonant or vowel is pronounced. The most common nukta forms have been defined as separate characters in Unicode with their own code points. All consonants, as well as akhand forms should have an associated nukta form.

Note - Rather than using substitution, nukta forms can also be created by positioning the nukta as a below-base mark on the base glyph using the ‘blwm’ positioning feature.

The input context for the nukt feature always consists of the full form of the consonant. The half form of nukta consonants will be substituted using the half feature.

Nukta feature used to substitute pre-composed glyph (Yya) for Ya + Nukta:

Akhand

Feature Tag: "akhn"

An akhand is a required consonant ligatures that may appear anywhere in the syllable, and may or may not involve the base glyph. Akhand ligatures have the highest priority and are formed first; some languages include them in their alphabets.

The input context for the akhand feature always consists of the full form of the consonant. The half forms of Akhand ligatures will be called later in the half feature.

Because the akhand feature is applied early in the sequence of features and is applied over the entire cluster, it can also be used to create certain forms that must take priority in particular contexts over forms that would be created during subsequent feature application.

Ka + halant + Ssa is substituted with the KaSsa ligature:

Ja + halant + Nya is substituted with the JaNya Ligature:

Reph

Feature Tag: "rphf"

Applying this feature substitutes the Reph glyph. If the first consonant of the cluster consists of the full form of Ra + Halant, this feature substitutes the combining-mark form of Reph. In addition, the position of the Reph glyph is adjusted with the ‘abvm’ GPOS feature.

The input context for the Reph feature always consists of the full form of Ra + Halant.

Example 1- Reph feature substitutes the mark glyph form of Ra. After final reordering, positioning is adjusted in the ‘abvm’ GPOS feature:

Example 2 - Reph feature applied with multiple consonants. Note- reph is re-ordered to position on the 1st main consonant, not the half-form:

Below form of consonant

Feature Tag: "blwf"

This feature substitutes the below-base forms of Consonants like the Ra + Ba  in Bengali, when they do not form a ligature with the preceding consonant.

Halant + Ra (preceded by a consonant which does not form a ligature) substitutes a below-base Ra:

Halant + Ba (preceded by a consonant which does not form a ligature) substitutes a below-base Ba:

Half form of consonant

Feature Tag: "half"

Applying this feature substitutes half forms - forms of consonants used in the pre-base position. Consonants that have a half form should be listed in the ‘half’ feature. Bengali has distinctly shaped half forms for most of the consonants. If a consonant does not have a distinct shape for the half form and does not form any ligature, it will be displayed with an explicit Virama (same shape as the halant form).

Note – the result of listing a consonant in the half feature (whether it has a true half form or not) will affect the re-ordering (and positioning) of the reph and pre-pended matras. See illustration in the Introduction section of this document.

This feature is applied to all consonants preceding the ‘main’ consonant.

Half feature substitutes half form of Ka:

Half feature applied to multiple consonants:

Post-base form of consonant

Feature Tag: "pstf"

Applying this feature substitutes post-base forms, such as the 'Bengali Ya'.

The post-base form of the Ya is substituted, when it is the last consonant in a syllable:

Vattu variants

Feature Tag: "vatu"

The ‘vatu’ feature can be used to substitute a ligature of a full (or half) form consonant plus a below-base vattu (Bengali ra-phala). The ‘blws’ can also be used for these ligature substitutions.

The input context for the ‘vatu’ feature consists of a consonant (in full or half form) + vattu glyph.

The ‘vatu’ feature used to substitute a ligature of Ka + below-base Ra:

The ‘vatu’ feature used to substitute a ligature of Tta + below-base Ra:

Conjunct forms

Feature Tag: "cjct"

Apply feature 'cjct' to substitute conjunct forms where the first consonant in the consonant-cluster pair does not have a half form. This feature allows for control over re-ordering ‎of reph and pre-pended matras in case of consonants that do not take half forms yet do form ‎conjunct ligatures in combination with certain following consonants.

The ‘cjct’ feature used to substitute a ligature for Gha + Na:

Presentation forms

After the glyphs have been reordered, the presentation lookups are applied to provide the best typographic rendering of the text. The features of the presentation forms are applied to the entire cluster simultaneously, executing lookups within each feature in the order that they are specified in the font.

The pres, abvs, blws, psts and haln features are all mandatory for software implementations: they are required for correct script behaviour and none should ever be treated as discretionary. Because of this and because they are all applied simultaneously over entire clusters, they are not functionally different: a set of lookups could be divided between these features or grouped together under one of them with no difference in effect. These multiple features are provided, however, as an aid to the font developer for organizing lookups based on the combinations of glyphs they apply to. There are no specific requirements on how each should be used; the examples provided below illustrate typical usage, however.

Initial form

Feature Tag: "init"

This feature is used to substitute initial forms of the vowels E and Ai, in Bengali scripts. The initial form is a glyph variant that does not have a connecting bar on the leading side of the glyph.

All initial forms must be based on an input context consisting of the full form of consonants.
Initial feature applied:

Pre-base substitutions

Feature Tag: "pres"

This feature is used to substitute pre-base consonant conjuncts made with half forms, the type most common in Bengali.  The resulting conjunct can be in full or half form.

This feature is also used to select typographically correct forms of the I-Matra. For example, a font can have several versions of the I-Matra to be used in context with different consonant bases or clusters. In addition the ‘pres’ feature can contain pre-composed ligatures of the I-matra with certain bases.

Example 1 - half Ka + full Ka is substituted by the KaKa conjunct:

Example 2 - half Ka + full Ma is substituted by the KaMa conjunct:

Example 3 - half La + full Ka is substituted by the LaKa conjunct:

Example 4 - half Ka + half Ssa + full Nna is substituted by the KaSsaNna ligature:

Example 5 - The ‘pres’ feature is also used to substitute ligatures with the I-Matra:

Above-base substitutions

Feature Tag: "abvs"

This feature is used for substitutions involving above-base marks. Such substitutions might be used to select contextual forms of marks, to create mark-mark ligatures, or to create mark-base ligatures. Specific context-dependent forms or below-base consonants are handled by this lookup as well.

The ‘abvs’ feature used to substitute a ligature for the reph + matre I combination:

The ‘abvs’ feature used to substitute a ligature  for the reph + candrabindu glyphs:

Below-base substitutions

Feature Tag: "blws"

This feature is used for glyph substitutions involving below-base marks or consonants. Such substitutions can be used to create conjuncts of base glyphs with below-base consonants, below mark ligatures or below mark-base ligatures. Specific context-dependent forms are handled by this lookup as well.

Example 1- ‘blws’ substitution for base + below–base conjuncts:

Example 2- In the presence of below-base consonants, the below-base matra can change shape in the ligature:

Example 3- ‘blws’ substitution when conjunct base + matra form a new ligature:

Post-base substitutions

Feature Tag: "psts"

This feature is used to substitute post-base consonants or matras. Such substitutions can be used to create conjuncts of base glyphs with post-base consonants or post-base matra ligatures. It can also be used to specify contextual alternates of post-base forms.

Example 1- ‘psts’ used to substitute conjunct of base and post-base matra:

Example 2- ‘psts’ used to substitute conjunct of base and post-base matra:

Halant form of consonants

Feature Tag: "haln"

This feature is used to substitute a pre-composed halant form of a base (or conjunct base) glyph in syllables ending with a halant. (Rather than using substitution, halant forms can also be created by positioning the halant as a below-base mark on the base glyph using the ‘blwm’ positioning feature.)

This feature is applied only on the base glyph if the syllable ends with a halant, or in the case of non-final consonants that do not take a half form and do not form a conjunct ligature with the following consonant.

Example 1 - ‘haln’ feature used to substitute halant form of base glyph:

Example 2 - ‘haln’ feature used to substitute halant form of conjunct base glyph:

Contextual Alternates

Feature Tag: "calt"

Unlike the previous presentation lookups, the ‘calt’ feature is optional and is used to substitute discretionary contextual alternates. It is important to note that an application may allow users to turn off this feature, therefore should not be used for any obligatory Bengali typography.

Positioning features

Distances

Feature Tag: "dist"

This feature covers positioning lookups that adjust distances between glyphs, such as kerning between pre- and post-base elements and the base glyph. Note; the feature ‘dist’ can be used in the same way as the ‘kern’ feature. The advantage of using the ‘dist’ feature is that it does not rely on the application to enable kerning.

Above-base marks

Feature Tag: "abvm"

This feature positions all above-base marks on the base glyph or the post-base matra. The best method for encoding this feature in an OpenType font is to use a chaining context positioning lookup that triggers mark-to-base and mark-to-mark attachments for above-base marks.

The ‘abvm’ lookup in MS Volt using ‘Anchor Attachment’ for adjusting positions of above-marks over bases:

A contextual ‘abvm’ lookup in MS Volt using ‘Single Adjustment’ for positioning candrabindu over certain bases:

Below-base marks

Feature Tag: "blwm"

This feature positions all below-base marks on the base glyph. The best method for encoding this feature in an OpenType font is to use a chaining context positioning lookup that triggers mark-to-base and mark-to-mark attachments for below-base marks.

The ‘blwm’ lookup in MS Volt using ‘Anchor Attachment’ for adjusting positions of below-marks with bases:

Examples of Bengali syllables

Complex Bengali syllable formation is possible using the wide range of features available in OpenType. The following examples show how the shaping engine applies the OpenType features, one at a time to the input string. These combinations do not necessarily represent actual syllables or words, but are meant to illustrate the various OpenType features in a Bengali font.

Example #1:

Example #2:

introduction | shaping engine | features | appendices