Skip to content

Commit

Permalink
Indic all: add note to 4.2 about handling Halant,ZWJ when performing …
Browse files Browse the repository at this point in the history
…final position for pre-base matras.
  • Loading branch information
n8willis committed Feb 5, 2021
1 parent 5f7aace commit 674239c
Show file tree
Hide file tree
Showing 10 changed files with 260 additions and 30 deletions.
29 changes: 26 additions & 3 deletions opentype-shaping-bengali.md
Original file line number Diff line number Diff line change
Expand Up @@ -1338,9 +1338,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences, but will stop to the left of the base
Expand All @@ -1349,6 +1348,30 @@ the base consonant or syllable base, and all half forms.

![Pre-base matra reordering](/images/bengali/bengali-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.

#### 4.3: Reph ####

"Reph" must be moved from the beginning of the syllable to its final
Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-devanagari.md
Original file line number Diff line number Diff line change
Expand Up @@ -1252,9 +1252,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences, but will stop to the left of the base
Expand All @@ -1263,6 +1262,30 @@ the base consonant or syllable base, and all half forms.

![Pre-base matra positioning](/images/devanagari/devanagari-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.

#### 4.3: Reph ####

"Reph" must be moved from the beginning of the syllable to its final
Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-gujarati.md
Original file line number Diff line number Diff line change
Expand Up @@ -1241,9 +1241,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences, but will stop to the left of the base
Expand All @@ -1252,6 +1251,30 @@ the base consonant or syllable base, and all half forms.

![Pre-base matra positioning](/images/gujarati/gujarati-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.

#### 4.3: Reph ####

"Reph" must be moved from the beginning of the syllable to its final
Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-gurmukhi.md
Original file line number Diff line number Diff line change
Expand Up @@ -1311,9 +1311,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences, but will stop to the left of the base
Expand All @@ -1322,6 +1321,30 @@ the base consonant or syllable base, and all half forms.

![Pre-base matra positioning](/images/gurmukhi/gurmukhi-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.

#### 4.3: Reph ####

"Reph" must be moved from the beginning of the syllable to its final
Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-kannada.md
Original file line number Diff line number Diff line change
Expand Up @@ -1254,9 +1254,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences, but will stop to the left of the base
Expand All @@ -1267,6 +1266,30 @@ Kannada does not use pre-base matras, so this step will
involve no work when processing `<knd2>` text. It is included here in
order to maintain compatibility with the other Indic scripts.

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.

#### 4.3: Reph ####

"Reph" must be moved from the beginning of the syllable to its final
Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-malayalam.md
Original file line number Diff line number Diff line change
Expand Up @@ -1317,9 +1317,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"_Consonant_,Halant" subsequences and all glyphs that resulted from a
Expand All @@ -1329,6 +1328,30 @@ or ligatures that contain the base consonant or syllable base.

![Matra positioning](/images/malayalam/malayalam-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.

#### 4.3: Reph ####

"Reph" or "Repha" must be moved from the beginning of the syllable to its final
Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-oriya.md
Original file line number Diff line number Diff line change
Expand Up @@ -1303,9 +1303,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences, but will stop to the left of the base
Expand All @@ -1314,6 +1313,30 @@ the base consonant or syllable base, and all half forms.

![Pre-base matra position](/images/oriya/oriya-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.


#### 4.3: Reph ####

Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-sinhala.md
Original file line number Diff line number Diff line change
Expand Up @@ -1100,9 +1100,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences, but will stop to the left of the base
Expand All @@ -1111,6 +1110,30 @@ the base consonant or syllable base, and all half forms.

![Pre-base matra positioning](/images/sinhala/sinhala-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.
> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.

#### 4.3: Reph ####

"Reph" must be moved from the beginning of the syllable to its final
Expand Down
29 changes: 26 additions & 3 deletions opentype-shaping-tamil.md
Original file line number Diff line number Diff line change
Expand Up @@ -1253,9 +1253,8 @@ position is defined as:
- after the last standalone "Halant" glyph that comes after the
matra's starting position and also comes before the main
consonant.
- If a zero-width joiner or a zero-width non-joiner follows this
last standalone "Halant", the final matra position is moved to
after the joiner or non-joiner.
- If a zero-width joiner follows this last standalone "Halant", the
final matra position is moved to after the joiner.

This means that the matra will move to the right of all explicit
"consonant,Halant" subsequences and all glyphs that resulted from a
Expand All @@ -1265,6 +1264,30 @@ or ligatures that contain the base consonant or syllable base.

![Pre-base matra positioning](/images/tamil/tamil-matra-position.png)

> Note: OpenType and Unicode both state that if the syllable includes
> a ZWJ immediately after the last "Halant", then the final matra
> position should be after the ZWJ.
>
> However, there are several test sequences indicating that
> Microsoft's Uniscribe shaping engine did not follow this rule (in,
> at least, Devanagari and Bengali text), and in these circumstances
> Uniscribe instead makes the final matra position before the final
> "Consonant,Halant,ZWJ".
>
> Subsequently, the HarfBuzz shaping engine has also followed the same
> pattern. If other shaping engine implementations prefer to maintain
> maximum compatibility with Uniscribe and HarfBuzz, then they should
> also follow suit.

> Note: The Microsoft script-development specifications for OpenType
> shaping also state that if a zero-width non-joiner follows the last
> standalone "Halant", the final matra position is moved to after the
> non-joiner. However, it is unneccessary to test for this condition,
> because a "Halant,ZWNJ" subsequence is, by definition, the end of a
> syllable. Consequently, a "Halant,ZWNJ" cannot be followed by a
> pre-base dependent vowel.


#### 4.3: Reph ####

"Reph" must be moved from the beginning of the syllable to its final
Expand Down
Loading

0 comments on commit 674239c

Please sign in to comment.