[Indic] Implement per-script matra positioning
Following what the spec says. Brings down Telugu failures from 40% to 3.75%, and Kannada failures from 44% to 10%. Does NOT affect other scripts' test results.
This commit is contained in:
parent
8bb32458f9
commit
8c973ebf0f
|
@ -39,7 +39,7 @@
|
|||
|
||||
|
||||
|
||||
#define IN_HALF_BLOCK(u, Base) ((u) & ~0x7F == (Base))
|
||||
#define IN_HALF_BLOCK(u, Base) (((u) & ~0x7F) == (Base))
|
||||
|
||||
#define IS_DEVA(u) (IN_HALF_BLOCK (u, 0x900))
|
||||
#define IS_BENG(u) (IN_HALF_BLOCK (u, 0x980))
|
||||
|
|
|
@ -105,9 +105,43 @@ consonant_position (hb_codepoint_t u)
|
|||
}
|
||||
|
||||
#define MATRA_POS_LEFT(u) POS_PRE_M
|
||||
#define MATRA_POS_RIGHT(u) POS_AFTER_POST
|
||||
#define MATRA_POS_TOP(u) POS_BEFORE_POST
|
||||
#define MATRA_POS_BOTTOM(u) POS_BEFORE_POST
|
||||
#define MATRA_POS_RIGHT(u) ( \
|
||||
IS_DEVA(u) ? POS_AFTER_SUB : \
|
||||
IS_BENG(u) ? POS_AFTER_POST : \
|
||||
IS_GURM(u) ? POS_AFTER_POST : \
|
||||
IS_GUJA(u) ? POS_AFTER_POST : \
|
||||
IS_ORYA(u) ? POS_AFTER_POST : \
|
||||
IS_TAML(u) ? POS_AFTER_POST : \
|
||||
IS_TELU(u) ? (u <= 0x0C42 ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
|
||||
IS_KNDA(u) ? POS_BEFORE_SUB : \
|
||||
IS_MLYM(u) ? POS_AFTER_POST : \
|
||||
IS_SINH(u) ? POS_AFTER_SUB : \
|
||||
/*default*/ POS_AFTER_SUB \
|
||||
)
|
||||
#define MATRA_POS_TOP(u) ( /* BENG and MLYM don't have top matras. */ \
|
||||
IS_DEVA(u) ? POS_AFTER_SUB : \
|
||||
IS_GURM(u) ? POS_AFTER_SUB : \
|
||||
IS_GUJA(u) ? POS_AFTER_SUB : \
|
||||
IS_ORYA(u) ? POS_AFTER_MAIN : \
|
||||
IS_TAML(u) ? POS_AFTER_SUB : \
|
||||
IS_TELU(u) ? POS_BEFORE_SUB : \
|
||||
IS_KNDA(u) ? POS_BEFORE_SUB : \
|
||||
IS_SINH(u) ? POS_AFTER_SUB : \
|
||||
/*default*/ POS_AFTER_SUB \
|
||||
)
|
||||
#define MATRA_POS_BOTTOM(u) ( \
|
||||
IS_DEVA(u) ? POS_AFTER_SUB : \
|
||||
IS_BENG(u) ? POS_AFTER_SUB : \
|
||||
IS_GURM(u) ? POS_AFTER_POST : \
|
||||
IS_GUJA(u) ? POS_AFTER_POST : \
|
||||
IS_ORYA(u) ? POS_AFTER_SUB : \
|
||||
IS_TAML(u) ? POS_AFTER_POST : \
|
||||
IS_TELU(u) ? POS_BEFORE_SUB : \
|
||||
IS_KNDA(u) ? POS_BEFORE_SUB : \
|
||||
IS_MLYM(u) ? POS_AFTER_POST : \
|
||||
IS_SINH(u) ? POS_AFTER_SUB : \
|
||||
/*default*/ POS_AFTER_SUB \
|
||||
)
|
||||
|
||||
|
||||
static indic_position_t
|
||||
|
|
|
@ -272,7 +272,7 @@ hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
|
|||
case 0x0AC9 : *a = 0x0AC5; *b= 0x0ABE; return true;
|
||||
|
||||
case 0x0931 : return false;
|
||||
case 0x0B92 : return false;
|
||||
case 0x0B94 : return false;
|
||||
|
||||
/* These ones have Unicode decompositions, but we do it
|
||||
* this way to be close to what Uniscribe does. */
|
||||
|
|
Loading…
Reference in New Issue