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

Lars Knoll lars.knoll at nokia.com
Mon Dec 14 07:35:01 PST 2009


On Wednesday 28 October 2009 05:51:16 am Behdad Esfahbod wrote:
>  contrib/harfbuzz-unicode.c |   27 ++++++++++++++++++++++++---
>  src/harfbuzz-hebrew.c      |    3 ++-
>  2 files changed, 26 insertions(+), 4 deletions(-)
> 
> New commits:
> commit b90ffbace5536786eafe23e28ec3eee74c7c4e27
> Author: Adam Langley <agl at chromium.org>
> Date:   Tue Oct 27 16:13:20 2009 -0700
> 
>     Initialize Hebrew shaper_item even when HB_SelectScript fails
> 

This commit unfortunately made it into Qt 4.6 and causes crashes in 
applications.

See http://bugreports.qt.nokia.com/browse/QTBUG-6436

You can not call HB_HeuristicSetGlyphAttributes, before calling 
HB_ConvertStringToGlyphIndices.

Can you please provide a test case of what this submit was meant to fix?

Lars


> diff --git a/src/harfbuzz-hebrew.c b/src/harfbuzz-hebrew.c
> index 533a063..2bda386 100644
> --- a/src/harfbuzz-hebrew.c
> +++ b/src/harfbuzz-hebrew.c
> @@ -56,6 +56,8 @@ HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item)
> 
>      assert(shaper_item->item.script == HB_Script_Hebrew);
> 
> +    HB_HeuristicSetGlyphAttributes(shaper_item);
> +
>  #ifndef NO_OPENTYPE
>      if (HB_SelectScript(shaper_item, hebrew_features)) {
> 
> @@ -64,7 +66,6 @@ HB_Bool HB_HebrewShape(HB_ShaperItem *shaper_item)
>              return FALSE;
> 
> 
> -        HB_HeuristicSetGlyphAttributes(shaper_item);
>          HB_OpenTypeShape(shaper_item, /*properties*/0);
>          return HB_OpenTypePosition(shaper_item, availableGlyphs,
>  /*doLogClusters*/TRUE); }
> commit 620f1d90a7c7207492ff3eabf0f6185e8b78f9dc
> Author: Adam Langley <agl at chromium.org>
> Date:   Tue Oct 27 16:08:38 2009 -0700
> 
>     Implement HB_GetMirroredChar under contrib/
> 
> diff --git a/contrib/harfbuzz-unicode.c b/contrib/harfbuzz-unicode.c
> index 9b3c43e..51dd4ea 100644
> --- a/contrib/harfbuzz-unicode.c
> +++ b/contrib/harfbuzz-unicode.c
> @@ -6,8 +6,9 @@
>  #include <harfbuzz-shaper.h>
>  #include "harfbuzz-unicode.h"
> 
> -#include "tables/script-properties.h"
>  #include "tables/grapheme-break-properties.h"
> +#include "tables/mirroring-properties.h"
> +#include "tables/script-properties.h"
> 
>  uint32_t
>  utf16_to_code_point(const uint16_t *chars, size_t len, ssize_t *iter) {
> @@ -234,10 +235,30 @@ HB_GetGraphemeAndLineBreakClass(HB_UChar32 ch,
>  HB_GraphemeClass *gclass, HB_Line *breakclass = HB_GetLineBreakClass(ch);
>  }
> 
> +static int
> +mirroring_property_cmp(const void *vkey, const void *vcandidate) {
> +  const uint32_t key = (uint32_t) (intptr_t) vkey;
> +  const struct mirroring_property *candidate = vcandidate;
> +
> +  if (key < candidate->a) {
> +    return -1;
> +  } else if (key > candidate->a) {
> +    return 1;
> +  } else {
> +    return 0;
> +  }
> +}
> +
>  HB_UChar16
>  HB_GetMirroredChar(HB_UChar16 ch) {
> -  abort();
> -  return 0;
> +  const void *mprop = bsearch((void *) (intptr_t) ch,
>  mirroring_properties, +                             
>  mirroring_properties_count,
> +                              sizeof(struct mirroring_property),
> +                              mirroring_property_cmp);
> +  if (!mprop)
> +    return ch;
> +
> +  return ((const struct mirroring_property *) mprop)->b;
>  }
> 
>  void *
> _______________________________________________
> HarfBuzz mailing list
> HarfBuzz at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/harfbuzz
> 



More information about the HarfBuzz mailing list