diff --git a/dictsource/fr_rules b/dictsource/fr_rules index ebb0a407..ee07d0fd 100644 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -656,8 +656,8 @@ no) ë (_ e // canoë ai) gni n^ // craignions châtaignier gn nj // agneau _wa) gner (_ gnEr - _sta) gn ( gn - dia) gn ( gn + _sta) gn gn + dia) gn gn _) gn (om gn _) gn (ou_ gn gn (osie_ gn diff --git a/src/espeak-ng.c b/src/espeak-ng.c index a894d5d3..2ec4ccb0 100644 --- a/src/espeak-ng.c +++ b/src/espeak-ng.c @@ -568,16 +568,13 @@ int main(int argc, char **argv) break; case 0x10e: // --compile-mbrola samplerate = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, 0); - espeak_ng_CompileMbrolaVoice(optarg2, stdout); - exit(0); + return (espeak_ng_CompileMbrolaVoice(optarg2, stdout) == ENS_OK) ? EXIT_SUCCESS : EXIT_FAILURE; case 0x10f: // --compile-intonations samplerate = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, espeakINITIALIZE_PATH_ONLY); - espeak_ng_CompileIntonation(stdout); - exit(0); + return (espeak_ng_CompileIntonation(stdout) == ENS_OK) ? EXIT_SUCCESS : EXIT_FAILURE; case 0x110: // --compile-phonemes samplerate = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, espeakINITIALIZE_PATH_ONLY); - espeak_ng_CompilePhonemeData(22050, stdout); - exit(0); + return (espeak_ng_CompilePhonemeData(22050, stdout) == ENS_OK) ? EXIT_SUCCESS : EXIT_FAILURE; default: exit(0); } @@ -616,8 +613,8 @@ int main(int argc, char **argv) if (flag_compile) { // This must be done after the voice is set - espeak_CompileDictionary("", stderr, flag_compile & 0x1); - exit(0); + return (espeak_ng_CompileDictionary("", NULL, stderr, flag_compile & 0x1) == ENS_OK) + ? EXIT_SUCCESS : EXIT_FAILURE; } // set any non-default values of parameters. This must be done after espeak_Initialize() diff --git a/src/include/espeak-ng/espeak_ng.h b/src/include/espeak-ng/espeak_ng.h index 8ce43667..5acd215d 100644 --- a/src/include/espeak-ng/espeak_ng.h +++ b/src/include/espeak-ng/espeak_ng.h @@ -46,10 +46,18 @@ typedef enum { #define espeakINITIALIZE_PATH_ONLY 0x4000 ESPEAK_NG_API espeak_ng_STATUS -espeak_ng_CompileMbrolaVoice(const char *path, FILE *log); +espeak_ng_CompileDictionary(const char *dsource, + const char *dict_name, + FILE *log, + int flags); ESPEAK_NG_API espeak_ng_STATUS -espeak_ng_CompilePhonemeData(long rate, FILE *log); +espeak_ng_CompileMbrolaVoice(const char *path, + FILE *log); + +ESPEAK_NG_API espeak_ng_STATUS +espeak_ng_CompilePhonemeData(long rate, + FILE *log); ESPEAK_NG_API espeak_ng_STATUS espeak_ng_CompileIntonation(FILE *log); diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index c18d9e91..fb07b8f6 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -2926,7 +2926,7 @@ static espeak_ng_STATUS CompilePhonemeData2(const char *source, FILE *log) fclose(f_errors); ReadPhondataManifest(); - return ENS_OK; + return error_count > 0 ? ENE_COMPILE_ERRORS : ENS_OK; } static const char *preset_tune_names[] = { diff --git a/src/libespeak-ng/compiledict.c b/src/libespeak-ng/compiledict.c index 757205c7..123525e8 100644 --- a/src/libespeak-ng/compiledict.c +++ b/src/libespeak-ng/compiledict.c @@ -29,7 +29,9 @@ #include #endif +#include "espeak_ng.h" #include "speak_lib.h" + #include "speech.h" #include "phoneme.h" #include "synthesize.h" @@ -1510,8 +1512,12 @@ static int compile_dictrules(FILE *f_in, FILE *f_out, char *fname_temp) return 0; } -int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *fname_err, int flags) +#pragma GCC visibility push(default) +ESPEAK_NG_API espeak_ng_STATUS espeak_ng_CompileDictionary(const char *dsource, const char *dict_name, FILE *log, int flags) { + if (!log) log = stderr; + if (!dict_name) dict_name = dictionary_name; + // fname: space to write the filename in case of error // flags: bit 0: include source line number information, for debug purposes. @@ -1542,19 +1548,14 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha sprintf(fname_in, "%srules.txt", path); if ((f_in = fopen(fname_in, "r")) == NULL) { sprintf(fname_in, "%srules", path); - if ((f_in = fopen_log(fname_in, "r")) == NULL) { - if (fname_err) - strcpy(fname_err, fname_in); - return -1; - } + if ((f_in = fopen_log(fname_in, "r")) == NULL) + return ENE_READ_ERROR; } sprintf(fname_out, "%s%c%s_dict", path_home, PATHSEP, dict_name); if ((f_out = fopen_log(fname_out, "wb+")) == NULL) { - if (fname_err) - strcpy(fname_err, fname_out); fclose(f_in); - return -1; + return ENE_WRITE_ERROR; } sprintf(fname_temp, "%s%ctemp", path_home, PATHSEP); @@ -1590,5 +1591,6 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha LoadDictionary(translator, dict_name, 0); - return error_count; + return error_count > 0 ? ENE_COMPILE_ERRORS : ENS_OK; } +#pragma GCC visibility pop diff --git a/src/libespeak-ng/compilembrola.c b/src/libespeak-ng/compilembrola.c index 15bee155..3deb8a99 100644 --- a/src/libespeak-ng/compilembrola.c +++ b/src/libespeak-ng/compilembrola.c @@ -63,6 +63,8 @@ static unsigned int StringToWord(const char *string) #pragma GCC visibility push(default) espeak_ng_STATUS espeak_ng_CompileMbrolaVoice(const char *filepath, FILE *log) { + if (!log) log = stderr; + char *p; FILE *f_in; FILE *f_out; diff --git a/src/libespeak-ng/speak_lib.c b/src/libespeak-ng/speak_lib.c index d8c4ba32..1b5f4c18 100644 --- a/src/libespeak-ng/speak_lib.c +++ b/src/libespeak-ng/speak_lib.c @@ -901,7 +901,7 @@ ESPEAK_API const char *espeak_TextToPhonemes(const void **textptr, int textmode, ESPEAK_API void espeak_CompileDictionary(const char *path, FILE *log, int flags) { - CompileDictionary(path, dictionary_name, log, NULL, flags); + espeak_ng_CompileDictionary(path, dictionary_name, log, flags); } ESPEAK_API espeak_ERROR espeak_Cancel(void) diff --git a/src/libespeak-ng/synthesize.h b/src/libespeak-ng/synthesize.h index 0286407b..84c80d9a 100644 --- a/src/libespeak-ng/synthesize.h +++ b/src/libespeak-ng/synthesize.h @@ -515,7 +515,6 @@ int SelectPhonemeTableName(const char *name); void Write4Bytes(FILE *f, int value); int Read4Bytes(FILE *f); int Reverse4Bytes(int word); -int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, char *err_name, int flags); #define ENV_LEN 128 // length of pitch envelopes #define PITCHfall 0 // standard pitch envelopes diff --git a/src/speak-ng.c b/src/speak-ng.c index 805423d2..f9dbd930 100644 --- a/src/speak-ng.c +++ b/src/speak-ng.c @@ -648,16 +648,13 @@ int main(int argc, char **argv) break; case 0x10e: // --compile-mbrola samplerate = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, 0); - espeak_ng_CompileMbrolaVoice(optarg2, stdout); - exit(0); + return (espeak_ng_CompileMbrolaVoice(optarg2, stdout) == ENS_OK) ? EXIT_SUCCESS : EXIT_FAILURE; case 0x10f: // --compile-intonations samplerate = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, espeakINITIALIZE_PATH_ONLY); - espeak_ng_CompileIntonation(stdout); - exit(0); + return (espeak_ng_CompileIntonation(stdout) == ENS_OK) ? EXIT_SUCCESS : EXIT_FAILURE; case 0x110: // --compile-phonemes samplerate = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, espeakINITIALIZE_PATH_ONLY); - espeak_ng_CompilePhonemeData(22050, stdout); - exit(0); + return (espeak_ng_CompilePhonemeData(22050, stdout) == ENS_OK) ? EXIT_SUCCESS : EXIT_FAILURE; default: exit(0); } @@ -684,19 +681,19 @@ int main(int argc, char **argv) strcpy(path_dsource, path_home); path_dsource[strlen(path_home)-11] = 0; // remove "espeak-data" from the end strcat(path_dsource, "dictsource\\"); - CompileDictionary(path_dsource, dictionary_name, NULL, NULL, flag_compile & 0x1); + espeak_ng_STATUS status = espeak_ng_CompileDictionary(path_dsource, dictionary_name, NULL, flag_compile & 0x1); #else #ifdef PLATFORM_WINDOWS char path_dsource[sizeof(path_home)+20]; strcpy(path_dsource, path_home); path_dsource[strlen(path_home)-11] = 0; // remove "espeak-data" from the end strcat(path_dsource, "dictsource\\"); - CompileDictionary(path_dsource, dictionary_name, NULL, NULL, flag_compile & 0x1); + espeak_ng_STATUS status = espeak_ng_CompileDictionary(path_dsource, dictionary_name, NULL, flag_compile & 0x1); #else - CompileDictionary(NULL, dictionary_name, NULL, NULL, flag_compile & 0x1); + espeak_ng_STATUS status = espeak_ng_CompileDictionary(NULL, dictionary_name, NULL, flag_compile & 0x1); #endif #endif - exit(0); + return (status == ENS_OK) ? EXIT_SUCCESS : EXIT_FAILURE; } SetParameter(espeakRATE, speed, 0);