| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright © 2007,2008,2009,2010 Red Hat, Inc. | 2 * Copyright © 2007,2008,2009,2010 Red Hat, Inc. |
| 3 * Copyright © 2010,2012 Google, Inc. | 3 * Copyright © 2010,2012 Google, Inc. |
| 4 * | 4 * |
| 5 * This is part of HarfBuzz, a text shaping library. | 5 * This is part of HarfBuzz, a text shaping library. |
| 6 * | 6 * |
| 7 * Permission is hereby granted, without written agreement and without | 7 * Permission is hereby granted, without written agreement and without |
| 8 * license or royalty fees, to use, copy, modify, and distribute this | 8 * license or royalty fees, to use, copy, modify, and distribute this |
| 9 * software and its documentation for any purpose, provided that the | 9 * software and its documentation for any purpose, provided that the |
| 10 * above copyright notice and the following two paragraphs appear in | 10 * above copyright notice and the following two paragraphs appear in |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 } | 67 } |
| 68 | 68 |
| 69 hb_face_t *face; | 69 hb_face_t *face; |
| 70 hb_set_t *glyphs; | 70 hb_set_t *glyphs; |
| 71 recurse_func_t recurse_func; | 71 recurse_func_t recurse_func; |
| 72 unsigned int nesting_level_left; | 72 unsigned int nesting_level_left; |
| 73 unsigned int debug_depth; | 73 unsigned int debug_depth; |
| 74 | 74 |
| 75 hb_closure_context_t (hb_face_t *face_, | 75 hb_closure_context_t (hb_face_t *face_, |
| 76 hb_set_t *glyphs_, | 76 hb_set_t *glyphs_, |
| 77 » » unsigned int nesting_level_left_ = MAX_NESTING_LEVEL) : | 77 » » unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL)
: |
| 78 face (face_), | 78 face (face_), |
| 79 glyphs (glyphs_), | 79 glyphs (glyphs_), |
| 80 recurse_func (NULL), | 80 recurse_func (NULL), |
| 81 nesting_level_left (nesting_level_left_), | 81 nesting_level_left (nesting_level_left_), |
| 82 debug_depth (0) {} | 82 debug_depth (0) {} |
| 83 | 83 |
| 84 void set_recurse_func (recurse_func_t func) { recurse_func = func; } | 84 void set_recurse_func (recurse_func_t func) { recurse_func = func; } |
| 85 }; | 85 }; |
| 86 | 86 |
| 87 | 87 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 recurse_func_t recurse_func; | 189 recurse_func_t recurse_func; |
| 190 hb_set_t recursed_lookups; | 190 hb_set_t recursed_lookups; |
| 191 unsigned int nesting_level_left; | 191 unsigned int nesting_level_left; |
| 192 unsigned int debug_depth; | 192 unsigned int debug_depth; |
| 193 | 193 |
| 194 hb_collect_glyphs_context_t (hb_face_t *face_, | 194 hb_collect_glyphs_context_t (hb_face_t *face_, |
| 195 hb_set_t *glyphs_before, /* OUT. May be NULL */ | 195 hb_set_t *glyphs_before, /* OUT. May be NULL */ |
| 196 hb_set_t *glyphs_input, /* OUT. May be NULL */ | 196 hb_set_t *glyphs_input, /* OUT. May be NULL */ |
| 197 hb_set_t *glyphs_after, /* OUT. May be NULL */ | 197 hb_set_t *glyphs_after, /* OUT. May be NULL */ |
| 198 hb_set_t *glyphs_output, /* OUT. May be NULL */ | 198 hb_set_t *glyphs_output, /* OUT. May be NULL */ |
| 199 » » » unsigned int nesting_level_left_ = MAX_NESTING_LE
VEL) : | 199 » » » unsigned int nesting_level_left_ = HB_MAX_NESTING
_LEVEL) : |
| 200 face (face_), | 200 face (face_), |
| 201 before (glyphs_before ? glyphs_before : hb_set_get
_empty ()), | 201 before (glyphs_before ? glyphs_before : hb_set_get
_empty ()), |
| 202 input (glyphs_input ? glyphs_input : hb_set_get
_empty ()), | 202 input (glyphs_input ? glyphs_input : hb_set_get
_empty ()), |
| 203 after (glyphs_after ? glyphs_after : hb_set_get
_empty ()), | 203 after (glyphs_after ? glyphs_after : hb_set_get
_empty ()), |
| 204 output (glyphs_output ? glyphs_output : hb_set_get
_empty ()), | 204 output (glyphs_output ? glyphs_output : hb_set_get
_empty ()), |
| 205 recurse_func (NULL), | 205 recurse_func (NULL), |
| 206 recursed_lookups (), | 206 recursed_lookups (), |
| 207 nesting_level_left (nesting_level_left_), | 207 nesting_level_left (nesting_level_left_), |
| 208 debug_depth (0) | 208 debug_depth (0) |
| 209 { | 209 { |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */ | 348 /* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */ |
| 349 matcher.set_ignore_zwnj (context_match || c->table_index == 1); | 349 matcher.set_ignore_zwnj (context_match || c->table_index == 1); |
| 350 /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if ask
ed to. */ | 350 /* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if ask
ed to. */ |
| 351 matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zw
j); | 351 matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zw
j); |
| 352 matcher.set_mask (context_match ? -1 : c->lookup_mask); | 352 matcher.set_mask (context_match ? -1 : c->lookup_mask); |
| 353 } | 353 } |
| 354 inline void set_lookup_props (unsigned int lookup_props) | 354 inline void set_lookup_props (unsigned int lookup_props) |
| 355 { | 355 { |
| 356 matcher.set_lookup_props (lookup_props); | 356 matcher.set_lookup_props (lookup_props); |
| 357 } | 357 } |
| 358 inline void set_match_func (matcher_t::match_func_t match_func, | 358 inline void set_match_func (matcher_t::match_func_t match_func_, |
| 359 » » » » const void *match_data, | 359 » » » » const void *match_data_, |
| 360 const USHORT glyph_data[]) | 360 const USHORT glyph_data[]) |
| 361 { | 361 { |
| 362 matcher.set_match_func (match_func, match_data); | 362 matcher.set_match_func (match_func_, match_data_); |
| 363 match_glyph_data = glyph_data; | 363 match_glyph_data = glyph_data; |
| 364 } | 364 } |
| 365 | 365 |
| 366 inline void reset (unsigned int start_index_, | 366 inline void reset (unsigned int start_index_, |
| 367 unsigned int num_items_) | 367 unsigned int num_items_) |
| 368 { | 368 { |
| 369 idx = start_index_; | 369 idx = start_index_; |
| 370 num_items = num_items_; | 370 num_items = num_items_; |
| 371 end = c->buffer->len; | 371 end = c->buffer->len; |
| 372 matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().sy
llable () : 0); | 372 matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().sy
llable () : 0); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 | 476 |
| 477 hb_apply_context_t (unsigned int table_index_, | 477 hb_apply_context_t (unsigned int table_index_, |
| 478 hb_font_t *font_, | 478 hb_font_t *font_, |
| 479 hb_buffer_t *buffer_) : | 479 hb_buffer_t *buffer_) : |
| 480 table_index (table_index_), | 480 table_index (table_index_), |
| 481 font (font_), face (font->face), buffer (buffer_), | 481 font (font_), face (font->face), buffer (buffer_), |
| 482 direction (buffer_->props.direction), | 482 direction (buffer_->props.direction), |
| 483 lookup_mask (1), | 483 lookup_mask (1), |
| 484 auto_zwj (true), | 484 auto_zwj (true), |
| 485 recurse_func (NULL), | 485 recurse_func (NULL), |
| 486 » » » nesting_level_left (MAX_NESTING_LEVEL), | 486 » » » nesting_level_left (HB_MAX_NESTING_LEVEL), |
| 487 lookup_props (0), | 487 lookup_props (0), |
| 488 gdef (*hb_ot_layout_from_face (face)->gdef), | 488 gdef (*hb_ot_layout_from_face (face)->gdef), |
| 489 has_glyph_classes (gdef.has_glyph_classes ()), | 489 has_glyph_classes (gdef.has_glyph_classes ()), |
| 490 iter_input (), | 490 iter_input (), |
| 491 iter_context (), | 491 iter_context (), |
| 492 lookup_index ((unsigned int) -1), | 492 lookup_index ((unsigned int) -1), |
| 493 debug_depth (0) {} | 493 debug_depth (0) {} |
| 494 | 494 |
| 495 inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; } | 495 inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; } |
| 496 inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; } | 496 inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; } |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 697 return false; | 697 return false; |
| 698 | 698 |
| 699 return true; | 699 return true; |
| 700 } | 700 } |
| 701 static inline bool match_input (hb_apply_context_t *c, | 701 static inline bool match_input (hb_apply_context_t *c, |
| 702 unsigned int count, /* Including the first glyph
(not matched) */ | 702 unsigned int count, /* Including the first glyph
(not matched) */ |
| 703 const USHORT input[], /* Array of input values--
start with second glyph */ | 703 const USHORT input[], /* Array of input values--
start with second glyph */ |
| 704 match_func_t match_func, | 704 match_func_t match_func, |
| 705 const void *match_data, | 705 const void *match_data, |
| 706 unsigned int *end_offset, | 706 unsigned int *end_offset, |
| 707 » » » » unsigned int match_positions[MAX_CONTEXT_LENGTH]
, | 707 » » » » unsigned int match_positions[HB_MAX_CONTEXT_LENG
TH], |
| 708 bool *p_is_mark_ligature = NULL, | 708 bool *p_is_mark_ligature = NULL, |
| 709 unsigned int *p_total_component_count = NULL) | 709 unsigned int *p_total_component_count = NULL) |
| 710 { | 710 { |
| 711 TRACE_APPLY (NULL); | 711 TRACE_APPLY (NULL); |
| 712 | 712 |
| 713 if (unlikely (count > MAX_CONTEXT_LENGTH)) return_trace (false); | 713 if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false); |
| 714 | 714 |
| 715 hb_buffer_t *buffer = c->buffer; | 715 hb_buffer_t *buffer = c->buffer; |
| 716 | 716 |
| 717 hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; | 717 hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; |
| 718 skippy_iter.reset (buffer->idx, count - 1); | 718 skippy_iter.reset (buffer->idx, count - 1); |
| 719 skippy_iter.set_match_func (match_func, match_data, input); | 719 skippy_iter.set_match_func (match_func, match_data, input); |
| 720 | 720 |
| 721 /* | 721 /* |
| 722 * This is perhaps the trickiest part of OpenType... Remarks: | 722 * This is perhaps the trickiest part of OpenType... Remarks: |
| 723 * | 723 * |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 if (p_is_mark_ligature) | 777 if (p_is_mark_ligature) |
| 778 *p_is_mark_ligature = is_mark_ligature; | 778 *p_is_mark_ligature = is_mark_ligature; |
| 779 | 779 |
| 780 if (p_total_component_count) | 780 if (p_total_component_count) |
| 781 *p_total_component_count = total_component_count; | 781 *p_total_component_count = total_component_count; |
| 782 | 782 |
| 783 return_trace (true); | 783 return_trace (true); |
| 784 } | 784 } |
| 785 static inline bool ligate_input (hb_apply_context_t *c, | 785 static inline bool ligate_input (hb_apply_context_t *c, |
| 786 unsigned int count, /* Including the first glyp
h */ | 786 unsigned int count, /* Including the first glyp
h */ |
| 787 » » » » unsigned int match_positions[MAX_CONTEXT_LENGTH
], /* Including the first glyph */ | 787 » » » » unsigned int match_positions[HB_MAX_CONTEXT_LEN
GTH], /* Including the first glyph */ |
| 788 unsigned int match_length, | 788 unsigned int match_length, |
| 789 hb_codepoint_t lig_glyph, | 789 hb_codepoint_t lig_glyph, |
| 790 bool is_mark_ligature, | 790 bool is_mark_ligature, |
| 791 unsigned int total_component_count) | 791 unsigned int total_component_count) |
| 792 { | 792 { |
| 793 TRACE_APPLY (NULL); | 793 TRACE_APPLY (NULL); |
| 794 | 794 |
| 795 hb_buffer_t *buffer = c->buffer; | 795 hb_buffer_t *buffer = c->buffer; |
| 796 | 796 |
| 797 buffer->merge_clusters (buffer->idx, buffer->idx + match_length); | 797 buffer->merge_clusters (buffer->idx, buffer->idx + match_length); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 unsigned int last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); | 829 unsigned int last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); |
| 830 unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->
cur()); | 830 unsigned int last_num_components = _hb_glyph_info_get_lig_num_comps (&buffer->
cur()); |
| 831 unsigned int components_so_far = last_num_components; | 831 unsigned int components_so_far = last_num_components; |
| 832 | 832 |
| 833 if (!is_mark_ligature) | 833 if (!is_mark_ligature) |
| 834 { | 834 { |
| 835 _hb_glyph_info_set_lig_props_for_ligature (&buffer->cur(), lig_id, total_com
ponent_count); | 835 _hb_glyph_info_set_lig_props_for_ligature (&buffer->cur(), lig_id, total_com
ponent_count); |
| 836 if (_hb_glyph_info_get_general_category (&buffer->cur()) == HB_UNICODE_GENER
AL_CATEGORY_NON_SPACING_MARK) | 836 if (_hb_glyph_info_get_general_category (&buffer->cur()) == HB_UNICODE_GENER
AL_CATEGORY_NON_SPACING_MARK) |
| 837 { | 837 { |
| 838 _hb_glyph_info_set_general_category (&buffer->cur(), HB_UNICODE_GENERAL_CA
TEGORY_OTHER_LETTER); | 838 _hb_glyph_info_set_general_category (&buffer->cur(), HB_UNICODE_GENERAL_CA
TEGORY_OTHER_LETTER); |
| 839 _hb_glyph_info_set_modified_combining_class (&buffer->cur(), 0); | |
| 840 } | 839 } |
| 841 } | 840 } |
| 842 c->replace_glyph_with_ligature (lig_glyph, klass); | 841 c->replace_glyph_with_ligature (lig_glyph, klass); |
| 843 | 842 |
| 844 for (unsigned int i = 1; i < count; i++) | 843 for (unsigned int i = 1; i < count; i++) |
| 845 { | 844 { |
| 846 while (buffer->idx < match_positions[i]) | 845 while (buffer->idx < match_positions[i] && !buffer->in_error) |
| 847 { | 846 { |
| 848 if (!is_mark_ligature) { | 847 if (!is_mark_ligature) { |
| 849 unsigned int new_lig_comp = components_so_far - last_num_components + | 848 unsigned int new_lig_comp = components_so_far - last_num_components + |
| 850 MIN (MAX (_hb_glyph_info_get_lig_comp (&buff
er->cur()), 1u), last_num_components); | 849 MIN (MAX (_hb_glyph_info_get_lig_comp (&buff
er->cur()), 1u), last_num_components); |
| 851 _hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_c
omp); | 850 _hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_c
omp); |
| 852 } | 851 } |
| 853 buffer->next_glyph (); | 852 buffer->next_glyph (); |
| 854 } | 853 } |
| 855 | 854 |
| 856 last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); | 855 last_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur()); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 937 static inline void recurse_lookups (context_t *c, | 936 static inline void recurse_lookups (context_t *c, |
| 938 unsigned int lookupCount, | 937 unsigned int lookupCount, |
| 939 const LookupRecord lookupRecord[] /* Array o
f LookupRecords--in design order */) | 938 const LookupRecord lookupRecord[] /* Array o
f LookupRecords--in design order */) |
| 940 { | 939 { |
| 941 for (unsigned int i = 0; i < lookupCount; i++) | 940 for (unsigned int i = 0; i < lookupCount; i++) |
| 942 c->recurse (lookupRecord[i].lookupListIndex); | 941 c->recurse (lookupRecord[i].lookupListIndex); |
| 943 } | 942 } |
| 944 | 943 |
| 945 static inline bool apply_lookup (hb_apply_context_t *c, | 944 static inline bool apply_lookup (hb_apply_context_t *c, |
| 946 unsigned int count, /* Including the first glyp
h */ | 945 unsigned int count, /* Including the first glyp
h */ |
| 947 » » » » unsigned int match_positions[MAX_CONTEXT_LENGTH
], /* Including the first glyph */ | 946 » » » » unsigned int match_positions[HB_MAX_CONTEXT_LEN
GTH], /* Including the first glyph */ |
| 948 unsigned int lookupCount, | 947 unsigned int lookupCount, |
| 949 const LookupRecord lookupRecord[], /* Array of
LookupRecords--in design order */ | 948 const LookupRecord lookupRecord[], /* Array of
LookupRecords--in design order */ |
| 950 unsigned int match_length) | 949 unsigned int match_length) |
| 951 { | 950 { |
| 952 TRACE_APPLY (NULL); | 951 TRACE_APPLY (NULL); |
| 953 | 952 |
| 954 hb_buffer_t *buffer = c->buffer; | 953 hb_buffer_t *buffer = c->buffer; |
| 955 unsigned int end; | 954 unsigned int end; |
| 956 | 955 |
| 957 /* All positions are distance from beginning of *output* buffer. | 956 /* All positions are distance from beginning of *output* buffer. |
| 958 * Adjust. */ | 957 * Adjust. */ |
| 959 { | 958 { |
| 960 unsigned int bl = buffer->backtrack_len (); | 959 unsigned int bl = buffer->backtrack_len (); |
| 961 end = bl + match_length; | 960 end = bl + match_length; |
| 962 | 961 |
| 963 int delta = bl - buffer->idx; | 962 int delta = bl - buffer->idx; |
| 964 /* Convert positions to new indexing. */ | 963 /* Convert positions to new indexing. */ |
| 965 for (unsigned int j = 0; j < count; j++) | 964 for (unsigned int j = 0; j < count; j++) |
| 966 match_positions[j] += delta; | 965 match_positions[j] += delta; |
| 967 } | 966 } |
| 968 | 967 |
| 969 for (unsigned int i = 0; i < lookupCount; i++) | 968 for (unsigned int i = 0; i < lookupCount; i++) |
| 970 { | 969 { |
| 971 unsigned int idx = lookupRecord[i].sequenceIndex; | 970 unsigned int idx = lookupRecord[i].sequenceIndex; |
| 972 if (idx >= count) | 971 if (idx >= count) |
| 973 continue; | 972 continue; |
| 974 | 973 |
| 974 /* Don't recurse to ourself at same position. |
| 975 * Note that this test is too naive, it doesn't catch longer loops. */ |
| 976 if (idx == 0 && lookupRecord[i].lookupListIndex == c->lookup_index) |
| 977 continue; |
| 978 |
| 975 buffer->move_to (match_positions[idx]); | 979 buffer->move_to (match_positions[idx]); |
| 976 | 980 |
| 977 unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len (); | 981 unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len (); |
| 978 if (!c->recurse (lookupRecord[i].lookupListIndex)) | 982 if (!c->recurse (lookupRecord[i].lookupListIndex)) |
| 979 continue; | 983 continue; |
| 980 | 984 |
| 981 unsigned int new_len = buffer->backtrack_len () + buffer->lookahead_len (); | 985 unsigned int new_len = buffer->backtrack_len () + buffer->lookahead_len (); |
| 982 int delta = new_len - orig_len; | 986 int delta = new_len - orig_len; |
| 983 | 987 |
| 984 if (!delta) | 988 if (!delta) |
| 985 continue; | 989 continue; |
| 986 | 990 |
| 987 /* Recursed lookup changed buffer len. Adjust. */ | 991 /* Recursed lookup changed buffer len. Adjust. */ |
| 988 | 992 |
| 989 /* end can't go back past the current match position. | 993 /* end can't go back past the current match position. |
| 990 * Note: this is only true because we do NOT allow MultipleSubst | 994 * Note: this is only true because we do NOT allow MultipleSubst |
| 991 * with zero sequence len. */ | 995 * with zero sequence len. */ |
| 992 end = MAX ((int) match_positions[idx] + 1, int (end) + delta); | 996 end = MAX (MIN((int) match_positions[idx] + 1, (int) new_len), int (end) + d
elta); |
| 993 | 997 |
| 994 unsigned int next = idx + 1; /* next now is the position after the recursed
lookup. */ | 998 unsigned int next = idx + 1; /* next now is the position after the recursed
lookup. */ |
| 995 | 999 |
| 996 if (delta > 0) | 1000 if (delta > 0) |
| 997 { | 1001 { |
| 998 if (unlikely (delta + count > MAX_CONTEXT_LENGTH)) | 1002 if (unlikely (delta + count > HB_MAX_CONTEXT_LENGTH)) |
| 999 break; | 1003 break; |
| 1000 } | 1004 } |
| 1001 else | 1005 else |
| 1002 { | 1006 { |
| 1003 /* NOTE: delta is negative. */ | 1007 /* NOTE: delta is negative. */ |
| 1004 delta = MAX (delta, (int) next - (int) count); | 1008 delta = MAX (delta, (int) next - (int) count); |
| 1005 next -= delta; | 1009 next -= delta; |
| 1006 } | 1010 } |
| 1007 | 1011 |
| 1008 /* Shift! */ | 1012 /* Shift! */ |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1087 lookup_context.funcs.match, lookup_context.match_dat
a); | 1091 lookup_context.funcs.match, lookup_context.match_dat
a); |
| 1088 } | 1092 } |
| 1089 static inline bool context_apply_lookup (hb_apply_context_t *c, | 1093 static inline bool context_apply_lookup (hb_apply_context_t *c, |
| 1090 unsigned int inputCount, /* Including t
he first glyph (not matched) */ | 1094 unsigned int inputCount, /* Including t
he first glyph (not matched) */ |
| 1091 const USHORT input[], /* Array of input
values--start with second glyph */ | 1095 const USHORT input[], /* Array of input
values--start with second glyph */ |
| 1092 unsigned int lookupCount, | 1096 unsigned int lookupCount, |
| 1093 const LookupRecord lookupRecord[], | 1097 const LookupRecord lookupRecord[], |
| 1094 ContextApplyLookupContext &lookup_conte
xt) | 1098 ContextApplyLookupContext &lookup_conte
xt) |
| 1095 { | 1099 { |
| 1096 unsigned int match_length = 0; | 1100 unsigned int match_length = 0; |
| 1097 unsigned int match_positions[MAX_CONTEXT_LENGTH]; | 1101 unsigned int match_positions[HB_MAX_CONTEXT_LENGTH]; |
| 1098 return match_input (c, | 1102 return match_input (c, |
| 1099 inputCount, input, | 1103 inputCount, input, |
| 1100 lookup_context.funcs.match, lookup_context.match_data, | 1104 lookup_context.funcs.match, lookup_context.match_data, |
| 1101 &match_length, match_positions) | 1105 &match_length, match_positions) |
| 1102 && apply_lookup (c, | 1106 && apply_lookup (c, |
| 1103 inputCount, match_positions, | 1107 inputCount, match_positions, |
| 1104 lookupCount, lookupRecord, | 1108 lookupCount, lookupRecord, |
| 1105 match_length); | 1109 match_length); |
| 1106 } | 1110 } |
| 1107 | 1111 |
| (...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 const USHORT backtrack[], | 1618 const USHORT backtrack[], |
| 1615 unsigned int inputCount, /* Inclu
ding the first glyph (not matched) */ | 1619 unsigned int inputCount, /* Inclu
ding the first glyph (not matched) */ |
| 1616 const USHORT input[], /* Array of
input values--start with second glyph */ | 1620 const USHORT input[], /* Array of
input values--start with second glyph */ |
| 1617 unsigned int lookaheadCount, | 1621 unsigned int lookaheadCount, |
| 1618 const USHORT lookahead[], | 1622 const USHORT lookahead[], |
| 1619 unsigned int lookupCount, | 1623 unsigned int lookupCount, |
| 1620 const LookupRecord lookupRecord[]
, | 1624 const LookupRecord lookupRecord[]
, |
| 1621 ChainContextApplyLookupContext &l
ookup_context) | 1625 ChainContextApplyLookupContext &l
ookup_context) |
| 1622 { | 1626 { |
| 1623 unsigned int match_length = 0; | 1627 unsigned int match_length = 0; |
| 1624 unsigned int match_positions[MAX_CONTEXT_LENGTH]; | 1628 unsigned int match_positions[HB_MAX_CONTEXT_LENGTH]; |
| 1625 return match_input (c, | 1629 return match_input (c, |
| 1626 inputCount, input, | 1630 inputCount, input, |
| 1627 lookup_context.funcs.match, lookup_context.match_data[1], | 1631 lookup_context.funcs.match, lookup_context.match_data[1], |
| 1628 &match_length, match_positions) | 1632 &match_length, match_positions) |
| 1629 && match_backtrack (c, | 1633 && match_backtrack (c, |
| 1630 backtrackCount, backtrack, | 1634 backtrackCount, backtrack, |
| 1631 lookup_context.funcs.match, lookup_context.match_data[
0]) | 1635 lookup_context.funcs.match, lookup_context.match_data[
0]) |
| 1632 && match_lookahead (c, | 1636 && match_lookahead (c, |
| 1633 lookaheadCount, lookahead, | 1637 lookaheadCount, lookahead, |
| 1634 lookup_context.funcs.match, lookup_context.match_data[
2], | 1638 lookup_context.funcs.match, lookup_context.match_data[
2], |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2277 lookupList; /* LookupList table */ | 2281 lookupList; /* LookupList table */ |
| 2278 public: | 2282 public: |
| 2279 DEFINE_SIZE_STATIC (10); | 2283 DEFINE_SIZE_STATIC (10); |
| 2280 }; | 2284 }; |
| 2281 | 2285 |
| 2282 | 2286 |
| 2283 } /* namespace OT */ | 2287 } /* namespace OT */ |
| 2284 | 2288 |
| 2285 | 2289 |
| 2286 #endif /* HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH */ | 2290 #endif /* HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH */ |
| OLD | NEW |