[HarfBuzz] unbreaking mixed-up khmer fonts
Jonathan Kew
jfkthame at googlemail.com
Tue Nov 20 07:22:23 PST 2012
On 20/11/12 09:26, Jonathan Kew wrote:
> On 19/11/12 22:53, Jonathan Kew wrote:
>> On 19/11/12 21:35, Jonathan Kew wrote:
>>
>>> I've put a test page at http://people.mozilla.org/~jkew/kh/test.html
>>> that renders the sequences "ក្រុ ខេ គៀ" with 100+ fonts from several
>>> sources. They're mostly different versions of KhmerOS fonts, but there
>>> are a few others as well.
Added more fonts to that page. More problems....
> I dumped a listing of the features that are present in each of these
> fonts, to try and see how we might distinguish the various kinds of
> brokenness. See attached "kh-features".
Updated kh-features attached, to include the Mondulkiri fonts.
>
> On this basis, I suggest that we add an extra test to the Khmer case in
> hb_ot_shape_complex_categorize, and only switch to the generic shaper
> for 'khmr' script if there is a 'pres' feature in addition to 'liga'.
> This seems to characterise the problematic fonts that use 'liga' to fake
> the split vowels (and hence have problems in the Indic shaper), while
> still allowing Hanuman to work properly.
>
> Attached "khmer-fix" has the suggested patch.
Sadly, that doesn't work for the four Mondulkiri-*.ttf faces. These have
both 'liga' and 'pres', but expect to be handled by a real khmer shaper.
So the "fix" here doesn't work for them. :(
>
> Admittedly, this looks like a very ad-hoc kind of a hack, but it seems
> to work for the fonts I've tested so far. The alternative, I think,
> would be to bring back the hard-coded Ra support for fonts that lack
> 'pref', so that they can still go through the Indic shaper (with 'liga'
> disabled), but that looked like being an ugly process too. That'd
> probably be more like what old engines did, though (I guess).
I'm becoming increasingly convinced we need to bite the bullet and
reintroduce explicit Ra support for fonts that lack 'pref'. Sigh.
-------------- next part --------------
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_31/KhmerOS.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_31/KhmerOSfasthand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_31/KhmerOSfreehand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_31/KhmerOSmc.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_31/KhmerOSmuol.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_31/KhmerOSsys.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOS.ttf
abvf abvm abvs blwf blwm blws ccmp clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOSbattambang.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOSbokor.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOSfasthand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOSfreehand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOSmc.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOSmuol.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_4.0/KhmerOSsys.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS .ttf
abvf abvm abvs blwf blwm blws ccmp clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_battambang.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_bokor.ttf
abvf abvm abvs blwf blwm blws ccmp clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_content.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_fasthand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_freehand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_metalchrieng.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_muol.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_muollight.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_muolpali.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_siemreap.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : All_KhmerOS_5.0/KhmerOS_sys.ttf
abvs blwf clig liga pref pstf : Hanuman/hanuman.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Battambang.ttf
abvf blwf blws clig liga pres : KhUnicode210/Kh-Bokor.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Content.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Dangrek.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Fasthand.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Freehand.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Kangrey.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Koulen.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-KoulenL.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Metal-Chrieng.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Muol-Pali.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Muol.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-Siemreap.ttf
abvf blwf blws clig liga pres psts : KhUnicode210/Kh-System.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOS.ttf
abvf abvm abvs blwf blwm blws ccmp clig mkmk pref pres pstf psts : KhmerOS/KhmerOSbattambang.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSbokor.ttf
abvf abvm abvs blwf blwm blws ccmp clig mkmk pref pres pstf psts : KhmerOS/KhmerOScontent.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSfasthand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSfreehand.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSmetalchrieng.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSmuol.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSmuollight.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSmuolpali.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSsiemreap.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerOS/KhmerOSsys.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMCHANTHA.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMCHRIENG1.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMERKEP.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMERMEF1.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMERMEF2.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMKAMPONGTRACH.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMKAMPOT.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMKOLAB.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMMOOL.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMMOOL1.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMNETTRA.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMOLD.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMVANARA.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMVIRAVUTH.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/KHMWATPHNOM.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Battambang.ttf
abvf blwf blws clig liga pres : KhmerUnicodeFonts/Kh-Bokor.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Content.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Dangrek.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Fasthand.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Freehand.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Kangrey.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Koulen.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-KoulenL.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Metal-Chrieng.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Muol-Pali.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Muol.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-Siemreap.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/Kh-System.ttf
abvf abvs blwf blwm blws clig dist mkmk pref pres pstf psts : KhmerUnicodeFonts/KhUniF1.ttf
abvf abvs blwf blwm blws clig dist mkmk pref pres pstf psts : KhmerUnicodeFonts/KhUniL1.ttf
abvf abvs blwf blwm blws clig dist mkmk pref pres pstf psts : KhmerUnicodeFonts/KhUniN2.ttf
abvf abvs blwf blwm blws clig dist mkmk pref pres pstf psts : KhmerUnicodeFonts/KhUniR1.ttf
abvf abvs blwf blwm blws clig dist mkmk pref pres pstf psts : KhmerUnicodeFonts/KhUniR2.ttf
abvf abvs blwf blwm blws clig dist mkmk pref pres pstf psts : KhmerUnicodeFonts/KhUniSerif.ttf
blwf blws clig liga pres : KhmerUnicodeFonts/KhmerMuol.ttf
abvf abvm abvs blwf blwm blws clig mkmk pref pres pstf psts : KhmerUnicodeFonts/KunKhmer.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/NiDAAngkor.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/NiDABayon.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/NiDAChenla.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/NiDAFunan.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/NiDAKhmerEmpire.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/NiDASowanaphum.ttf
abvf blwf blws clig liga pres psts : KhmerUnicodeFonts/NiDATaprom.ttf
: KhmerUnicodeFonts/Sankor.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts rlig : KhmerUnicodeFonts/kMon40hV2E3s.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts rlig zz01 zz01 zz02 zz02 zz03 zz03 zz04 zz04 zz05 zz05 zz06 zz06 zz07 zz07 zz08 zz08 zz09 zz09 zz10 zz10 zz11 zz11 zz12 zz12 zz13 zz13 zz14 zz14 zz15 zz15 zz16 zz16 zz17 zz17 zz18 zz18 zz19 zz19 zz20 zz20 zz21 zz21 zz22 zz22 zz23 zz23 zz24 zz24 zz25 zz25 zz26 zz26 zz27 zz27 zz28 zz28 zz29 zz29 zz30 zz30 zz31 zz31 zz32 zz32 zz33 zz33 zz34 zz34 zz35 zz35 zz36 zz36 zz37 zz37 zz38 zz38 zz39 zz40 zz41 zz42 zz43 zz44 zz45 zz46 zz47 zz48 zz49 zz50 zz51 zz52 zz53 : KhmerUnicodeFonts/kMons40V2E3.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts rlig : KhmerUnicodeFonts/kMons40dicV2E3s.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts rlig : KhmerUnicodeFonts/kMons40spcV2E3s.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts rlig : KhmerUnicodeFonts/kMons60bV2E3s.ttf
abvf abvm abvs blwf blwm blws blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/kMons80V1E2s.ttf
abvf abvm abvs blwf blwm blws blws ccmp clig dist pref pres pstf psts : KhmerUnicodeFonts/kMons99V1E2s.ttf
abvf abvm abvs blwf blwm blws blws ccmp clig pref pres pstf psts : KhmerUnicodeFonts/mond40uhgs.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56Bu.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56MO.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56dc.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56di.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56do.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56hi.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56i.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo5V56xs.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo8V56i.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist pref pres pstf psts : Mondulkiri/Mo9V55.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist liga liga mark mkmk pref pres pstf psts ss01 ss01 ss02 ss03 ss04 ss05 ss06 ss07 ss08 ss09 ss18 ss18 ss19 ss20 ss20 : Mondulkiri/Mondulkiri-B.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist liga liga mark mkmk pref pres pstf psts ss01 ss01 ss02 ss03 ss04 ss05 ss06 ss07 ss08 ss09 ss18 ss18 ss19 ss20 ss20 : Mondulkiri/Mondulkiri-BI.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist liga liga mark mkmk pref pres pstf psts ss01 ss01 ss02 ss03 ss04 ss05 ss06 ss07 ss08 ss09 ss18 ss18 ss19 ss20 ss20 : Mondulkiri/Mondulkiri-I.ttf
abvf abvm abvs blwf blwm blws ccmp clig dist liga liga mark mkmk pref pres pstf psts ss01 ss01 ss02 ss03 ss04 ss05 ss06 ss07 ss08 ss09 ss18 ss18 ss19 ss20 ss20 : Mondulkiri/Mondulkiri-R.ttf
abvf abvm abvs blwf blwm blws clig pref pres pstf psts : Mondulkiri/RataV53.ttf
More information about the HarfBuzz
mailing list