From 62fa7cd1ccff4d4448ef84f9cc146464672636aa Mon Sep 17 00:00:00 2001 From: David Corbett Date: Fri, 13 Apr 2018 18:45:37 -0400 Subject: [PATCH] Order Chakma split vowels in accordance with NFC Fixes #1105. --- src/gen-use-table.py | 10 +++++++++ src/hb-ot-shape-complex-use-table.cc | 4 ++-- src/hb-ot-shape-complex-use.cc | 21 +----------------- ...670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf | Bin 0 -> 1344 bytes test/shaping/data/in-house/tests/use.tests | 5 +++++ 5 files changed, 18 insertions(+), 22 deletions(-) create mode 100644 test/shaping/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf diff --git a/src/gen-use-table.py b/src/gen-use-table.py index e7c621ca..c742ebac 100755 --- a/src/gen-use-table.py +++ b/src/gen-use-table.py @@ -328,6 +328,9 @@ def map_to_use(data): # TODO: https://github.com/harfbuzz/harfbuzz/pull/626 if U == 0xA8B4: UISC = Consonant_Medial + # TODO: https://github.com/harfbuzz/harfbuzz/issues/1105 + if U == 0x11134: UISC = Gemination_Mark + values = [k for k,v in items if v(U,UISC,UGC)] assert len(values) == 1, "%s %s %s %s" % (hex(U), UISC, UGC, values) USE = values[0] @@ -356,6 +359,13 @@ def map_to_use(data): # https://github.com/roozbehp/unicode-data/issues/8 if U == 0x0A51: UIPC = Bottom + # TODO: https://github.com/harfbuzz/harfbuzz/pull/982 + if UBlock == 'Chakma' and is_VOWEL (U, UISC, UGC): + if UIPC == Top: + UIPC = Bottom + elif UIPC == Bottom: + UIPC = Top + assert (UIPC in [Not_Applicable, Visual_Order_Left] or USE in use_positions), "%s %s %s %s %s" % (hex(U), UIPC, USE, UISC, UGC) diff --git a/src/hb-ot-shape-complex-use-table.cc b/src/hb-ot-shape-complex-use-table.cc index 25f7bf42..9c796f05 100644 --- a/src/hb-ot-shape-complex-use-table.cc +++ b/src/hb-ot-shape-complex-use-table.cc @@ -510,8 +510,8 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = { /* 11100 */ VMAbv, VMAbv, VMAbv, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11110 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11120 */ B, B, B, B, B, B, B, VAbv, VAbv, VAbv, VBlw, VBlw, VPre, VAbv, VAbv, VAbv, - /* 11130 */ VAbv, VBlw, VBlw, H, VAbv, O, B, B, B, B, B, B, B, B, B, B, + /* 11120 */ B, B, B, B, B, B, B, VBlw, VBlw, VBlw, VAbv, VAbv, VPre, VBlw, VAbv, VAbv, + /* 11130 */ VBlw, VAbv, VAbv, H, CMAbv, O, B, B, B, B, B, B, B, B, B, B, /* 11140 */ O, O, O, O, B, VPst, VPst, O, O, O, O, O, O, O, O, O, /* Mahajani */ diff --git a/src/hb-ot-shape-complex-use.cc b/src/hb-ot-shape-complex-use.cc index 66b95711..f8e86c9d 100644 --- a/src/hb-ot-shape-complex-use.cc +++ b/src/hb-ot-shape-complex-use.cc @@ -560,25 +560,6 @@ reorder (const hb_ot_shape_plan_t *plan, HB_BUFFER_DEALLOCATE_VAR (buffer, use_category); } -static bool -decompose_use (const hb_ot_shape_normalize_context_t *c, - hb_codepoint_t ab, - hb_codepoint_t *a, - hb_codepoint_t *b) -{ - switch (ab) - { - /* Chakma: - * Special case where the Unicode decomp gives matras in the wrong order - * for cluster validation. - */ - case 0x1112Eu : *a = 0x11127u; *b= 0x11131u; return true; - case 0x1112Fu : *a = 0x11127u; *b= 0x11132u; return true; - } - - return (bool) c->unicode->decompose (ab, a, b); -} - static bool compose_use (const hb_ot_shape_normalize_context_t *c, hb_codepoint_t a, @@ -602,7 +583,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_use = nullptr, /* preprocess_text */ nullptr, /* postprocess_glyphs */ HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, - decompose_use, + nullptr, /* decompose */ compose_use, setup_masks_use, nullptr, /* disable_otl */ diff --git a/test/shaping/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf b/test/shaping/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a1fef49039ec313fddd166cb2295ca65b80fdc58 GIT binary patch literal 1344 zcmZ`(O=whC6#nj=zeH1$H+@Wgka0-HWYJccd6OA2g3_5JqJmNb6%tIwB$KEa9n^>h z30b%hLCiu5V#q>fl|`UZD1zW#vk}uSN(&YWEp#J-BBJm0yXVbFH1s~s`ObIGJ?EZ# z?wx@G(1Zm9aA2^|KY(^L0HFkD<42G0PA?6Q{S5?ekdKX*ixqUotK|QXFHIFMRy>c9 z2(^(nOwC*^ecSVL7wt7bw@ptLC%%|_Kg#ts=d#nB2vpQb@(J?fbotU1edoh-@+0K2 zne*dCeMsLU50bZ(i&rYJQDm;a$P?#^oqSK_{KZS}#ugXJACV9995$M@ ztrLi#8LilX9_&UA`!R^4_#UhTnQS^{hdaA#7_MRTGfdWau!jG~V>N$0pPGnvM57%G zmeDt(9hTMcLhOvpyJrQ|9r3tdePmo+^F0*TE#LFhq>1*4ZWZm`5>ST?SX+gRm~EnB zTcct(i5?bjPBfc{oq&3-?xPVF5Vd1YI-BY4>a6$R)ac&6(wTjIKg>UvpMRk2Yo+nI zQ*TzU&aKWd&|Oz=y@Fmc_pNeH#9hySlUHx6RbH1{^|IbE@tHdizqVtark8-PTer8j zH*Xts1{`O=M1Qy+Z*PmY9xSBNg%q@($@_z^u!Z-!DaS7x<4YSuS>cd+=DyMmQejuG z!rbzrJ}qBKZDY zw>#uz`O;R%8`xPH>M}ZY7i=w^cGul1zahGqORsoYjOZ@IwY{l^AcE>=wTKYCcQt=K zxb36*7mjK)mltB+>q8?^H*u`gKY@jvYn~TyJcoO%;0c`@Pni&A4q*f5^>>)W6lO6)`$E0%-U1w{=yMfe8?*|jpbDw5ibQ75 rolf`W^WoW4DwWRokn^Emz)AU#F_{$4&$H0-&ux0Dcxs~q^3nGn$ll-> literal 0 HcmV?d00001 diff --git a/test/shaping/data/in-house/tests/use.tests b/test/shaping/data/in-house/tests/use.tests index 172946c4..4b46620b 100644 --- a/test/shaping/data/in-house/tests/use.tests +++ b/test/shaping/data/in-house/tests/use.tests @@ -2,4 +2,9 @@ ../fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+0|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212] ../fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+1211|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212] ../fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf:--font-funcs=ot:U+11103,U+11128:[u11103=0+837|u11128=0+0] +../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf::U+11124,U+1112E:[u11124=0+514|u11131=0+0|u11127=0+0] +../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf::U+11124,U+11131,U+11127:[u11124=0+514|u11131=0+0|u11127=0+0] +../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf::U+11124,U+11127,U+11131:[u11124=0+514|u11127=0+0|uni25CC=0+547|u11131=0+0] +../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf::U+11124,U+11134,U+11131:[u11124=0+514|u11134=0+0|u11131=0+0] +../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf::U+11124,U+11131,U+11134:[u11124=0+514|u11131=0+0|uni25CC=0+547|u11134=0+0] ../fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf:--font-funcs=ft:U+11410,U+11442,U+11411,U+11440,U+11443,U+11410,U+11442,U+11411,U+11441,U+11443:[E_dv.alt=0+275|Ga.icd=0+367|Gha.diag=0@100,0+386|AA_dv.alt=0+208|Candrabindu=0@17,-8+0|E_dv.alt=5+275|Ga.icd=5+367|Gha.diag=5@100,0+386|AU_dv_part.alt=5+213|Candrabindu.sm=5@-52,179+0] -- GitLab