ff.feng | 30 Oct 03:50 2014
Picon

How many unicode make up a glyph?

Hi !

I'm developing a font engine with harfbuzz & freetype for Cambodia.
I can get the correct glyph index array and position array by harfbuzz.
That's sweet.

Now I got a problem : I'm wondering how many unicode(UTF16) form a glyph?
(If I specify a item in the glyph index array from hb_buffer_get_glyph_infos)

thanks a lot & sorry for my poor English.


Best regards,

**********************************************************************

The preceding e-mail message (including any attachments) may contain confidential information intended for a specific individual and purpose.If you are not an intended recipient of this message, please notify the sender by replying to this message and then delete it from your system.Use,dissemination, distribution, or reproduction of this message by unintended recipients is not authorized and may be unlawful.

**********************************************************************

 

_______________________________________________
HarfBuzz mailing list
HarfBuzz <at> lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/harfbuzz
Behdad Esfahbod | 29 Oct 19:24 2014

harfbuzz: Branch 'master'

 src/hb-ot-layout-gsubgpos-private.hh |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

New commits:
commit fde3e4a423871463c883cb969e99c29cb6f69f6b
Author: Behdad Esfahbod <behdad <at> behdad.org>
Date:   Wed Oct 29 11:23:08 2014 -0700

    In hb_ot_collect_glyphs(), don't recurse to a lookup more than once

    Otherwise, we might process a lookup thousands of times, with no
    benefit.  This pathological case was hit by Noto Nastaliq Urdu Draft
    in Firefox's code to determine whether space glyph is involved in
    any GSUB/GPOS rules.  A test page is at http://behdad.org/urdu

    See:
    https://bugzilla.mozilla.org/show_bug.cgi?id=1090869

diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh
index 546ff4b..7106870 100644
--- a/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/hb-ot-layout-gsubgpos-private.hh
 <at>  <at>  -168,6 +168,10  <at>  <at>  struct hb_collect_glyphs_context_t
     if (output == hb_set_get_empty ())
       return HB_VOID;

+    /* Return if new lookup was recursed to before. */
+    if (recursed_lookups.has (lookup_index))
+      return HB_VOID;
+
     hb_set_t *old_before = before;
     hb_set_t *old_input  = input;
     hb_set_t *old_after  = after;
 <at>  <at>  -181,6 +185,8  <at>  <at>  struct hb_collect_glyphs_context_t
     input  = old_input;
     after  = old_after;

+    recursed_lookups.add (lookup_index);
+
     return HB_VOID;
   }

 <at>  <at>  -190,6 +196,7  <at>  <at>  struct hb_collect_glyphs_context_t
   hb_set_t *after;
   hb_set_t *output;
   recurse_func_t recurse_func;
+  hb_set_t recursed_lookups;
   unsigned int nesting_level_left;
   unsigned int debug_depth;

 <at>  <at>  -205,8 +212,16  <at>  <at>  struct hb_collect_glyphs_context_t
 			      after  (glyphs_after  ? glyphs_after  : hb_set_get_empty ()),
 			      output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
 			      recurse_func (NULL),
+			      recursed_lookups (),
 			      nesting_level_left (nesting_level_left_),
-			      debug_depth (0) {}
+			      debug_depth (0)
+  {
+    recursed_lookups.init ();
+  }
+  ~hb_collect_glyphs_context_t (void)
+  {
+    recursed_lookups.fini ();
+  }

   void set_recurse_func (recurse_func_t func) { recurse_func = func; }
 };
_______________________________________________
HarfBuzz mailing list
HarfBuzz <at> lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/harfbuzz
Behdad Esfahbod | 15 Oct 06:26 2014

harfbuzz: Branch 'master' - 2 commits

 src/hb-open-type-private.hh |   75 +++++++++++++++++++++++++++++++++++---------
 src/hb-private.hh           |   41 ------------------------
 src/hb-uniscribe.cc         |    6 +++
 3 files changed, 66 insertions(+), 56 deletions(-)

New commits:
commit 5a5640d8506ccfc99fd119e89e829170d1fea421
Author: Behdad Esfahbod <behdad@...>
Date:   Tue Oct 14 21:26:13 2014 -0700

    Move code around

diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 9807569..a58e790 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
 <at>  <at>  -552,57 +552,57  <at>  <at>  struct BEInt<Type, 2>
   private: uint8_t v[2];
 };
 template <typename Type>
-struct BEInt<Type, 4>
+struct BEInt<Type, 3>
 {
   public:
   inline void set (Type V)
   {
-    v[0] = (V >> 24) & 0xFF;
-    v[1] = (V >> 16) & 0xFF;
-    v[2] = (V >>  8) & 0xFF;
-    v[3] = (V      ) & 0xFF;
+    v[0] = (V >> 16) & 0xFF;
+    v[1] = (V >>  8) & 0xFF;
+    v[2] = (V      ) & 0xFF;
   }
   inline operator Type (void) const
   {
-    return (v[0] << 24)
-         + (v[1] << 16)
-         + (v[2] <<  8)
-         + (v[3]      );
+    return (v[0] << 16)
+         + (v[1] <<  8)
+         + (v[2]      );
   }
-  inline bool operator == (const BEInt<Type, 4>& o) const
+  inline bool operator == (const BEInt<Type, 3>& o) const
   {
     return v[0] == o.v[0]
         && v[1] == o.v[1]
-        && v[2] == o.v[2]
-        && v[3] == o.v[3];
+        && v[2] == o.v[2];
   }
-  inline bool operator != (const BEInt<Type, 4>& o) const { return !(*this == o); }
-  private: uint8_t v[4];
+  inline bool operator != (const BEInt<Type, 3>& o) const { return !(*this == o); }
+  private: uint8_t v[3];
 };
 template <typename Type>
-struct BEInt<Type, 3>
+struct BEInt<Type, 4>
 {
   public:
   inline void set (Type V)
   {
-    v[0] = (V >> 16) & 0xFF;
-    v[1] = (V >>  8) & 0xFF;
-    v[2] = (V      ) & 0xFF;
+    v[0] = (V >> 24) & 0xFF;
+    v[1] = (V >> 16) & 0xFF;
+    v[2] = (V >>  8) & 0xFF;
+    v[3] = (V      ) & 0xFF;
   }
   inline operator Type (void) const
   {
-    return (v[0] << 16)
-         + (v[1] <<  8)
-         + (v[2]      );
+    return (v[0] << 24)
+         + (v[1] << 16)
+         + (v[2] <<  8)
+         + (v[3]      );
   }
-  inline bool operator == (const BEInt<Type, 3>& o) const
+  inline bool operator == (const BEInt<Type, 4>& o) const
   {
     return v[0] == o.v[0]
         && v[1] == o.v[1]
-        && v[2] == o.v[2];
+        && v[2] == o.v[2]
+        && v[3] == o.v[3];
   }
-  inline bool operator != (const BEInt<Type, 3>& o) const { return !(*this == o); }
-  private: uint8_t v[3];
+  inline bool operator != (const BEInt<Type, 4>& o) const { return !(*this == o); }
+  private: uint8_t v[4];
 };

 /* Integer types in big-endian order and no alignment requirement */
commit 666b42f73bd1f516657b206ef738108825bf239f
Author: Behdad Esfahbod <behdad@...>
Date:   Tue Oct 14 21:24:59 2014 -0700

    Move macros around

    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=84491

diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 475187b..9807569 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
 <at>  <at>  -533,9 +533,21  <at>  <at>  template <typename Type>
 struct BEInt<Type, 2>
 {
   public:
-  inline void set (Type i) { hb_be_uint16_put (v,i); }
-  inline operator Type (void) const { return hb_be_uint16_get (v); }
-  inline bool operator == (const BEInt<Type, 2>& o) const { return hb_be_uint16_eq (v, o.v); }
+  inline void set (Type V)
+  {
+    v[0] = (V >>  8) & 0xFF;
+    v[1] = (V      ) & 0xFF;
+  }
+  inline operator Type (void) const
+  {
+    return (v[0] <<  8)
+         + (v[1]      );
+  }
+  inline bool operator == (const BEInt<Type, 2>& o) const
+  {
+    return v[0] == o.v[0]
+        && v[1] == o.v[1];
+  }
   inline bool operator != (const BEInt<Type, 2>& o) const { return !(*this == o); }
   private: uint8_t v[2];
 };
 <at>  <at>  -543,9 +555,27  <at>  <at>  template <typename Type>
 struct BEInt<Type, 4>
 {
   public:
-  inline void set (Type i) { hb_be_uint32_put (v,i); }
-  inline operator Type (void) const { return hb_be_uint32_get (v); }
-  inline bool operator == (const BEInt<Type, 4>& o) const { return hb_be_uint32_eq (v, o.v); }
+  inline void set (Type V)
+  {
+    v[0] = (V >> 24) & 0xFF;
+    v[1] = (V >> 16) & 0xFF;
+    v[2] = (V >>  8) & 0xFF;
+    v[3] = (V      ) & 0xFF;
+  }
+  inline operator Type (void) const
+  {
+    return (v[0] << 24)
+         + (v[1] << 16)
+         + (v[2] <<  8)
+         + (v[3]      );
+  }
+  inline bool operator == (const BEInt<Type, 4>& o) const
+  {
+    return v[0] == o.v[0]
+        && v[1] == o.v[1]
+        && v[2] == o.v[2]
+        && v[3] == o.v[3];
+  }
   inline bool operator != (const BEInt<Type, 4>& o) const { return !(*this == o); }
   private: uint8_t v[4];
 };
 <at>  <at>  -553,9 +583,24  <at>  <at>  template <typename Type>
 struct BEInt<Type, 3>
 {
   public:
-  inline void set (Type i) { hb_be_uint24_put (v,i); }
-  inline operator Type (void) const { return hb_be_uint24_get (v); }
-  inline bool operator == (const BEInt<Type, 3>& o) const { return hb_be_uint24_eq (v, o.v); }
+  inline void set (Type V)
+  {
+    v[0] = (V >> 16) & 0xFF;
+    v[1] = (V >>  8) & 0xFF;
+    v[2] = (V      ) & 0xFF;
+  }
+  inline operator Type (void) const
+  {
+    return (v[0] << 16)
+         + (v[1] <<  8)
+         + (v[2]      );
+  }
+  inline bool operator == (const BEInt<Type, 3>& o) const
+  {
+    return v[0] == o.v[0]
+        && v[1] == o.v[1]
+        && v[2] == o.v[2];
+  }
   inline bool operator != (const BEInt<Type, 3>& o) const { return !(*this == o); }
   private: uint8_t v[3];
 };
diff --git a/src/hb-private.hh b/src/hb-private.hh
index 40d02ea..cd02e2b 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
 <at>  <at>  -539,47 +539,6  <at>  <at>  struct hb_lockable_set_t
 };

 
-
-
-/* Big-endian handling */
-
-static inline uint16_t hb_be_uint16 (const uint16_t v)
-{
-  const uint8_t *V = (const uint8_t *) &v;
-  return (V[0] << 8) | V[1];
-}
-
-static inline uint16_t hb_uint16_swap (const uint16_t v)
-{
-  return (v >> 8) | (v << 8);
-}
-
-static inline uint32_t hb_uint32_swap (const uint32_t v)
-{
-  return (hb_uint16_swap (v) << 16) | hb_uint16_swap (v >> 16);
-}
-
-/* Note, of the following macros, uint16_get is the one called many many times.
- * If there is any optimizations to be done, it's in that macro.  However, I
- * already confirmed that on my T400 ThinkPad at least, using bswap_16(), which
- * results in a single ror instruction, does NOT speed this up.  In fact, it
- * resulted in a minor slowdown.  At any rate, note that v may not be correctly
- * aligned, so I think the current implementation is optimal.
- */
-
-#define hb_be_uint16_put(v,V)	HB_STMT_START { v[0] = (V>>8); v[1] = (V); } HB_STMT_END
-#define hb_be_uint16_get(v)	(uint16_t) ((v[0] << 8) + v[1])
-#define hb_be_uint16_eq(a,b)	(a[0] == b[0] && a[1] == b[1])
-
-#define hb_be_uint32_put(v,V)	HB_STMT_START { v[0] = (V>>24); v[1] = (V>>16); v[2] = (V>>8); v[3] =
(V); } HB_STMT_END
-#define hb_be_uint32_get(v)	(uint32_t) ((v[0] << 24) + (v[1] << 16) + (v[2] << 8) + v[3])
-#define hb_be_uint32_eq(a,b)	(a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3])
-
-#define hb_be_uint24_put(v,V)	HB_STMT_START { v[0] = (V>>16); v[1] = (V>>8); v[2] = (V); } HB_STMT_END
-#define hb_be_uint24_get(v)	(uint32_t) ((v[0] << 16) + (v[1] << 8) + v[2])
-#define hb_be_uint24_eq(a,b)	(a[0] == b[0] && a[1] == b[1] && a[2] == b[2])
-
-
 /* ASCII tag/character handling */

 static inline bool ISALPHA (unsigned char c)
diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
index 74ae3a3..e7bcad2 100644
--- a/src/hb-uniscribe.cc
+++ b/src/hb-uniscribe.cc
 <at>  <at>  -43,6 +43,12  <at>  <at> 
 #endif

 
+static inline uint16_t hb_uint16_swap (const uint16_t v)
+{ return (v >> 8) | (v << 8); }
+static inline uint32_t hb_uint32_swap (const uint32_t v)
+{ return (hb_uint16_swap (v) << 16) | hb_uint16_swap (v >> 16); }
+
+
 typedef HRESULT (WINAPI *SIOT) /*ScriptItemizeOpenType*/(
   const WCHAR *pwcInChars,
   int cInChars,
notifier | 15 Oct 05:11 2014

behdad/harfbuzz coverage decreased (-1.47%) on master

behdad/harfbuzz coverage decreased (-1.47%) for commit: Fix misc warnings Fixes https://github.com/behdad/harfbuzz/pull/51 by behdad
<div>
<a href="https://coveralls.io/builds/1336408"></a>
<a href="https://coveralls.io/repos/34061">behdad/harfbuzz</a>
<span class="negative">coverage decreased (-1.47%)</span>
for commit:
<span><a href="http://github.com/behdad/harfbuzz/commit/5c87120b8178566ddae99d9825edc24f9b87ea3d">Fix misc warnings

Fixes https://github.com/behdad/harfbuzz/pull/51</a></span>
by
<a href="https://github.com/behdad" class="committer">behdad</a>
</div>
Behdad Esfahbod | 15 Oct 05:07 2014

harfbuzz: Branch 'master'

 src/hb-buffer-deserialize-json.rl |    4 ++--
 src/hb-ot-layout-gsub-table.hh    |    2 +-
 src/hb-private.hh                 |    6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

New commits:
commit 5c87120b8178566ddae99d9825edc24f9b87ea3d
Author: Behdad Esfahbod <behdad@...>
Date:   Tue Oct 14 20:07:31 2014 -0700

    Fix misc warnings

    Fixes https://github.com/behdad/harfbuzz/pull/51

diff --git a/src/hb-buffer-deserialize-json.rl b/src/hb-buffer-deserialize-json.rl
index 7351b2a..91b350f 100644
--- a/src/hb-buffer-deserialize-json.rl
+++ b/src/hb-buffer-deserialize-json.rl
 <at>  <at>  -117,8 +117,8  <at>  <at>  _hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,

   const char *tok = NULL;
   int cs;
-  hb_glyph_info_t info;
-  hb_glyph_position_t pos;
+  hb_glyph_info_t info = {0};
+  hb_glyph_position_t pos = {0};
   %%{
     write init;
     write exec;
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 2b421a9..7d6a5a7 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
 <at>  <at>  -200,7 +200,7  <at>  <at>  struct SingleSubst
     TRACE_SERIALIZE (this);
     if (unlikely (!c->extend_min (u.format))) return TRACE_RETURN (false);
     unsigned int format = 2;
-    int delta;
+    int delta = 0;
     if (num_glyphs) {
       format = 1;
       /* TODO(serialize) check for wrap-around */
diff --git a/src/hb-private.hh b/src/hb-private.hh
index cac021a..40d02ea 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
 <at>  <at>  -951,12 +951,12  <at>  <at>  hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o

 struct hb_options_t
 {
-  int initialized : 1;
-  int uniscribe_bug_compatible : 1;
+  unsigned int initialized : 1;
+  unsigned int uniscribe_bug_compatible : 1;
 };

 union hb_options_union_t {
-  int i;
+  unsigned int i;
   hb_options_t opts;
 };
 ASSERT_STATIC (sizeof (int) == sizeof (hb_options_union_t));
Bob Hallissy | 14 Oct 00:01 2014

feature "execution" order

I apologize in advance if this information is already available -- please just point me to it if so. Or, if it is straightforward to deduce this from the source code, I'm happy to try that -- but I took a brief look and wasn't successful so I'll need some coaching.

As we are aware, Uniscribe makes multiple passes over the text, more-or-less one pass per feature. In the Arabic spec, for example, Microsoft says:
All OTL processing is divided into a set of predefined features(described and illustrated in the Features section of this document). Each feature is applied, one by one, to the appropriate glyphs in the syllable and OTLS processes them. Uniscribe makes as many calls to the OTL Services as there are features.
and:
Regardless of the model an application chooses for supporting layout of complex scripts, Uniscribe requires a fixed order for executing features within a run of text to consistently obtain the proper basic form. This is achieved by calling features one-by-one in the standard order listed below.
and finally the list of features, in order: ccmp, isol, fina, medi, init, rlig, calt, liga, dlig, cswh, mset, curs, kern, mark, and mkmk.

(This is, of course, not what the OT spec says should be done, but that is water under the bridge and we are stuck with Uniscribe compatibility)

What I'd like to know is what is the equivalent sequence for Harfbuzz?  Presumably Harfbuzz implements additional features (clig, locl, rtla, rtlm and salt come to mind) and it would be helpful to know where they fall in the sequence. Also, where do things like Stylistic Sets (ssxx) and Character Variants (cvxx) fall in this list?

(And while this post is about Arabic, presumably other scripts have similar needs).

Thanks for any help you can provide,

Bob



<div>
    I apologize in advance if this information is already available --
    please just point me to it if so. Or, if it is straightforward to
    deduce this from the source code, I'm happy to try that -- but I
    took a brief look and wasn't successful so I'll need some coaching.<br><br>
    As we are aware, Uniscribe makes multiple passes over the text,
    more-or-less one pass per feature. In the <a href="http://www.microsoft.com/typography/OpenTypeDev/arabic/intro.htm">Arabic
      spec</a>, for example, Microsoft says:<br><blockquote type="cite">
<span>All
        OTL processing is divided into a set of predefined<span class="Apple-converted-space">&nbsp;</span></span>features<span>(described and
        illustrated in the Features section of this document). Each
        feature is applied, one by one, to the appropriate glyphs in the
        syllable and OTLS processes them. Uniscribe makes as many calls
        to the OTL Services as there are features.</span>
</blockquote>
    and:<br><blockquote type="cite"><span>Regardless
        of the model an application chooses for supporting layout of
        complex scripts, Uniscribe requires a fixed order for executing
        features within a run of text to consistently obtain the proper
        basic form. This is achieved by calling features one-by-one in
        the standard order listed below.</span></blockquote>
    and finally the list of features, in order: ccmp, isol, fina, medi,
    init, rlig, calt, liga, dlig, cswh, mset, curs, kern, mark, and mkmk.<br><br>
    (This is, of course, not what the OT spec says should be done, but
    that is water under the bridge and we are stuck with Uniscribe
    compatibility)<br><br>
    What I'd like to know is what is the equivalent sequence for
    Harfbuzz?&nbsp; Presumably Harfbuzz implements additional features (clig,
    locl, rtla, rtlm and salt come to mind) and it would be helpful to
    know where they fall in the sequence. Also, where do things like
    Stylistic Sets (ssxx) and Character Variants (cvxx) fall in this
    list?<br><br>
    (And while this post is about Arabic, presumably other scripts have
    similar needs).<br><br>
    Thanks for any help you can provide,<br><br>
    Bob<br><br><br><br>
</div>
Behdad Esfahbod | 10 Oct 03:12 2014

Discovering 'vert' feature

I'm helping Dominik port Chrome's vertical text support to HarfBuzz, and we've
hit a buggy font in Windows, that we need to work around.

"SimSun" on Windows 7, only declares the 'vert' feature under script 'hani'
(fine) language-system "CHN ".  No tag maps to "CHN ".  It's a font bug.

In Windows 8 family, someone **tried** to fix it.  They tweaked the features
until it worked for them.  So it has the 'vert' feature for script 'hani', now
in language system "ZHS " as well as "CHN ", but also for script 'latn' as
default language-system.  So now, if the itemizer failed to mark the correct
script, HarfBuzz tries 'latn' and gets the right feature.  But if it looks
under 'hani' but there's no language tag, it still fails.

So, I'm tempted to try this fixup: if feature is 'vert', and we found no
feature, then walk the feature list and enable the first feature found that
has tag 'vert'.

How does that sound?

https://github.com/behdad/harfbuzz/issues/63

--

-- 
behdad
http://behdad.org/
Rolf Langenhuijzen | 4 Oct 02:11 2014
Picon
Picon

Need to read family name (nameID/fontTools/TTX related)

Hello,

Sorry to hijack the Harfbuzz list for this, I think this is more fontTools/TTX related, but I didn’t see an
(active?) TTX list to post this to…

Basically I’d like to read the name table in a Python script. I thought this could be done rather easy with
fontTools/TTX, but no idea really. Any pointers??

I came across this https://github.com/tchollingsworth/ttname which is basically what I need, however I
don’t need write stuff and basically only need to read the name table. I started forking it, but then
noticed it depends on some older fontTools version, looking at how it wants to use the XML reader (import fontTools.ttLib.xmlImport).
So if this is a good start I would dive into that XML reading/parsing and perhaps update ttname if it’s
worth it..

As I was looking for the Family Name in particular I’m now running a subprocess.Popen to “otfinfo
--family" grabbing that information ;)
It’s a bit dirty, but for prototyping it works..

Kind regards,
Rolf

Travis CI | 2 Oct 22:57 2014

Fixed: behdad/harfbuzz#429 (master - a1f27ac)

behdad / harfbuzz (master)
Build #429 was fixed.
1 minute and 31 seconds
Behdad Esfahbod a1f27ac Changeset →
  Update test expectation for previous commit

Would you like to test your private code?

Travis Pro could be your new best friend!

<div>
    <div>
      <table class="repository"><tr>
<td><span><a href="http://clicks.travis-ci.org/track/click/30007208/travis-ci.org?p=eyJzIjoiVmxVaFY1S3J6aDc4bWRVM3A4WlBRSjZqSDdBIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL3RyYXZpcy1jaS5vcmdcXFwvYmVoZGFkXFxcL2hhcmZidXp6XCIsXCJpZFwiOlwiNmYxYjM4YzNiNTg1NDNmODg3MThlNDYzMzhmMTYyNDNcIixcInVybF9pZHNcIjpbXCJjMDViODE3ZjVlN2ZjYTlmMTE3ZTBhOWE1OWZmMjc0OThmN2NjN2QwXCJdfSJ9">behdad / harfbuzz</a> (<a href="http://clicks.travis-ci.org/track/click/30007208/github.com?p=eyJzIjoiMFpmX3o2M2pHbXU2MFlCYWp4MUk3MkFEVm9VIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL2dpdGh1Yi5jb21cXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL3RyZWVcXFwvbWFzdGVyXCIsXCJpZFwiOlwiNmYxYjM4YzNiNTg1NDNmODg3MThlNDYzMzhmMTYyNDNcIixcInVybF9pZHNcIjpbXCIzMDVjM2I2NTk5ZDZhMDI1NDk4NGQ1MGVjMGUyZTc5Y2UxZTdmODM2XCJdfSJ9">master</a>)</span></td>
        </tr></table>
<div class="success">
        <div class="content">
          <table>
<tr>
<td><div class="status-image"></div></td>
                <td class="build-message"><span><a href="http://clicks.travis-ci.org/track/click/30007208/travis-ci.org?p=eyJzIjoiS2RpZEZDYlB1cDZLYzFmYk0tUlQ5Smp0Z2NFIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL3RyYXZpcy1jaS5vcmdcXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL2J1aWxkc1xcXC8zNjkwOTc1MVwiLFwiaWRcIjpcIjZmMWIzOGMzYjU4NTQzZjg4NzE4ZTQ2MzM4ZjE2MjQzXCIsXCJ1cmxfaWRzXCI6W1wiNWNhNzZhYzk3ZDliY2FhNjdjYjExZjRlOGRiNDdjZjc5NDg0OWE0YlwiXX0ifQ">Build #429 was fixed.</a></span></td>
                <td align="right" class="time">
<div class="stop-watch"></div> <span>1 minute and 31 seconds</span>
</td>
              </tr>
<tr>
<td class="profile-image"></td>
                <td class="grey">Behdad Esfahbod</td>
                <td align="right" class="grey">
<a href="http://clicks.travis-ci.org/track/click/30007208/github.com?p=eyJzIjoiaHZNTjZtUU9jOENnRVFZZUVJZGpQaERTX0Q0IiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL2dpdGh1Yi5jb21cXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL2NvbW1pdFxcXC9hMWYyN2FjM2M0OGNmZTZkNTMyZGM0MjJjZjI1Njk1MmZlYTQ3MmVkXCIsXCJpZFwiOlwiNmYxYjM4YzNiNTg1NDNmODg3MThlNDYzMzhmMTYyNDNcIixcInVybF9pZHNcIjpbXCI1MGRiMjliMDcyM2ZhZjhjNTcwZDcyZTNjNDZmZjdkYjcwODMxYTE3XCJdfSJ9">a1f27ac</a> <a href="http://clicks.travis-ci.org/track/click/30007208/github.com?p=eyJzIjoiWG5iblZGTXdCQnBFbmhHcjhZaW9oMXpVN1prIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL2dpdGh1Yi5jb21cXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL2NvbXBhcmVcXFwvOGFmYWYwOTY4NzBkLi4uYTFmMjdhYzNjNDhjXCIsXCJpZFwiOlwiNmYxYjM4YzNiNTg1NDNmODg3MThlNDYzMzhmMTYyNDNcIixcInVybF9pZHNcIjpbXCJhMjc2YWFhMTE5NDdiZjY4MTY1Yzg0YWQ0ZDFjZDg2Y2YwZDBjMTc2XCJdfSJ9">Changeset &rarr;</a>
</td>
              </tr>
<tr>
<td>&nbsp;</td>
                <td class="grey" colspan="2">Update test expectation for previous commit</td>
              </tr>
</table>
</div>
      </div>

      <table border="0" class="footer"><tr>
<td>
            </td>
          <td class="grey">
            <a href="http://clicks.travis-ci.org/track/click/30007208/docs.travis-ci.com?p=eyJzIjoiUW9VS25Uelc1YmItYVM3OWtmTEJ0Mk1tV0xrIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvZG9jcy50cmF2aXMtY2kuY29tXCIsXCJpZFwiOlwiNmYxYjM4YzNiNTg1NDNmODg3MThlNDYzMzhmMTYyNDNcIixcInVybF9pZHNcIjpbXCI1ZmE3OTJiOGY5Nzk0YTkzNmU0OWZiNzcwNDI0NzJkNjU5N2ZmMDhjXCJdfSJ9">Documentation</a> about Travis CI<br>
            For help please join our IRC channel <a href="irc://irc.freenode.net/travis">irc.freenode.net#travis</a>.<br>
            Choose who receives these build notification emails in your <a href="http://clicks.travis-ci.org/track/click/30007208/docs.travis-ci.com?p=eyJzIjoiUEM3cUFrRnQzVm14b0FTUHlDS0VON1VnNnVjIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvZG9jcy50cmF2aXMtY2kuY29tXFxcL3VzZXJcXFwvbm90aWZpY2F0aW9uc1wiLFwiaWRcIjpcIjZmMWIzOGMzYjU4NTQzZjg4NzE4ZTQ2MzM4ZjE2MjQzXCIsXCJ1cmxfaWRzXCI6W1wiNGY1YzYwZDBkY2IxOGQ5ZGQzYTMwMzFkYjNjMjc1MTk4NmIyMmNhMFwiXX0ifQ">configuration file</a>.
          </td>
        </tr></table>
<div>
        <div class="section footnote">
          <p class="grey">Would you like to test your private code?</p>
          <p class="grey"><a href="http://clicks.travis-ci.org/track/click/30007208/travis-ci.com?p=eyJzIjoiOHZ5Q0hsejFOUHJZUEwtUXA5emRwdkE4Z1VNIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvdHJhdmlzLWNpLmNvbT91dG1fc291cmNlPWJ1aWxkX2VtYWlsX2Zvb3RlciZ1dG1fY2FtcGFpZ249dHJhdmlzLWNpLm9yZyZ1dG1fbWVkaXVtPWVtYWlsXCIsXCJpZFwiOlwiNmYxYjM4YzNiNTg1NDNmODg3MThlNDYzMzhmMTYyNDNcIixcInVybF9pZHNcIjpbXCIyMDAwYzI0MjkxOWZkYWYzNzVlNDhhM2Q5OTM4ZGY4MDc3YzZlMTk4XCJdfSJ9">Travis Pro</a> could be your new best friend!</p>
        </div>

        <div class="tiny-footer">
          <p class="grey"> 
            <span>Travis CI is powered by </span><a href="http://clicks.travis-ci.org/track/click/30007208/bluebox.net?p=eyJzIjoienNMcGV6WlNPLUQ1Uzh1YnN4OVk5SW1tTGhjIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvYmx1ZWJveC5uZXRcIixcImlkXCI6XCI2ZjFiMzhjM2I1ODU0M2Y4ODcxOGU0NjMzOGYxNjI0M1wiLFwidXJsX2lkc1wiOltcIjBmZTEzMmY2NGJkMjQ2ODhlMGM5MDM2MDcyNDA2NGY2NDRlMWVjMzFcIl19In0"></a>
          </p>
        </div>
      </div>

    </div>

</div>
Travis CI | 2 Oct 22:45 2014

Broken: behdad/harfbuzz#428 (master - 8afaf09)

behdad / harfbuzz (master)
Build #428 was broken.
3 minutes and 14 seconds
Behdad Esfahbod 8afaf09 Changeset →
  [ft] Add NO_HINTING in a couple other places

Would you like to test your private code?

Travis Pro could be your new best friend!

<div>
    <div>
      <table class="repository"><tr>
<td><span><a href="http://clicks.travis-ci.org/track/click/30007208/travis-ci.org?p=eyJzIjoiRVBKd3JEbzNobEo5YXR4SElvY1lUOE1oR1BNIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL3RyYXZpcy1jaS5vcmdcXFwvYmVoZGFkXFxcL2hhcmZidXp6XCIsXCJpZFwiOlwiYjM4YTA5YzVlNWI1NDdiOTk3ZDYyMjZkNjcyYmRhMTRcIixcInVybF9pZHNcIjpbXCJjMDViODE3ZjVlN2ZjYTlmMTE3ZTBhOWE1OWZmMjc0OThmN2NjN2QwXCJdfSJ9">behdad / harfbuzz</a> (<a href="http://clicks.travis-ci.org/track/click/30007208/github.com?p=eyJzIjoiWE03Y1RRcUlhVkFlNk1TNWZCazFLZ1hKbzM0IiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL2dpdGh1Yi5jb21cXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL3RyZWVcXFwvbWFzdGVyXCIsXCJpZFwiOlwiYjM4YTA5YzVlNWI1NDdiOTk3ZDYyMjZkNjcyYmRhMTRcIixcInVybF9pZHNcIjpbXCIzMDVjM2I2NTk5ZDZhMDI1NDk4NGQ1MGVjMGUyZTc5Y2UxZTdmODM2XCJdfSJ9">master</a>)</span></td>
        </tr></table>
<div class="failure">
        <div class="content">
          <table>
<tr>
<td><div class="status-image"></div></td>
                <td class="build-message"><span><a href="http://clicks.travis-ci.org/track/click/30007208/travis-ci.org?p=eyJzIjoibnk3YkJZakdqMG9hWHFZaXFoYUdQMDhxY3VrIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL3RyYXZpcy1jaS5vcmdcXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL2J1aWxkc1xcXC8zNjkwODUwN1wiLFwiaWRcIjpcImIzOGEwOWM1ZTViNTQ3Yjk5N2Q2MjI2ZDY3MmJkYTE0XCIsXCJ1cmxfaWRzXCI6W1wiNWNhNzZhYzk3ZDliY2FhNjdjYjExZjRlOGRiNDdjZjc5NDg0OWE0YlwiXX0ifQ">Build #428 was broken.</a></span></td>
                <td align="right" class="time">
<div class="stop-watch"></div> <span>3 minutes and 14 seconds</span>
</td>
              </tr>
<tr>
<td class="profile-image"></td>
                <td class="grey">Behdad Esfahbod</td>
                <td align="right" class="grey">
<a href="http://clicks.travis-ci.org/track/click/30007208/github.com?p=eyJzIjoiaTBHNktTYms5M2lBRG9CTjNvcmRXZkFxM1RrIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL2dpdGh1Yi5jb21cXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL2NvbW1pdFxcXC84YWZhZjA5Njg3MGQ3ODk1Y2YyZmZmYjY0MzhiMDJjMGFkMWI2YzUyXCIsXCJpZFwiOlwiYjM4YTA5YzVlNWI1NDdiOTk3ZDYyMjZkNjcyYmRhMTRcIixcInVybF9pZHNcIjpbXCI1MGRiMjliMDcyM2ZhZjhjNTcwZDcyZTNjNDZmZjdkYjcwODMxYTE3XCJdfSJ9">8afaf09</a> <a href="http://clicks.travis-ci.org/track/click/30007208/github.com?p=eyJzIjoid0xZdTh4X1BqNkk4LWctci1QMmltLTJBeGtnIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL2dpdGh1Yi5jb21cXFwvYmVoZGFkXFxcL2hhcmZidXp6XFxcL2NvbXBhcmVcXFwvNzIyODAxMTQxMWYwLi4uOGFmYWYwOTY4NzBkXCIsXCJpZFwiOlwiYjM4YTA5YzVlNWI1NDdiOTk3ZDYyMjZkNjcyYmRhMTRcIixcInVybF9pZHNcIjpbXCJhMjc2YWFhMTE5NDdiZjY4MTY1Yzg0YWQ0ZDFjZDg2Y2YwZDBjMTc2XCJdfSJ9">Changeset &rarr;</a>
</td>
              </tr>
<tr>
<td>&nbsp;</td>
                <td class="grey" colspan="2">[ft] Add NO_HINTING in a couple other places</td>
              </tr>
</table>
</div>
      </div>

      <table border="0" class="footer"><tr>
<td>
            </td>
          <td class="grey">
            <a href="http://clicks.travis-ci.org/track/click/30007208/docs.travis-ci.com?p=eyJzIjoiZFZfWHI1VHkwcFlhdkZTbzYxN0x0ZkdJLTBnIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvZG9jcy50cmF2aXMtY2kuY29tXCIsXCJpZFwiOlwiYjM4YTA5YzVlNWI1NDdiOTk3ZDYyMjZkNjcyYmRhMTRcIixcInVybF9pZHNcIjpbXCI1ZmE3OTJiOGY5Nzk0YTkzNmU0OWZiNzcwNDI0NzJkNjU5N2ZmMDhjXCJdfSJ9">Documentation</a> about Travis CI<br>
            For help please join our IRC channel <a href="irc://irc.freenode.net/travis">irc.freenode.net#travis</a>.<br>
            Choose who receives these build notification emails in your <a href="http://clicks.travis-ci.org/track/click/30007208/docs.travis-ci.com?p=eyJzIjoialM4cEhaSVNuWVA0alU1V2x5NnJ1Q0JTWVhjIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvZG9jcy50cmF2aXMtY2kuY29tXFxcL3VzZXJcXFwvbm90aWZpY2F0aW9uc1wiLFwiaWRcIjpcImIzOGEwOWM1ZTViNTQ3Yjk5N2Q2MjI2ZDY3MmJkYTE0XCIsXCJ1cmxfaWRzXCI6W1wiNGY1YzYwZDBkY2IxOGQ5ZGQzYTMwMzFkYjNjMjc1MTk4NmIyMmNhMFwiXX0ifQ">configuration file</a>.
          </td>
        </tr></table>
<div>
        <div class="section footnote">
          <p class="grey">Would you like to test your private code?</p>
          <p class="grey"><a href="http://clicks.travis-ci.org/track/click/30007208/travis-ci.com?p=eyJzIjoiend2eWlFMm52a3plQk5sMVhoT0h2bXZLNVEwIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvdHJhdmlzLWNpLmNvbT91dG1fc291cmNlPWJ1aWxkX2VtYWlsX2Zvb3RlciZ1dG1fY2FtcGFpZ249dHJhdmlzLWNpLm9yZyZ1dG1fbWVkaXVtPWVtYWlsXCIsXCJpZFwiOlwiYjM4YTA5YzVlNWI1NDdiOTk3ZDYyMjZkNjcyYmRhMTRcIixcInVybF9pZHNcIjpbXCIyMDAwYzI0MjkxOWZkYWYzNzVlNDhhM2Q5OTM4ZGY4MDc3YzZlMTk4XCJdfSJ9">Travis Pro</a> could be your new best friend!</p>
        </div>

        <div class="tiny-footer">
          <p class="grey"> 
            <span>Travis CI is powered by </span><a href="http://clicks.travis-ci.org/track/click/30007208/bluebox.net?p=eyJzIjoiUHBwVm84emFNSlZtNTdCRWwzaHNsdWpPc0owIiwidiI6MSwicCI6IntcInVcIjozMDAwNzIwOCxcInZcIjoxLFwidXJsXCI6XCJodHRwOlxcXC9cXFwvYmx1ZWJveC5uZXRcIixcImlkXCI6XCJiMzhhMDljNWU1YjU0N2I5OTdkNjIyNmQ2NzJiZGExNFwiLFwidXJsX2lkc1wiOltcIjBmZTEzMmY2NGJkMjQ2ODhlMGM5MDM2MDcyNDA2NGY2NDRlMWVjMzFcIl19In0"></a>
          </p>
        </div>
      </div>

    </div>

</div>
Behdad Esfahbod | 2 Oct 22:54 2014

harfbuzz: Branch 'master'

 test/shaping/tests/arabic-fallback-shaping.tests |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit a1f27ac3c48cfe6d532dc422cf256952fea472ed
Author: Behdad Esfahbod <behdad@...>
Date:   Thu Oct 2 16:54:33 2014 -0400

    Update test expectation for previous commit

diff --git a/test/shaping/tests/arabic-fallback-shaping.tests b/test/shaping/tests/arabic-fallback-shaping.tests
index 0240448..e3eaf3f 100644
--- a/test/shaping/tests/arabic-fallback-shaping.tests
+++ b/test/shaping/tests/arabic-fallback-shaping.tests
 <at>  <at>  -1 +1  <at>  <at> 
-fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf:U+0633,U+064F,U+0644,U+064E,U+0651,U+0627,U+0651,U+0650,U+0645,U+062A,U+06CC:[uni06CC.fina=10+1655|uni062A.medi=9+868|uni0645.init=8+1098|uni0650=2 <at> 208,0+0|uni0651=2 <at> 272,768+0|uni064E=2 <at> 944,1216+0|uni0651=2 <at> 1008,768+0|uni06440627.fina=2+1470|uni064F=0 <at> 576,-32+0|uni0633.init=0+1585]
+fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf:U+0633,U+064F,U+0644,U+064E,U+0651,U+0627,U+0651,U+0650,U+0645,U+062A,U+06CC:[uni06CC.fina=10+1655|uni062A.medi=9+868|uni0645.init=8+1098|uni0650=2 <at> 221,0+0|uni0651=2 <at> 260,736+0|uni064E=2 <at> 935,1259+0|uni0651=2 <at> 974,736+0|uni06440627.fina=2+1470|uni064F=0 <at> 558,-10+0|uni0633.init=0+1585]

Gmane