Fri 14 Jul 2017 11:33:39 AM UTC, comment #10:
Hi David,
I haven't tried Pango in a while. I think of it as the shaping engine of older Linux, which I still intend to support in the next release (but it should probably be dropped after that.)
If recent versions of Pango behave like Harfbuzz, it should be fine.
I will look into the issue you mentioned.
In the mean time, I did a survey of the questionable tables in FreeSerif (there are others in FreeSans).
The intent is to make tests that I can run on the different systems, to see of the fragile things are broken,
and to produce some sort of document explaining how it all works.
But I may have turned up some further problems.
This is a really complicted thing, besides its intrinsic complications:
- the OpenType "shaping engine" specs changed between Windows XP and Windows 7. Some tables were added, others tragically changed their expected input order.
- The quality of the OpenType documentation varies a lot from one script to another.
It has gotten better overall, but there are still big ommissions.
- Harfbuzz was meant to emulate Windows Uniscribe, but it isn't perfect.
- there were political problems -- nevermind.
- Most of the scripts were already in FreeFont, and were tested and working right in the 2012 release for XP and Pango.
A few others were added since. All of them have had their tables re-worked for Harfbuzz, but I don't have good records of how well each was tested for Pango.
- There has also been a gradual degradation -- some of these I haven't deliberately touched in years.
===============================================================
Tables in FreeSerif:
The 'akhn' 'blwf' 'pstf' tags reverse their canonical input order between
the old and new shaping rules.
The 'half' tag is spottily documented. Half forms are important in some
scripts, non-existent in others, and thought of differently in a few.
The 'pref' tag is very spottily documented. Only a few scripts
really use pre-base consonant forms as such -- and there it's unclear
how they're supposed to work.
The 'cjct' and 'rkrf' tags were introduced in the new shaping rules.
Both are really nice to have, but it means to support the old rules you
have to include othr tables, which are unfortunately clumsier.
Bengali
-------
Bengali doesn't have rakar forms as such.
The docs for bng2 mention a 'pref' tag... but it isn't used. What was it for?
'blwf' makes baphala, raphala, and laphala forms from ba, ra, la and asimara
bng2: hasanta + cons
beng: cons + hasanta
'pstf' makes yaphala forms
beng: ya + hasanta
bng2: hasanta + ya
!!! note these tables are in order beng bng2 !!!
'cjct' various conjuncts
!!! this table only exists in bng2 yet it has a beng script tag !!!
Malayalam
---------
Harfbuzz and Uniscribe behave differently regarding language tags in Malayalam.
The very use of language tags became politically controversial, and caused
practical problems in the development of this range.
The 'cjct' and 'rkrf' tags are not used and not mentioned in docs.
'akhn' is used to make lhlh and vhvh conjuncts in both versions,
but the set is very different.
mlym: cons + cons + candrakala
where cons is only lla or va
mlm2: cons + candrakala + cons
for some consonants that have doubled forms plus a few others.
A separate table takes care of chillu forms.
(where are these dealt with for mlym?)
'blwf' phala forms for la, lla
mlm2: candrakala + cons
mlym,mlm2: cons + candrakala (using contextual chain)
!!! This doesn't make sense, either.
both of these tables are set for both mlym,mlm2
maybe the contextual chain resolves the conflict? !!!
'pstf' makes va, ya, ra forms
mlm2,mlym: candrakala + cons
mlym: cons + candrakala (contepxtual chain)
mlm2,mlym: cons + candrakala ( ra only, contextual chain)
!!! this too is questionable !!!
Sinhala
-------
There is only the new tag 'sinh' for shaping.
Doesn't use 'blwf' 'cjct', but 'rkrf' is used.
My notes indicate that I knew little of the standards for this language
when I was working on it -- I think the OT page was missing or skeletal.
Devanagari
----------
'akhn' ja-nya and ka-ssa akhands. Also eyelash-ra with ZWNJ
dev2,deva: cons + virama + cons
dev2,deva: cons + virama + cons
!!! I wonder if this isn't broken. !!!
'rkrf' rakar forms for all consonants
dev2: cons + virama + ra
Q: how does deva form rakar forms?
'blwf' rakaar
deva,dev2: virama + ra
plus similar vocalic forms for Sanskrit
deva: ra + virama
'cjct'
dev2 only, forms many simple conjuncts, many for Sanskrit
Q: how does deva do this?
Oriya
-----
There was no OT documentation for the orya script tag.
The ory2 docs mention half tables repeatedly, but gives no examples.
'akhn' two lookups, both
ory2,orya:
ory2,orya:
!!! Oh dear this is really weird.
Both tables take one cons + holonto + cons
and one cons + cons + holonto!!!
They are at least labelled wrong!
'blwf'
ory2: holonto + cons
'cjct'
ory2: cons + holonto + cons
Q: does it work for orya?
Tamil
-----
There was no OT documentation for the taml script tag.
The tam2 OT doc explicitly says 'half' forms are not used.
'akhn' ka-ssa ahand
taml: cons + cons + pulli
tam2: cons + pulli + cons
'pstf' only replaces some vowel signs with post-base forms
taml,tam2: single substitution
Gurmukhi
--------
The docs for guru were skeletal, mention blwf, pstf, and half.
The guru and gur2 docs mention half tables repeatedly, but give no examples.
But 'half' not used -- Gurmukhi really has nothing like this.
'pstf'
gur2,guru: ya + virama
gur2: virama + ya
'blwf' below-base forms of ha,ra, va
gur2: cons + virama
gur2: virama + cons
!!! something wrong here !!!
Gujarati
--------
The gujr and gjr2 docs mention half tables repeatedly, but give no examples.
'akhn' ja-nya ka-ssa
gjr2,gujr: cons + cons + virama
gjr2,gujr: cons + virama + cons
'blwf'
gjr2,gujr: ra + virama
gjr2: virama + ra
'half' used
Kannada
-------
No OT docs for knda.
I marked blwf as questionable regarding docs.
'akhn' ja-nya ka-ssa
knd2,knda: cons + cons + halanta
knd2: cons + halanta + cons
'blwf' three tables
knda: cons + halanta
knd2: a decomposition for jnya akahan!
knd2,knda: contextual chain operating on
halanta + cons
nukta + cons
|