|
|
@ -996,7 +996,29 @@ static inline bool apply_lookup (hb_apply_context_t *c, |
|
|
|
if (!delta) |
|
|
|
if (!delta) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
/* Recursed lookup changed buffer len. Adjust. */ |
|
|
|
/* Recursed lookup changed buffer len. Adjust.
|
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* TODO: |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* Right now, if buffer length increased by n, we assume n new glyphs |
|
|
|
|
|
|
|
* were added right after the current position, and if buffer length |
|
|
|
|
|
|
|
* was decreased by n, we assume n match positions after the current |
|
|
|
|
|
|
|
* one where removed. The former (buffer length increased) case is |
|
|
|
|
|
|
|
* fine, but the decrease case can be improved in at least two ways, |
|
|
|
|
|
|
|
* both of which are significant: |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* - If recursed-to lookup is MultipleSubst and buffer length |
|
|
|
|
|
|
|
* decreased, then it's current match position that was deleted, |
|
|
|
|
|
|
|
* NOT the one after it. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* - If buffer length was decreased by n, it does not necessarily |
|
|
|
|
|
|
|
* mean that n match positions where removed, as there might |
|
|
|
|
|
|
|
* have been marks and default-ignorables in the sequence. We |
|
|
|
|
|
|
|
* should instead drop match positions between current-position |
|
|
|
|
|
|
|
* and current-position + n instead. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* It should be possible to construct tests for both of these cases. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
end += delta; |
|
|
|
end += delta; |
|
|
|
if (end < int (match_positions[idx])) |
|
|
|
if (end < int (match_positions[idx])) |
|
|
|