Hello community, here is the log from the commit of package harfbuzz for openSUSE:Factory checked in at 2013-05-28 11:45:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/harfbuzz (Old) and /work/SRC/openSUSE:Factory/.harfbuzz.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "harfbuzz" Changes: -------- --- /work/SRC/openSUSE:Factory/harfbuzz/harfbuzz.changes 2013-04-22 14:05:51.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.harfbuzz.new/harfbuzz.changes 2013-05-28 11:45:10.000000000 +0200 @@ -1,0 +2,8 @@ +Wed May 22 12:19:17 UTC 2013 - [email protected] + +- Update to version 0.9.17: + + Build fixes. + + Fix bug in hb_set_get_min(). + + Fix regression with Arabic mark positioning / width-zeroing. + +------------------------------------------------------------------- Old: ---- harfbuzz-0.9.16.tar.bz2 New: ---- harfbuzz-0.9.17.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ harfbuzz.spec ++++++ --- /var/tmp/diff_new_pack.vzRsij/_old 2013-05-28 11:45:11.000000000 +0200 +++ /var/tmp/diff_new_pack.vzRsij/_new 2013-05-28 11:45:11.000000000 +0200 @@ -17,7 +17,7 @@ Name: harfbuzz -Version: 0.9.16 +Version: 0.9.17 Release: 0 # FIXME: graphite2 is not packaged / http://projects.palaso.org/projects/graphitedev Summary: An OpenType text shaping engine ++++++ harfbuzz-0.9.16.tar.bz2 -> harfbuzz-0.9.17.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/NEWS new/harfbuzz-0.9.17/NEWS --- old/harfbuzz-0.9.16/NEWS 2013-04-19 22:27:04.000000000 +0200 +++ new/harfbuzz-0.9.17/NEWS 2013-05-20 15:23:34.000000000 +0200 @@ -1,3 +1,11 @@ +Overview of changes leading to 0.9.17 +Monday, May 20, 2013 +===================================== + +- Build fixes. +- Fix bug in hb_set_get_min(). +- Fix regression with Arabic mark positioning / width-zeroing. + Overview of changes leading to 0.9.16 Friday, April 19, 2013 ===================================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/configure new/harfbuzz-0.9.17/configure --- old/harfbuzz-0.9.16/configure 2013-04-19 22:24:01.000000000 +0200 +++ new/harfbuzz-0.9.17/configure 2013-05-20 15:23:53.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for HarfBuzz 0.9.16. +# Generated by GNU Autoconf 2.68 for HarfBuzz 0.9.17. # # Report bugs to <http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz>. # @@ -571,8 +571,8 @@ # Identity of this package. PACKAGE_NAME='HarfBuzz' PACKAGE_TARNAME='harfbuzz' -PACKAGE_VERSION='0.9.16' -PACKAGE_STRING='HarfBuzz 0.9.16' +PACKAGE_VERSION='0.9.17' +PACKAGE_STRING='HarfBuzz 0.9.17' PACKAGE_BUGREPORT='http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz' PACKAGE_URL='http://harfbuzz.org/' @@ -1385,7 +1385,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures HarfBuzz 0.9.16 to adapt to many kinds of systems. +\`configure' configures HarfBuzz 0.9.17 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1455,7 +1455,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of HarfBuzz 0.9.16:";; + short | recursive ) echo "Configuration of HarfBuzz 0.9.17:";; esac cat <<\_ACEOF @@ -1589,7 +1589,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -HarfBuzz configure 0.9.16 +HarfBuzz configure 0.9.17 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2133,7 +2133,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by HarfBuzz $as_me 0.9.16, which was +It was created by HarfBuzz $as_me 0.9.17, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2954,7 +2954,7 @@ # Define the identity of the package. PACKAGE='harfbuzz' - VERSION='0.9.16' + VERSION='0.9.17' # Some tools Automake needs. @@ -16284,8 +16284,8 @@ HB_VERSION_MAJOR=0 HB_VERSION_MINOR=9 -HB_VERSION_MICRO=16 -HB_VERSION=0.9.16 +HB_VERSION_MICRO=17 +HB_VERSION=0.9.17 @@ -16296,7 +16296,7 @@ -HB_LIBTOOL_VERSION_INFO=916:0:916 +HB_LIBTOOL_VERSION_INFO=917:0:917 @@ -17361,7 +17361,7 @@ # necessarily want, like debugging and optimization flags # See man (1) icu-config for more info. ICU_CFLAGS=`$ICU_CONFIG --cppflags` - ICU_LIBS=`$ICU_CONFIG --ldflags-libsonly` + ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -17560,7 +17560,7 @@ # necessarily want, like debugging and optimization flags # See man (1) icu-config for more info. ICU_LE_CFLAGS=`$ICU_CONFIG --cppflags` - ICU_LE_LIBS=`$ICU_CONFIG --ldflags-libsonly --ldflags-layout` + ICU_LE_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly --ldflags-layout` { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -18613,7 +18613,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by HarfBuzz $as_me 0.9.16, which was +This file was extended by HarfBuzz $as_me 0.9.17, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18680,7 +18680,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -HarfBuzz config.status 0.9.16 +HarfBuzz config.status 0.9.17 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/configure.ac new/harfbuzz-0.9.17/configure.ac --- old/harfbuzz-0.9.16/configure.ac 2013-04-19 22:23:07.000000000 +0200 +++ new/harfbuzz-0.9.17/configure.ac 2013-05-20 15:21:57.000000000 +0200 @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([HarfBuzz], - [0.9.16], + [0.9.17], [http://bugs.freedesktop.org/enter_bug.cgi?product=harfbuzz], [harfbuzz], [http://harfbuzz.org/]) @@ -13,7 +13,7 @@ AM_SILENT_RULES([yes]) # Initialize libtool -AM_PROG_AR +m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) LT_PREREQ([2.2]) LT_INIT([disable-static]) @@ -177,7 +177,7 @@ # necessarily want, like debugging and optimization flags # See man (1) icu-config for more info. ICU_CFLAGS=`$ICU_CONFIG --cppflags` - ICU_LIBS=`$ICU_CONFIG --ldflags-libsonly` + ICU_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly` AC_SUBST(ICU_CFLAGS) AC_SUBST(ICU_LIBS) AC_MSG_RESULT([yes]) @@ -205,7 +205,7 @@ # necessarily want, like debugging and optimization flags # See man (1) icu-config for more info. ICU_LE_CFLAGS=`$ICU_CONFIG --cppflags` - ICU_LE_LIBS=`$ICU_CONFIG --ldflags-libsonly --ldflags-layout` + ICU_LE_LIBS=`$ICU_CONFIG --ldflags-searchpath --ldflags-libsonly --ldflags-layout` AC_SUBST(ICU_LE_CFLAGS) AC_SUBST(ICU_LE_LIBS) AC_MSG_RESULT([yes]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-buffer-private.hh new/harfbuzz-0.9.17/src/hb-buffer-private.hh --- old/harfbuzz-0.9.16/src/hb-buffer-private.hh 2013-03-19 10:47:13.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-buffer-private.hh 2013-05-02 21:46:20.000000000 +0200 @@ -80,6 +80,8 @@ inline hb_glyph_info_t &prev (void) { return out_info[out_len - 1]; } inline hb_glyph_info_t prev (void) const { return info[out_len - 1]; } + inline bool has_separate_output (void) const { return info != out_info; } + unsigned int serial; /* These reflect current allocations of the bytes in glyph_info_t's var1 and var2. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-buffer.cc new/harfbuzz-0.9.17/src/hb-buffer.cc --- old/harfbuzz-0.9.16/src/hb-buffer.cc 2013-03-19 10:47:13.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-buffer.cc 2013-04-30 17:35:05.000000000 +0200 @@ -549,7 +549,7 @@ { assert (byte_i < 8 && byte_i + count <= 8); - if (DEBUG (BUFFER)) + if (DEBUG_ENABLED (BUFFER)) dump_var_allocation (this); DEBUG_MSG (BUFFER, this, "Allocating var bytes %d..%d for %s", @@ -564,7 +564,7 @@ void hb_buffer_t::deallocate_var (unsigned int byte_i, unsigned int count, const char *owner) { - if (DEBUG (BUFFER)) + if (DEBUG_ENABLED (BUFFER)) dump_var_allocation (this); DEBUG_MSG (BUFFER, this, @@ -581,7 +581,7 @@ void hb_buffer_t::assert_var (unsigned int byte_i, unsigned int count, const char *owner) { - if (DEBUG (BUFFER)) + if (DEBUG_ENABLED (BUFFER)) dump_var_allocation (this); DEBUG_MSG (BUFFER, this, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-layout-gpos-table.hh new/harfbuzz-0.9.17/src/hb-ot-layout-gpos-table.hh --- old/harfbuzz-0.9.16/src/hb-ot-layout-gpos-table.hh 2013-04-18 05:14:23.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-ot-layout-gpos-table.hh 2013-05-14 21:21:11.000000000 +0200 @@ -710,8 +710,6 @@ TRACE_COLLECT_GLYPHS (this); /* (this+coverage).add_coverage (c->input); // Don't need this. */ - /* TODO only add values for pairs that have nonzero adjustments. */ - unsigned int count1 = class1Count; const ClassDef &klass1 = this+classDef1; for (unsigned int i = 0; i < count1; i++) @@ -1014,7 +1012,6 @@ TRACE_COLLECT_GLYPHS (this); (this+markCoverage).add_coverage (c->input); (this+baseCoverage).add_coverage (c->input); - /* TODO only add combinations that have nonzero adjustment. */ } inline const Coverage &get_coverage (void) const @@ -1118,7 +1115,6 @@ TRACE_COLLECT_GLYPHS (this); (this+markCoverage).add_coverage (c->input); (this+ligatureCoverage).add_coverage (c->input); - /* TODO only add combinations that have nonzero adjustment. */ } inline const Coverage &get_coverage (void) const @@ -1234,7 +1230,6 @@ TRACE_COLLECT_GLYPHS (this); (this+mark1Coverage).add_coverage (c->input); (this+mark2Coverage).add_coverage (c->input); - /* TODO only add combinations that have nonzero adjustment. */ } inline const Coverage &get_coverage (void) const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-layout-gsub-table.hh new/harfbuzz-0.9.17/src/hb-ot-layout-gsub-table.hh --- old/harfbuzz-0.9.16/src/hb-ot-layout-gsub-table.hh 2013-04-18 05:36:37.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-ot-layout-gsub-table.hh 2013-05-14 21:21:11.000000000 +0200 @@ -275,11 +275,18 @@ unsigned int klass = c->buffer->cur().glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE ? HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH : 0; unsigned int count = substitute.len; - for (unsigned int i = 0; i < count; i++) { - set_lig_props_for_component (c->buffer->cur(), i); - c->output_glyph (substitute.array[i], klass); + if (count == 1) /* Special-case to make it in-place. */ + { + c->replace_glyph (substitute.array[0]); + } + else + { + for (unsigned int i = 0; i < count; i++) { + set_lig_props_for_component (c->buffer->cur(), i); + c->output_glyph (substitute.array[i], klass); + } + c->buffer->skip_glyph (); } - c->buffer->skip_glyph (); return TRACE_RETURN (true); } @@ -1196,38 +1203,38 @@ if (likely (!is_reverse ())) { - /* in/out forward substitution */ - c->buffer->clear_output (); - c->buffer->idx = 0; - - while (c->buffer->idx < c->buffer->len) - { - if (digest->may_have (c->buffer->cur().codepoint) && - (c->buffer->cur().mask & c->lookup_mask) && - apply_once (c)) - ret = true; - else - c->buffer->next_glyph (); - } - if (ret) - c->buffer->swap_buffers (); + /* in/out forward substitution */ + c->buffer->clear_output (); + c->buffer->idx = 0; + + while (c->buffer->idx < c->buffer->len) + { + if (digest->may_have (c->buffer->cur().codepoint) && + (c->buffer->cur().mask & c->lookup_mask) && + apply_once (c)) + ret = true; + else + c->buffer->next_glyph (); + } + if (ret) + c->buffer->swap_buffers (); } else { - /* in-place backward substitution */ - c->buffer->remove_output (); - c->buffer->idx = c->buffer->len - 1; - do - { - if (digest->may_have (c->buffer->cur().codepoint) && - (c->buffer->cur().mask & c->lookup_mask) && - apply_once (c)) - ret = true; - else - c->buffer->idx--; + /* in-place backward substitution */ + c->buffer->remove_output (); + c->buffer->idx = c->buffer->len - 1; + do + { + if (digest->may_have (c->buffer->cur().codepoint) && + (c->buffer->cur().mask & c->lookup_mask) && + apply_once (c)) + ret = true; + else + c->buffer->idx--; - } - while ((int) c->buffer->idx >= 0); + } + while ((int) c->buffer->idx >= 0); } return ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-map-private.hh new/harfbuzz-0.9.17/src/hb-ot-map-private.hh --- old/harfbuzz-0.9.16/src/hb-ot-map-private.hh 2013-03-19 12:04:53.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-ot-map-private.hh 2013-05-14 21:21:11.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright © 2009,2010 Red Hat, Inc. - * Copyright © 2010,2011,2012 Google, Inc. + * Copyright © 2010,2011,2012,2013 Google, Inc. * * This is part of HarfBuzz, a text shaping library. * @@ -31,8 +31,8 @@ #include "hb-buffer-private.hh" -#include "hb-ot-layout-private.hh" +struct hb_ot_shape_plan_t; static const hb_tag_t table_tags[2] = {HB_OT_TAG_GSUB, HB_OT_TAG_GPOS}; @@ -67,9 +67,9 @@ typedef void (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer); - struct pause_map_t { - unsigned int num_lookups; /* Cumulative */ - pause_func_t callback; + struct stage_map_t { + unsigned int last_lookup; /* Cumulative */ + pause_func_t pause_func; }; @@ -110,23 +110,28 @@ *lookup_count = 0; return; } - assert (stage <= pauses[table_index].len); - unsigned int start = stage ? pauses[table_index][stage - 1].num_lookups : 0; - unsigned int end = stage < pauses[table_index].len ? pauses[table_index][stage].num_lookups : lookups[table_index].len; + assert (stage <= stages[table_index].len); + unsigned int start = stage ? stages[table_index][stage - 1].last_lookup : 0; + unsigned int end = stage < stages[table_index].len ? stages[table_index][stage].last_lookup : lookups[table_index].len; *plookups = &lookups[table_index][start]; *lookup_count = end - start; } HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const; + HB_INTERNAL inline void apply (unsigned int table_index, + const struct hb_ot_shape_plan_t *plan, + hb_font_t *font, + hb_buffer_t *buffer) const; HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const; HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const; inline void finish (void) { features.finish (); - lookups[0].finish (); - lookups[1].finish (); - pauses[0].finish (); - pauses[1].finish (); + for (unsigned int table_index = 0; table_index < 2; table_index++) + { + lookups[table_index].finish (); + stages[table_index].finish (); + } } public: @@ -145,7 +150,7 @@ hb_prealloced_array_t<feature_map_t, 8> features; hb_prealloced_array_t<lookup_map_t, 32> lookups[2]; /* GSUB/GPOS */ - hb_prealloced_array_t<pause_map_t, 1> pauses[2]; /* GSUB/GPOS */ + hb_prealloced_array_t<stage_map_t, 4> stages[2]; /* GSUB/GPOS */ }; enum hb_ot_map_feature_flags_t { @@ -195,8 +200,10 @@ inline void finish (void) { feature_infos.finish (); - pauses[0].finish (); - pauses[1].finish (); + for (unsigned int table_index = 0; table_index < 2; table_index++) + { + stages[table_index].finish (); + } } private: @@ -213,9 +220,9 @@ { return (a->tag != b->tag) ? (a->tag < b->tag ? -1 : 1) : (a->seq < b->seq ? -1 : 1); } }; - struct pause_info_t { - unsigned int stage; - hb_ot_map_t::pause_func_t callback; + struct stage_info_t { + unsigned int index; + hb_ot_map_t::pause_func_t pause_func; }; HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func); @@ -232,8 +239,8 @@ private: unsigned int current_stage[2]; /* GSUB/GPOS */ - hb_prealloced_array_t<feature_info_t,16> feature_infos; - hb_prealloced_array_t<pause_info_t, 1> pauses[2]; /* GSUB/GPOS */ + hb_prealloced_array_t<feature_info_t, 32> feature_infos; + hb_prealloced_array_t<stage_info_t, 8> stages[2]; /* GSUB/GPOS */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-map.cc new/harfbuzz-0.9.17/src/hb-ot-map.cc --- old/harfbuzz-0.9.16/src/hb-ot-map.cc 2013-04-19 00:31:10.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-ot-map.cc 2013-05-14 21:21:11.000000000 +0200 @@ -1,6 +1,6 @@ /* * Copyright © 2009,2010 Red Hat, Inc. - * Copyright © 2010,2011 Google, Inc. + * Copyright © 2010,2011,2013 Google, Inc. * * This is part of HarfBuzz, a text shaping library. * @@ -28,6 +28,8 @@ #include "hb-ot-map-private.hh" +#include "hb-ot-layout-private.hh" + void hb_ot_map_t::add_lookups (hb_face_t *face, @@ -100,55 +102,50 @@ info->stage[1] = current_stage[1]; } -/* Keep the next two functions in sync. */ - -void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const +inline void hb_ot_map_t::apply (unsigned int table_index, + const hb_ot_shape_plan_t *plan, + hb_font_t *font, + hb_buffer_t *buffer) const { - const unsigned int table_index = 0; unsigned int i = 0; - for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; pause_index++) { - const pause_map_t *pause = &pauses[table_index][pause_index]; - for (; i < pause->num_lookups; i++) - hb_ot_layout_substitute_lookup (font, buffer, - lookups[table_index][i].index, - lookups[table_index][i].mask, - lookups[table_index][i].auto_zwj); - - buffer->clear_output (); + for (unsigned int stage_index = 0; stage_index < stages[table_index].len; stage_index++) { + const stage_map_t *stage = &stages[table_index][stage_index]; + for (; i < stage->last_lookup; i++) + switch (table_index) + { + case 0: + hb_ot_layout_substitute_lookup (font, buffer, lookups[table_index][i].index, + lookups[table_index][i].mask, + lookups[table_index][i].auto_zwj); + break; + + case 1: + hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index, + lookups[table_index][i].mask, + lookups[table_index][i].auto_zwj); + break; + } - if (pause->callback) - pause->callback (plan, font, buffer); + if (stage->pause_func) + { + buffer->clear_output (); + stage->pause_func (plan, font, buffer); + } } +} - for (; i < lookups[table_index].len; i++) - hb_ot_layout_substitute_lookup (font, buffer, lookups[table_index][i].index, - lookups[table_index][i].mask, - lookups[table_index][i].auto_zwj); +void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const +{ + apply (0, plan, font, buffer); } void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const { - const unsigned int table_index = 1; - unsigned int i = 0; - - for (unsigned int pause_index = 0; pause_index < pauses[table_index].len; pause_index++) { - const pause_map_t *pause = &pauses[table_index][pause_index]; - for (; i < pause->num_lookups; i++) - hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index, - lookups[table_index][i].mask, - lookups[table_index][i].auto_zwj); - - if (pause->callback) - pause->callback (plan, font, buffer); - } - - for (; i < lookups[table_index].len; i++) - hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index, - lookups[table_index][i].mask, - lookups[table_index][i].auto_zwj); + apply (1, plan, font, buffer); } + void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_out) const { for (unsigned int i = 0; i < lookups[table_index].len; i++) @@ -157,10 +154,10 @@ void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func) { - pause_info_t *p = pauses[table_index].push (); - if (likely (p)) { - p->stage = current_stage[table_index]; - p->callback = pause_func; + stage_info_t *s = stages[table_index].push (); + if (likely (s)) { + s->index = current_stage[table_index]; + s->pause_func = pause_func; } current_stage[table_index]++; @@ -277,7 +274,7 @@ &required_feature_index)) m.add_lookups (face, table_index, required_feature_index, 1, true); - unsigned int pause_index = 0; + unsigned int stage_index = 0; unsigned int last_num_lookups = 0; for (unsigned stage = 0; stage < current_stage[table_index]; stage++) { @@ -307,14 +304,14 @@ last_num_lookups = m.lookups[table_index].len; - if (pause_index < pauses[table_index].len && pauses[table_index][pause_index].stage == stage) { - hb_ot_map_t::pause_map_t *pause_map = m.pauses[table_index].push (); - if (likely (pause_map)) { - pause_map->num_lookups = last_num_lookups; - pause_map->callback = pauses[table_index][pause_index].callback; + if (stage_index < stages[table_index].len && stages[table_index][stage_index].index == stage) { + hb_ot_map_t::stage_map_t *stage_map = m.stages[table_index].push (); + if (likely (stage_map)) { + stage_map->last_lookup = last_num_lookups; + stage_map->pause_func = stages[table_index][stage_index].pause_func; } - pause_index++; + stage_index++; } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-arabic.cc new/harfbuzz-0.9.17/src/hb-ot-shape-complex-arabic.cc --- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-arabic.cc 2013-04-04 20:22:54.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-arabic.cc 2013-05-20 15:07:20.000000000 +0200 @@ -352,6 +352,6 @@ NULL, /* decompose */ NULL, /* compose */ setup_masks_arabic, - HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF, + HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE, true, /* fallback_position */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-default.cc new/harfbuzz-0.9.17/src/hb-ot-shape-complex-default.cc --- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-default.cc 2013-04-05 05:04:20.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-default.cc 2013-05-20 15:07:20.000000000 +0200 @@ -215,6 +215,6 @@ NULL, /* decompose */ compose_default, NULL, /* setup_masks */ - HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE, + HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE, true, /* fallback_position */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-myanmar.cc new/harfbuzz-0.9.17/src/hb-ot-shape-complex-myanmar.cc --- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-myanmar.cc 2013-03-19 12:04:53.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-myanmar.cc 2013-05-20 15:07:20.000000000 +0200 @@ -540,6 +540,6 @@ NULL, /* decompose */ NULL, /* compose */ setup_masks_myanmar, - HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF, + HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY, false, /* fallback_position */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-private.hh new/harfbuzz-0.9.17/src/hb-ot-shape-complex-private.hh --- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-private.hh 2013-04-05 18:38:44.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-private.hh 2013-05-20 15:14:39.000000000 +0200 @@ -41,8 +41,10 @@ enum hb_ot_shape_zero_width_marks_type_t { HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE, - HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE, - HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF +// HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY, + HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE, + HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY, + HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-complex-thai.cc new/harfbuzz-0.9.17/src/hb-ot-shape-complex-thai.cc --- old/harfbuzz-0.9.16/src/hb-ot-shape-complex-thai.cc 2013-03-19 10:47:13.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-ot-shape-complex-thai.cc 2013-05-20 15:07:20.000000000 +0200 @@ -373,6 +373,6 @@ NULL, /* decompose */ NULL, /* compose */ NULL, /* setup_masks */ - HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE, + HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE, false,/* fallback_position */ }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape-private.hh new/harfbuzz-0.9.17/src/hb-ot-shape-private.hh --- old/harfbuzz-0.9.16/src/hb-ot-shape-private.hh 2013-03-19 10:47:13.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-ot-shape-private.hh 2013-05-02 21:46:20.000000000 +0200 @@ -30,8 +30,7 @@ #include "hb-private.hh" #include "hb-ot-map-private.hh" - - +#include "hb-ot-layout-private.hh" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-ot-shape.cc new/harfbuzz-0.9.17/src/hb-ot-shape.cc --- old/harfbuzz-0.9.16/src/hb-ot-shape.cc 2013-03-19 10:47:13.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-ot-shape.cc 2013-05-20 15:18:14.000000000 +0200 @@ -401,6 +401,30 @@ /* Position */ static inline void +zero_mark_widths_by_unicode (hb_buffer_t *buffer) +{ + unsigned int count = buffer->len; + for (unsigned int i = 0; i < count; i++) + if (_hb_glyph_info_get_general_category (&buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) + { + buffer->pos[i].x_advance = 0; + buffer->pos[i].y_advance = 0; + } +} + +static inline void +zero_mark_widths_by_gdef (hb_buffer_t *buffer) +{ + unsigned int count = buffer->len; + for (unsigned int i = 0; i < count; i++) + if ((buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK)) + { + buffer->pos[i].x_advance = 0; + buffer->pos[i].y_advance = 0; + } +} + +static inline void hb_ot_position_default (hb_ot_shape_context_t *c) { hb_ot_layout_position_start (c->font, c->buffer); @@ -419,22 +443,22 @@ } - /* Zero'ing mark widths by GDEF (as used in Myanmar spec) happens - * *before* GPOS. */ switch (c->plan->shaper->zero_width_marks) { - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF: - for (unsigned int i = 0; i < count; i++) - if ((c->buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MARK)) - { - c->buffer->pos[i].x_advance = 0; - c->buffer->pos[i].y_advance = 0; - } + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY: + zero_mark_widths_by_gdef (c->buffer); break; + /* Not currently used for any shaper: + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY: + zero_mark_widths_by_unicode (c->buffer); + break; + */ + default: case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE: - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE: + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE: + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE: break; } } @@ -468,22 +492,20 @@ ret = true; } - /* Zero'ing mark widths by Unicode happens - * *after* GPOS. */ switch (c->plan->shaper->zero_width_marks) { - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE: - for (unsigned int i = 0; i < count; i++) - if (_hb_glyph_info_get_general_category (&c->buffer->info[i]) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) - { - c->buffer->pos[i].x_advance = 0; - c->buffer->pos[i].y_advance = 0; - } + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE: + zero_mark_widths_by_unicode (c->buffer); + break; + + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE: + zero_mark_widths_by_gdef (c->buffer); break; default: case HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE: - case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF: + //case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY: + case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY: break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-private.hh new/harfbuzz-0.9.17/src/hb-private.hh --- old/harfbuzz-0.9.16/src/hb-private.hh 2013-04-19 00:39:29.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-private.hh 2013-05-02 19:56:57.000000000 +0200 @@ -563,8 +563,8 @@ return level < max_level; } -#define DEBUG_LEVEL(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT)) -#define DEBUG(WHAT) (DEBUG_LEVEL (WHAT, 0)) +#define DEBUG_LEVEL_ENABLED(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT)) +#define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0)) template <int max_level> static inline void _hb_debug_msg_va (const char *what, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-set-private.hh new/harfbuzz-0.9.17/src/hb-set-private.hh --- old/harfbuzz-0.9.16/src/hb-set-private.hh 2013-04-19 20:41:00.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-set-private.hh 2013-05-14 21:30:46.000000000 +0200 @@ -45,12 +45,14 @@ { ASSERT_POD (); + static const unsigned int mask_bytes = sizeof (mask_t); + static const unsigned int mask_bits = sizeof (mask_t) * 8; static const unsigned int num_bits = 0 - + (sizeof (mask_t) >= 1 ? 3 : 0) - + (sizeof (mask_t) >= 2 ? 1 : 0) - + (sizeof (mask_t) >= 4 ? 1 : 0) - + (sizeof (mask_t) >= 8 ? 1 : 0) - + (sizeof (mask_t) >= 16? 1 : 0) + + (mask_bytes >= 1 ? 3 : 0) + + (mask_bytes >= 2 ? 1 : 0) + + (mask_bytes >= 4 ? 1 : 0) + + (mask_bytes >= 8 ? 1 : 0) + + (mask_bytes >= 16? 1 : 0) + 0; ASSERT_STATIC (shift < sizeof (hb_codepoint_t) * 8); @@ -65,7 +67,7 @@ } inline void add_range (hb_codepoint_t a, hb_codepoint_t b) { - if ((b >> shift) - (a >> shift) >= sizeof (mask_t) * 8 - 1) + if ((b >> shift) - (a >> shift) >= mask_bits - 1) mask = (mask_t) -1; else { mask_t ma = mask_for (a); @@ -81,7 +83,7 @@ private: static inline mask_t mask_for (hb_codepoint_t g) { - return ((mask_t) 1) << ((g >> shift) & (sizeof (mask_t) * 8 - 1)); + return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1)); } mask_t mask; }; @@ -295,7 +297,7 @@ { for (unsigned int i = 0; i < ELTS; i++) if (elts[i]) - for (unsigned int j = 0; i < BITS; j++) + for (unsigned int j = 0; j < BITS; j++) if (elts[i] & (1 << j)) return i * BITS + j; return SENTINEL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-unicode-private.hh new/harfbuzz-0.9.17/src/hb-unicode-private.hh --- old/harfbuzz-0.9.16/src/hb-unicode-private.hh 2013-03-19 12:04:53.000000000 +0100 +++ new/harfbuzz-0.9.17/src/hb-unicode-private.hh 2013-05-04 01:09:45.000000000 +0200 @@ -128,6 +128,9 @@ * is NOT Default_Ignorable, but it really behaves in a way that it should * be. That has been reported to the Unicode Technical Committee for * consideration. As such, we include it here, since Uniscribe removes it. + * It *is* in Unicode 6.3 however. U+061C ARABIC LETTER MARK from Unicode + * 6.3 is also added manually. The new Unicode 6.3 bidi formatting + * characters are encoded in a block that was Default_Ignorable already. * * Note: While U+115F and U+1160 are Default_Ignorable, we do NOT want to * hide them, as the way Uniscribe has implemented them is with regular @@ -173,6 +176,7 @@ switch (page) { case 0x00: return unlikely (ch == 0x00AD); case 0x03: return unlikely (ch == 0x034F); + case 0x06: return unlikely (ch == 0x061C); case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4, 0x17B5); case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180B, 0x180E); case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200B, 0x200F, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/src/hb-version.h new/harfbuzz-0.9.17/src/hb-version.h --- old/harfbuzz-0.9.16/src/hb-version.h 2013-04-19 22:24:07.000000000 +0200 +++ new/harfbuzz-0.9.17/src/hb-version.h 2013-05-20 15:24:00.000000000 +0200 @@ -38,9 +38,9 @@ #define HB_VERSION_MAJOR 0 #define HB_VERSION_MINOR 9 -#define HB_VERSION_MICRO 16 +#define HB_VERSION_MICRO 17 -#define HB_VERSION_STRING "0.9.16" +#define HB_VERSION_STRING "0.9.17" #define HB_VERSION_CHECK(major,minor,micro) \ ((major)*10000+(minor)*100+(micro) >= \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-0.9.16/test/api/test-set.c new/harfbuzz-0.9.17/test/api/test-set.c --- old/harfbuzz-0.9.16/test/api/test-set.c 2013-01-03 06:22:38.000000000 +0100 +++ new/harfbuzz-0.9.17/test/api/test-set.c 2013-05-14 21:29:42.000000000 +0200 @@ -64,6 +64,10 @@ hb_set_clear (s); test_empty (s); + hb_set_add (s, 33000); + test_not_empty (s); + hb_set_clear (s); + hb_set_add_range (s, 10, 29); test_not_empty (s); g_assert (hb_set_has (s, 13)); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
