diff --git a/src/libespeak-ng/tokenizer.c b/src/libespeak-ng/tokenizer.c index be9166bb..a4ad1fc9 100644 --- a/src/libespeak-ng/tokenizer.c +++ b/src/libespeak-ng/tokenizer.c @@ -38,11 +38,7 @@ static const unsigned short punct_chars[] = { 0x00a1, // inverted exclamation 0x00bf, // inverted question - - 0x055c, // Armenian exclamation - 0x055e, // Armenian question 0x055b, // Armenian emphasis mark - 0 }; @@ -50,11 +46,7 @@ static const unsigned short punct_chars[] = { static const unsigned int punct_attributes[] = { CLAUSE_SEMICOLON | CLAUSE_OPTIONAL_SPACE_AFTER, // inverted exclamation CLAUSE_SEMICOLON | CLAUSE_OPTIONAL_SPACE_AFTER, // inverted question - - CLAUSE_EXCLAMATION | CLAUSE_PUNCTUATION_IN_WORD, // Armenian exclamation - CLAUSE_QUESTION | CLAUSE_PUNCTUATION_IN_WORD, // Armenian question CLAUSE_PERIOD | CLAUSE_PUNCTUATION_IN_WORD, // Armenian emphasis mark - 0 }; @@ -80,10 +72,14 @@ int clause_type_from_codepoint(uint32_t c) return CLAUSE_QUESTION; case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: return CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD: + return CLAUSE_QUESTION | CLAUSE_PUNCTUATION_IN_WORD; case ESPEAKNG_PROPERTY_EXCLAMATION_MARK: return CLAUSE_EXCLAMATION; case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: return CLAUSE_EXCLAMATION | CLAUSE_OPTIONAL_SPACE_AFTER; + case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD: + return CLAUSE_EXCLAMATION | CLAUSE_PUNCTUATION_IN_WORD; case ESPEAKNG_PROPERTY_COMMA: return CLAUSE_COMMA; case ESPEAKNG_PROPERTY_COMMA | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER: diff --git a/src/ucd-tools/data/espeak-ng/PropList.txt b/src/ucd-tools/data/espeak-ng/PropList.txt index 726a6fe3..f27deb9e 100644 --- a/src/ucd-tools/data/espeak-ng/PropList.txt +++ b/src/ucd-tools/data/espeak-ng/PropList.txt @@ -57,7 +57,7 @@ E002E ; Full_Stop # Cf TAG FULL STOP 003F ; Question_Mark # Po QUESTION MARK 00BF ; Question_Mark # Po INVERTED QUESTION MARK 037E ; Question_Mark # Po GREEK QUESTION MARK -055F ; Question_Mark # Po ARMENIAN QUESTION MARK +055E ; Question_Mark # Po ARMENIAN QUESTION MARK 061F ; Question_Mark # Po ARABIC QUESTION MARK 0709 ; Question_Mark # Po SYRIAC SUBLINEAR COLON SKEWED RIGHT 1367 ; Question_Mark # Po ETHIOPIC QUESTION MARK @@ -206,3 +206,10 @@ FF1A..FF1B ; Optional_Space_After # Po [2] FULLWIDTH COLON..FULLWIDTH SEMIC FF1F ; Optional_Space_After # Po FULLWIDTH QUESTION MARK # Total code points: 14 + +# ================================================ + +055B..055C ; Punctuation_In_Word # Po [2] ARMENIAN EMPHASIS MARK..ARMENIAN EXCLAMATION MARK +055E ; Punctuation_In_Word # Po ARMENIAN QUESTION MARK + +# Total code points: 3 diff --git a/src/ucd-tools/src/include/ucd/ucd.h b/src/ucd-tools/src/include/ucd/ucd.h index ba9fec5b..609f1a51 100644 --- a/src/ucd-tools/src/include/ucd/ucd.h +++ b/src/ucd-tools/src/include/ucd/ucd.h @@ -363,6 +363,7 @@ typedef uint64_t ucd_property; #define UCD_PROPERTY_PREPENDED_CONCATENATION_MARK 0x0000000100000000ull /**< @brief Prepended_Concatenation_Mark */ // eSpeak NG extended properties: +#define ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD 0x0020000000000000ull /**< @brief Punctuation_In_Word */ #define ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER 0x0040000000000000ull /**< @brief Optional_Space_After */ #define ESPEAKNG_PROPERTY_EXTENDED_DASH 0x0080000000000000ull /**< @brief Extended_Dash */ #define ESPEAKNG_PROPERTY_PARAGRAPH_SEPARATOR 0x0100000000000000ull /**< @brief Paragraph_Separator */ diff --git a/src/ucd-tools/src/proplist.c b/src/ucd-tools/src/proplist.c index 35d635ec..5784c49b 100644 --- a/src/ucd-tools/src/proplist.c +++ b/src/ucd-tools/src/proplist.c @@ -1351,9 +1351,9 @@ static ucd_property properties_Po(codepoint_t c) if (c == 0x0387) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_OTHER_ID_CONTINUE | ESPEAKNG_PROPERTY_SEMI_COLON; break; case 0x0500: - if (c >= 0x055B && c <= 0x055C) return ESPEAKNG_PROPERTY_EXCLAMATION_MARK; + if (c >= 0x055B && c <= 0x055C) return ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD; if (c == 0x055D) return ESPEAKNG_PROPERTY_COMMA; - if (c == 0x055F) return ESPEAKNG_PROPERTY_QUESTION_MARK; + if (c == 0x055E) return ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD; if (c == 0x0589) return UCD_PROPERTY_TERMINAL_PUNCTUATION | UCD_PROPERTY_SENTENCE_TERMINAL | ESPEAKNG_PROPERTY_FULL_STOP | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER; if (c == 0x05C3) return UCD_PROPERTY_TERMINAL_PUNCTUATION; break; diff --git a/src/ucd-tools/tools/printdata.py b/src/ucd-tools/tools/printdata.py index 8fa005a7..cbfc7801 100755 --- a/src/ucd-tools/tools/printdata.py +++ b/src/ucd-tools/tools/printdata.py @@ -161,6 +161,7 @@ def properties(data): props += (2 ** 31) * data.get('Pattern_Syntax', 0) props += (2 ** 32) * data.get('Prepended_Concatenation_Mark', 0) # eSpeak NG extended properties: + props += (2 ** 53) * data.get('Punctuation_In_Word', 0) props += (2 ** 54) * data.get('Optional_Space_After', 0) props += (2 ** 55) * data.get('Extended_Dash', 0) props += (2 ** 56) * data.get('Paragraph_Separator', 0)