diff options
Diffstat (limited to 'Build/source/libs/harfbuzz/harfbuzz-0.9.7-PATCHES/patch-01-Khaled')
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-0.9.7-PATCHES/patch-01-Khaled | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/Build/source/libs/harfbuzz/harfbuzz-0.9.7-PATCHES/patch-01-Khaled b/Build/source/libs/harfbuzz/harfbuzz-0.9.7-PATCHES/patch-01-Khaled new file mode 100644 index 00000000000..c595141ede6 --- /dev/null +++ b/Build/source/libs/harfbuzz/harfbuzz-0.9.7-PATCHES/patch-01-Khaled @@ -0,0 +1,106 @@ +diff -ur harfbuzz-0.9.7.orig/src/hb-ot-layout-common-private.hh harfbuzz-0.9.7/src/hb-ot-layout-common-private.hh +--- harfbuzz-0.9.7.orig/src/hb-ot-layout-common-private.hh 2012-11-17 03:44:32.000000000 +0100 ++++ harfbuzz-0.9.7/src/hb-ot-layout-common-private.hh 2012-11-30 14:23:03.000000000 +0100 +@@ -248,6 +248,33 @@ + + typedef RecordListOf<Script> ScriptList; + ++struct FeatureParamsSize ++{ ++ inline bool sanitize (hb_sanitize_context_t *c) { ++ TRACE_SANITIZE (); ++ return TRACE_RETURN (c->check_struct (this)); ++ } ++ ++ USHORT params[5]; ++ public: ++ DEFINE_SIZE_STATIC (10); ++}; ++ ++struct FeatureParams ++{ ++ /* Note: currently the only feature with params is 'size', so we hardcode ++ * the length of the table to that of the FeatureParamsSize. */ ++ ++ inline bool sanitize (hb_sanitize_context_t *c) { ++ TRACE_SANITIZE (); ++ return TRACE_RETURN (c->check_struct (this)); ++ } ++ ++ union { ++ FeatureParamsSize size; ++ } u; ++ DEFINE_SIZE_STATIC (10); ++}; + + struct Feature + { +@@ -260,12 +287,17 @@ + unsigned int *lookup_tags /* OUT */) const + { return lookupIndex.get_indexes (start_index, lookup_count, lookup_tags); } + ++ inline const FeatureParams &get_feature_params (void) const ++ { return this+featureParams; } ++ + inline bool sanitize (hb_sanitize_context_t *c) { + TRACE_SANITIZE (); +- return TRACE_RETURN (c->check_struct (this) && lookupIndex.sanitize (c)); ++ return TRACE_RETURN (c->check_struct (this) && lookupIndex.sanitize (c) && ++ featureParams.sanitize (c, this)); + } + +- Offset featureParams; /* Offset to Feature Parameters table (if one ++ OffsetTo<FeatureParams> ++ featureParams; /* Offset to Feature Parameters table (if one + * has been defined for the feature), relative + * to the beginning of the Feature Table; = Null + * if not required */ +diff -ur harfbuzz-0.9.7.orig/src/hb-ot-layout.cc harfbuzz-0.9.7/src/hb-ot-layout.cc +--- harfbuzz-0.9.7.orig/src/hb-ot-layout.cc 2012-11-17 04:06:56.000000000 +0100 ++++ harfbuzz-0.9.7/src/hb-ot-layout.cc 2012-11-30 14:23:03.000000000 +0100 +@@ -539,3 +539,30 @@ + { + OT::GPOS::position_finish (font, buffer, zero_width_attached_marks); + } ++ ++hb_bool_t ++hb_ot_layout_position_get_size (hb_face_t *face, ++ uint16_t *data /* OUT, 5 items */) ++{ ++ const OT::GPOS &gpos = _get_gpos (face); ++ ++ unsigned int num_features = gpos.get_feature_count (); ++ for (unsigned int i = 0; i < num_features; i++) { ++ ++ if (HB_TAG ('s','i','z','e') == gpos.get_feature_tag (i)) ++ { ++ const OT::Feature &f = gpos.get_feature (i); ++ const OT::FeatureParams ¶ms = f.get_feature_params (); ++ ++ for (unsigned int i = 0; i < 5; i++) ++ data[i] = params.u.size.params[i]; ++ ++ return true; ++ } ++ } ++ ++ for (unsigned int i = 0; i < 5; i++) ++ data[i] = 0; ++ ++ return false; ++} +diff -ur harfbuzz-0.9.7.orig/src/hb-ot-layout.h harfbuzz-0.9.7/src/hb-ot-layout.h +--- harfbuzz-0.9.7.orig/src/hb-ot-layout.h 2012-11-17 03:50:38.000000000 +0100 ++++ harfbuzz-0.9.7/src/hb-ot-layout.h 2012-11-30 14:23:03.000000000 +0100 +@@ -279,6 +279,11 @@ + hb_glyph_position_t *positions /* IN / OUT */); + #endif + ++/* Optical 'size' feature info. Returns true if found. */ ++hb_bool_t ++hb_ot_layout_position_get_size (hb_face_t *face, ++ uint16_t *data /* OUT, 5 items */); ++ + + HB_END_DECLS + |