From b2057635c4f631d2ede074a127cd19cfa60b4080 Mon Sep 17 00:00:00 2001 From: Valdis Vitolins Date: Sun, 5 Feb 2017 13:32:06 +0200 Subject: [PATCH] PRE jump rule e.g. 'xyJ)' implemented --- src/libespeak-ng/dictionary.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/libespeak-ng/dictionary.c b/src/libespeak-ng/dictionary.c index cc0796d5..b26068c7 100644 --- a/src/libespeak-ng/dictionary.c +++ b/src/libespeak-ng/dictionary.c @@ -2077,6 +2077,24 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ else failed = 1; break; + + case RULE_SKIPCHARS: { + // 'xyJ)' means 'skip characters backwards until xy' + char *p = pre_ptr; // pointer to current character in word + char *p2 = p; // pointer to previous character in word + + while ((*p != *rule) && (*p != RULE_SPACE) && (*p != 0)) { + p2 = p; + p--; + } + + // if succeed, set pre_ptr to next character after 'xy' and remaining + // 'xy' part is checked as usual in following cycles of PRE rule characters + if (*p == *rule) + pre_ptr = p2; + } + break; + default: if (letter == rb) { if (letter == RULE_SPACE)