< prev index next >

src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-shape-complex-arabic-fallback.hh

Print this page

        

*** 25,37 **** */ #ifndef HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH #define HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH ! #include "hb-private.hh" ! #include "hb-ot-shape-private.hh" #include "hb-ot-layout-gsub-table.hh" /* Features ordered the same as the entries in shaping_table rows, * followed by rlig. Don't change. */ --- 25,37 ---- */ #ifndef HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH #define HB_OT_SHAPE_COMPLEX_ARABIC_FALLBACK_HH ! #include "hb.hh" ! #include "hb-ot-shape.hh" #include "hb-ot-layout-gsub-table.hh" /* Features ordered the same as the entries in shaping_table rows, * followed by rlig. Don't change. */
*** 77,98 **** /* Bubble-sort or something equally good! * May not be good-enough for presidential candidate interviews, but good-enough for us... */ hb_stable_sort (&glyphs[0], num_glyphs, (int(*)(const OT::GlyphID*, const OT::GlyphID *)) OT::GlyphID::cmp, &substitutes[0]); - OT::Supplier<OT::GlyphID> glyphs_supplier (glyphs, num_glyphs); - OT::Supplier<OT::GlyphID> substitutes_supplier (substitutes, num_glyphs); /* Each glyph takes four bytes max, and there's some overhead. */ char buf[(SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1) * 4 + 128]; ! OT::hb_serialize_context_t c (buf, sizeof (buf)); OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> (); bool ret = lookup->serialize_single (&c, OT::LookupFlag::IgnoreMarks, ! glyphs_supplier, ! substitutes_supplier, ! num_glyphs); c.end_serialize (); /* TODO sanitize the results? */ return ret ? c.copy<OT::SubstLookup> () : nullptr; } --- 77,95 ---- /* Bubble-sort or something equally good! * May not be good-enough for presidential candidate interviews, but good-enough for us... */ hb_stable_sort (&glyphs[0], num_glyphs, (int(*)(const OT::GlyphID*, const OT::GlyphID *)) OT::GlyphID::cmp, &substitutes[0]); /* Each glyph takes four bytes max, and there's some overhead. */ char buf[(SHAPING_TABLE_LAST - SHAPING_TABLE_FIRST + 1) * 4 + 128]; ! hb_serialize_context_t c (buf, sizeof (buf)); OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> (); bool ret = lookup->serialize_single (&c, OT::LookupFlag::IgnoreMarks, ! hb_array (glyphs, num_glyphs), ! hb_array (substitutes, num_glyphs)); c.end_serialize (); /* TODO sanitize the results? */ return ret ? c.copy<OT::SubstLookup> () : nullptr; }
*** 153,181 **** } if (!num_ligatures) return nullptr; - OT::Supplier<OT::GlyphID> first_glyphs_supplier (first_glyphs, num_first_glyphs); - OT::Supplier<unsigned int > ligature_per_first_glyph_count_supplier (ligature_per_first_glyph_count_list, num_first_glyphs); - OT::Supplier<OT::GlyphID> ligatures_supplier (ligature_list, num_ligatures); - OT::Supplier<unsigned int > component_count_supplier (component_count_list, num_ligatures); - OT::Supplier<OT::GlyphID> component_supplier (component_list, num_ligatures); /* 16 bytes per ligature ought to be enough... */ char buf[ARRAY_LENGTH_CONST (ligature_list) * 16 + 128]; ! OT::hb_serialize_context_t c (buf, sizeof (buf)); OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> (); bool ret = lookup->serialize_ligature (&c, OT::LookupFlag::IgnoreMarks, ! first_glyphs_supplier, ! ligature_per_first_glyph_count_supplier, ! num_first_glyphs, ! ligatures_supplier, ! component_count_supplier, ! component_supplier); ! c.end_serialize (); /* TODO sanitize the results? */ return ret ? c.copy<OT::SubstLookup> () : nullptr; } --- 150,171 ---- } if (!num_ligatures) return nullptr; /* 16 bytes per ligature ought to be enough... */ char buf[ARRAY_LENGTH_CONST (ligature_list) * 16 + 128]; ! hb_serialize_context_t c (buf, sizeof (buf)); OT::SubstLookup *lookup = c.start_serialize<OT::SubstLookup> (); bool ret = lookup->serialize_ligature (&c, OT::LookupFlag::IgnoreMarks, ! hb_array (first_glyphs, num_first_glyphs), ! hb_array (ligature_per_first_glyph_count_list, num_first_glyphs), ! hb_array (ligature_list, num_ligatures), ! hb_array (component_count_list, num_ligatures), ! hb_array (component_list, num_ligatures)); c.end_serialize (); /* TODO sanitize the results? */ return ret ? c.copy<OT::SubstLookup> () : nullptr; }
*** 193,232 **** #define ARABIC_FALLBACK_MAX_LOOKUPS 5 struct arabic_fallback_plan_t { - ASSERT_POD (); - unsigned int num_lookups; bool free_lookups; hb_mask_t mask_array[ARABIC_FALLBACK_MAX_LOOKUPS]; OT::SubstLookup *lookup_array[ARABIC_FALLBACK_MAX_LOOKUPS]; ! hb_ot_layout_lookup_accelerator_t accel_array[ARABIC_FALLBACK_MAX_LOOKUPS]; }; ! static const arabic_fallback_plan_t arabic_fallback_plan_nil = {}; ! ! #if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(HB_NO_WIN1256) #define HB_WITH_WIN1256 #endif #ifdef HB_WITH_WIN1256 #include "hb-ot-shape-complex-arabic-win1256.hh" #endif ! struct ManifestLookup { OT::Tag tag; OT::OffsetTo<OT::SubstLookup> lookupOffset; }; typedef OT::ArrayOf<ManifestLookup> Manifest; static bool ! arabic_fallback_plan_init_win1256 (arabic_fallback_plan_t *fallback_plan, ! const hb_ot_shape_plan_t *plan, ! hb_font_t *font) { #ifdef HB_WITH_WIN1256 /* Does this font look like it's Windows-1256-encoded? */ hb_codepoint_t g; if (!(hb_font_get_glyph (font, 0x0627u, 0, &g) && g == 199 /* ALEF */ && --- 183,222 ---- #define ARABIC_FALLBACK_MAX_LOOKUPS 5 struct arabic_fallback_plan_t { unsigned int num_lookups; bool free_lookups; hb_mask_t mask_array[ARABIC_FALLBACK_MAX_LOOKUPS]; OT::SubstLookup *lookup_array[ARABIC_FALLBACK_MAX_LOOKUPS]; ! OT::hb_ot_layout_lookup_accelerator_t accel_array[ARABIC_FALLBACK_MAX_LOOKUPS]; }; ! #if defined(_WIN32) && !defined(HB_NO_WIN1256) #define HB_WITH_WIN1256 #endif #ifdef HB_WITH_WIN1256 #include "hb-ot-shape-complex-arabic-win1256.hh" #endif ! struct ManifestLookup ! { ! public: OT::Tag tag; OT::OffsetTo<OT::SubstLookup> lookupOffset; + public: + DEFINE_SIZE_STATIC (6); }; typedef OT::ArrayOf<ManifestLookup> Manifest; static bool ! arabic_fallback_plan_init_win1256 (arabic_fallback_plan_t *fallback_plan HB_UNUSED, ! const hb_ot_shape_plan_t *plan HB_UNUSED, ! hb_font_t *font HB_UNUSED) { #ifdef HB_WITH_WIN1256 /* Does this font look like it's Windows-1256-encoded? */ hb_codepoint_t g; if (!(hb_font_get_glyph (font, 0x0627u, 0, &g) && g == 199 /* ALEF */ &&
*** 297,307 **** arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan, hb_font_t *font) { arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) calloc (1, sizeof (arabic_fallback_plan_t)); if (unlikely (!fallback_plan)) ! return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil); fallback_plan->num_lookups = 0; fallback_plan->free_lookups = false; /* Try synthesizing GSUB table using Unicode Arabic Presentation Forms, --- 287,297 ---- arabic_fallback_plan_create (const hb_ot_shape_plan_t *plan, hb_font_t *font) { arabic_fallback_plan_t *fallback_plan = (arabic_fallback_plan_t *) calloc (1, sizeof (arabic_fallback_plan_t)); if (unlikely (!fallback_plan)) ! return const_cast<arabic_fallback_plan_t *> (&Null(arabic_fallback_plan_t)); fallback_plan->num_lookups = 0; fallback_plan->free_lookups = false; /* Try synthesizing GSUB table using Unicode Arabic Presentation Forms,
*** 312,329 **** /* See if this looks like a Windows-1256-encoded font. If it does, use a * hand-coded GSUB table. */ if (arabic_fallback_plan_init_win1256 (fallback_plan, plan, font)) return fallback_plan; free (fallback_plan); ! return const_cast<arabic_fallback_plan_t *> (&arabic_fallback_plan_nil); } static void arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan) { ! if (!fallback_plan || fallback_plan == &arabic_fallback_plan_nil) return; for (unsigned int i = 0; i < fallback_plan->num_lookups; i++) if (fallback_plan->lookup_array[i]) { --- 302,320 ---- /* See if this looks like a Windows-1256-encoded font. If it does, use a * hand-coded GSUB table. */ if (arabic_fallback_plan_init_win1256 (fallback_plan, plan, font)) return fallback_plan; + assert (fallback_plan->num_lookups == 0); free (fallback_plan); ! return const_cast<arabic_fallback_plan_t *> (&Null(arabic_fallback_plan_t)); } static void arabic_fallback_plan_destroy (arabic_fallback_plan_t *fallback_plan) { ! if (!fallback_plan || fallback_plan->num_lookups == 0) return; for (unsigned int i = 0; i < fallback_plan->num_lookups; i++) if (fallback_plan->lookup_array[i]) {
< prev index next >