[HarfBuzz] harfbuzz: Branch 'master' - 10 commits

Behdad Esfahbod behdad at kemper.freedesktop.org
Tue Aug 28 16:17:12 PDT 2012


 src/Makefile.am                        |    6 +-
 src/check-libstdc++.sh                 |    2 
 src/check-static-inits.sh              |    4 -
 src/hb-atomic-private.hh               |   25 ++++++---
 src/hb-font.cc                         |   12 ++--
 src/hb-icu-le/FontTableCache.h         |    6 +-
 src/hb-icu-le/PortableFontInstance.cpp |   39 --------------
 src/hb-icu-le/PortableFontInstance.h   |   15 +++--
 src/hb-icu-le/cmaps.cpp                |    2 
 src/hb-icu-le/cmaps.h                  |    5 +
 src/hb-icu-le/letest.h                 |   14 +++++
 src/hb-icu-le/sfnt.h                   |    6 +-
 src/hb-open-file-private.hh            |    4 +
 src/hb-open-type-private.hh            |    9 +--
 src/hb-ot-head-table.hh                |    4 +
 src/hb-ot-hhea-table.hh                |    5 +
 src/hb-ot-hmtx-table.hh                |    6 ++
 src/hb-ot-layout-common-private.hh     |    5 +
 src/hb-ot-layout-gdef-table.hh         |    4 +
 src/hb-ot-layout-gpos-table.hh         |    4 +
 src/hb-ot-layout-gsub-table.hh         |    4 +
 src/hb-ot-layout-gsubgpos-private.hh   |    4 +
 src/hb-ot-layout-private.hh            |   12 +++-
 src/hb-ot-layout.cc                    |   91 ++++++++++++++++-----------------
 src/hb-ot-maxp-table.hh                |    4 +
 src/hb-ot-name-table.hh                |    4 +
 src/hb-ot-shape-fallback.cc            |    7 +-
 src/hb-uniscribe.cc                    |    8 +-
 src/main.cc                            |    2 
 29 files changed, 184 insertions(+), 129 deletions(-)

New commits:
commit 2eef71737ea29ffadbb5a2be4a898b44f53f66ac
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Aug 28 19:16:38 2012 -0400

    [hb-icu-le] Add visbility

diff --git a/src/hb-icu-le/FontTableCache.h b/src/hb-icu-le/FontTableCache.h
index d41d7c7..f956f88 100644
--- a/src/hb-icu-le/FontTableCache.h
+++ b/src/hb-icu-le/FontTableCache.h
@@ -13,6 +13,9 @@
 #include <hb-blob.h>
 
 #include "layout/LETypes.h"
+#include "letest.h"
+
+HB_BEGIN_VISIBILITY
 
 U_NAMESPACE_USE
 
@@ -40,5 +43,6 @@ private:
     le_int32 fTableCacheSize;
 };
 
-#endif
+HB_END_VISIBILITY
 
+#endif
diff --git a/src/hb-icu-le/PortableFontInstance.cpp b/src/hb-icu-le/PortableFontInstance.cpp
index f4eb171..c38e2b1 100644
--- a/src/hb-icu-le/PortableFontInstance.cpp
+++ b/src/hb-icu-le/PortableFontInstance.cpp
@@ -24,45 +24,6 @@
 
 #include <string.h>
 
-//
-// Finds the high bit by binary searching
-// through the bits in n.
-//
-le_int8 PortableFontInstance::highBit(le_int32 value)
-{
-    if (value <= 0) {
-        return -32;
-    }
-
-    le_uint8 bit = 0;
-
-    if (value >= 1 << 16) {
-        value >>= 16;
-        bit += 16;
-    }
-
-    if (value >= 1 << 8) {
-        value >>= 8;
-        bit += 8;
-    }
-
-    if (value >= 1 << 4) {
-        value >>= 4;
-        bit += 4;
-    }
-
-    if (value >= 1 << 2) {
-        value >>= 2;
-        bit += 2;
-    }
-
-    if (value >= 1 << 1) {
-        value >>= 1;
-        bit += 1;
-    }
-
-    return bit;
-}
 
 PortableFontInstance::PortableFontInstance(hb_face_t *face, float xScale, float yScale, LEErrorCode &status)
     : fFace(face), fXScale(xScale), fYScale(yScale), fUnitsPerEM(0), fAscent(0), fDescent(0), fLeading(0),
diff --git a/src/hb-icu-le/PortableFontInstance.h b/src/hb-icu-le/PortableFontInstance.h
index 4bfeb36..ff48311 100644
--- a/src/hb-icu-le/PortableFontInstance.h
+++ b/src/hb-icu-le/PortableFontInstance.h
@@ -21,11 +21,14 @@
 
 #include "layout/LETypes.h"
 #include "layout/LEFontInstance.h"
+#include "letest.h"
 
 #include "FontTableCache.h"
 
 #include "cmaps.h"
 
+HB_BEGIN_VISIBILITY
+
 class PortableFontInstance : public LEFontInstance, protected FontTableCache
 {
 private:
@@ -51,8 +54,6 @@ private:
     le_uint16 fNumGlyphs;
     le_uint16 fNumLongHorMetrics;
 
-    static le_int8 highBit(le_int32 value);
-
     void getMetrics();
 
     CMAPMapper *findUnicodeMapper();
@@ -109,4 +110,6 @@ public:
 
 };
 
+HB_END_VISIBILITY
+
 #endif
diff --git a/src/hb-icu-le/cmaps.cpp b/src/hb-icu-le/cmaps.cpp
index 87087aa..d03ee71 100644
--- a/src/hb-icu-le/cmaps.cpp
+++ b/src/hb-icu-le/cmaps.cpp
@@ -18,7 +18,7 @@
 // Finds the high bit by binary searching
 // through the bits in value.
 //
-le_int8 highBit(le_uint32 value)
+static inline le_int8 highBit(le_uint32 value)
 {
     le_uint8 bit = 0;
 
diff --git a/src/hb-icu-le/cmaps.h b/src/hb-icu-le/cmaps.h
index fcad788..cf73f3a 100644
--- a/src/hb-icu-le/cmaps.h
+++ b/src/hb-icu-le/cmaps.h
@@ -13,6 +13,8 @@
 #include "letest.h"
 #include "sfnt.h"
 
+HB_BEGIN_VISIBILITY
+
 class CMAPMapper
 {
 public:
@@ -80,5 +82,6 @@ inline CMAPMapper::~CMAPMapper()
 {
 }
 
-#endif
+HB_END_VISIBILITY
 
+#endif
diff --git a/src/hb-icu-le/letest.h b/src/hb-icu-le/letest.h
index f924ca8..ff564ba 100644
--- a/src/hb-icu-le/letest.h
+++ b/src/hb-icu-le/letest.h
@@ -14,12 +14,24 @@
 #ifndef __LETEST_H
 #define __LETEST_H
 
+
+#if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
+# define HB_BEGIN_VISIBILITY _Pragma ("GCC visibility push(hidden)")
+# define HB_END_VISIBILITY _Pragma ("GCC visibility pop")
+#else
+# define HB_BEGIN_VISIBILITY
+# define HB_END_VISIBILITY
+#endif
+
+
 #include "layout/LETypes.h"
 /*#include "unicode/ctest.h"*/
 
 #include <stdlib.h>
 #include <string.h>
 
+HB_BEGIN_VISIBILITY
+
 U_NAMESPACE_USE
 
 #define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
@@ -46,4 +58,6 @@ typedef struct TestResult TestResult;
 
 //U_CFUNC void addCTests(TestNode **root);
 
+HB_END_VISIBILITY
+
 #endif
diff --git a/src/hb-icu-le/sfnt.h b/src/hb-icu-le/sfnt.h
index 4a8f2f3..feec0ad 100644
--- a/src/hb-icu-le/sfnt.h
+++ b/src/hb-icu-le/sfnt.h
@@ -9,6 +9,9 @@
 #define __SFNT_H
 
 #include "layout/LETypes.h"
+#include "letest.h"
+
+HB_BEGIN_VISIBILITY
 
 U_NAMESPACE_USE
 
@@ -445,5 +448,6 @@ struct NAMETable
 typedef struct NAMETable NAMETable;
 #endif
 
-#endif
+HB_END_VISIBILITY
 
+#endif
commit d59e28e49204ed609d8a1bf3c0f21ab5fc178337
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Aug 28 19:08:36 2012 -0400

    Minor

diff --git a/src/Makefile.am b/src/Makefile.am
index 166ba79..d7c4560 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -252,7 +252,6 @@ dist_check_SCRIPTS = \
 	check-exported-symbols.sh \
 	check-includes.sh \
 	check-internal-symbols.sh \
-	check-static-inits.sh \
 	$(NULL)
 
 if HAVE_ICU
@@ -260,6 +259,11 @@ else
 dist_check_SCRIPTS += check-libstdc++.sh
 endif
 
+if HAVE_ICU_LE
+else
+dist_check_SCRIPTS += check-static-inits.sh
+endif
+
 TESTS = $(dist_check_SCRIPTS)
 TESTS_ENVIRONMENT = \
 	srcdir="$(srcdir)" \
diff --git a/src/check-libstdc++.sh b/src/check-libstdc++.sh
index 0521532..e7e0e29 100755
--- a/src/check-libstdc++.sh
+++ b/src/check-libstdc++.sh
@@ -27,7 +27,7 @@ for suffix in so dylib; do
 	fi
 done
 if ! $tested; then
-	echo "check-internal-symbols.sh: libharfbuzz shared library not found; skipping test"
+	echo "check-libstdc++.sh: libharfbuzz shared library not found; skipping test"
 	exit 77
 fi
 
diff --git a/src/check-static-inits.sh b/src/check-static-inits.sh
index 1eceb1b..bb0a7ff 100755
--- a/src/check-static-inits.sh
+++ b/src/check-static-inits.sh
@@ -28,10 +28,10 @@ for obj in $OBJS; do
 	fi
 done
 
-echo "Checking that no object file has lazy static C++ constructors/destructors"
+echo "Checking that no object file has lazy static C++ constructors/destructors or other such stuff"
 for obj in $OBJS; do
 	if objdump -t "$obj" | grep '__c'; then
-		echo "Ouch, $obj has lazy static C++ constructors/destructors"
+		echo "Ouch, $obj has lazy static C++ constructors/destructors or other such stuff"
 		stat=1
 	fi
 done
commit af169d2813ff8075288cd4a7811f0715e4fea3da
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Aug 28 19:08:22 2012 -0400

    Minor

diff --git a/src/hb-icu-le/PortableFontInstance.h b/src/hb-icu-le/PortableFontInstance.h
index a444772..4bfeb36 100644
--- a/src/hb-icu-le/PortableFontInstance.h
+++ b/src/hb-icu-le/PortableFontInstance.h
@@ -99,13 +99,13 @@ public:
 
     virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
 
-    float getXPixelsPerEm() const;
+    virtual float getXPixelsPerEm() const;
 
-    float getYPixelsPerEm() const;
+    virtual float getYPixelsPerEm() const;
 
-    float getScaleFactorX() const;
+    virtual float getScaleFactorX() const;
 
-    float getScaleFactorY() const;
+    virtual float getScaleFactorY() const;
 
 };
 
commit 52ff2681d88886e2165ced397966ba29c2073583
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Aug 28 18:03:35 2012 -0400

    Use VisualStudio-style atomic intrinsics on mingw32

diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh
index 0f70641..4ae5b86 100644
--- a/src/hb-atomic-private.hh
+++ b/src/hb-atomic-private.hh
@@ -42,17 +42,28 @@
 #if 0
 
 
-#elif !defined(HB_NO_MT) && defined(_MSC_VER) && _MSC_VER >= 1600
+#elif !defined(HB_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__)
 
-#include <intrin.h>
-/* On x86, _InterlockedCompareExchangePointer is a macro defined in concrt.h */
-#include <concrt.h>
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+/* mingw32 does not have MemoryBarrier.
+ * MemoryBarrier may be defined as a macro or a function.
+ * Just make a failsafe version for ourselves. */
+#ifdef MemoryBarrier
+#define HBMemoryBarrier MemoryBarrier
+#else
+static inline void HBMemoryBarrier (void) {
+  long dummy = 0;
+  InterlockedExchange (&dummy, 1);
+}
+#endif
 
 typedef long hb_atomic_int_t;
-#define hb_atomic_int_add(AI, V)	_InterlockedExchangeAdd (&(AI), (V))
+#define hb_atomic_int_add(AI, V)	InterlockedExchangeAdd (&(AI), (V))
 
-#define hb_atomic_ptr_get(P)		(MemoryBarrier (), (void *) *(P))
-#define hb_atomic_ptr_cmpexch(P,O,N)	(_InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
+#define hb_atomic_ptr_get(P)		(HBMemoryBarrier (), (void *) *(P))
+#define hb_atomic_ptr_cmpexch(P,O,N)	(InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
 
 
 #elif !defined(HB_NO_MT) && defined(__APPLE__)
commit 7c8e844d92aa604fc4b396343721ea90eb83adb8
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Aug 28 17:57:49 2012 -0400

    Use namespace for OpenType tables
    
    Avoids USHORT, SHORT, ULONG, LONG clashes with Windows API.

diff --git a/src/hb-font.cc b/src/hb-font.cc
index 922dee3..0627032 100644
--- a/src/hb-font.cc
+++ b/src/hb-font.cc
@@ -589,10 +589,10 @@ _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void
   if (tag == HB_TAG_NONE)
     return hb_blob_reference (data->blob);
 
-  const OpenTypeFontFile &ot_file = *Sanitizer<OpenTypeFontFile>::lock_instance (data->blob);
-  const OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
+  const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob);
+  const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
 
-  const OpenTypeTable &table = ot_face.get_table_by_tag (tag);
+  const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag);
 
   hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, table.offset, table.length);
 
@@ -608,7 +608,7 @@ hb_face_create (hb_blob_t    *blob,
   if (unlikely (!blob || !hb_blob_get_length (blob)))
     return hb_face_get_empty ();
 
-  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (Sanitizer<OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
+  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
 
   if (unlikely (!closure))
     return hb_face_get_empty ();
@@ -740,8 +740,8 @@ hb_face_get_upem (hb_face_t *face)
 void
 hb_face_t::load_upem (void) const
 {
-  hb_blob_t *head_blob = Sanitizer<head>::sanitize (reference_table (HB_OT_TAG_head));
-  const head *head_table = Sanitizer<head>::lock_instance (head_blob);
+  hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (reference_table (HB_OT_TAG_head));
+  const OT::head *head_table = OT::Sanitizer<OT::head>::lock_instance (head_blob);
   upem = head_table->get_upem ();
   hb_blob_destroy (head_blob);
 }
diff --git a/src/hb-open-file-private.hh b/src/hb-open-file-private.hh
index e2d4a2c..31fedfb 100644
--- a/src/hb-open-file-private.hh
+++ b/src/hb-open-file-private.hh
@@ -32,6 +32,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  *
@@ -253,5 +255,7 @@ struct OpenTypeFontFile
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OPEN_FILE_PRIVATE_HH */
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 4d8c507..4cbb855 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -34,6 +34,8 @@
 #include "hb-blob.h"
 
 
+namespace OT {
+
 
 /*
  * Casts
@@ -382,11 +384,6 @@ struct IntType
   DEFINE_SIZE_STATIC (sizeof (Type));
 };
 
-/* Typedef these to avoid clash with windows.h */
-#define USHORT	HB_USHORT
-#define SHORT	HB_SHORT
-#define ULONG	HB_ULONG
-#define LONG	HB_LONG
 typedef IntType<uint16_t> USHORT;	/* 16-bit unsigned integer. */
 typedef IntType<int16_t>  SHORT;	/* 16-bit signed integer. */
 typedef IntType<uint32_t> ULONG;	/* 32-bit unsigned integer. */
@@ -714,5 +711,7 @@ struct SortedArrayOf : ArrayOf<Type> {
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OPEN_TYPE_PRIVATE_HH */
diff --git a/src/hb-ot-head-table.hh b/src/hb-ot-head-table.hh
index bf2d245..0934168 100644
--- a/src/hb-ot-head-table.hh
+++ b/src/hb-ot-head-table.hh
@@ -32,6 +32,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * head -- Font Header
@@ -141,5 +143,7 @@ struct head
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_HEAD_TABLE_HH */
diff --git a/src/hb-ot-hhea-table.hh b/src/hb-ot-hhea-table.hh
index 24f8bdc..5009e6b 100644
--- a/src/hb-ot-hhea-table.hh
+++ b/src/hb-ot-hhea-table.hh
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * hhea -- The Horizontal Header Table
@@ -89,4 +91,7 @@ struct hhea
 };
 
 
+} // namespace OT
+
+
 #endif /* HB_OT_HHEA_TABLE_HH */
diff --git a/src/hb-ot-hmtx-table.hh b/src/hb-ot-hmtx-table.hh
index cc7cfbb..feb6016 100644
--- a/src/hb-ot-hmtx-table.hh
+++ b/src/hb-ot-hmtx-table.hh
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * hmtx -- The Horizontal Metrics Table
@@ -83,4 +85,8 @@ struct hmtx
   DEFINE_SIZE_ARRAY2 (0, longHorMetric, leftSideBearingX);
 };
 
+
+} // namespace OT
+
+
 #endif /* HB_OT_HMTX_TABLE_HH */
diff --git a/src/hb-ot-layout-common-private.hh b/src/hb-ot-layout-common-private.hh
index cea5b75..48c7e0c 100644
--- a/src/hb-ot-layout-common-private.hh
+++ b/src/hb-ot-layout-common-private.hh
@@ -34,6 +34,9 @@
 #include "hb-set-private.hh"
 
 
+namespace OT {
+
+
 #define NOT_COVERED		((unsigned int) -1)
 #define MAX_NESTING_LEVEL	8
 
@@ -763,5 +766,7 @@ struct Device
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_LAYOUT_COMMON_PRIVATE_HH */
diff --git a/src/hb-ot-layout-gdef-table.hh b/src/hb-ot-layout-gdef-table.hh
index cebbe68..92ae1cf 100644
--- a/src/hb-ot-layout-gdef-table.hh
+++ b/src/hb-ot-layout-gdef-table.hh
@@ -34,6 +34,8 @@
 #include "hb-font-private.hh"
 
 
+namespace OT {
+
 
 /*
  * Attachment List Table
@@ -421,5 +423,7 @@ struct GDEF
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_LAYOUT_GDEF_TABLE_HH */
diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh
index b99146c..93755da 100644
--- a/src/hb-ot-layout-gpos-table.hh
+++ b/src/hb-ot-layout-gpos-table.hh
@@ -32,6 +32,8 @@
 #include "hb-ot-layout-gsubgpos-private.hh"
 
 
+namespace OT {
+
 
 /* buffer **position** var allocations */
 #define attach_lookback() var.u16[0] /* number of glyphs to go back to attach this glyph to its base */
@@ -1713,5 +1715,7 @@ static inline bool position_lookup (hb_apply_context_t *c, unsigned int lookup_i
 #undef cursive_chain
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 1114418..a14db14 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -32,6 +32,8 @@
 #include "hb-ot-layout-gsubgpos-private.hh"
 
 
+namespace OT {
+
 
 struct SingleSubstFormat1
 {
@@ -1410,5 +1412,7 @@ static inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup
 }
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_LAYOUT_GSUB_TABLE_HH */
diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh
index 7d4849f..de56402 100644
--- a/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/hb-ot-layout-gsubgpos-private.hh
@@ -34,6 +34,8 @@
 #include "hb-set-private.hh"
 
 
+namespace OT {
+
 
 #ifndef HB_DEBUG_CLOSURE
 #define HB_DEBUG_CLOSURE (HB_DEBUG+0)
@@ -1682,5 +1684,7 @@ struct GSUBGPOS
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH */
diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh
index 3f2c3ef..70fda8e 100644
--- a/src/hb-ot-layout-private.hh
+++ b/src/hb-ot-layout-private.hh
@@ -185,15 +185,21 @@ hb_ot_layout_position_finish (hb_font_t    *font,
  * hb_ot_layout_t
  */
 
+namespace OT {
+  struct GDEF;
+  struct GSUB;
+  struct GPOS;
+}
+
 struct hb_ot_layout_t
 {
   hb_blob_t *gdef_blob;
   hb_blob_t *gsub_blob;
   hb_blob_t *gpos_blob;
 
-  const struct GDEF *gdef;
-  const struct GSUB *gsub;
-  const struct GPOS *gpos;
+  const struct OT::GDEF *gdef;
+  const struct OT::GSUB *gsub;
+  const struct OT::GPOS *gpos;
 
   unsigned int gsub_lookup_count;
   unsigned int gpos_lookup_count;
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 44420ff..a319959 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -35,7 +35,6 @@
 #include "hb-ot-layout-gpos-table.hh"
 #include "hb-ot-maxp-table.hh"
 
-
 #include <stdlib.h>
 #include <string.h>
 
@@ -49,14 +48,14 @@ _hb_ot_layout_create (hb_face_t *face)
   if (unlikely (!layout))
     return NULL;
 
-  layout->gdef_blob = Sanitizer<GDEF>::sanitize (face->reference_table (HB_OT_TAG_GDEF));
-  layout->gdef = Sanitizer<GDEF>::lock_instance (layout->gdef_blob);
+  layout->gdef_blob = OT::Sanitizer<OT::GDEF>::sanitize (face->reference_table (HB_OT_TAG_GDEF));
+  layout->gdef = OT::Sanitizer<OT::GDEF>::lock_instance (layout->gdef_blob);
 
-  layout->gsub_blob = Sanitizer<GSUB>::sanitize (face->reference_table (HB_OT_TAG_GSUB));
-  layout->gsub = Sanitizer<GSUB>::lock_instance (layout->gsub_blob);
+  layout->gsub_blob = OT::Sanitizer<OT::GSUB>::sanitize (face->reference_table (HB_OT_TAG_GSUB));
+  layout->gsub = OT::Sanitizer<OT::GSUB>::lock_instance (layout->gsub_blob);
 
-  layout->gpos_blob = Sanitizer<GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
-  layout->gpos = Sanitizer<GPOS>::lock_instance (layout->gpos_blob);
+  layout->gpos_blob = OT::Sanitizer<OT::GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
+  layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
 
   layout->gsub_lookup_count = layout->gsub->get_lookup_count ();
   layout->gpos_lookup_count = layout->gpos->get_lookup_count ();
@@ -92,22 +91,22 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout)
   free (layout);
 }
 
-static inline const GDEF&
+static inline const OT::GDEF&
 _get_gdef (hb_face_t *face)
 {
-  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return Null(GDEF);
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::GDEF);
   return *hb_ot_layout_from_face (face)->gdef;
 }
-static inline const GSUB&
+static inline const OT::GSUB&
 _get_gsub (hb_face_t *face)
 {
-  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return Null(GSUB);
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::GSUB);
   return *hb_ot_layout_from_face (face)->gsub;
 }
-static inline const GPOS&
+static inline const OT::GPOS&
 _get_gpos (hb_face_t *face)
 {
-  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return Null(GPOS);
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::GPOS);
   return *hb_ot_layout_from_face (face)->gpos;
 }
 
@@ -149,14 +148,14 @@ hb_ot_layout_get_ligature_carets (hb_font_t      *font,
  * GSUB/GPOS
  */
 
-static const GSUBGPOS&
+static const OT::GSUBGPOS&
 get_gsubgpos_table (hb_face_t *face,
 		    hb_tag_t   table_tag)
 {
   switch (table_tag) {
     case HB_OT_TAG_GSUB: return _get_gsub (face);
     case HB_OT_TAG_GPOS: return _get_gpos (face);
-    default:             return Null(GSUBGPOS);
+    default:             return OT::Null(OT::GSUBGPOS);
   }
 }
 
@@ -168,7 +167,7 @@ hb_ot_layout_table_get_script_tags (hb_face_t    *face,
 				    unsigned int *script_count /* IN/OUT */,
 				    hb_tag_t     *script_tags /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   return g.get_script_tags (start_offset, script_count, script_tags);
 }
@@ -179,8 +178,8 @@ hb_ot_layout_table_find_script (hb_face_t    *face,
 				hb_tag_t      script_tag,
 				unsigned int *script_index)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   if (g.find_script_index (script_tag, script_index))
     return true;
@@ -205,8 +204,8 @@ hb_ot_layout_table_choose_script (hb_face_t      *face,
 				  unsigned int   *script_index,
 				  hb_tag_t       *chosen_script)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   while (*script_tags)
   {
@@ -254,7 +253,7 @@ hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
 				     unsigned int *feature_count /* IN/OUT */,
 				     hb_tag_t     *feature_tags /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
 
   return g.get_feature_tags (start_offset, feature_count, feature_tags);
 }
@@ -268,7 +267,7 @@ hb_ot_layout_script_get_language_tags (hb_face_t    *face,
 				       unsigned int *language_count /* IN/OUT */,
 				       hb_tag_t     *language_tags /* OUT */)
 {
-  const Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
+  const OT::Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
 
   return s.get_lang_sys_tags (start_offset, language_count, language_tags);
 }
@@ -280,8 +279,8 @@ hb_ot_layout_script_find_language (hb_face_t    *face,
 				   hb_tag_t      language_tag,
 				   unsigned int *language_index)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX);
-  const Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX);
+  const OT::Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
 
   if (s.find_lang_sys_index (language_tag, language_index))
     return true;
@@ -301,7 +300,7 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
 						  unsigned int  language_index,
 						  unsigned int *feature_index)
 {
-  const LangSys &l = get_gsubgpos_table (face, table_tag).get_script (script_index).get_lang_sys (language_index);
+  const OT::LangSys &l = get_gsubgpos_table (face, table_tag).get_script (script_index).get_lang_sys (language_index);
 
   if (feature_index) *feature_index = l.get_required_feature_index ();
 
@@ -317,8 +316,8 @@ hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
 					   unsigned int *feature_count /* IN/OUT */,
 					   unsigned int *feature_indexes /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
 
   return l.get_feature_indexes (start_offset, feature_count, feature_indexes);
 }
@@ -332,8 +331,8 @@ hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
 					unsigned int *feature_count /* IN/OUT */,
 					hb_tag_t     *feature_tags /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
 
   ASSERT_STATIC (sizeof (unsigned int) == sizeof (hb_tag_t));
   unsigned int ret = l.get_feature_indexes (start_offset, feature_count, (unsigned int *) feature_tags);
@@ -356,9 +355,9 @@ hb_ot_layout_language_find_feature (hb_face_t    *face,
 				    hb_tag_t      feature_tag,
 				    unsigned int *feature_index)
 {
-  ASSERT_STATIC (Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
+  ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
 
   unsigned int num_features = l.get_feature_count ();
   for (unsigned int i = 0; i < num_features; i++) {
@@ -382,21 +381,21 @@ hb_ot_layout_feature_get_lookup_indexes (hb_face_t    *face,
 					 unsigned int *lookup_count /* IN/OUT */,
 					 unsigned int *lookup_indexes /* OUT */)
 {
-  const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  const Feature &f = g.get_feature (feature_index);
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
+  const OT::Feature &f = g.get_feature (feature_index);
 
   return f.get_lookup_indexes (start_offset, lookup_count, lookup_indexes);
 }
 
 
 /*
- * GSUB
+ * OT::GSUB
  */
 
 hb_bool_t
 hb_ot_layout_has_substitution (hb_face_t *face)
 {
-  return &_get_gsub (face) != &Null(GSUB);
+  return &_get_gsub (face) != &OT::Null(OT::GSUB);
 }
 
 hb_bool_t
@@ -418,14 +417,14 @@ hb_ot_layout_would_substitute_lookup_fast (hb_face_t            *face,
 					   hb_bool_t             zero_context)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (face)->gsub_lookup_count)) return false;
-  hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
+  OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
   return hb_ot_layout_from_face (face)->gsub->would_substitute_lookup (&c, lookup_index);
 }
 
 void
 hb_ot_layout_substitute_start (hb_font_t *font, hb_buffer_t *buffer)
 {
-  GSUB::substitute_start (font, buffer);
+  OT::GSUB::substitute_start (font, buffer);
 }
 
 hb_bool_t
@@ -435,14 +434,14 @@ hb_ot_layout_substitute_lookup (hb_font_t    *font,
 				hb_mask_t     mask)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
-  hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
+  OT::hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
   return hb_ot_layout_from_face (font->face)->gsub->substitute_lookup (&c, lookup_index);
 }
 
 void
 hb_ot_layout_substitute_finish (hb_font_t *font, hb_buffer_t *buffer)
 {
-  GSUB::substitute_finish (font, buffer);
+  OT::GSUB::substitute_finish (font, buffer);
 }
 
 void
@@ -450,24 +449,24 @@ hb_ot_layout_substitute_closure_lookup (hb_face_t    *face,
 				        unsigned int  lookup_index,
 				        hb_set_t     *glyphs)
 {
-  hb_closure_context_t c (face, glyphs);
+  OT::hb_closure_context_t c (face, glyphs);
   _get_gsub (face).closure_lookup (&c, lookup_index);
 }
 
 /*
- * GPOS
+ * OT::GPOS
  */
 
 hb_bool_t
 hb_ot_layout_has_positioning (hb_face_t *face)
 {
-  return &_get_gpos (face) != &Null(GPOS);
+  return &_get_gpos (face) != &OT::Null(OT::GPOS);
 }
 
 void
 hb_ot_layout_position_start (hb_font_t *font, hb_buffer_t *buffer)
 {
-  GPOS::position_start (font, buffer);
+  OT::GPOS::position_start (font, buffer);
 }
 
 hb_bool_t
@@ -477,12 +476,12 @@ hb_ot_layout_position_lookup (hb_font_t    *font,
 			      hb_mask_t     mask)
 {
   if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
-  hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
+  OT::hb_apply_context_t c (font, buffer, mask, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
   return hb_ot_layout_from_face (font->face)->gpos->position_lookup (&c, lookup_index);
 }
 
 void
 hb_ot_layout_position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attached_marks)
 {
-  GPOS::position_finish (font, buffer, zero_width_attached_marks);
+  OT::GPOS::position_finish (font, buffer, zero_width_attached_marks);
 }
diff --git a/src/hb-ot-maxp-table.hh b/src/hb-ot-maxp-table.hh
index c2c90d1..9e113c7 100644
--- a/src/hb-ot-maxp-table.hh
+++ b/src/hb-ot-maxp-table.hh
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * maxp -- The Maximum Profile Table
@@ -61,5 +63,7 @@ struct maxp
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_MAXP_TABLE_HH */
diff --git a/src/hb-ot-name-table.hh b/src/hb-ot-name-table.hh
index e0d2e89..6cc7a5e 100644
--- a/src/hb-ot-name-table.hh
+++ b/src/hb-ot-name-table.hh
@@ -30,6 +30,8 @@
 #include "hb-open-type-private.hh"
 
 
+namespace OT {
+
 
 /*
  * name -- The Naming Table
@@ -124,5 +126,7 @@ struct name
 };
 
 
+} // namespace OT
+
 
 #endif /* HB_OT_NAME_TABLE_HH */
diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
index d732b57..18b88b2 100644
--- a/src/hb-uniscribe.cc
+++ b/src/hb-uniscribe.cc
@@ -33,8 +33,6 @@
 #include <windows.h>
 #include <usp10.h>
 
-typedef ULONG WIN_ULONG;
-
 #include "hb-uniscribe.h"
 
 #include "hb-ot-name-table.hh"
@@ -121,8 +119,8 @@ populate_log_font (LOGFONTW  *lf,
   lf->lfHeight = -font->y_scale;
   lf->lfCharSet = DEFAULT_CHARSET;
 
-  hb_blob_t *blob = Sanitizer<name>::sanitize (hb_face_reference_table (font->face, HB_TAG ('n','a','m','e')));
-  const name *name_table = Sanitizer<name>::lock_instance (blob);
+  hb_blob_t *blob = OT::Sanitizer<OT::name>::sanitize (hb_face_reference_table (font->face, HB_TAG ('n','a','m','e')));
+  const OT::name *name_table = OT::Sanitizer<OT::name>::lock_instance (blob);
   unsigned int len = name_table->get_name (3, 1, 0x409, 4,
 					   lf->lfFaceName,
 					   sizeof (lf->lfFaceName[0]) * LF_FACESIZE)
@@ -305,7 +303,7 @@ retry:
   SCRIPT_ITEM items[MAX_ITEMS + 1];
   SCRIPT_CONTROL bidi_control = {0};
   SCRIPT_STATE bidi_state = {0};
-  WIN_ULONG script_tags[MAX_ITEMS];
+  ULONG script_tags[MAX_ITEMS];
   int item_count;
 
   /* MinGW32 doesn't define fMergeNeutralItems, so we bruteforce */
diff --git a/src/main.cc b/src/main.cc
index 07d3d69..b362744 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -36,6 +36,8 @@
 #include <stdio.h>
 
 
+using namespace OT;
+
 
 int
 main (int argc, char **argv)
commit dc5df5af6b349c3d9e4ab876864d9dec8096401f
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Aug 28 16:31:23 2012 -0400

    Revert "Minor"
    
    This reverts commit 3e0a03978b91994bb7fa7922593cbdfc50878dfc.
    
    I know remember why that line is there :).

diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index c1ba9b6..857bf55 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -90,6 +90,7 @@ static hb_codepoint_t get_arabic_shape (hb_codepoint_t u, unsigned int shape)
 
 static uint16_t get_ligature (hb_codepoint_t first, hb_codepoint_t second)
 {
+  if (unlikely (!second)) return 0;
   for (unsigned i = 0; i < ARRAY_LENGTH (ligature_table); i++)
     if (ligature_table[i].first == first)
       for (unsigned j = 0; j < ARRAY_LENGTH (ligature_table[i].ligatures); j++)
commit 3e0a03978b91994bb7fa7922593cbdfc50878dfc
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Aug 27 17:10:02 2012 -0400

    Minor

diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index 857bf55..c1ba9b6 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -90,7 +90,6 @@ static hb_codepoint_t get_arabic_shape (hb_codepoint_t u, unsigned int shape)
 
 static uint16_t get_ligature (hb_codepoint_t first, hb_codepoint_t second)
 {
-  if (unlikely (!second)) return 0;
   for (unsigned i = 0; i < ARRAY_LENGTH (ligature_table); i++)
     if (ligature_table[i].first == first)
       for (unsigned j = 0; j < ARRAY_LENGTH (ligature_table[i].ligatures); j++)
commit 667218a5b134728863a318c73070f4e323590bbd
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Aug 27 17:00:44 2012 -0400

    Minor

diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc
index b0dcc75..aa6239c 100644
--- a/src/hb-ot-shape-fallback.cc
+++ b/src/hb-ot-shape-fallback.cc
@@ -263,15 +263,13 @@ position_around_base (const hb_ot_shape_plan_t *plan,
       if (this_combining_class != last_combining_class)
         cluster_extents = base_extents;
 
-      position_mark (plan, font, buffer, base_extents, i, this_combining_class);
+      position_mark (plan, font, buffer, cluster_extents, i, this_combining_class);
 
       buffer->pos[i].x_advance = 0;
       buffer->pos[i].y_advance = 0;
       buffer->pos[i].x_offset += x_offset;
       buffer->pos[i].y_offset += y_offset;
 
-      /* combine cluster extents. */
-
       last_combining_class = this_combining_class;
     } else {
       if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
commit 30dd62251fcd04c2cbaa9b979d47ddbf62c6d460
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Aug 27 16:54:34 2012 -0400

    Only fallback-position glyphs if we have the ccc
    
    Previously, ccc=0 Thai / Lao marks were being
    mispositioned.  Don't touch them.

diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc
index f1ea61a..b0dcc75 100644
--- a/src/hb-ot-shape-fallback.cc
+++ b/src/hb-ot-shape-fallback.cc
@@ -257,7 +257,7 @@ position_around_base (const hb_ot_shape_plan_t *plan,
   unsigned int last_combining_class = 255;
   hb_glyph_extents_t cluster_extents;
   for (unsigned int i = base + 1; i < end; i++)
-    if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
+    if (_hb_glyph_info_get_modified_combining_class (&buffer->info[i]))
     {
       unsigned int this_combining_class = recategorize_combining_class (_hb_glyph_info_get_modified_combining_class (&buffer->info[i]));
       if (this_combining_class != last_combining_class)
commit e1ba62811a61afb046d349e578cd141363c7fb34
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Aug 27 16:28:05 2012 -0400

    Center unknown marks horizontally

diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc
index 56a3e7a..f1ea61a 100644
--- a/src/hb-ot-shape-fallback.cc
+++ b/src/hb-ot-shape-fallback.cc
@@ -171,6 +171,7 @@ position_mark (const hb_ot_shape_plan_t *plan,
       }
       /* Fall through */
 
+    default:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
     case HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE:
     case HB_UNICODE_COMBINING_CLASS_BELOW:



More information about the HarfBuzz mailing list