[HarfBuzz] harfbuzz: Branch 'master'

Behdad Esfahbod behdad at kemper.freedesktop.org
Fri Jul 11 09:05:57 PDT 2014


 src/hb-ot-shape-normalize.cc |    7 +++++++
 1 file changed, 7 insertions(+)

New commits:
commit efe74214bbb68eaa3d7621e73869b5d58210107e
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Fri Jul 11 11:59:48 2014 -0400

    Show U+FFFD REPLACEMENT CHARACTER for invalid Unicode codepoints
    
    Only if the font doesn't support it.  Ie, this gives the user to
    use non-Unicode codepoints as private values and return a meaningful
    glyph for them.  But if it's invalid and font callback doesn't
    like it, and if font has U+FFFD, show that instead.
    
    Font functions that do not want this automatic replacement to
    happen should return true from get_glyph() if unicode > 0x10FFFF.
    
    Replaces https://github.com/behdad/harfbuzz/pull/27

diff --git a/src/hb-ot-shape-normalize.cc b/src/hb-ot-shape-normalize.cc
index 2a6a439..0d2f8f5 100644
--- a/src/hb-ot-shape-normalize.cc
+++ b/src/hb-ot-shape-normalize.cc
@@ -209,7 +209,14 @@ decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor
   else if (decompose_compatibility (c, buffer->cur().codepoint))
     skip_char (buffer);
   else
+  {
+    /* Not found, not decomposible;  If codepoint is invalid Unicode and
+     * font supports U+FFFD REPLACEMENT CHARACTER, use that instead. */
+    hb_codepoint_t FFFD_glyph;
+    if (buffer->cur().codepoint > 0x10FFFF && c->font->get_glyph (0xFFFD, 0, &FFFD_glyph))
+      glyph = FFFD_glyph;
     next_char (buffer, glyph); /* glyph is initialized in earlier branches. */
+  }
 }
 
 static inline void


More information about the HarfBuzz mailing list