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

Behdad Esfahbod behdad at kemper.freedesktop.org
Wed Jan 1 22:20:22 PST 2014


 src/hb-ot-shape-complex-hangul.cc |   27 ++++++++++++---------------
 1 file changed, 12 insertions(+), 15 deletions(-)

New commits:
commit 29ea403d67e29c2d531c1f613ce3d69e60f078f6
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Jan 2 14:20:00 2014 +0800

    [hangul] Fix decomposition logic
    
    Seems to be working now.

diff --git a/src/hb-ot-shape-complex-hangul.cc b/src/hb-ot-shape-complex-hangul.cc
index 4194497..1d79c43 100644
--- a/src/hb-ot-shape-complex-hangul.cc
+++ b/src/hb-ot-shape-complex-hangul.cc
@@ -168,16 +168,13 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
       unsigned int vindex = nindex / TCount;
       unsigned int tindex = nindex % TCount;
 
-      if (tindex && has_glyph)
-	goto next; /* <LVT> supported.  Nothing to do. */
-
       if (!tindex &&
 	  buffer->idx + 1 < count &&
 	  isCombiningT (buffer->cur(+1).codepoint))
       {
 	/* <LV,T>, try to combine. */
-	tindex = buffer->cur(+1).codepoint - TBase;
-	hb_codepoint_t new_s = s + tindex;
+	unsigned int new_tindex = buffer->cur(+1).codepoint - TBase;
+	hb_codepoint_t new_s = s + new_tindex;
         if (font->get_glyph (new_s, 0, &glyph))
 	{
 	  buffer->replace_glyphs (2, 1, &new_s);
@@ -187,11 +184,12 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
 	}
       }
 
-      /* Otherwise, decompose if font doesn't support <LV>,
-       * or if having non-combining <LV,T>.  Note that we
-       * already handled combining <LV,T> above. */
+      /* Otherwise, decompose if font doesn't support <LV> or <LVT>,
+       * or if having non-combining <LV,T>.  Note that we already handled
+       * combining <LV,T> above. */
       if (!has_glyph ||
-	  (buffer->idx + 1 < count &&
+	  (!tindex &&
+	   buffer->idx + 1 < count &&
 	   isT (buffer->cur(+1).codepoint)))
       {
 	hb_codepoint_t decomposed[3] = {LBase + lindex,
@@ -199,7 +197,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
 					TBase + tindex};
         if (font->get_glyph (decomposed[0], 0, &glyph) &&
 	    font->get_glyph (decomposed[1], 0, &glyph) &&
-	    (tindex && font->get_glyph (decomposed[2], 0, &glyph)))
+	    (!tindex || font->get_glyph (decomposed[2], 0, &glyph)))
 	{
 	  buffer->replace_glyphs (1, tindex ? 3 : 2, decomposed);
 	  if (unlikely (buffer->in_error))
@@ -209,7 +207,6 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
       }
     }
 
-    next:
     buffer->next_glyph ();
   }
   buffer->swap_buffers ();
commit bdb20dafc3f737923da3dca0c832fdf4ab8daabc
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Jan 2 14:04:30 2014 +0800

    [hangul] Fix decomposition
    
    Part of https://github.com/behdad/harfbuzz/pull/10

diff --git a/src/hb-ot-shape-complex-hangul.cc b/src/hb-ot-shape-complex-hangul.cc
index ed32935..4194497 100644
--- a/src/hb-ot-shape-complex-hangul.cc
+++ b/src/hb-ot-shape-complex-hangul.cc
@@ -165,8 +165,8 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
       bool has_glyph = font->get_glyph (s, 0, &glyph);
       unsigned int lindex = (s - SBase) / NCount;
       unsigned int nindex = (s - SBase) % NCount;
-      unsigned int vindex = nindex / VCount;
-      unsigned int tindex = nindex % VCount;
+      unsigned int vindex = nindex / TCount;
+      unsigned int tindex = nindex % TCount;
 
       if (tindex && has_glyph)
 	goto next; /* <LVT> supported.  Nothing to do. */
commit 32478656ce6e7926c3ad481511f02187ca743af6
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Jan 2 14:01:56 2014 +0800

    [hangul] Tighten up character categories
    
    I had tried to expand to fill the blocks, but that sounds wrong in
    retrospect.

diff --git a/src/hb-ot-shape-complex-hangul.cc b/src/hb-ot-shape-complex-hangul.cc
index 94cf5e5..ed32935 100644
--- a/src/hb-ot-shape-complex-hangul.cc
+++ b/src/hb-ot-shape-complex-hangul.cc
@@ -60,7 +60,7 @@ collect_features_hangul (hb_ot_shape_planner_t *plan)
 #define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
 #define isCombinedS(u) (hb_in_range<hb_codepoint_t> ((u), SBase, SBase+SCount-1))
 
-#define isT(u) (hb_in_ranges<hb_codepoint_t> ((u),  0x11A8, 0x11FF, 0xD7C8, 0xD7FF))
+#define isT(u) (hb_in_ranges<hb_codepoint_t> ((u),  0x11A8, 0x11FF, 0xD7CB, 0xD7FB))
 
 static void
 preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
@@ -82,7 +82,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
    *
    *   - <L>: U+1100..115F, U+A960..A97F
    *   - <V>: U+1160..11A7, U+D7B0..D7C7
-   *   - <T>: U+11A8..11FF, U+D7C8..D7FF
+   *   - <T>: U+11A8..11FF, U+D7CB..D7FB
    *
    *   - Only the <L,V> sequences for the 11xx ranges combine.
    *   - Only <LV,T> sequences for T in U+11A8..11C3 combine.


More information about the HarfBuzz mailing list