[config] Add HB_NO_OT_SHAPE / HB_NO_OT

Part of https://github.com/harfbuzz/harfbuzz/issues/1652
This commit is contained in:
Behdad Esfahbod 2019-06-26 13:21:03 -07:00
parent cee9f6e044
commit 7aad53657e
23 changed files with 154 additions and 0 deletions

View File

@ -86,6 +86,20 @@ In that case, or if you otherwise provide those functions by calling
without loss of functionality by defining `HB_NO_OT_FONT`. without loss of functionality by defining `HB_NO_OT_FONT`.
## Shapers
Most HarfBuzz clients use it for the main shaper, called "ot". However, it
is legitimate to want to compile HarfBuzz with only another backend, eg.
CoreText, for example for an iOS app. For that, you want `HB_NO_OT_SHAPE`,
or more generally `HB_NO_OT`.
This is very rarely what you need. Make sure you understand exactly what you
are doing.
Defining `HB_NO_FALLBACK_SHAPE` however is pretty harmless. That removes the
(unused) "fallback" shaper.
## Thread-safety ## Thread-safety
By default HarfBuzz builds as a thread-safe library. The exception is that By default HarfBuzz builds as a thread-safe library. The exception is that

View File

@ -98,6 +98,10 @@ for h in headers:
print (" * %s" % (l.strip())) print (" * %s" % (l.strip()))
print (" */") print (" */")
print () print ()
print ('#include "hb.hh"')
print ()
print ('#ifndef HB_NO_OT_SHAPE')
print ()
print ('#include "hb-ot-shape-complex-indic.hh"') print ('#include "hb-ot-shape-complex-indic.hh"')
print () print ()
@ -251,6 +255,8 @@ for i in range (2):
print ("#undef %s_%s" % print ("#undef %s_%s" %
(what_short[i], short[i][v])) (what_short[i], short[i][v]))
print () print ()
print ()
print ('#endif')
print ("/* == End of generated table == */") print ("/* == End of generated table == */")
# Maintain at least 30% occupancy in the table */ # Maintain at least 30% occupancy in the table */

View File

@ -419,6 +419,10 @@ for h in headers:
print (" * %s" % (l.strip())) print (" * %s" % (l.strip()))
print (" */") print (" */")
print () print ()
print ('#include "hb.hh"')
print ()
print ('#ifndef HB_NO_OT_SHAPE')
print ()
print ('#include "hb-ot-shape-complex-use.hh"') print ('#include "hb-ot-shape-complex-use.hh"')
print () print ()
@ -533,6 +537,8 @@ for k,v in sorted(use_positions.items()):
tag = k + suf tag = k + suf
print ("#undef %s" % tag) print ("#undef %s" % tag)
print () print ()
print ()
print ('#endif')
print ("/* == End of generated table == */") print ("/* == End of generated table == */")
# Maintain at least 50% occupancy in the table */ # Maintain at least 50% occupancy in the table */

View File

@ -157,6 +157,11 @@ print (' *')
for line in scripts_header: for line in scripts_header:
print (' * %s' % line.strip ()) print (' * %s' % line.strip ())
print (' */') print (' */')
print ()
print ('#include "hb.hh"')
print ()
print ('#ifndef HB_NO_OT_SHAPE')
print () print ()
print ('#include "hb-ot-shape-complex-vowel-constraints.hh"') print ('#include "hb-ot-shape-complex-vowel-constraints.hh"')
print () print ()
@ -223,4 +228,6 @@ print (' }')
print ('}') print ('}')
print () print ()
print ()
print ('#endif')
print ('/* == End of generated functions == */') print ('/* == End of generated functions == */')

View File

@ -121,6 +121,10 @@
#define HB_NO_OT_NAME_LANGUAGE #define HB_NO_OT_NAME_LANGUAGE
#endif #endif
#ifdef HB_NO_OT
#define HB_NO_OT_SHAPE
#endif
#ifdef HB_NO_OT_SHAPE_FALLBACK #ifdef HB_NO_OT_SHAPE_FALLBACK
#define HB_NO_OT_SHAPE_COMPLEX_ARABIC_FALLBACK #define HB_NO_OT_SHAPE_COMPLEX_ARABIC_FALLBACK
#define HB_NO_OT_SHAPE_COMPLEX_HEBREW_FALLBACK #define HB_NO_OT_SHAPE_COMPLEX_HEBREW_FALLBACK

View File

@ -25,6 +25,9 @@
*/ */
#include "hb.hh" #include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-arabic.hh" #include "hb-ot-shape-complex-arabic.hh"
#include "hb-ot-shape.hh" #include "hb-ot-shape.hh"
@ -710,3 +713,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */ true, /* fallback_position */
}; };
#endif

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex.hh" #include "hb-ot-shape-complex.hh"
@ -44,3 +48,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */ true, /* fallback_position */
}; };
#endif

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex.hh" #include "hb-ot-shape-complex.hh"
@ -430,3 +434,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hangul =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
false, /* fallback_position */ false, /* fallback_position */
}; };
#endif

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex.hh" #include "hb-ot-shape-complex.hh"
@ -176,3 +180,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hebrew =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */ true, /* fallback_position */
}; };
#endif

View File

@ -14,6 +14,10 @@
* # Date: 2018-07-30, 19:40:00 GMT [KW] * # Date: 2018-07-30, 19:40:00 GMT [KW]
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-indic.hh" #include "hb-ot-shape-complex-indic.hh"
#pragma GCC diagnostic push #pragma GCC diagnostic push
@ -487,4 +491,6 @@ hb_indic_get_categories (hb_codepoint_t u)
#undef IMC_TR #undef IMC_TR
#undef IMC_VOL #undef IMC_VOL
#endif
/* == End of generated table == */ /* == End of generated table == */

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-indic.hh" #include "hb-ot-shape-complex-indic.hh"
#include "hb-ot-shape-complex-vowel-constraints.hh" #include "hb-ot-shape-complex-vowel-constraints.hh"
#include "hb-ot-layout.hh" #include "hb-ot-layout.hh"
@ -1648,3 +1652,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
false, /* fallback_position */ false, /* fallback_position */
}; };
#endif

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-khmer.hh" #include "hb-ot-shape-complex-khmer.hh"
#include "hb-ot-layout.hh" #include "hb-ot-layout.hh"
@ -502,3 +506,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_khmer =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
false, /* fallback_position */ false, /* fallback_position */
}; };
#endif

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-myanmar.hh" #include "hb-ot-shape-complex-myanmar.hh"
@ -415,3 +419,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar_zawgyi =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
false, /* fallback_position */ false, /* fallback_position */
}; };
#endif

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex.hh" #include "hb-ot-shape-complex.hh"
@ -385,3 +389,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
false,/* fallback_position */ false,/* fallback_position */
}; };
#endif

View File

@ -15,6 +15,10 @@
* UnicodeData.txt does not have a header. * UnicodeData.txt does not have a header.
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-use.hh" #include "hb-ot-shape-complex-use.hh"
#pragma GCC diagnostic push #pragma GCC diagnostic push
@ -851,4 +855,6 @@ hb_use_get_category (hb_codepoint_t u)
#undef VMPst #undef VMPst
#undef VMAbv #undef VMAbv
#endif
/* == End of generated table == */ /* == End of generated table == */

View File

@ -26,6 +26,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-use.hh" #include "hb-ot-shape-complex-use.hh"
#include "hb-ot-shape-complex-arabic.hh" #include "hb-ot-shape-complex-arabic.hh"
#include "hb-ot-shape-complex-vowel-constraints.hh" #include "hb-ot-shape-complex-vowel-constraints.hh"
@ -643,3 +647,6 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_use =
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY, HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
false, /* fallback_position */ false, /* fallback_position */
}; };
#endif

View File

@ -13,6 +13,10 @@
* # Date: 2019-01-28, 22:16:47 GMT * # Date: 2019-01-28, 22:16:47 GMT
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-complex-vowel-constraints.hh" #include "hb-ot-shape-complex-vowel-constraints.hh"
static void static void
@ -440,4 +444,6 @@ _hb_preprocess_text_vowel_constraints (const hb_ot_shape_plan_t *plan HB_UNUSED,
} }
} }
#endif
/* == End of generated functions == */ /* == End of generated functions == */

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-fallback.hh" #include "hb-ot-shape-fallback.hh"
#include "hb-kern.hh" #include "hb-kern.hh"
@ -587,3 +591,6 @@ _hb_ot_shape_fallback_spaces (const hb_ot_shape_plan_t *plan HB_UNUSED,
} }
} }
} }
#endif

View File

@ -24,6 +24,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-ot-shape-normalize.hh" #include "hb-ot-shape-normalize.hh"
#include "hb-ot-shape-complex.hh" #include "hb-ot-shape-complex.hh"
#include "hb-ot-shape.hh" #include "hb-ot-shape.hh"
@ -469,3 +473,6 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
buffer->swap_buffers (); buffer->swap_buffers ();
} }
} }
#endif

View File

@ -26,6 +26,10 @@
* Google Author(s): Behdad Esfahbod * Google Author(s): Behdad Esfahbod
*/ */
#include "hb.hh"
#ifndef HB_NO_OT_SHAPE
#include "hb-shaper-impl.hh" #include "hb-shaper-impl.hh"
#include "hb-ot-shape.hh" #include "hb-ot-shape.hh"
@ -1146,3 +1150,6 @@ hb_ot_shape_glyphs_closure (hb_font_t *font,
hb_shape_plan_destroy (shape_plan); hb_shape_plan_destroy (shape_plan);
} }
#endif

View File

@ -79,7 +79,9 @@ hb_shape_plan_key_t::init (bool copy,
} }
this->shaper_func = nullptr; this->shaper_func = nullptr;
this->shaper_name = nullptr; this->shaper_name = nullptr;
#ifndef HB_NO_OT_SHAPE
this->ot.init (face, coords, num_coords); this->ot.init (face, coords, num_coords);
#endif
/* /*
* Choose shaper. * Choose shaper.
@ -148,7 +150,9 @@ hb_shape_plan_key_t::equal (const hb_shape_plan_key_t *other)
{ {
return hb_segment_properties_equal (&this->props, &other->props) && return hb_segment_properties_equal (&this->props, &other->props) &&
this->user_features_match (other) && this->user_features_match (other) &&
#ifndef HB_NO_OT_SHAPE
this->ot.equal (&other->ot) && this->ot.equal (&other->ot) &&
#endif
this->shaper_func == other->shaper_func; this->shaper_func == other->shaper_func;
} }
@ -224,12 +228,16 @@ hb_shape_plan_create2 (hb_face_t *face,
num_coords, num_coords,
shaper_list))) shaper_list)))
goto bail2; goto bail2;
#ifndef HB_NO_OT_SHAPE
if (unlikely (!shape_plan->ot.init0 (face, &shape_plan->key))) if (unlikely (!shape_plan->ot.init0 (face, &shape_plan->key)))
goto bail3; goto bail3;
#endif
return shape_plan; return shape_plan;
#ifndef HB_NO_OT_SHAPE
bail3: bail3:
#endif
shape_plan->key.free (); shape_plan->key.free ();
bail2: bail2:
free (shape_plan); free (shape_plan);
@ -281,7 +289,9 @@ hb_shape_plan_destroy (hb_shape_plan_t *shape_plan)
{ {
if (!hb_object_destroy (shape_plan)) return; if (!hb_object_destroy (shape_plan)) return;
#ifndef HB_NO_OT_SHAPE
shape_plan->ot.fini (); shape_plan->ot.fini ();
#endif
shape_plan->key.free (); shape_plan->key.free ();
free (shape_plan); free (shape_plan);
} }

View File

@ -39,7 +39,9 @@ struct hb_shape_plan_key_t
const hb_feature_t *user_features; const hb_feature_t *user_features;
unsigned int num_user_features; unsigned int num_user_features;
#ifndef HB_NO_OT_SHAPE
hb_ot_shape_plan_key_t ot; hb_ot_shape_plan_key_t ot;
#endif
hb_shape_func_t *shaper_func; hb_shape_func_t *shaper_func;
const char *shaper_name; const char *shaper_name;
@ -65,7 +67,9 @@ struct hb_shape_plan_t
hb_object_header_t header; hb_object_header_t header;
hb_face_t *face_unsafe; /* We don't carry a reference to face. */ hb_face_t *face_unsafe; /* We don't carry a reference to face. */
hb_shape_plan_key_t key; hb_shape_plan_key_t key;
#ifndef HB_NO_OT_SHAPE
hb_ot_shape_plan_t ot; hb_ot_shape_plan_t ot;
#endif
}; };

View File

@ -35,7 +35,9 @@
HB_SHAPER_IMPLEMENT (graphite2) HB_SHAPER_IMPLEMENT (graphite2)
#endif #endif
#ifndef HB_NO_OT_SHAPE
HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */ HB_SHAPER_IMPLEMENT (ot) /* <--- This is our main OpenType shaper. */
#endif
#ifdef HAVE_UNISCRIBE #ifdef HAVE_UNISCRIBE
HB_SHAPER_IMPLEMENT (uniscribe) HB_SHAPER_IMPLEMENT (uniscribe)