commit 2108b1e8ae02f49cc909894a1024efdfde6682fd
Author: Jonathan McDowell <noodles@earth.li>
Date:   Mon Mar 3 23:11:01 2025 +0000

    Add espeak_TextToPhonemesWithTerminator (#2127)

diff --git a/src/include/espeak-ng/speak_lib.h b/src/include/espeak-ng/speak_lib.h
index 9c0e2739..9ec4cafb 100644
--- a/src/include/espeak-ng/speak_lib.h
+++ b/src/include/espeak-ng/speak_lib.h
@@ -541,6 +541,12 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode,
 
 */
 
+#ifdef __cplusplus
+extern "C"
+#endif
+ESPEAK_API const char *espeak_TextToPhonemesWithTerminator(const void **textptr, int textmode, int phonememode, int *terminator);
+/* Version of espeak_TextToPhonemes that also returns the clause terminator (e.g., CLAUSE_INTONATION_FULL_STOP) */
+
 #ifdef __cplusplus
 extern "C"
 #endif
diff --git a/src/libespeak-ng/speech.c b/src/libespeak-ng/speech.c
index 9f90d105..4c108a60 100644
--- a/src/libespeak-ng/speech.c
+++ b/src/libespeak-ng/speech.c
@@ -850,7 +850,7 @@ ESPEAK_API void espeak_SetPhonemeTrace(int phonememode, FILE *stream)
 		f_trans = stderr;
 }
 
-ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, int phonememode)
+ESPEAK_API const char* espeak_TextToPhonemesWithTerminator(const void** textptr, int textmode, int phonememode, int* terminator)
 {
 	/* phoneme_mode
 	    bit 1:   0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters).
@@ -864,12 +864,17 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode,
 	if (text_decoder_decode_string_multibyte(p_decoder, *textptr, translator->encoding, textmode) != ENS_OK)
 		return NULL;
 
-	TranslateClause(translator, NULL, NULL);
+	TranslateClauseWithTerminator(translator, NULL, NULL, terminator);
 	*textptr = text_decoder_get_buffer(p_decoder);
 
 	return GetTranslatedPhonemeString(phonememode);
 }
 
+ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, int phonememode)
+{
+	return espeak_TextToPhonemesWithTerminator(textptr, textmode, phonememode, NULL);
+}
+
 ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Cancel(void)
 {
 #if USE_ASYNC
