Index: third_party/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc |
=================================================================== |
--- third_party/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc (리비전 189447) |
+++ third_party/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc (작업 사본) |
@@ -37,17 +37,16 @@ |
*/ |
enum { |
JOINING_TYPE_U = 0, |
- JOINING_TYPE_R = 1, |
- JOINING_TYPE_D = 2, |
+ JOINING_TYPE_L = 1, |
+ JOINING_TYPE_R = 2, |
+ JOINING_TYPE_D = 3, |
JOINING_TYPE_C = JOINING_TYPE_D, |
- JOINING_GROUP_ALAPH = 3, |
- JOINING_GROUP_DALATH_RISH = 4, |
- NUM_STATE_MACHINE_COLS = 5, |
+ JOINING_GROUP_ALAPH = 4, |
+ JOINING_GROUP_DALATH_RISH = 5, |
+ NUM_STATE_MACHINE_COLS = 6, |
- /* We deliberately don't have a JOINING_TYPE_L since that's unused in Unicode. */ |
- |
- JOINING_TYPE_T = 6, |
- JOINING_TYPE_X = 7 /* means: use general-category to choose between U or T. */ |
+ JOINING_TYPE_T = 7, |
+ JOINING_TYPE_X = 8 /* means: use general-category to choose between U or T. */ |
}; |
/* |
@@ -81,8 +80,7 @@ |
if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xA840, 0xA872))) |
{ |
if (unlikely (u == 0xA872)) |
- /* XXX Looks like this should be TYPE_L, but we don't support that yet! */ |
- return JOINING_TYPE_R; |
+ return JOINING_TYPE_L; |
return JOINING_TYPE_D; |
} |
@@ -133,28 +131,28 @@ |
uint16_t next_state; |
} arabic_state_table[][NUM_STATE_MACHINE_COLS] = |
{ |
- /* jt_U, jt_R, jt_D, jg_ALAPH, jg_DALATH_RISH */ |
+ /* jt_U, jt_L, jt_R, jt_D, jg_ALAPH, jg_DALATH_RISH */ |
/* State 0: prev was U, not willing to join. */ |
- { {NONE,NONE,0}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,6}, }, |
+ { {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,6}, }, |
/* State 1: prev was R or ISOL/ALAPH, not willing to join. */ |
- { {NONE,NONE,0}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN2,5}, {NONE,ISOL,6}, }, |
+ { {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN2,5}, {NONE,ISOL,6}, }, |
- /* State 2: prev was D/ISOL, willing to join. */ |
- { {NONE,NONE,0}, {INIT,FINA,1}, {INIT,FINA,3}, {INIT,FINA,4}, {INIT,FINA,6}, }, |
+ /* State 2: prev was D/L in ISOL form, willing to join. */ |
+ { {NONE,NONE,0}, {NONE,ISOL,2}, {INIT,FINA,1}, {INIT,FINA,3}, {INIT,FINA,4}, {INIT,FINA,6}, }, |
- /* State 3: prev was D/FINA, willing to join. */ |
- { {NONE,NONE,0}, {MEDI,FINA,1}, {MEDI,FINA,3}, {MEDI,FINA,4}, {MEDI,FINA,6}, }, |
+ /* State 3: prev was D in FINA form, willing to join. */ |
+ { {NONE,NONE,0}, {NONE,ISOL,2}, {MEDI,FINA,1}, {MEDI,FINA,3}, {MEDI,FINA,4}, {MEDI,FINA,6}, }, |
/* State 4: prev was FINA ALAPH, not willing to join. */ |
- { {NONE,NONE,0}, {MED2,ISOL,1}, {MED2,ISOL,2}, {MED2,FIN2,5}, {MED2,ISOL,6}, }, |
+ { {NONE,NONE,0}, {NONE,ISOL,2}, {MED2,ISOL,1}, {MED2,ISOL,2}, {MED2,FIN2,5}, {MED2,ISOL,6}, }, |
/* State 5: prev was FIN2/FIN3 ALAPH, not willing to join. */ |
- { {NONE,NONE,0}, {ISOL,ISOL,1}, {ISOL,ISOL,2}, {ISOL,FIN2,5}, {ISOL,ISOL,6}, }, |
+ { {NONE,NONE,0}, {NONE,ISOL,2}, {ISOL,ISOL,1}, {ISOL,ISOL,2}, {ISOL,FIN2,5}, {ISOL,ISOL,6}, }, |
/* State 6: prev was DALATH/RISH, not willing to join. */ |
- { {NONE,NONE,0}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN3,5}, {NONE,ISOL,6}, } |
+ { {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN3,5}, {NONE,ISOL,6}, } |
}; |
@@ -178,25 +176,25 @@ |
* TODO: Add test cases for these two. |
*/ |
- map->add_bool_feature (HB_TAG('c','c','m','p')); |
- map->add_bool_feature (HB_TAG('l','o','c','l')); |
+ map->add_global_bool_feature (HB_TAG('c','c','m','p')); |
+ map->add_global_bool_feature (HB_TAG('l','o','c','l')); |
map->add_gsub_pause (NULL); |
for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++) |
- map->add_bool_feature (arabic_features[i], false, i < 4); /* The first four features have fallback. */ |
+ map->add_feature (arabic_features[i], 1, i < 4 ? F_HAS_FALLBACK : F_NONE); /* The first four features have fallback. */ |
map->add_gsub_pause (NULL); |
- map->add_bool_feature (HB_TAG('r','l','i','g'), true, true); |
+ map->add_feature (HB_TAG('r','l','i','g'), 1, F_GLOBAL|F_HAS_FALLBACK); |
map->add_gsub_pause (arabic_fallback_shape); |
- map->add_bool_feature (HB_TAG('c','a','l','t')); |
+ map->add_global_bool_feature (HB_TAG('c','a','l','t')); |
map->add_gsub_pause (NULL); |
- map->add_bool_feature (HB_TAG('c','s','w','h')); |
- map->add_bool_feature (HB_TAG('d','l','i','g')); |
- map->add_bool_feature (HB_TAG('m','s','e','t')); |
+ map->add_global_bool_feature (HB_TAG('c','s','w','h')); |
+ map->add_global_bool_feature (HB_TAG('d','l','i','g')); |
+ map->add_global_bool_feature (HB_TAG('m','s','e','t')); |
} |
#include "hb-ot-shape-complex-arabic-fallback.hh" |
@@ -354,6 +352,6 @@ |
NULL, /* decompose */ |
NULL, /* compose */ |
setup_masks_arabic, |
- true, /* zero_width_attached_marks */ |
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE, |
true, /* fallback_position */ |
}; |