jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-unicode-private.hh
changeset 40435 553eb1a50733
parent 34414 e496a8d8fc8a
equal deleted inserted replaced
40434:49d6193f196f 40435:553eb1a50733
   113     if (unlikely (unicode == 0x1A60u)) return 254;
   113     if (unlikely (unicode == 0x1A60u)) return 254;
   114 
   114 
   115     /* XXX This hack belongs to the Tibetan shaper:
   115     /* XXX This hack belongs to the Tibetan shaper:
   116      * Reorder PADMA to ensure it comes after any vowel marks. */
   116      * Reorder PADMA to ensure it comes after any vowel marks. */
   117     if (unlikely (unicode == 0x0FC6u)) return 254;
   117     if (unlikely (unicode == 0x0FC6u)) return 254;
       
   118     /* Reorder TSA -PHRU to reorder before U+0F74 */
       
   119     if (unlikely (unicode == 0x0F39u)) return 127;
   118 
   120 
   119     return _hb_modified_combining_class[combining_class (unicode)];
   121     return _hb_modified_combining_class[combining_class (unicode)];
   120   }
   122   }
   121 
   123 
   122   static inline hb_bool_t
   124   static inline hb_bool_t
   178         case 0x03: return unlikely (ch == 0x034Fu);
   180         case 0x03: return unlikely (ch == 0x034Fu);
   179         case 0x06: return unlikely (ch == 0x061Cu);
   181         case 0x06: return unlikely (ch == 0x061Cu);
   180         case 0x17: return hb_in_range (ch, 0x17B4u, 0x17B5u);
   182         case 0x17: return hb_in_range (ch, 0x17B4u, 0x17B5u);
   181         case 0x18: return hb_in_range (ch, 0x180Bu, 0x180Eu);
   183         case 0x18: return hb_in_range (ch, 0x180Bu, 0x180Eu);
   182         case 0x20: return hb_in_ranges (ch, 0x200Bu, 0x200Fu,
   184         case 0x20: return hb_in_ranges (ch, 0x200Bu, 0x200Fu,
   183                                                             0x202Au, 0x202Eu,
   185                                             0x202Au, 0x202Eu,
   184                                                             0x2060u, 0x206Fu);
   186                                             0x2060u, 0x206Fu);
   185         case 0xFE: return hb_in_range (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
   187         case 0xFE: return hb_in_range (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
   186         case 0xFF: return hb_in_range (ch, 0xFFF0u, 0xFFF8u);
   188         case 0xFF: return hb_in_range (ch, 0xFFF0u, 0xFFF8u);
   187         default: return false;
   189         default: return false;
   188       }
   190       }
   189     }
   191     }
   197         default: return false;
   199         default: return false;
   198       }
   200       }
   199     }
   201     }
   200   }
   202   }
   201 
   203 
       
   204   /* Space estimates based on:
       
   205    * http://www.unicode.org/charts/PDF/U2000.pdf
       
   206    * https://www.microsoft.com/typography/developers/fdsspec/spaces.aspx
       
   207    */
       
   208   enum space_t {
       
   209     NOT_SPACE = 0,
       
   210     SPACE_EM   = 1,
       
   211     SPACE_EM_2 = 2,
       
   212     SPACE_EM_3 = 3,
       
   213     SPACE_EM_4 = 4,
       
   214     SPACE_EM_5 = 5,
       
   215     SPACE_EM_6 = 6,
       
   216     SPACE_EM_16 = 16,
       
   217     SPACE_4_EM_18,      /* 4/18th of an EM! */
       
   218     SPACE,
       
   219     SPACE_FIGURE,
       
   220     SPACE_PUNCTUATION,
       
   221     SPACE_NARROW,
       
   222   };
       
   223   static inline space_t
       
   224   space_fallback_type (hb_codepoint_t u)
       
   225   {
       
   226     switch (u)
       
   227     {
       
   228       /* All GC=Zs chars that can use a fallback. */
       
   229       default:      return NOT_SPACE;   /* U+1680 OGHAM SPACE MARK */
       
   230       case 0x0020u: return SPACE;       /* U+0020 SPACE */
       
   231       case 0x00A0u: return SPACE;       /* U+00A0 NO-BREAK SPACE */
       
   232       case 0x2000u: return SPACE_EM_2;  /* U+2000 EN QUAD */
       
   233       case 0x2001u: return SPACE_EM;    /* U+2001 EM QUAD */
       
   234       case 0x2002u: return SPACE_EM_2;  /* U+2002 EN SPACE */
       
   235       case 0x2003u: return SPACE_EM;    /* U+2003 EM SPACE */
       
   236       case 0x2004u: return SPACE_EM_3;  /* U+2004 THREE-PER-EM SPACE */
       
   237       case 0x2005u: return SPACE_EM_4;  /* U+2005 FOUR-PER-EM SPACE */
       
   238       case 0x2006u: return SPACE_EM_6;  /* U+2006 SIX-PER-EM SPACE */
       
   239       case 0x2007u: return SPACE_FIGURE;        /* U+2007 FIGURE SPACE */
       
   240       case 0x2008u: return SPACE_PUNCTUATION;   /* U+2008 PUNCTUATION SPACE */
       
   241       case 0x2009u: return SPACE_EM_5;          /* U+2009 THIN SPACE */
       
   242       case 0x200Au: return SPACE_EM_16;         /* U+200A HAIR SPACE */
       
   243       case 0x202Fu: return SPACE_NARROW;        /* U+202F NARROW NO-BREAK SPACE */
       
   244       case 0x205Fu: return SPACE_4_EM_18;       /* U+205F MEDIUM MATHEMATICAL SPACE */
       
   245       case 0x3000u: return SPACE_EM;            /* U+3000 IDEOGRAPHIC SPACE */
       
   246     }
       
   247   }
   202 
   248 
   203   struct {
   249   struct {
   204 #define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_func_t name;
   250 #define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_func_t name;
   205     HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
   251     HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
   206 #undef HB_UNICODE_FUNC_IMPLEMENT
   252 #undef HB_UNICODE_FUNC_IMPLEMENT
   297 
   343 
   298 /* Lao */
   344 /* Lao */
   299 #define HB_MODIFIED_COMBINING_CLASS_CCC118 118 /* sign u / sign uu */
   345 #define HB_MODIFIED_COMBINING_CLASS_CCC118 118 /* sign u / sign uu */
   300 #define HB_MODIFIED_COMBINING_CLASS_CCC122 122 /* mai * */
   346 #define HB_MODIFIED_COMBINING_CLASS_CCC122 122 /* mai * */
   301 
   347 
   302 /* Tibetan */
   348 /* Tibetan
       
   349  * Modify U+0F74 (ccc=132) to reorder before ccc=130 marks.
       
   350  */
   303 #define HB_MODIFIED_COMBINING_CLASS_CCC129 129 /* sign aa */
   351 #define HB_MODIFIED_COMBINING_CLASS_CCC129 129 /* sign aa */
   304 #define HB_MODIFIED_COMBINING_CLASS_CCC130 130 /* sign i */
   352 #define HB_MODIFIED_COMBINING_CLASS_CCC130 130 /* sign i */
   305 #define HB_MODIFIED_COMBINING_CLASS_CCC132 132 /* sign u */
   353 #define HB_MODIFIED_COMBINING_CLASS_CCC132 128 /* sign u */
   306 
   354 
   307 
   355 
   308 /* Misc */
   356 /* Misc */
   309 
   357 
   310 #define HB_UNICODE_GENERAL_CATEGORY_IS_MARK(gen_cat) \
   358 #define HB_UNICODE_GENERAL_CATEGORY_IS_MARK(gen_cat) \
   311         (FLAG_SAFE (gen_cat) & \
   359         (FLAG_SAFE (gen_cat) & \
   312          (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
   360          (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
   313           FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
   361           FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
   314           FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
   362           FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
   315 
   363 
       
   364 #define HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK_OR_MODIFIER_SYMBOL(gen_cat) \
       
   365         (FLAG_SAFE (gen_cat) & \
       
   366          (FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
       
   367           FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | \
       
   368           FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL)))
   316 
   369 
   317 #endif /* HB_UNICODE_PRIVATE_HH */
   370 #endif /* HB_UNICODE_PRIVATE_HH */