[pango] Fix ChanContext backtrack matching with GPOS
- From: Khaled Hosny <khaledh src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango] Fix ChanContext backtrack matching with GPOS
- Date: Sun, 21 Aug 2011 13:26:41 +0000 (UTC)
commit c37ae57816ac22543fd9fbcf880518406cd1457d
Author: Khaled Hosny <khaledhosny eglug org>
Date: Fri Aug 19 20:14:33 2011 +0200
Fix ChanContext backtrack matching with GPOS
Backported from HarfBuzz-ng:
http://cgit.freedesktop.org/harfbuzz/commit/?id=cc1a8a938b4c13e76b58825a9e1951c4134e634a
pango/opentype/hb-buffer-private.h | 1 +
pango/opentype/hb-ot-layout-gsubgpos-private.hh | 6 +++---
2 files changed, 4 insertions(+), 3 deletions(-)
---
diff --git a/pango/opentype/hb-buffer-private.h b/pango/opentype/hb-buffer-private.h
index f194786..58185e7 100644
--- a/pango/opentype/hb-buffer-private.h
+++ b/pango/opentype/hb-buffer-private.h
@@ -130,6 +130,7 @@ _hb_buffer_allocate_lig_id (hb_buffer_t *buffer);
#define CURPOSITION() (&buffer->positions[buffer->in_pos])
#define OUT_GLYPH(pos) (buffer->out_string[(pos)].codepoint)
#define OUT_INFO(pos) (&buffer->out_string[(pos)])
+#define BACKTRACK_LEN() ((buffer->have_output? buffer->out_length : buffer->in_pos))
HB_END_DECLS
diff --git a/pango/opentype/hb-ot-layout-gsubgpos-private.hh b/pango/opentype/hb-ot-layout-gsubgpos-private.hh
index 0bb96a4..f681f51 100644
--- a/pango/opentype/hb-ot-layout-gsubgpos-private.hh
+++ b/pango/opentype/hb-ot-layout-gsubgpos-private.hh
@@ -144,10 +144,10 @@ static inline bool match_backtrack (APPLY_ARG_DEF,
match_func_t match_func,
char *match_data)
{
- if (HB_UNLIKELY (buffer->out_pos < count))
+ if (HB_UNLIKELY (BACKTRACK_LEN () < count))
return false;
- for (unsigned int i = 0, j = buffer->out_pos - 1; i < count; i++, j--)
+ for (unsigned int i = 0, j = BACKTRACK_LEN () - 1; i < count; i++, j--)
{
while (_hb_ot_layout_skip_mark (context->face, OUT_INFO (j), lookup_flag, NULL))
{
@@ -536,7 +536,7 @@ static inline bool chain_context_lookup (APPLY_ARG_DEF,
ChainContextLookupContext &lookup_context)
{
/* First guess */
- if (HB_UNLIKELY (buffer->out_pos < backtrackCount ||
+ if (HB_UNLIKELY (BACKTRACK_LEN () < backtrackCount ||
buffer->in_pos + inputCount + lookaheadCount > buffer->in_length ||
inputCount + lookaheadCount > context_length))
return false;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]