Browse Source

Merge branch 'master' into feature_decimal-point-for-Mandarin

master
Juho Hiltunen 1 year ago
parent
commit
e9706493ca
No account linked to committer's email address
51 changed files with 4228 additions and 217 deletions
  1. 1
    1
      .github/workflows/ci.yml
  2. 2
    2
      .github/workflows/dist.yml
  3. 2
    0
      .github/workflows/fuzzing.yml
  4. 1
    1
      .github/workflows/windows.yml
  5. 1
    0
      ChangeLog.md
  6. 5
    1
      Makefile.am
  7. 36
    7
      android/build.gradle
  8. 1
    0
      android/gradle.properties
  9. BIN
      android/gradle/wrapper/gradle-wrapper.jar
  10. 2
    2
      android/gradle/wrapper/gradle-wrapper.properties
  11. 17
    12
      android/gradlew
  12. 10
    10
      android/gradlew.bat
  13. 2
    1
      cmake/data.cmake
  14. 6
    1
      dictsource/en_list
  15. 39
    3
      dictsource/extra/ru_listx
  16. 5
    2
      dictsource/hu_list
  17. 1384
    13
      dictsource/hu_rules
  18. 69
    2
      dictsource/it_list
  19. 16
    9
      dictsource/it_listx
  20. 3
    1
      dictsource/it_rules
  21. 0
    17
      dictsource/pl_rules
  22. 4
    2
      dictsource/ru_list
  23. 18
    9
      dictsource/ru_rules
  24. 1824
    0
      dictsource/ti_emoji
  25. 40
    0
      dictsource/ti_list
  26. 429
    0
      dictsource/ti_rules
  27. 1
    1
      docs/voices.md
  28. 5
    0
      espeak-ng-data/lang/sem/ti
  29. 140
    0
      phsource/ph_tigrinya
  30. 3
    0
      phsource/phonemes
  31. 4
    0
      src/libespeak-ng/dictionary.c
  32. 1
    1
      src/libespeak-ng/readclause.c
  33. 14
    4
      src/libespeak-ng/synthdata.c
  34. 1
    0
      src/libespeak-ng/translate.c
  35. 1
    0
      src/libespeak-ng/translate.h
  36. 12
    8
      src/libespeak-ng/voices.c
  37. 6
    3
      src/libespeak-ng/wavegen.c
  38. 1
    0
      tests/CMakeLists.txt
  39. 69
    59
      tests/common
  40. 17
    0
      tests/crash.test
  41. 1
    0
      tests/crash_vectors/cve-2023-49990.txt
  42. 1
    0
      tests/crash_vectors/cve-2023-49991.txt
  43. BIN
      tests/crash_vectors/cve-2023-49992.txt
  44. BIN
      tests/crash_vectors/cve-2023-49993.txt
  45. 1
    0
      tests/crash_vectors/cve-2023-49994.txt
  46. 1
    1
      tests/language-numbers-cardinal.test
  47. 1
    1
      tests/language-numbers-ordinal.test
  48. 1
    0
      tests/language-phonemes.test
  49. 12
    31
      tests/language-replace.test
  50. 17
    11
      tests/ssml.test
  51. 1
    1
      tests/translate.test

+ 1
- 1
.github/workflows/ci.yml View File

- name: test - name: test
run: | run: |
${{ matrix.config_env }} ${{ matrix.runenv }} cmake --build build --target tests ${{ matrix.config_env }} ${{ matrix.runenv }} cmake --build build --target tests
${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -Ttest -j1 --output-on-failure
${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -Ttest -j8 --output-on-failure

+ 2
- 2
.github/workflows/dist.yml View File

- name: make - name: make
run: cmake --build build run: cmake --build build
- name: make check - name: make check
run: ctest --test-dir build -Ttest -j1 --output-on-failure
run: ctest --test-dir build -Ttest -j8 --output-on-failure


- name: make package_source - name: make package_source
run: cmake --build build --target package_source run: cmake --build build --target package_source
- name: re-make - name: re-make
run: cd unpack/espeak-ng-* && cmake --build build run: cd unpack/espeak-ng-* && cmake --build build
- name: re-make check - name: re-make check
run: cd unpack/espeak-ng-* && ctest --test-dir build -Ttest -j1 --output-on-failure
run: cd unpack/espeak-ng-* && ctest --test-dir build -Ttest -j8 --output-on-failure

+ 2
- 0
.github/workflows/fuzzing.yml View File

build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Build synth_espeak on ${{ matrix.arch }} name: Build synth_espeak on ${{ matrix.arch }}
# Do not run this job on any forked repos
if: github.repository == 'espeak-ng/espeak-ng'
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:

+ 1
- 1
.github/workflows/windows.yml View File

- name: make - name: make
run: cmake --build build --config ${{ matrix.config }} run: cmake --build build --config ${{ matrix.config }}
- name: make check - name: make check
run: ctest --test-dir build -Ttest -C ${{ matrix.config }} -j1 --output-on-failure
run: ctest --test-dir build -Ttest -C ${{ matrix.config }} -j8 --output-on-failure

+ 1
- 0
ChangeLog.md View File

* uz (Uzbek) -- Andiv06 * uz (Uzbek) -- Andiv06


new languages: new languages:
* ti (Tigrinya) -- Biniam Gebremichael
* mto (Totontepec Mixe) -- Bill Dengler, Elizabeth Resendiz * mto (Totontepec Mixe) -- Bill Dengler, Elizabeth Resendiz


### 1.51 ### 1.51

+ 5
- 1
Makefile.am View File

MKDIR=mkdir -p MKDIR=mkdir -p


AM_CFLAGS = \ AM_CFLAGS = \
-Isrc/include -Isrc/include/compat -I$(srcdir)/src/speechPlayer/include -I$(srcdir)/src/ucd-tools/src/include \
-I$(srcdir)/src/include -Isrc/include/compat -I$(srcdir)/src/speechPlayer/include -I$(srcdir)/src/ucd-tools/src/include \
-D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200112L
AM_CXXFLAGS = AM_CXXFLAGS =


espeak-ng-data/sw_dict \ espeak-ng-data/sw_dict \
espeak-ng-data/ta_dict \ espeak-ng-data/ta_dict \
espeak-ng-data/te_dict \ espeak-ng-data/te_dict \
espeak-ng-data/ti_dict \
espeak-ng-data/th_dict \ espeak-ng-data/th_dict \
espeak-ng-data/tk_dict \ espeak-ng-data/tk_dict \
espeak-ng-data/tn_dict \ espeak-ng-data/tn_dict \
te: espeak-ng-data/te_dict te: espeak-ng-data/te_dict
espeak-ng-data/te_dict: dictsource/te_list dictsource/te_rules dictsource/te_extra dictsource/te_emoji espeak-ng-data/te_dict: dictsource/te_list dictsource/te_rules dictsource/te_extra dictsource/te_emoji


ti: espeak-ng-data/ti_dict
espeak-ng-data/ti_dict: dictsource/ti_list dictsource/ti_rules dictsource/ti_extra dictsource/ti_emoji

th: espeak-ng-data/th th: espeak-ng-data/th
espeak-ng-data/th: dictsource/th dictsource/th dictsource/te_extra espeak-ng-data/th: dictsource/th dictsource/th dictsource/te_extra



+ 36
- 7
android/build.gradle View File

mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
classpath 'com.android.tools.build:gradle:8.2.2'
} }
} }
plugins { plugins {
} }


android { android {
compileSdk 33
buildToolsVersion "33.0.2"
ndkVersion "25.2.9519653"
compileSdk 34
buildToolsVersion "34.0.0"
ndkVersion "26.1.10909125"
namespace "com.reecedunn.espeak" namespace "com.reecedunn.espeak"


buildFeatures {
buildConfig = true
}

defaultConfig { defaultConfig {
minSdk 19
minSdk 21
targetSdk 33 targetSdk 33
versionCode 22 versionCode 22
versionName "1.52-dev" versionName "1.52-dev"
into file("./res/raw") into file("./res/raw")
} }


tasks.whenTaskAdded { task ->
if (task.name == 'assembleDebug' || task.name == 'assembleRelease') {
task.dependsOn createDataVersion
}
}

createDataVersion.mustRunAfter 'externalNativeBuildDebug'
createDataVersion.mustRunAfter 'externalNativeBuildRelease'

project.afterEvaluate { project.afterEvaluate {
tasks.checkData.dependsOn(externalNativeBuildDebug) tasks.checkData.dependsOn(externalNativeBuildDebug)
tasks.createDataArchive.dependsOn(externalNativeBuildDebug) tasks.createDataArchive.dependsOn(externalNativeBuildDebug)
javaPreCompileDebug.dependsOn(tasks.createDataVersion)
javaPreCompileRelease.dependsOn(tasks.createDataVersion)
tasks.named('mapDebugSourceSetPaths') {
dependsOn ':createDataVersion', ':createDataArchive'
}
tasks.named('mergeDebugResources') {
dependsOn ':createDataVersion', ':createDataArchive'
}
tasks.named('packageDebugResources') {
dependsOn ':createDataVersion', ':createDataArchive'
}
tasks.named('mapReleaseSourceSetPaths') {
dependsOn ':createDataVersion', ':createDataArchive'
}
tasks.named('mergeReleaseResources') {
dependsOn ':createDataVersion', ':createDataArchive'
}
tasks.named('packageReleaseResources') {
dependsOn ':createDataVersion', ':createDataArchive'
}
} }

+ 1
- 0
android/gradle.properties View File

android.nonFinalResIds=false

BIN
android/gradle/wrapper/gradle-wrapper.jar View File


+ 2
- 2
android/gradle/wrapper/gradle-wrapper.properties View File

distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionSha256Sum=6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

+ 17
- 12
android/gradlew View File

# This is normally unused # This is normally unused
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit


# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
fi fi
else else
JAVACMD=java JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.


Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi
fi fi


# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
case $MAX_FD in #( case $MAX_FD in #(
max*) max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
'' | soft) :;; #( '' | soft) :;; #(
*) *)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
done done
fi fi


# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.


set -- \ set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \ "-Dorg.gradle.appname=$APP_BASE_NAME" \

+ 10
- 10
android/gradlew.bat View File

%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail goto fail
if exist "%JAVA_EXE%" goto execute if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail goto fail

+ 2
- 1
cmake/data.cmake View File

qdb quc qu qya qdb quc qu qya
ro ru ro ru
sd shn si sjn sk sl smj sq sr sv sw sd shn si sjn sk sl smj sq sr sv sw
ta te th tk tn tr tt
ta te ti th tk tn tr tt
ug uk ur uz ug uk ur uz
vi vi
yue yue
WORKING_DIRECTORY "${PHONEME_SRC_DIR}" WORKING_DIRECTORY "${PHONEME_SRC_DIR}"
COMMENT "Compile phonemes" COMMENT "Compile phonemes"
DEPENDS DEPENDS
"${DATA_DIST_DIR}/intonations"
"$<TARGET_FILE:espeak-ng-bin>" "$<TARGET_FILE:espeak-ng-bin>"
${_phon_deps} ${_phon_deps}
) )

+ 6
- 1
dictsource/en_list View File

_0M4 tr'Ili@n _0M4 tr'Ili@n
_0M5 kw0dr'Ili@n _0M5 kw0dr'Ili@n
_0M6 kwInt'Ili@n _0M6 kwInt'Ili@n
_0M7 sExt'Ili@n
_0M7 sEkst'Ili@n
_0M8 sEpt'Ili@n _0M8 sEpt'Ili@n
_0M9 0kt'Ili@n _0M9 0kt'Ili@n
_0M10 n0n'Ili@n _0M10 n0n'Ili@n
bassist $alt6 //beIsIst bassist $alt6 //beIsIst
baste $alt6 //beIst baste $alt6 //beIst
bastion basti@n bastion basti@n
bateau ba'toU
batman batman batman batman
?3 baton $alt3 ?3 baton $alt3
battalion $alt3 battalion $alt3
?3 bulimia bUl'Imi@ ?3 bulimia bUl'Imi@
bunion bVnI2@n bunion bVnI2@n
bureaucracy bjU@'0kr@si bureaucracy bjU@'0kr@si
burien 'bjU@ri@n $only
bursar b3:s3 bursar b3:s3
?5 bursar bVRs3 ?5 bursar bVRs3
bus bVs bus bVs
movies mu:vIz movies mu:vIz
mozilla m@zIl@ mozilla m@zIl@
mujaheddin mUdZ@hId'i:n mujaheddin mUdZ@hId'i:n
mukilteo ,mVk@l'ti:oU
?3 multi mVltaI ?3 multi mVltaI
multitude $1 multitude $1
multiplexer $1 multiplexer $1
tablet tabl@t tablet tabl@t
taboo $2 taboo $2
tabu tabu: tabu tabu:
tacoma t@'koUm@
(tae kwon do) t'aIkw0nd'oU (tae kwon do) t'aIkw0nd'oU
taffeta tafI2t@ taffeta tafI2t@
(tai chi) taI'tSi: (tai chi) taI'tSi:
Wisconsin wI2sk'0nsI2n Wisconsin wI2sk'0nsI2n
Wyoming waI'oUmIN Wyoming waI'oUmIN
Xhosa kO:s@ Xhosa kO:s@
yakima 'jakImA: $only
Yemen $alt2 Yemen $alt2
Ypres i:pr@ Ypres i:pr@
Yogyakarta j0gj@k'A@t@ Yogyakarta j0gj@k'A@t@

+ 39
- 3
dictsource/extra/ru_listx View File

анонс $2 анонс $2
анонсировавший $3 анонсировавший $3
анонсировалось $3 анонсировалось $3
анонсированная $3
анонсированного $3 анонсированного $3
анонсированной $3 анонсированной $3
анонсированные $3 анонсированные $3
арчах $2 арчах $2
арче $2 арче $2
арчей $2 арчей $2
арчи $2
арчибальда $3 арчибальда $3
арчибальде $3 арчибальде $3
арчинец $2 арчинец $2
видеоконтентом $5 видеоконтентом $5
видеоконтенту $5 видеоконтенту $5
видеоконтрольного $5 видеоконтрольного $5
видеоконференции $6
видеоконференций $6 видеоконференций $6
видеокремом $4 видеокремом $4
видеокурс $4 видеокурс $4
внедрявшимися $2 внедрявшимися $2
внедрявшуюся $2 внедрявшуюся $2
внедряемой $2 внедряемой $2
внедряемых $2
внедряет $2 внедряет $2
внедряетесь $2 внедряетесь $2
внедрял $2 внедрял $2
воспитываемое $2 воспитываемое $2
воспитываемся $2 воспитываемся $2
воспитываемы $2 воспитываемы $2
воспитываемый $2
воспитывает $2 воспитывает $2
воспитываете $2 воспитываете $2
воспитываетесь $2 воспитываетесь $2
делячествах $2 делячествах $2
делячеством $2 делячеством $2
делящей $1 делящей $1
делящейся $1
делящийся $1 делящийся $1
делящими $1 делящими $1
делящимся $1 делящимся $1
детализированной $4 детализированной $4
детализированному $4 детализированному $4
детализированный $4 детализированный $4
детализированным $4
деталировка $4 деталировка $4
деталировкам $4 деталировкам $4
деталировками $4 деталировками $4
заверша $3 заверша $3
завершай $3 завершай $3
завершайся $3 завершайся $3
завершайте $3
завершал $3 завершал $3
завершала $3 завершала $3
завершали $3 завершали $3
зашкаливала $2 зашкаливала $2
зашкаливало $2 зашкаливало $2
зашкаливающей $2 зашкаливающей $2
зашкаливающие $2
зашкуренная $2 зашкуренная $2
зашкуренного $2 зашкуренного $2
зашкуренное $2 зашкуренное $2
зомбаря $3 зомбаря $3
зомберов $1 зомберов $1
зомбирование $2 зомбирование $2
зомбированию $2
зомбирования $2 зомбирования $2
зомбированности $2 зомбированности $2
зомбированы $2 зомбированы $2
индексированный $3 индексированный $3
индексированных $3 индексированных $3
индексируемый $3 индексируемый $3
индексируемых $3
индексна $1 индексна $1
индексная $1 индексная $1
индекснее $1 индекснее $1
кодеровка $3 кодеровка $3
кодеровке $3 кодеровке $3
кодерская $1 кодерская $1
кодеру $1
кодеры $1 кодеры $1
кодигорически $4 кодигорически $4
кодировал $2 кодировал $2
кодировки $3 кодировки $3
кодировку $3 кодировку $3
кодируемое $2 кодируемое $2
кодируемый $2
кодирует $2 кодирует $2
кодируется $2 кодируется $2
кодируют $2 кодируют $2
лицензированный $3 лицензированный $3
лицензированных $3 лицензированных $3
лицензируемой $3 лицензируемой $3
лицензируемый $3
лицензиям $2 лицензиям $2
лицензиями $2 лицензиями $2
лицензиях $2 лицензиях $2
микроманометру $4 микроманометру $4
микроманометры $4 микроманометры $4
микромашинах $4 микромашинах $4
микроменеджментом $3
микромер $3 микромер $3
микромера $3 микромера $3
микромере $3 микромере $3
многоколосной $4 многоколосной $4
многокомпонентная $5 многокомпонентная $5
многокомпонентного $5 многокомпонентного $5
многокомпонентной $5
многокомпонентный $5 многокомпонентный $5
многоконечную $4 многоконечную $4
многократна $3 многократна $3
несанкционированных $5 несанкционированных $5
несбалансированности $4 несбалансированности $4
несбалансированный $4 несбалансированный $4
несбалансированным $4
несбалансированными $4 несбалансированными $4
несбывшаяся $2 несбывшаяся $2
несбывшегося $2 несбывшегося $2
несостоятельностях $4 несостоятельностях $4
несостоятельны $4 несостоятельны $4
несострадание $4 несострадание $4
несостыковка $4
несостыковок $4
несотворенному $4 несотворенному $4
несотворенный $4 несотворенный $4
несохраненная $4 несохраненная $4
низкоконтрастными $4 низкоконтрастными $4
низкоконтрастных $4 низкоконтрастных $4
низколатентной $4 низколатентной $4
низколатентный $4
низколегированная $4 низколегированная $4
низколегированнее $4 низколегированнее $4
низколегированней $4 низколегированней $4
обеспечивавшуюся $3 обеспечивавшуюся $3
обеспечиваем $3 обеспечиваем $3
обеспечиваемая $3 обеспечиваемая $3
обеспечиваемого $3
обеспечиваемое $3 обеспечиваемое $3
обеспечиваемому $3 обеспечиваемому $3
обеспечиваемся $3 обеспечиваемся $3
обозником $2 обозником $2
обозновещевого $6 обозновещевого $6
обозрев $3 обозрев $3
обозреваете $4
обозревал $4 обозревал $4
обозревание $4 обозревание $4
обозревании $4 обозревании $4
опустошителю $4 опустошителю $4
опустошителя $4 опустошителя $4
опустошить $4 опустошить $4
опустошиться $4
опустошишь $4 опустошишь $4
опустошишься $4 опустошишься $4
опустошу $4 опустошу $4
оскорблюсь $3 оскорблюсь $3
оскорбляй $3 оскорбляй $3
оскорбляйся $3 оскорбляйся $3
оскорбляйте $3
оскорблял $3 оскорблял $3
оскорбляла $3 оскорбляла $3
оскорбляли $3 оскорбляли $3
перелистываемой $3 перелистываемой $3
перелистываемых $3 перелистываемых $3
перелистывает $3 перелистывает $3
перелистываете $3
перелита $4 перелита $4
перелито $1 перелито $1
перелиты $1 перелиты $1
перепроверялось $5 перепроверялось $5
перепроверят $4 перепроверят $4
перепроверять $5 перепроверять $5
перепроверяют $5
перепрограммирование $5 перепрограммирование $5
перепрограммирования $5 перепрограммирования $5
перепрограммированный $5 перепрограммированный $5
письмосекретка $4 письмосекретка $4
письмотелеграмма $5 письмотелеграмма $5
письму $2 письму $2
пита $2
питавшаяся $2 питавшаяся $2
питавшегося $2 питавшегося $2
питавшееся $2 питавшееся $2
пошаговая $2 пошаговая $2
пошагового $2 пошагового $2
пошаговое $2 пошаговое $2
пошаговой $2
пошаговую $2 пошаговую $2
пошаговые $2 пошаговые $2
пошаговых $2 пошаговых $2
распаляющуюся $3 распаляющуюся $3
распаляя $3 распаляя $3
распар $2 распар $2
распараллеливаемых $4
распараллеливания $4 распараллеливания $4
распараллеливаются $4 распараллеливаются $4
распаренная $2 распаренная $2
свинобойцы $3 свинобойцы $3
свинобою $3 свинобою $3
свинобоя $3 свинобоя $3
свинобраз $3
свиновода $3 свиновода $3
свиноводе $3 свиноводе $3
свиноводств $3 свиноводств $3
синхронизация $4 синхронизация $4
синхронизированные $4 синхронизированные $4
синхронизированный $4 синхронизированный $4
синхронизированных $4
синхронизирующее $4 синхронизирующее $4
синхронизируя $4 синхронизируя $4
синхронизм $3 синхронизм $3
страхкасс $2 страхкасс $2
страхоборца $3 страхоборца $3
страхоборцу $3 страхоборцу $3
страхова $3
страховался $3 страховался $3
страховаться $3 страховаться $3
страховая $3 страховая $3
теплопродукция $4 теплопродукция $4
теплопрозрачность $4 теплопрозрачность $4
теплопрозрачный $4 теплопрозрачный $4
теплорассеиватели $4
теплорассеивателя $4 теплорассеивателя $4
теплорассеивателями $4
теплорассеивающая $4 теплорассеивающая $4
теплорассеивающей $4 теплорассеивающей $4
теплорассеивающими $4 теплорассеивающими $4
труднопреодолимых $6 труднопреодолимых $6
труднопроизносимое $6 труднопроизносимое $6
труднопроизносимые $6 труднопроизносимые $6
труднопроизносимым $6
труднопроизносимыми $6 труднопроизносимыми $6
труднопроизносимых $6 труднопроизносимых $6
труднопроходим $5 труднопроходим $5
тунис $2 тунис $2
тунисец $2 тунисец $2
тунисок $2 тунисок $2
туннелирование $3
туннелирующими $3 туннелирующими $3
туннель $2 туннель $2
тунца $2 тунца $2
фрагментарны $3 фрагментарны $3
фрагментированного $3 фрагментированного $3
фрагментированном $3 фрагментированном $3
фрагментированную $3
фрагментированными $3
фрагментированных $3 фрагментированных $3
фрагонара $3 фрагонара $3
фраерами $3 фраерами $3
цветоеде $3 цветоеде $3
цветоеду $3 цветоеду $3
цветоеды $3 цветоеды $3
цветокоррекции $4
цветокоррекций $4
цветокоррекцию $4
цветокоррекция $4
цветолож $3 цветолож $3
цветоложа $3 цветоложа $3
цветоложе $3 цветоложе $3

+ 5
- 2
dictsource/hu_list View File

gyötörte $unstressend gyötörte $unstressend
ismerve $unstressend ismerve $unstressend
fognia $unstressend fognia $unstressend
(mint azt látni) $unstressend
(azt látni) $unstressend (azt látni) $unstressend
fontosak $unstressend fontosak $unstressend
futni $unstressend futni $unstressend
(elmarad attól) ElmAR2Ad_||At:o:l $unstressend (elmarad attól) ElmAR2Ad_||At:o:l $unstressend
(szív el) si:v_||El $unstressend (szív el) si:v_||El $unstressend
cigit $unstressend cigit $unstressend
(a dohányzásról) A'||doha:n^za:Sro:l $unstressend
(a dohányzásról) A'||doha:n^za:SR2o:l $unstressend
átlag $unstressend átlag $unstressend
(forintba kerülnek) foR2intbA_||kER2ylnEk $unstressend (forintba kerülnek) foR2intbA_||kER2ylnEk $unstressend
hozzátette $unstressend hozzátette $unstressend
§ s'AkAs § s'AkAs
~ tildE ~ tildE
° fokjEl ° fokjEl
˄ konjunktsio:
˅ disjunktsio:
Ft foR2int $unstressend Ft foR2int $unstressend
(Ft-tal) foR2int:Al $unstressend (Ft-tal) foR2int:Al $unstressend
(ft-ot) foR2intot $unstressend (ft-ot) foR2intot $unstressend
nato na:to: nato na:to:
(end-of line) u:jS,oR2 (end-of line) u:jS,oR2



$textmode $textmode
bacch bahh
MSZP emeszpé MSZP emeszpé
MSZMP emeszempé MSZMP emeszempé
SZDSZ eszdéesz SZDSZ eszdéesz

+ 1384
- 13
dictsource/hu_rules
File diff suppressed because it is too large
View File


+ 69
- 2
dictsource/it_list View File



// This file is UTF-8 encoded // This file is UTF-8 encoded
// Updated 2022 september 23 by Christian Leo Mameli, <llajta2012ATgmail.com>
// Updated 2023 december 11 by Christian Leo Mameli, <llajta2012ATgmail.com>


// $alt change [e] or [o] in the stressed syllable to [E] or [O] // $alt change [e] or [o] in the stressed syllable to [E] or [O]
// $alt2 change [E] or [O] in the stressed syllable to [e] or [o] // $alt2 change [E] or [O] in the stressed syllable to [e] or [o]
bypass b'aI||p'as bypass b'aI||p'as
byte _^_EN byte _^_EN
cabaret $3 $only cabaret $3 $only
cameraman k'ame*am,En
camper $1 camper $1
cancan $2 $only cancan $2 $only
carter $1 $only carter $1 $only
couscous k,us||k'us couscous k,us||k'us
cover $1 cover $1
cowboy k'aw||b'oI cowboy k'aw||b'oI
cracker $1
cracker k@-*'E:ke@-*
croissant k@-*uass'an croissant k@-*uass'an
cult k'a/:lt $onlys cult k'a/:lt $onlys
cyclette sikl'Et: cyclette sikl'Et:
designer d,ez'aIne@-* designer d,ez'aIne@-*
desktop d'esk||t,Op desktop d'esk||t,Op
dessert d,Ess'e@-* $only dessert d,Ess'e@-* $only
detective det'Ektiv
detector $2 detector $2
device dIv'aIs device dIv'aIs
devolution devol'uSon devolution devol'uSon
guinness g'iness guinness g'iness
guardrail g'a@-*d||@-*,Eil guardrail g'a@-*d||@-*,Eil
gustibus $1 gustibus $1
habemus $2 $alt
hacker 'ake@-* hacker 'ake@-*
hackeraggio akeR'adZ:o hackeraggio akeR'adZ:o
hackerare ake*'a:Re hackerare ake*'a:Re
italy $1 italy $1
iter $1 iter $1
jaguar $1 jaguar $1
jingle dZ'ingol
jaws dZ'O:z jaws dZ'O:z
jazz _^_EN jazz _^_EN
jeans dZi:ns jeans dZi:ns
palace _^_en $only palace _^_en $only
papillon papiJ^'on $onlys papillon papiJ^'on $onlys
pancake pan_k'eIk pancake pan_k'eIk
parquet pa@-*k'E
partner $1 partner $1
passepartout pas_pa@-*t'u passepartout pas_pa@-*t'u
paternoster $3 paternoster $3
scooter sk'utE@-* scooter sk'utE@-*
scorpion $1 $onlys scorpion $1 $onlys
scotch sk'OtS scotch sk'OtS
Scout sk'awt $onlys
screen sk@-*'i:n screen sk@-*'i:n
screenreader sk@-*'i:n||@-*'i:de@-* screenreader sk@-*'i:n||@-*'i:de@-*
scuter $1 scuter $1
wafer v'afe@-* wafer v'afe@-*
walkman w'Olk||m,En walkman w'Olk||m,En
wall _^_EN wall _^_EN
Walt _^_EN
walzer v'altsE@-* walzer v'altsE@-*
water v'atE@-* $only water v'atE@-* $only
wave _^_EN wave _^_EN
wireless _^_EN wireless _^_EN
wow w'a:u wow w'a:u
writer v@-*'aIte@-* writer v@-*'aIte@-*
wurstel vj'u:stel
würstel vj'u:stel
yacht j'Ot[ yacht j'Ot[
yahoo _^_EN yahoo _^_EN
yahtzee j'Ets:i yahtzee j'Ets:i
(ladies and gentlemen) l'eIdIz||and||dZ'Ent@lm@n (ladies and gentlemen) l'eIdIz||and||dZ'Ent@lm@n
(nôtre dame) noUt@-*'da:m (nôtre dame) noUt@-*'da:m
(question time) kw'estiont'aIm (question time) kw'estiont'aIm
(fair play) f,E@-*||pl'Ei


// Main nouns Dictionary (see also it_listx) // Main nouns Dictionary (see also it_listx)


ceca $alt ceca $alt
chambery Samber'i chambery Samber'i
champs S'amps champs S'amps
chelsea tS'Elsi
chernobyl tS'e@-*nobil chernobyl tS'e@-*nobil
chianciano $2 chianciano $2
chicago tSikago chicago tSikago
helsinki $1 helsinki $1
hiroshima $3 hiroshima $3
hollywood _^_EN hollywood _^_EN
honolulu $3
houston hj'uston houston hj'uston
huligano $3 huligano $3
iglesias $2 $alt iglesias $2 $alt
tavazzano $3 tavazzano $3
teheran t,I_iR'a:n teheran t,I_iR'a:n
tennessee t'en:,essi tennessee t'en:,essi
tiananmen tienanm'En
Tienanmen tienanm'En
teramo $1 teramo $1
ternano $2 ternano $2
tertenia $3 tertenia $3
washington _^_EN washington _^_EN
wimbledon $1 wimbledon $1
woodstock _^_EN woodstock _^_EN
yellowstone _^_EN
zaire dza'i:Re zaire dza'i:Re
zanzibar $1 zanzibar $1
zigano ts-ig'a/no zigano ts-ig'a/no
bearzot bea*_dz'Ot $only bearzot bea*_dz'Ot $only
beatle b'i:tol beatle b'i:tol
beccaria $3 beccaria $3
beckenbauer $3
beethoven be:t'o:ven beethoven be:t'o:ven
benetton $3 benetton $3
benjamin $1 benjamin $1
bentegodi $3 $alt2
bergomi $1 bergomi $1
behringer b'e:RiNg,E@-* behringer b'e:RiNg,E@-*
bertold $alt bertold $alt
biagini $2 biagini $2
björk b,i'O@-*k björk b,i'O@-*k
boeing b'O:ing boeing b'O:ing
bougot _^_FR
brandon b@-*'Endon brandon b@-*'Endon
brian b@-*'aian brian b@-*'aian
brigitte b@-*iZ'it[ brigitte b@-*iZ'it[
casula $2 casula $2
catherine _^_EN catherine _^_EN
catia k'a:tia catia k'a:tia
causio k'awzio
celentano $3 celentano $3
cesare $1 cesare $1
chaplin tS'apliN chaplin tS'apliN
charriere SaR*j'e* charriere SaR*j'e*
chesterfield tS'Este@-*fild chesterfield tS'Este@-*fild
chevalier _^_FR chevalier _^_FR
cheyenne tSej'En
chopin Sop'EN chopin Sop'EN
christensen $1 christensen $1
christie k@-*'istI christie k@-*'istI
corrias $2 corrias $2
cristofor $2 cristofor $2
cupido $2 cupido $2
cyndi s'indi
cyrille siR'il
danilo $2 danilo $2
danny d'En:I danny d'En:I
davidson $1 davidson $1
debor $1 $alt debor $1 $alt
deborah $1 $alt2 deborah $1 $alt2
deidda de'i:d:a deidda de'i:d:a
delogu $2
delrio del||@-*'io/ delrio del||@-*'io/
deschamps deS'amp
dessolis $2 $onlys dessolis $2 $onlys
diaz d'iats $only diaz d'iats $only
Dickinson $1 Dickinson $1
ericsson $1 $alt ericsson $1 $alt
erika $1 erika $1
esposit $2 esposit $2
eastwood _^_en
ettore $1 $alt ettore $1 $alt
euclide $3 euclide $3
eugenia $alt eugenia $alt
ferlaino fe@-*la'i:no ferlaino fe@-*la'i:no
ferrer $2 $alt2 ferrer $2 $alt2
fischer f'iSE@-* $onlys fischer f'iSE@-* $onlys
fletcher fl'EtS:e@-*
florencio fl,OR'ensIo florencio fl,OR'ensIo
françois f@-*,a/NsU'a françois f@-*,a/NsU'a
francisco f@-*ans'isko francisco f@-*ans'isko
frederic $1 frederic $1
freud f@-*'Oid $only freud f@-*'Oid $only
fujitsu fudZ'itsu fujitsu fudZ'itsu
gaber $1 $onlys
gandolfi $alt gandolfi $alt
garcía _^_ES garcía _^_ES
gargiul $2 gargiul $2
gibson g'Ibson gibson g'Ibson
giordano $2 giordano $2
giorgia $1 giorgia $1
giorgini $2
giovagnol $3 giovagnol $3
girolamo $2 girolamo $2
gorbaciov $1 gorbaciov $1
grace g@-*'Eis $only grace g@-*'Eis $only
gray g@-*'eI gray g@-*'eI
gregoria $2 $alt2 gregoria $2 $alt2
grisostomo $2
gruber $1 $only
halen 'alen halen 'alen
halloween 'allow2in halloween 'allow2in
harrison h'ER*izon harrison h'ER*izon
Jaqueline Z,ak_l'i:n Jaqueline Z,ak_l'i:n
james _^_EN james _^_EN
jane _^_EN jane _^_EN
jannacci jan:'atS:i
jarno j'a:@-*no jarno j'a:@-*no
jefferson $1 jefferson $1
jennifer $1 jennifer $1
kennedy $1 $alt kennedy $1 $alt
kinder $1 $onlys kinder $1 $onlys
landolf $alt landolf $alt
lauper _^_EN
lawrence l'oRens lawrence l'oRens
laurenzi $alt laurenzi $alt
lee _^_en $capital lee _^_en $capital
luigi lu'i:dZI luigi lu'i:dZI
luigia lU'i:dZa luigia lU'i:dZa
luther $1 $only luther $1 $only
maneskin $1 $onlys
manolo ma/n'Olo manolo ma/n'Olo
manuel $1 $only manuel $1 $only
Marcel ma@-*s'El Marcel ma@-*s'El
michelangel $3 michelangel $3
michelle m,iS'el $only michelle m,iS'el $only
miguel mig'E:l miguel mig'E:l
mihajlovic mi_'ajlovitS
mike _^_EN mike _^_EN
mikolaj mik,Ol'a:j mikolaj mik,Ol'a:j
misseri $2 misseri $2
ron @-*'On $only ron @-*'On $only
rosalia $3 rosalia $3
Rosemarie @-*'ozm,a*i Rosemarie @-*'ozm,a*i
rossetti @-*os:'ett:i
rottweiler @-*otv'ajle@-*
roosevelt @-*'u:z|v,Elt
ryanair @-*'aIaneR ryanair @-*'aIaneR
sànchez s'antSets sànchez s'antSets
sanchez s'antSets
sánchez s'antSets sánchez s'antSets
santalucia santa||lutS'ia
santamaria s,anta||maR'ia santamaria s,anta||maR'ia
saša s'aSa/ saša s'aSa/
saddam $2 saddam $2
sharazad $3 sharazad $3
shaun S'O:n $only shaun S'O:n $only
simon s'aImon $onlys simon s'aImon $onlys
sioux si'u:ks
schiffer S'if:e@-* $only
socrate $1 socrate $1
sofia sof'ia sofia sof'ia
sonia $1 $alt2 sonia $1 $alt2
taylor t'EIlo@-* taylor t'EIlo@-*
terence t'ERens $onlys terence t'ERens $onlys
thatcher t'a/tSe@-* thatcher t'a/tSe@-*
theodore t'Eodo@-*
tiffany $1 tiffany $1
timoteo $2 timoteo $2
tobia $2 tobia $2
vedder $1 $onlys vedder $1 $onlys
vermouth v'E@-*mut vermouth v'E@-*mut
victor $1 $only victor $1 $only
vierchowod vi'E@-*kov,ud
villeneuve v,iln'e:v villeneuve v,iln'e:v
vincent v'inseNt[ $only vincent v'inseNt[ $only
vladimir $3 vladimir $3
auguro $1 auguro $1
aumentino aUm'entino aumentino aUm'entino
auspicano $1 auspicano $1
avvalorano $3
avanzano $2 avanzano $2
avanzino $2 avanzino $2
avvalere $3 avvalere $3
bagnano $1 bagnano $1
ballano $1 ballano $1
ballino $1 ballino $1
balzano $1
balzino $1 balzino $1
barino $1 barino $1
barricano $1 barricano $1
dimezzano dim'edz:ano dimezzano dim'edz:ano
dimezzino $2 dimezzino $2
dimorano $2 dimorano $2
dimorino $2
dimostrano $2 dimostrano $2
dimostrino $2 dimostrino $2
diramano $2 diramano $2
disperino $2 disperino $2
dispiace dispI'a:tSe dispiace dispI'a:tSe
dispregia $2 $alt dispregia $2 $alt
disputano $1
disputino $1 disputino $1
dissemin $2 dissemin $2
dissetano $2 dissetano $2
disturbano $2 disturbano $2
disturbino $2 disturbino $2
divaghino $2 divaghino $2
divampano $2
divaricano $2 divaricano $2
diventino $2 diventino $2
divertano $2 divertano $2
dolere $2 dolere $2
domandano $2 domandano $2
domandino $2 domandino $2
domin $1
dondolano $1 dondolano $1
donino $1 donino $1
dotano $1 dotano $1
emulino $2 emulino $2
entrano $1 entrano $1
entrino $1 entrino $1
entusiasmano $3
enuncino $2 enuncino $2
equivalere $4 equivalere $4
eredit $2 eredit $2
ovviano $1 ovviano $1
ovvino $1 ovvino $1
paghino $1 paghino $1
palesano $2
palpano $1 palpano $1
palpita $1 palpita $1
palpitano $1 palpitano $1
permettev $alt2 permettev $alt2
perseguita $2 perseguita $2
perseguitano $2 perseguitano $2
persever $2
pervaderti $2 pervaderti $2
pesano $1 pesano $1
pettegol $2 pettegol $2
predichino $1 predichino $1
predici $2 predici $2
predomin $2 predomin $2
prefigurano $3
preghino $1 preghino $1
pregia $1 pregia $1
pregiudicano $2 pregiudicano $2
prevedere $3 prevedere $3
previd $2 previd $2
previdero $2 previdero $2
primeggiano $2
privatizzino $3 privatizzino $3
privilegia $3 privilegia $3
privilegiano $3 privilegiano $3
reclamano $2 reclamano $2
recludano $2 recludano $2
reclutano $2 reclutano $2
recrimin $2
recuper $2 recuper $2
recuperino $2 recuperino $2
regalano $2 regalano $2
sabotano $1 sabotano $1
salpano $1 salpano $1
saltano $1 saltano $1
saltellano $2 $alt
salutano $2 salutano $2
salvaguardano $3 salvaguardano $3
salvano $1 salvano $1
spaccano $1 spaccano $1
spacchino $1 spacchino $1
spaccino $1 spaccino $1
spalancano $2
spalmano $1 spalmano $1
sparano $1 sparano $1
sparecchino $2 sparecchino $2
accadutomi $3 accadutomi $3
accertatene $2 accertatene $2
accertati $2 $atstart accertati $2 $atstart
adempiutesi $3
affittasi $2 affittasi $2
affrettati $2 $atstart affrettati $2 $atstart
aggiornal $2 $alt2 aggiornal $2 $alt2
copriti $1 copriti $1
costituitosi $4 costituitosi $4
creal k@-*'Ea/l creal k@-*'Ea/l
daccel $1
daccene $1 daccene $1
dacel $1 dacel $1
dagliel $1 dagliel $1
esprimiti $2 esprimiti $2
evolverci $2 evolverci $2
evolversi $2 evolversi $2
faccel $1
facendomici fatS'endom,itSi facendomici fatS'endom,itSi
fammel $1 fammel $1
fattel f'at:el fattel f'at:el
impostaci $2 impostaci $2
impostal $2 impostal $2
impostomi $2 impostomi $2
impostigli $2
indirizzati indiRits2:'ati indirizzati indiRits2:'ati
indirizziamoci indiRi_tsj'amotSI // $5 indirizziamoci indiRi_tsj'amotSI // $5
indirizziamol indiRi_tsj'amol // $5 indirizziamol indiRi_tsj'amol // $5
portamici $1 portamici $1
portatel $2 portatel $2
posizionati $4 $atstart posizionati $4 $atstart
resasi $1
presentaci $2 presentaci $2
privaci $1 privaci $1
procurati $2 $atstart procurati $2 $atstart
promessomi $2 promessomi $2
proponiti $2 proponiti $2
proteggiti $2 $alt2 proteggiti $2 $alt2
protrattosi $2
pulisciti $2 pulisciti $2
raddrizzarl @-*ad:@-*its2:'a@-*l raddrizzarl @-*ad:@-*its2:'a@-*l
rafforzal $2 rafforzal $2
riformatisi $3 riformatisi $3
riformatosi $3 riformatosi $3
rincorrerl $2 rincorrerl $2
ripercuotersi $4
riportal $2 riportal $2
ripresosi $2 ripresosi $2
risparmiaci $2 risparmiaci $2
sposatisi $2 sposatisi $2
stabilitosi $3 stabilitosi $3
stampal $1 stampal $1
succedutesi $3
suggeritomi $3 suggeritomi $3
svegliati $1 $atstart svegliati $1 $atstart
svelaci $1 svelaci $1
svuotal $2 $alt2 svuotal $2 $alt2
tastal $1 tastal $1
tenutasi $2 tenutasi $2
tenutesi $2
tenutisi $2 tenutisi $2
tenutosi $2 tenutosi $2
tornaci $1 tornaci $1
tornatene $1 tornatene $1
trasferirvisi $3 trasferirvisi $3
trasferitosi $3
trattieniti $2 trattieniti $2
trattasi $1 trattasi $1
tuffati $1 $atstart tuffati $1 $atstart

+ 16
- 9
dictsource/it_listx View File

achei $2 achei $2
achemene $2 achemene $2
acheni $alt acheni $alt
achillea $2
achillee $2
achillea $3
achillee $3
acin $1 acin $1
acquafredd $alt2 acquafredd $alt2
acquaragia a/k:ua_R'adZa/ acquaragia a/k:ua_R'adZa/
agord $1 agord $1
agost $alt2 agost $alt2
agrifogli $alt agrifogli $alt
agronomi $2
agronom $2
agrosistem $alt agrosistem $alt
aikido $2 aikido $2
ailoche $alt ailoche $alt
angol $1 angol $1
angor $1 angor $1
angoscia ang'OSa angoscia ang'OSa
angustia $2
angustie $2 angustie $2
anidr $1 anidr $1
anidrid anid@-*'Id anidrid anid@-*'Id
asol $1 asol $1
asparag $2 asparag $2
asparagine $4 asparagine $4
aspecifici $3
aspett $alt aspett $alt
assaggini $3 assaggini $3
assedi $alt assedi $alt
canterellio $4 canterellio $4
cantoria $3 cantoria $3
canzoncine $3 canzoncine $3
caorle $1
capannori $2 capannori $2
capell $alt2 capell $alt2
capezzal kapets:'al
capifila $3 capifila $3
capiner $alt2 capiner $alt2
capocchia $alt capocchia $alt
coprolalia $4 coprolalia $4
copt $alt copt $alt
copti $alt copti $alt
cordami $2
cordenons $3 $alt cordenons $3 $alt
cordob $1 $alt2 cordob $1 $alt2
cordogli $alt cordogli $alt
domandone $3 domandone $3
domenic $alt2 domenic $alt2
domicili $3 domicili $3
domini $2
domino $1
domusnovas $alt domusnovas $alt
don $alt2 don $alt2
dondolio $3 dondolio $3
ecate $1 $alt ecate $1 $alt
eccentric $alt eccentric $alt
ecceter $2 $alt ecceter $2 $alt
Ecchimosi $2
echo 'e:ko echo 'e:ko
economy $2 economy $2
ecosistem $alt ecosistem $alt
ferreo $1 ferreo $1
ferrovia $3 ferrovia $3
fes $alt fes $alt
festicciol festitS:Ol
festival $1 festival $1
fet $alt fet $alt
fettuccine $3 fettuccine $3
idrovor $2 idrovor $2
iempsale $1 $alt iempsale $1 $alt
ifigenia $4 ifigenia $4
ifit $1
ignifughe $2
ignifughi $2
ignifug $2
ignitor $1 ignitor $1
ignot $alt ignot $alt
ileo $1 ileo $1
jesol $alt jesol $alt
joppol $alt joppol $alt
juazeir $1 juazeir $1
juta j'uta
juventin juvent'in juventin juvent'in
kairos $2 kairos $2
kampuchea $alt2 kampuchea $alt2
scherm $alt2 scherm $alt2
schern $alt2 schern $alt2
scherz $alt2 scherz $alt2
schettin $1 $alt2
schiaccine $2
schiribizz skiRib'its2: schiribizz skiRib'its2:
schivenoglia $alt schivenoglia $alt
schizofrenia $4 schizofrenia $4
schizoid skits'ojd schizoid skits'ojd
schizzati skits2:'ati schizzati skits2:'ati
sciabol $1 sciabol $1
sciliar $3
sciabordio Sabo@-*d'i:o
scioper $1 scioper $1
sciovia $2 sciovia $2
sclerodermia $4 sclerodermia $4
terranov $alt terranov $alt
terremot $alt terremot $alt
terren $alt2 terren $alt2
terreo $1
terzogenit $3 terzogenit $3
teschi $alt teschi $alt
teser $1 teser $1

+ 3
- 1
dictsource/it_rules View File



// Italian translation rules // Italian translation rules
// This file is UTF-8 encoded // This file is UTF-8 encoded
// Last update: 2022 september 23 by Christian Leo Mameli <[email protected]>
// Last update: 2023 april 18 by Christian Leo Mameli <[email protected]>
// letter groups // letter groups
// A any vowel // A any vowel
// C any consonant // C any consonant
_ri) scola (L07_ sk'ola _ri) scola (L07_ sk'ola
_) stacca (L07_ st'ak:a _) stacca (L07_ st'ak:a
_) sazia (L07_ s'atsja _) sazia (L07_ s'atsja
_) scuoter (L04_ sku'ote@-*
ri) scuoter (L04_ sku'ote@-*
L02) sei (_ _s'Ej // numbers L02) sei (_ _s'Ej // numbers


.group t .group t

+ 0
- 17
dictsource/pl_rules View File

_ar) c (adią_ k _ar) c (adią_ k
_ar) c (adię_ k _ar) c (adię_ k
_) c (alend k _) c (alend k
cal (l kO
cal (lA ka
c (alv k
caly (ps kali caly (ps kali
_) ca (m kE
_) c (amembert ka
_) c (an k
cose) c (ans k cose) c (ans k
_) c (app k
_) c (aps_ k
_) c (apslo k
_) c (arav k
_) c (arl k
_) c (arp k
_) c (art k
_) c (arv k _) c (arv k
casc kask casc kask
c (at_ k
c (ata_ k
c (atami_ k c (atami_ k
c (atem_ k c (atem_ k
c (ato_ k c (ato_ k
skj (A S skj (A S


.group sc .group sc
sch S
pa) sch (a sx pa) sch (a sx
sch (abA_ sx sch (abA_ sx
sch (ab_ sx sch (ab_ sx
.group th .group th
_e) th (anak t _e) th (anak t
_) the (_ dE _) the (_ dE
th s
th (ie_ s; th (ie_ s;
_) th t _) th t
_) thank fENk _) thank fENk

+ 4
- 2
dictsource/ru_list View File

а $u // and а $u // and
и I $u // and и I $u // and
или $u или $u
при $u
при $atend
или $atend // stressed at the end или $atend // stressed at the end
ибо $u $pause // for ибо $u $pause // for
но $u $pause // but но $u $pause // but
при $u
при $atend
хотя $2 $pause // although хотя $2 $pause // although
чтобы $pause // in order that чтобы $pause // in order that


(чему-то) tS;im'utV (чему-то) tS;im'utV
(что б) St'op (что б) St'op
(что ли) St'ol;i (что ли) St'ol;i
?3 (что ли) St'ol^i
(что ж) St'oS (что ж) St'oS
(что же) St'oZy (что же) St'oZy
сша sE#SE#'A

+ 18
- 9
dictsource/ru_rules View File

_мое) г (о_ v _мое) г (о_ v
_намно) г (о_ g _намно) г (о_ g
_ненамно) г (о_ g _ненамно) г (о_ g
_примно) г (о_ g
(некое) г (о v
_убо) г (о_ g _убо) г (о_ g
_настро) г (о_ g _настро) г (о_ g
_нестро) г (о_ g _нестро) г (о_ g
_недоро) г (о_ g _недоро) г (о_ g
_занедоро) г (о_ g _занедоро) г (о_ g
_немно) г (о_ g _немно) г (о_ g
_примно) г (о_ g
_се) г (о v _се) г (о v
_страте) г (о_ g // stratego board game _страте) г (о_ g // stratego board game
_стро) г (о g _стро) г (о g
д (B d; д (B d;
д (Y d; д (Y d;
д (_ t д (_ t
д (вк- t
д (вк t
д (дY d; д (дY d;
д (зY d; д (зY d;
д (к t д (к t
д (х t д (х t
д (хкY t д (хкY t
д (ш t д (ш t
д (ч t
д (ц t д (ц t
д (ч t
д (ь_ t; д (ь_ t;
д (ьк t; д (ьк t;
_бан) д (жо_ // silent д (непроизносимая д) _бан) д (жо_ // silent д (непроизносимая д)
_мо) де (лир dE% _мо) де (лир dE%
мо) де (льер dE% мо) де (льер dE%
мо) де (лист dE% мо) де (лист dE%
ше) де (вр dE


.group е .group е
е e е e
м (пY m; м (пY m;
м (фY m; м (фY m;
м (ффY m; м (ффY m;
майоне (з mVjin'E
мене (дж mEnE#
майоне (з mVjin'E


.group н .group н
н n н n
_клар) не (т nE _клар) не (т nE
клар) не (тист nE% клар) не (тист nE%
э) не (рг nE э) не (рг nE

н (_ n_ н (_ n_


.group о .group о
с (щ s;s; с (щ s;s;
сь (G z; сь (G z;



.group т .group т
т t т t
Y) тс ts Y) тс ts
т (нB t; т (нB t;
т (нY t; т (нY t;
т (сY t; т (сY t;
т (тY t;
тьс (я ts
т (тY t;
тс (я ts
тьс (я ,ts
с) т (н // Silent t(Непроизносимая т) с) т (н // Silent t(Непроизносимая т)
счас) т (лив // silent t счас) т (лив // silent t
бак) те (р tE% // бактериальный, антибактериальный, ... бак) те (р tE% // бактериальный, антибактериальный, ...
аль) те (рнатив tE# // альтернатива, альтернативный, альтернатив... аль) те (рнатив tE# // альтернатива, альтернативный, альтернатив...
_ан) те (нн tE // антенна, антенны, антенн... _ан) те (нн tE // антенна, антенны, антенн...
_кон) те (н tE // контент, контента, контенту... _кон) те (н tE // контент, контента, контенту...
прин) те (р tV# // принтер, принтера, принтеров...
прин) те (р tE% // принтер, принтера, принтеров...
_пре) те (нз tE _пре) те (нз tE
роу) те (р tV# // роутер, роутэр, router...
роу) те (р tE% // роутер, роутэр, router...
ин) те (рактив tE# // интерактив, интерактивный... ин) те (рактив tE# // интерактив, интерактивный...
ин) те (рC tE% // интернет, интернационал, ... ?????????? ин) те (рC tE% // интернет, интернационал, ... ??????????
ин) те (рпункт tE# // интерпункт, интерпункта... ин) те (рпункт tE# // интерпункт, интерпункта...
ин) терфе (йс tE#rf'E2 // интерфейс, интерфейса, ... ?????????? ин) терфе (йс tE#rf'E2 // интерфейс, интерфейса, ... ??????????
компью) те (р tO;
компью) те (р tE%


.group у .group у
у u у u
скворе)ч (н S скворе)ч (н S
ску) ч (н S ску) ч (н S
_ни) ч (то_ S _ни) ч (то_ S
наро) ч (но S
никити) ч (н S никити) ч (н S
ильини) ч (н S ильини) ч (н S
подсве) ч (н S
савви) ч (н S савви) ч (н S
_) ч (то S _) ч (то S
яи) ч (ни S яи) ч (ни S


.group ё .group ё
ё '8 ё '8
A) ё 'j8
?2 A) ё 'j8 ?2 A) ё 'j8
_) ё 'j8 _) ё 'j8
ж) ё 'O ж) ё 'O

+ 1824
- 0
dictsource/ti_emoji
File diff suppressed because it is too large
View File


+ 40
- 0
dictsource/ti_list View File

// Spelling-to-phoneme rules for Amharic
// This file is UTF-8 encoded
// all words lower case

//numbers

_0 z'ero // b'ado ??
_1 X'ade
_2 kyl'yt@
_3 s@l@syt@
_4 ?aRba'Ate
_5 xamu'Syte
_6 Su'du'Syte
_7 S@wyAate
_8 So'momyte
_9 ty'SyAate
_10 Aa'seryte
_12 Aa'seryte'kylyt@
_1X ?a'seryte
_2X Ay'sera
_3X sal'asa
_4X ?arbAa
_5X Xamsa
_6X susa
_7X sebAa
_8X s@m'anja
_9X t@sAa
_0C mi'ti
_0M1 S'ix
_0M2 m'ilyon
_0M3 b'ilyon

_dpt _n'@t`yb

% p@rs'@nt
። ?aRba'Aten@T'ybi
፣ ne'@t`@las@r@z
፤ d'yryBys@r@z
፧ xto'mylykyt


+ 429
- 0
dictsource/ti_rules View File

// Spelling-to-phoneme rules for Amharic
// This file is UTF-8 encoded
// all words lower case

.group 0xe188 // characters U+1200 to U+123f
ሀ h@
ሁ hu
ሂ hi
ሃ ha
ሄ he
ህ hy
@) ህ (_ x
ሆ ho
ለ l@
ሉ lu
ሊ li
ላ la
ሌ le
ል ly
@) ል (_ l
ሎ lo
ሏ lua

ሐ \X@
ሑ \Xu
ሒ \Xi
ሓ \Xa
ሔ \Xe
ሕ \Xy
@) ሕ (_ x
ሖ \Xo
ሗ \Xwa

መ m@
ሙ mu
ሚ mi
ማ ma
ሜ me
ም my
@) ም (_ m
ሞ mo
ሟ mwa

ሠ s@
ሡ su
ሢ si
ሣ sa
ሤ se
ሥ sy
@) ሥ (_ s
ሦ so
ሧ swa

ረ r@
ሩ ru
ሪ ri
ራ ra
ሬ re
ር ry
@) ር (_ r
ሮ ro
ሯ rwa

ሰ s@
ሱ su
ሲ si
ሳ sa
ሴ se
ስ sy
@) ስ (_ s
ሶ so
ሷ swa

ሸ S@
ሹ Su
ሺ Si
ሻ Sa
ሼ Se
ሽ Sy
@) ሽ (_ S
ሾ So
ሿ Swa




.group 0xe189 // U+1240 to U+127F
ቀ k`@ // U+1240
ቁ k`u
ቂ k`i
ቃ k`a
ቄ k`e
ቅ k`y
@) ቅ (_ k`
ቆ k`o

ቈ k`w@
ቊ k`wi
ቋ k`wa
ቌ k`we
ቍ k`wy
@) ቍ (_ k`w



ቐ q@
ቑ qu
ቒ qi
ቓ qa
ቔ qe
ቕ qy
@) ቕ (_ q
ቖ qo

ቘ qw@
ቚ qwi
ቛ qwa
ቜ qwe
ቝ qwy
@) ቝ (_ qw

በ b@
ቡ bu
ቢ bi
ባ ba
ቤ be
ብ by
@) ብ (_ b
ቦ bo
ቧ bwa

ቨ v@
ቩ vu
ቪ vi
ቫ va
ቬ ve
ቭ vy
@) ቭ (_ v
ቮ vo
ቯ vwa

ተ t@
ቱ tu
ቲ ti
ታ ta
ቴ te
ት ty
@) ት (_ t
ቶ to
ቷ twa

ቸ tS@
ቹ tSu
ቺ tSi
ቻ tSa
ቼ tSe
ች tSy
@) ች (_ tS
ቾ tSo
ቿ tSwa



.group 0xe18a // U+1280 to U+12B7
ኀ h@
ኁ hu
ኂ hi
ኃ ha
ኄ he
ኅ hy
@) ኅ (_ x
ኆ ho

ኈ hw@
ኊ hwi
ኋ hwa
ኌ hwe
ኍ hwy
@) ኍ (_ hw

ነ n@
ኑ nu
ኒ ni
ና na
ኔ ne
ን ny
@) ን (_ n
ኖ no
ኗ nwa

ኘ n^@
ኙ n^u
ኚ n^i
ኛ n^a
ኜ n^e
ኝ n^y
@) ኝ (_ n^
ኞ n^o
ኟ n^wa

አ ?@ // U+12A0
ኡ ?u
ኢ ?i
ኣ ?a
ኤ ?e
_) እ ?y
እ ?'y
ኦ ?o
ኧ ?@

ከ k@ // U+12A8
ኩ ku
ኪ ki
ካ ka
ኬ ke
ክ ky
@) ክ (_ k
ኮ ko
ኰ kw@
ኲ kwi
ኳ kwa
ኴ kwe
ኵ kwy
@) ኵ (_ kw
ኸ x@
ኹ xu
ኺ xi
ኻ xa
ኼ xe
ኽ xy
@) ኽ (_ x
ኾ xo


.group 0xe18b // U+12C0 to U+12FF

ዀ xw@
ዂ xwi
ዃ xwa
ዄ xwe
ዅ xwy
@) ዅ (_ xw

ወ w@
ዉ wu
ዊ wi
ዋ wa
ዌ we
ው wy
@) ው (_ w
ዎ wo

ዐ A@
ዑ Au
ዒ Ai
ዓ Aa
ዔ Ae
ዕ A'y
@) ዕ (_ A'
ዖ Ao

ዘ z@
ዙ zu
ዚ zi
ዛ za
ዜ ze
ዝ zy
@) ዝ (_ z
ዞ zo
ዟ zwa

ዠ Z@
ዡ Zu
ዢ Zi
ዣ Za
ዤ Ze
ዥ Zy
@) ዥ (_ Z
ዦ Zo
ዧ Zwa

የ j@
ዩ ju
ዪ ji
ያ ja
ዬ je
ይ jy
@) ይ (_ j
ዮ jo

ደ d@
ዱ du
ዲ di
ዳ da
ዴ de
ድ dy
@) ድ (_ d
ዶ do
ዷ dwa

ዸ dd@ // ??
ዹ ddu
ዺ ddi
ዻ dda
ዼ dde
ዽ ddy
@) ዽ (_ dd
ዾ ddo
ዿ ddwa


.group 0xe18c // U+1300 to U+133F
ጀ dZ@
ጁ dZu
ጂ dZi
ጃ dZa
ጄ dZe
ጅ dZy
@) ጅ (_ dZ
ጆ dZo
ጇ dZwa

ገ g@
ጉ gu
ጊ gi
ጋ ga
ጌ ge
ግ gy
@) ግ (_ g
ጎ go

ጐ go
ጒ gwi
ጓ gwa
ጔ gwe
ጕ gwy
@) ጕ (_ gw

ጘ N@
ጙ Nu
ጚ Ni
ጛ Na
ጜ Ne
ጝ Ny
@) ጝ (_ N
ጞ No

ጠ t`@
ጡ t`u
ጢ t`i
ጣ t`a
ጤ t`e
ጥ t`y
@) ጥ (_ t`
ጦ t`o
ጧ t`wa

ጨ tS`@
ጩ tS`u
ጪ tS`i
ጫ tS`a
ጬ tS`e
ጭ tS`y
@) ጭ (_ tS`
ጮ tS`o
ጯ tS`wa

ጰ p`@
ጱ p`u
ጲ p`i
ጳ p`a
ጴ p`e
ጵ p`y
@) ጵ (_ p`
ጶ p`o
ጷ p`wa

ጸ ts@
ጹ tsu
ጺ tsi
ጻ tsa
ጼ tse
ጽ tsy
@) ጽ (_ ts
ጾ tso
ጿ tswa


.group 0xe18d // U+1340 to U+137F
ፀ ts@
ፁ tsu
ፂ tsi
ፃ tsa
ፄ tse
ፅ tsy
@) ፅ (_ ts
ፆ tso

ፈ f@
ፉ fu
ፊ fi
ፋ fa
ፌ fe
ፍ fy
@) ፍ (_ f
ፎ fo
ፏ fwa

ፐ p@ // U+1350
ፑ pu
ፒ pi
ፓ pa
ፔ pe
ፕ py
@) ፕ (_ p
ፖ po
ፗ pwa

ፘ rj@
ፙ mj@
ፚ fj@


.group
$ dolar


+ 1
- 1
docs/voices.md View File

and sets default values for "phonemes", "dictionary" and other and sets default values for "phonemes", "dictionary" and other
attributes. attributes.


If value for `lanuguage` field is `variant`, then file describes only
If value for `language` field is `variant`, then file describes only
phonetic features of the voice and it can be used as a [...+variant](../src/espeak-ng.1.ronn) phonetic features of the voice and it can be used as a [...+variant](../src/espeak-ng.1.ronn)
option for any language. option for any language.



+ 5
- 0
espeak-ng-data/lang/sem/ti View File

name Tigrinya
language ti

maintainer Biniam Gebremichael <[email protected]>
status testing

+ 140
- 0
phsource/ph_tigrinya View File


//====================================================
// Tigrinya (Eritrea and Ethiopia)
//====================================================


phoneme i
vwl starttype #i endtype #i
length 200
IfNextVowelAppend(;)
FMT(vowel/ii_5)
endphoneme

phoneme e
vwl starttype #e endtype #e
length 220
FMT(vowel/e_mid2)
endphoneme

phoneme y
vwl starttype #@ endtype #@
ipa ɨ
length 180

FMT(vowel/ii#_2)
endphoneme


phoneme a
vwl starttype #a endtype #a
length 220
IF nextPhW(isPalatal) THEN
FMT(vdiph/ai_5)
ENDIF
FMT(vowel/a_6)
endphoneme


phoneme @
vwl starttype #@ endtype #@
length 220
IF nextPhW(isPalatal) THEN
FMT(vdiph/@i_2)
ENDIF
FMT(vowel/@_3)
endphoneme


phoneme o
vwl starttype #o endtype #o
length 220
FMT(vowel/o-_4)
endphoneme


phoneme u
vwl starttype #u endtype #u
length 220
FMT(vowel/u_2)
endphoneme


phoneme r
import_phoneme base1/R2
endphoneme


phoneme p`
vls blb stp
lengthmod 2
voicingswitch b
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 gpaus
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
WAV(ustop/p_unasp)
endphoneme


phoneme b
vcd blb stp
IF prevPhW(isVowel) AND nextPhW(isVowel) THEN
ChangePhoneme(B)
ENDIF
CALL base1/b
endphoneme


phoneme t`
vls alv stp
lengthmod 2
voicingswitch d
Vowelin f1=0 f2=1700 -300 300 f3=-100 80 gpaus
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/t_)
ENDIF
WAV(ustop/t_hi, 70)
endphoneme


phoneme tS`
vls pla afr sib
voicingswitch dZ
lengthmod 2
Vowelin f1=0 f2=1800 -200 200 f3=-100 80 gpaus

IF nextPh(isPause2) THEN
WAV(ustop/tsh_unasp, 80)
ENDIF
WAV(ustop/tsh_unasp, 80)
endphoneme


phoneme k`
vls vel stp
lengthmod 2
Vowelin f1=0 f2=1700 -250 250 f3= -200 80 gpaus f4
Vowelout f1=0 f2=2300 300 400 f3=-200 80 rms=20
WAV(ustop/k_ejc, 60)
endphoneme


phoneme x
vls vel frc
lengthmod 3
IF prevPhW(#i) THEN
ChangePhoneme(C)
ELSE
CALL base1/x
ENDIF
endphoneme

phoneme A // Tigrinya Aamet (year)
vcd frc
ipa ʕ
voicingswitch a
length 160
Vowelin f1=2 f2=2300 -400 500 f3=300 80
Vowelout f1=2 f2=2300 -300 450 f3=-100 10
FMT(r/xr,25) addWav(h/h_,30)
endphoneme

+ 3
- 0
phsource/phonemes View File

phonemetable sw base1 phonemetable sw base1
include ph_swahili include ph_swahili


phonemetable ti base1
include ph_tigrinya

phonemetable tn base1 phonemetable tn base1
include ph_setswana include ph_setswana



+ 4
- 0
src/libespeak-ng/dictionary.c View File



static const char consonant_types[16] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; static const char consonant_types[16] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 };


memset(syllable_weight, 0, sizeof(syllable_weight));
memset(vowel_length, 0, sizeof(vowel_length));

stressflags = tr->langopts.stress_flags; stressflags = tr->langopts.stress_flags;


if (dictionary_flags != NULL) if (dictionary_flags != NULL)
*word_end = 'e'; *word_end = 'e';
} }
i = word_end - word; i = word_end - word;
if (i >= N_WORD_BYTES) i = N_WORD_BYTES-1;


if (word_copy != NULL) { if (word_copy != NULL) {
memcpy(word_copy, word, i); memcpy(word_copy, word, i);

+ 1
- 1
src/libespeak-ng/readclause.c View File

if (c2 != '1') { if (c2 != '1') {
// a list of punctuation characters to be spoken, terminated by space // a list of punctuation characters to be spoken, terminated by space
j = 0; j = 0;
while (!Eof() && !iswspace(c2)) {
while (!Eof() && !iswspace(c2) && (j < N_PUNCTLIST-1)) {
option_punctlist[j++] = c2; option_punctlist[j++] = c2;
c2 = GetC(); c2 = GetC();
buf[ix++] = ' '; buf[ix++] = ' ';

+ 14
- 4
src/libespeak-ng/synthdata.c View File

if ((f_in = fopen(buf, "rb")) == NULL) if ((f_in = fopen(buf, "rb")) == NULL)
return create_file_error_context(context, errno, buf); return create_file_error_context(context, errno, buf);


if (*ptr != NULL)
if (*ptr != NULL) {
free(*ptr); free(*ptr);
*ptr = NULL;
}
if (length == 0) {
*ptr = NULL;
return 0;
}


if ((*ptr = malloc(length)) == NULL) { if ((*ptr = malloc(length)) == NULL) {
fclose(f_in); fclose(f_in);
int error = errno; int error = errno;
fclose(f_in); fclose(f_in);
free(*ptr); free(*ptr);
*ptr = NULL;
return create_file_error_context(context, error, buf); return create_file_error_context(context, error, buf);
} }


// read the version number and sample rate from the first 8 bytes of phondata // read the version number and sample rate from the first 8 bytes of phondata
version = 0; // bytes 0-3, version number version = 0; // bytes 0-3, version number
rate = 0; // bytes 4-7, sample rate rate = 0; // bytes 4-7, sample rate
for (ix = 0; ix < 4; ix++) {
version += (wavefile_data[ix] << (ix*8));
rate += (wavefile_data[ix+4] << (ix*8));
if (wavefile_data) {
for (ix = 0; ix < 4; ix++) {
version += (wavefile_data[ix] << (ix*8));
rate += (wavefile_data[ix+4] << (ix*8));
}
} }


if (version != version_phdata) if (version != version_phdata)

+ 1
- 0
src/libespeak-ng/translate.c View File

if (dict_flags & FLAG_SPELLWORD) { if (dict_flags & FLAG_SPELLWORD) {
// redo the word, speaking single letters // redo the word, speaking single letters
for (pw = word; *pw != ' ';) { for (pw = word; *pw != ' ';) {
memset(number_buf, 0, sizeof(number_buf));
memset(number_buf, ' ', 9); memset(number_buf, ' ', 9);
nx = utf8_in(&c_temp, pw); nx = utf8_in(&c_temp, pw);
memcpy(&number_buf[2], pw, nx); memcpy(&number_buf[2], pw, nx);

+ 1
- 0
src/libespeak-ng/translate.h View File



int TranslateWord(Translator *tr, char *word1, WORD_TAB *wtab, char *word_out); int TranslateWord(Translator *tr, char *word1, WORD_TAB *wtab, char *word_out);
void TranslateClause(Translator *tr, int *tone, char **voice_change); void TranslateClause(Translator *tr, int *tone, char **voice_change);
void TranslateClauseWithTerminator(Translator *tr, int *tone_out, char **voice_change, int *terminator_out);


void SetVoiceStack(espeak_VOICE *v, const char *variant_name); void SetVoiceStack(espeak_VOICE *v, const char *variant_name);



+ 12
- 8
src/libespeak-ng/voices.c View File

MAKE_MEM_UNDEFINED(&voice_languages, sizeof(voice_languages)); MAKE_MEM_UNDEFINED(&voice_languages, sizeof(voice_languages));
} }


if ((vname == NULL || vname[0] == 0) && !(control & 8)) {
return NULL;
}

strncpy0(voicename, vname, sizeof(voicename)); strncpy0(voicename, vname, sizeof(voicename));
if (control & 0x10) { if (control & 0x10) {
strcpy(buf, vname); strcpy(buf, vname);


if (!tone_only) { if (!tone_only) {
if (!!(control & 8/*compiling phonemes*/)) { if (!!(control & 8/*compiling phonemes*/)) {
/* Set by espeak_ng_CompilePhonemeDataPath when it
* calls LoadVoice("", 8) to set up a dummy(?) voice.
* As phontab may not yet exist this avoids the spurious
* error message and guarantees consistent results by
* not actually reading a potentially bogus phontab...
*/
ix = 0;
} else if ((ix = SelectPhonemeTableName(phonemes_name)) < 0) {
/* Set by espeak_ng_CompilePhonemeDataPath when it
* calls LoadVoice("", 8) to set up a dummy(?) voice.
* As phontab may not yet exist this avoids the spurious
* error message and guarantees consistent results by
* not actually reading a potentially bogus phontab...
*/
ix = 0;
} else if ((ix = SelectPhonemeTableName(phonemes_name)) < 0) {
fprintf(stderr, "Unknown phoneme table: '%s'\n", phonemes_name); fprintf(stderr, "Unknown phoneme table: '%s'\n", phonemes_name);
ix = 0; ix = 0;
} }

+ 6
- 3
src/libespeak-ng/wavegen.c View File

if (wvoice == NULL) if (wvoice == NULL)
return; return;


int x;
int x = 0;
int ix; int ix;
static int Flutter_ix = 0; static int Flutter_ix = 0;


// advance the pitch // advance the pitch
wdata.pitch_ix += wdata.pitch_inc; wdata.pitch_ix += wdata.pitch_inc;
if ((ix = wdata.pitch_ix>>8) > 127) ix = 127; if ((ix = wdata.pitch_ix>>8) > 127) ix = 127;
x = wdata.pitch_env[ix] * wdata.pitch_range;
if (wdata.pitch_env) x = wdata.pitch_env[ix] * wdata.pitch_range;
wdata.pitch = (x>>8) + wdata.pitch_base; wdata.pitch = (x>>8) + wdata.pitch_base;
if(const_f0) if(const_f0)
wdata.pitch = (const_f0<<12); wdata.pitch = (const_f0<<12);
if (wdata.pitch < 102400) if (wdata.pitch < 102400)
wdata.pitch = 102400; // min pitch, 25 Hz (25 << 12) wdata.pitch = 102400; // min pitch, 25 Hz (25 << 12)


static bool resume = false; static bool resume = false;
static int echo_complete = 0; static int echo_complete = 0;


if (wdata.pitch < 102400)
wdata.pitch = 102400; // min pitch, 25 Hz (25 << 12)

while (out_ptr < out_end) { while (out_ptr < out_end) {
if (WcmdqUsed() <= 0) { if (WcmdqUsed() <= 0) {
if (echo_complete > 0) { if (echo_complete > 0) {

+ 1
- 0
tests/CMakeLists.txt View File

shell_test(translate) shell_test(translate)
shell_test(variants) shell_test(variants)
shell_test(voices) shell_test(voices)
shell_test(crash)


# shell_test(windows-data) # shell_test(windows-data)
# shell_test(windows-installer) # shell_test(windows-installer)

+ 69
- 59
tests/common View File

#!/bin/sh #!/bin/sh
# Test a command for presence and ability to output the sha1 hash of a file # Test a command for presence and ability to output the sha1 hash of a file
is_hash() { is_hash() {
echo -n "checking for SHA1 hashing command ... "
if check_hash sha1sum; then
sha1sum=sha1sum
elif check_hash sha1; then
sha1sum=sha1
elif check_hash shasum; then
sha1sum=shasum
else
echo "no"
exit 1
fi
echo -n "checking for SHA1 hashing command ... "
if check_hash sha1sum; then
sha1sum=sha1sum
elif check_hash sha1; then
sha1sum=sha1
elif check_hash shasum; then
sha1sum=shasum
else
echo "no"
exit 1
fi
} }
check_hash() { check_hash() {
which $1 &&
$1 </dev/null 2>/dev/null |
awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}'
# Test some common commands to find the correct one for the system being tested on.
which $1 &&
$1 </dev/null 2>/dev/null |
awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}'
# Test some common commands to find the correct one for the system being tested on.
} }


# test if MBROLA synthesizer is installed # test if MBROLA synthesizer is installed
fi fi


echo "testing ${TEST_LANG} $MESSAGE" echo "testing ${TEST_LANG} $MESSAGE"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" \
> actual.txt || exit 1
echo "${EXPECTED}" > expected.txt
if [ "$MESSAGE" = "Ignore" ] ; then
diff expected.txt actual.txt || (echo "... ignoring error" && true)
else
diff expected.txt actual.txt || exit 1
RESULT=$(
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" || exit 1
)
if [ "x$RESULT" != "x$EXPECTED" ] ; then
echo "$RESULT != $EXPECTED"
if [ "$MESSAGE" = "Ignore" ] ; then
echo "... ignoring error"
else
exit 1
fi
fi fi
} }


# Check generated wav file from processed text # Check generated wav file from processed text
test_wav () { test_wav () {
VOICE=$1
EXPECTED=$2
TEST_TEXT=$3
MESSAGE=$4
VOICE=$1
EXPECTED=$2
TEST_TEXT=$3
MESSAGE=$4


echo "testing ${VOICE}${MESSAGE}"
echo "testing ${VOICE} ${MESSAGE}"
RESULT=$(
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \
> actual.txt || exit 1
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt
echo "${EXPECTED}" > expected.txt
$VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" | $sha1sum | awk '{ print $1 }' || exit 1
)
if [ "x$RESULT" != "x$EXPECTED" ] ; then
echo "$RESULT != $EXPECTED"
if [ "$MESSAGE" = "Ignore" ] ; then if [ "$MESSAGE" = "Ignore" ] ; then
diff expected.txt sum.txt || (echo "... ignoring error" && true)
echo "... ignoring error"
else else
diff expected.txt sum.txt || exit 1
exit 1
fi fi
fi
} }


# Check generated wav file from processed text, where $EXPECTED is grep string # Check generated wav file from processed text, where $EXPECTED is grep string
test_wav_grep () { test_wav_grep () {
VOICE=$1
EXPECTED=$2
TEST_TEXT=$3
MESSAGE=$4
echo "testing ${VOICE}${MESSAGE}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \
> actual.txt || exit 1
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt
if [ "$MESSAGE" = "Ignore" ] ; then
cat sum.txt | grep -E "$EXPECTED" || (echo "... ignoring error" && true)
else
cat sum.txt | grep -E "$EXPECTED" || { printf "wrong hash: "; cat sum.txt; exit 1; }
fi
VOICE=$1
EXPECTED=$2
TEST_TEXT=$3
MESSAGE=$4
echo "testing ${VOICE} ${MESSAGE}"
$()
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \
> actual.txt || exit 1
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt
if [ "$MESSAGE" = "Ignore" ] ; then
cat sum.txt | grep -E "$EXPECTED" || (echo "... ignoring error" && true)
else
cat sum.txt | grep -E "$EXPECTED" || { printf "wrong hash: "; cat sum.txt; exit 1; }
fi
} }


# Check generated wav file from list of phonemes # Check generated wav file from list of phonemes
TEST_LANG=$1 TEST_LANG=$1
EXPECTED=$2 EXPECTED=$2
TEST_TEXT=$3 TEST_TEXT=$3
test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]"
test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]"
} }


test_replace() { test_replace() {
TEST_LANG=$1 TEST_LANG=$1
TEST_TEXT=$2 TEST_TEXT=$2
MESSAGE=$3
EXPECTED=$3
MESSAGE=$4


if [ "$MESSAGE" = "" ] ; then if [ "$MESSAGE" = "" ] ; then
MESSAGE=$TEST_TEXT MESSAGE=$TEST_TEXT
fi fi


echo "testing ${TEST_LANG}" echo "testing ${TEST_LANG}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" \
> actual.txt || exit 1
< actual.txt grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' > filtered.txt
if [ "$MESSAGE" = "Ignore" ] ; then
diff expected.txt filtered.txt || (echo "... ignoring error" && true)
else
diff expected.txt filtered.txt || exit 1
RESULT=$(
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" | \
grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' || exit 1
)
if [ "x$RESULT" != "x$EXPECTED" ] ; then
echo "$RESULT != $EXPECTED"
if [ "$MESSAGE" = "Ignore" ] ; then
echo "... ignoring error"
else
exit 1
fi
fi fi
} }


+ 17
- 0
tests/crash.test View File

#!/bin/sh
# include common script
. "`dirname $0`/common"

test_crash() {
TEST_NAME=$1

echo "testing CVE-${TEST_NAME}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -f "$(dirname $0)/crash_vectors/${TEST_NAME}.txt" -w /dev/null || exit 1
}

test_crash cve-2023-49990
test_crash cve-2023-49991
test_crash cve-2023-49992
test_crash cve-2023-49993
test_crash cve-2023-49994

+ 1
- 0
tests/crash_vectors/cve-2023-49990.txt View File

ã¦à»Vñ€¦ñ €¦V €äVñ€ãÂà¦æsññâñþâññà¶æØØsññâñþâññeeeeeeeeseee€ññûñ

+ 1
- 0
tests/crash_vectors/cve-2023-49991.txt View File

€¦Vń €ńVđŐhńůâ˙ńVDíZ»»ŐöÖÖÖÖÖÖÖÖÖě»»ş»ÖľÖÖÖÖÖÖ´ÖÖÖ»ţţ÷ÜÖÖÖ»»ş»ŐŞ»»®î˙˙€ę`v

BIN
tests/crash_vectors/cve-2023-49992.txt View File


BIN
tests/crash_vectors/cve-2023-49993.txt View File


+ 1
- 0
tests/crash_vectors/cve-2023-49994.txt View File

"[[-#,- -1-2. r--Ş#--O)C--!˙E-1‹@5-!-V-1--

+ 1
- 1
tests/language-numbers-cardinal.test View File

test_phon en "t'En tw'Enti T'3:ti f'o@ti f'Ifti s'Iksti s'Ev@nti; 'eIti n'aInti" "10 20 30 40 50 60 70 80 90" "tens" test_phon en "t'En tw'Enti T'3:ti f'o@ti f'Ifti s'Iksti s'Ev@nti; 'eIti n'aInti" "10 20 30 40 50 60 70 80 90" "tens"
test_phon en-GB "Tr'i:h'VndrI2d@n s'Iksti f'aIv" "365" "hundreds" test_phon en-GB "Tr'i:h'VndrI2d@n s'Iksti f'aIv" "365" "hundreds"
test_phon en-US "Tr'i:h'VndrI2d s'Iksti f'aIv" "365" "hundreds" test_phon en-US "Tr'i:h'VndrI2d s'Iksti f'aIv" "365" "hundreds"
test_phon en "w'0nh'VndrI2d w'0n T'aUz@nd w'0n m'Ili@n w'0n b'Ili@n w'0n tr'Ili@n w'0n kw0dr'Ili@n w'0n kwInt'Ili@n w'0n sExt'Ili@n w'0n sEpt'Ili@n w'0n 0kt'Ili@n w'0n n0n'Ili@n t'En n0n'Ili@n n'aInti n'aIn n0n'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn 0kt'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn sEpt'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn sExt'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn kwInt'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn kw0dr'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn tr'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn b'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn m'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn T'aUz@nd_! n'aInh'VndrI2d@n n'aInti n'aIn w'0nz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@r" "100 1000 1000000 1000000000 1000000000000 1000000000000000 1000000000000000000 1000000000000000000000 1000000000000000000000000 1000000000000000000000000000 1000000000000000000000000000000 10000000000000000000000000000000 99999999999999999999999999999999 100000000000000000000000000000000" "large" # 10^2 10^3 10^6 10^9 10^12 10^15 10^18 10^21 10^24 10^27 10^30 10^31 10^32
test_phon en "w'0nh'VndrI2d w'0n T'aUz@nd w'0n m'Ili@n w'0n b'Ili@n w'0n tr'Ili@n w'0n kw0dr'Ili@n w'0n kwInt'Ili@n w'0n sEkst'Ili@n w'0n sEpt'Ili@n w'0n 0kt'Ili@n w'0n n0n'Ili@n t'En n0n'Ili@n n'aInti n'aIn n0n'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn 0kt'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn sEpt'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn sEkst'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn kwInt'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn kw0dr'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn tr'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn b'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn m'Ili@n_! n'aInh'VndrI2d@n n'aInti n'aIn T'aUz@nd_! n'aInh'VndrI2d@n n'aInti n'aIn w'0nz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@roUz'i@roU_!z'i@r" "100 1000 1000000 1000000000 1000000000000 1000000000000000 1000000000000000000 1000000000000000000000 1000000000000000000000000 1000000000000000000000000000 1000000000000000000000000000000 10000000000000000000000000000000 99999999999999999999999999999999 100000000000000000000000000000000" "large" # 10^2 10^3 10^6 10^9 10^12 10^15 10^18 10^21 10^24 10^27 10^30 10^31 10^32
test_phon en "f'aIv s'Iksti f'o@ w'0nh'VndrI2d@n tw'Enti Tr'i: f'o@ T'aUz@nd Tr'i:h'VndrI2d@n f'Ifti s'Ev@n f'o@ti:n T'aUz@nd_! s'Iksh'VndrI2d@n 'eIti Tr'i: s'Ev@nh'VndrI2d@n f'o@ti t'u: T'aUz@nd_! Tr'i:h'VndrI2d@n f'Ifti n'aIn s'Iks m'Ili@n_! f'o@h'VndrI2d@n s'Ev@nti f'aIv T'aUz@nd_! Tr'i:h'VndrI2d@n tw'Enti; 'eIt" "5 64 123 4357 14683 742359 6475328" "mixed" test_phon en "f'aIv s'Iksti f'o@ w'0nh'VndrI2d@n tw'Enti Tr'i: f'o@ T'aUz@nd Tr'i:h'VndrI2d@n f'Ifti s'Ev@n f'o@ti:n T'aUz@nd_! s'Iksh'VndrI2d@n 'eIti Tr'i: s'Ev@nh'VndrI2d@n f'o@ti t'u: T'aUz@nd_! Tr'i:h'VndrI2d@n f'Ifti n'aIn s'Iks m'Ili@n_! f'o@h'VndrI2d@n s'Ev@nti f'aIv T'aUz@nd_! Tr'i:h'VndrI2d@n tw'Enti; 'eIt" "5 64 123 4357 14683 742359 6475328" "mixed"


echo "... lv (Latvian)" # short scale echo "... lv (Latvian)" # short scale

+ 1
- 1
tests/language-numbers-ordinal.test View File

test_phon en "t'EnT tw'Enti@T T'3:ti@T f'o@ti@T f'Ifti@T s'Iksti@T s'Ev@nt,i@T 'eIti@T n'aInti@T" "10th 20th 30th 40th 50th 60th 70th 80th 90th" "tens" test_phon en "t'EnT tw'Enti@T T'3:ti@T f'o@ti@T f'Ifti@T s'Iksti@T s'Ev@nt,i@T 'eIti@T n'aInti@T" "10th 20th 30th 40th 50th 60th 70th 80th 90th" "tens"
test_phon en-GB "Tr'i:h'VndrI2d@n s'Iksti f'IfT" "365th" "hundreds" test_phon en-GB "Tr'i:h'VndrI2d@n s'Iksti f'IfT" "365th" "hundreds"
test_phon en-US "Tr'i:h'VndrI2d s'Iksti f'IfT" "365th" "hundreds" test_phon en-US "Tr'i:h'VndrI2d s'Iksti f'IfT" "365th" "hundreds"
test_phon en "w'0nh'VndrI2d T w'0n T'aUz@nd T w'0n m'Ili@n T w'0n b'Ili@n T w'0n tr'Ili@n T w'0n kw0dr'Ili@n T w'0n kwInt'Ili@n T w'0n sExt'Ili@n T w'0n sEpt'Ili@n T w'0n 0kt'Ili@n T w'0n n0n'Ili@n T" "100th 1000th 1000000th 1000000000th 1000000000000th 1000000000000000th 1000000000000000000th 1000000000000000000000th 1000000000000000000000000th 1000000000000000000000000000th 1000000000000000000000000000000th" "large" # 10^2 10^3 10^6 10^9 10^12 10^15 10^18 10^21 10^24 10^27 10^30
test_phon en "w'0nh'VndrI2d T w'0n T'aUz@nd T w'0n m'Ili@n T w'0n b'Ili@n T w'0n tr'Ili@n T w'0n kw0dr'Ili@n T w'0n kwInt'Ili@n T w'0n sEkst'Ili@n T w'0n sEpt'Ili@n T w'0n 0kt'Ili@n T w'0n n0n'Ili@n T" "100th 1000th 1000000th 1000000000th 1000000000000th 1000000000000000th 1000000000000000000th 1000000000000000000000th 1000000000000000000000000th 1000000000000000000000000000th 1000000000000000000000000000000th" "large" # 10^2 10^3 10^6 10^9 10^12 10^15 10^18 10^21 10^24 10^27 10^30
test_phon en "f'IfT s'Iksti f'o@T w'0nh'VndrI2d@n tw'Enti T'3:d f'o@ T'aUz@nd Tr'i:h'VndrI2d@n f'Ifti s'Ev@nT f'o@ti:n T'aUz@nd_! s'Iksh'VndrI2d@n 'eIti T'3:d s'Ev@nh'VndrI2d@n f'o@ti t'u: T'aUz@nd_! Tr'i:h'VndrI2d@n f'Ifti n'aInT s'Iks m'Ili@n_! f'o@h'VndrI2d@n s'Ev@nti f'aIv T'aUz@nd_! Tr'i:h'VndrI2d@n tw'Enti; 'eItT" "5th 64th 123rd 4357th 14683rd 742359th 6475328th" "mixed" test_phon en "f'IfT s'Iksti f'o@T w'0nh'VndrI2d@n tw'Enti T'3:d f'o@ T'aUz@nd Tr'i:h'VndrI2d@n f'Ifti s'Ev@nT f'o@ti:n T'aUz@nd_! s'Iksh'VndrI2d@n 'eIti T'3:d s'Ev@nh'VndrI2d@n f'o@ti t'u: T'aUz@nd_! Tr'i:h'VndrI2d@n f'Ifti n'aInT s'Iks m'Ili@n_! f'o@h'VndrI2d@n s'Ev@nti f'aIv T'aUz@nd_! Tr'i:h'VndrI2d@n tw'Enti; 'eItT" "5th 64th 123rd 4357th 14683rd 742359th 6475328th" "mixed"
test_phon lv "p'iRmais g'ads test_phon lv "p'iRmais g'ads
'uotRais g'ads 'uotRais g'ads

+ 1
- 0
tests/language-phonemes.test View File

test_phwav sw 2712335a0acb022988879b6cedba2ee9ef158659 "ma na Na pa ta ka ba da ga fa Ta sa Sa xa ha va Da za Za tSa dZa la ra ja wa t2a t#a d#a z#a r-a z/2a w#a m- n- N- _:_ mI mE ma m0 mV mU mi: mA: mO: mu: m3: mA@ mO@ mo@ mU@ mi@3 mIR mVR mi@ me@ mi m@ m3 me# mI# mI2 meI maI mOI moU maU maa mO2 maI@ maI3 maU@" test_phwav sw 2712335a0acb022988879b6cedba2ee9ef158659 "ma na Na pa ta ka ba da ga fa Ta sa Sa xa ha va Da za Za tSa dZa la ra ja wa t2a t#a d#a z#a r-a z/2a w#a m- n- N- _:_ mI mE ma m0 mV mU mi: mA: mO: mu: m3: mA@ mO@ mo@ mU@ mi@3 mIR mVR mi@ me@ mi m@ m3 me# mI# mI2 meI maI mOI moU maU maa mO2 maI@ maI3 maU@"
test_phwav ta 910d08d60dacd0a287437cd03f8e4510bc41ed8f "ma na n.a n^a Na pa p#a ba b#a ta t#a da d#a t.a t.#a d.a d.#a ka k#a ga g#a fa va sa S;a s.a ca c#a Ja J#a ha ja ra la l.a r-a _:_ ma ma: mi mi: mu mu: me me: mo mo: maI" test_phwav ta 910d08d60dacd0a287437cd03f8e4510bc41ed8f "ma na n.a n^a Na pa p#a ba b#a ta t#a da d#a t.a t.#a d.a d.#a ka k#a ga g#a fa va sa S;a s.a ca c#a Ja J#a ha ja ra la l.a r-a _:_ ma ma: mi mi: mu mu: me me: mo mo: maI"
test_phwav te 214fbe8ac3508d7cd92c01bdcceee135b6bc47f3 "ma na n.a n^a Na pa p#a ba b#a ta t#a da d#a t.a t.#a d.a d.#a ka k#a ga g#a fa va sa S;a s.a ca c#a Ja J#a ha ja ra la l.a r-a _:_ ma ma: mi mi: mu mu: me me: mo mo: maI" test_phwav te 214fbe8ac3508d7cd92c01bdcceee135b6bc47f3 "ma na n.a n^a Na pa p#a ba b#a ta t#a da d#a t.a t.#a d.a d.#a ka k#a ga g#a fa va sa S;a s.a ca c#a Ja J#a ha ja ra la l.a r-a _:_ ma ma: mi mi: mu mu: me me: mo mo: maI"
test_phwav ti 6fc09a43bb580d38b220fc9756ec6ea70789815d "ma na Na pa ta ka ?a ba da ga p\`a t\`a k\`a tSa dZa tS\`a Ba sa za Sa Za xa ha la ja wa ra _:_ mi me my ma m@ mo mu Xa Aa"
test_phwav th bd61d637711c32abcfee03b2d8d332f6442efcff "ma na Ja Na pa p_ha ba ta t_ha da ka k_ha ga ?a fa sa za Ta ha tS;a Ra ja wa la _:_ mi mI mW mu me m@ mo mE ma ma: mO miu meu mEu mau ma:u mWi mui m@i moi mai ma:i mOi maW _:_ ma1 ma2 ma3 ma4 ma5 ma6" test_phwav th bd61d637711c32abcfee03b2d8d332f6442efcff "ma na Ja Na pa p_ha ba ta t_ha da ka k_ha ga ?a fa sa za Ta ha tS;a Ra ja wa la _:_ mi mI mW mu me m@ mo mE ma ma: mO miu meu mEu mau ma:u mWi mui m@i moi mai ma:i mOi maW _:_ ma1 ma2 ma3 ma4 ma5 ma6"
test_phwav tk f67686d7831f044796e917f0fd50e63d74757b34 "ma na pa ba ta da tSa dZa tsa dza ca Ja Ca ka ga fa va sa za Sa Za xa Qa ha la ja wa Ra *a _:_ mi me m& my mW mu mo ma m@" test_phwav tk f67686d7831f044796e917f0fd50e63d74757b34 "ma na pa ba ta da tSa dZa tsa dza ca Ja Ca ka ga fa va sa za Sa Za xa Qa ha la ja wa Ra *a _:_ mi me m& my mW mu mo ma m@"
test_phwav tn 206f0e832cc4a5fa19dc3917752e1d5b274047d4 "ma na Na pa ta ka ba da ga fa Ta sa Sa xa ha va Da za Za tSa dZa la ra ja wa t2a t#a d#a z#a r-a z/2a w#a m- n- N- _:_ mI mE ma m0 mV mU mi: mA: mO: mu: m3: mA@ mO@ mo@ mU@ mi@3 mIR mVR mi@ me@ mi m@ m3 me# mI# mI2 meI maI mOI moU maU maa mO2 maI@ maI3 maU@" test_phwav tn 206f0e832cc4a5fa19dc3917752e1d5b274047d4 "ma na Na pa ta ka ba da ga fa Ta sa Sa xa ha va Da za Za tSa dZa la ra ja wa t2a t#a d#a z#a r-a z/2a w#a m- n- N- _:_ mI mE ma m0 mV mU mi: mA: mO: mu: m3: mA@ mO@ mo@ mU@ mi@3 mIR mVR mi@ me@ mi m@ m3 me# mI# mI2 meI maI mOI moU maU maa mO2 maI@ maI3 maU@"

+ 12
- 31
tests/language-replace.test View File

##### bs: Bosnian ##### bs: Bosnian


# Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos.
cat > expected.txt <<EOF
Translate 'ljubazni'
test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni'
Translate 'fenjerdžija' Translate 'fenjerdžija'
Translate 'čađavog' Translate 'čađavog'
Translate 'lica' Translate 'lica'
Translate 'da' Translate 'da'
Translate 'mi' Translate 'mi'
Translate 'pokaže' Translate 'pokaže'
Translate 'štos'
EOF
test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос."
Translate 'štos'"


##### en: English ##### en: English


cat > expected.txt <<EOF
Translate 'aeon'
test_replace en "Æon mediæval. Œconomy phœnix. Loſt history." "Translate 'aeon'
Found: 'mediaeval' Found: 'mediaeval'
Translate 'oeconomy' Translate 'oeconomy'
Found: 'phoenix' Found: 'phoenix'
Found: 'lost' Found: 'lost'
Translate 'history'
EOF
test_replace en "Æon mediæval. Œconomy phœnix. Loſt history."
Translate 'history'"


##### hr: Croatian ##### hr: Croatian


# Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos.
cat > expected.txt <<EOF
Translate 'ljubazni'
test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni'
Translate 'fenjerdžija' Translate 'fenjerdžija'
Translate 'čađavog' Translate 'čađavog'
Translate 'lica' Translate 'lica'
Translate 'da' Translate 'da'
Translate 'mi' Translate 'mi'
Translate 'pokaže' Translate 'pokaže'
Translate 'štos'
EOF
test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос."
Translate 'štos'"


##### ja: Japanese ##### ja: Japanese


# いろはにほへと. ちりぬるを. わかよたれそ. つねならむ. うゐのおくやま. けふこえて. あさきゆめみし. ゑひもせすん. # いろはにほへと. ちりぬるを. わかよたれそ. つねならむ. うゐのおくやま. けふこえて. あさきゆめみし. ゑひもせすん.
cat > expected.txt <<EOF
Translate 'いろはにほへと'
test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン." "Translate 'いろはにほへと'
Translate 'ちりぬるを' Translate 'ちりぬるを'
Translate 'わかよたれそ' Translate 'わかよたれそ'
Translate 'つねならむ' Translate 'つねならむ'
Translate 'うゐのおくやま' Translate 'うゐのおくやま'
Translate 'けふこえて' Translate 'けふこえて'
Translate 'あさきゆめみし' Translate 'あさきゆめみし'
Translate 'ゑひもせすん'
EOF
test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン."
Translate 'ゑひもせすん'"


##### mk: Macedonian ##### mk: Macedonian


# Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех. # Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех.
cat > expected.txt <<EOF
Translate 'ѕидарски'
test_replace mk "Dzidarski pejzaž: šugav bilmez so čudenje džvaka ćofte i kelj na tuđ ceh." "Translate 'ѕидарски'
Translate 'пејзаж' Translate 'пејзаж'
Translate 'шугав' Translate 'шугав'
Translate 'билмез' Translate 'билмез'
Translate 'кељ' Translate 'кељ'
Translate 'на' Translate 'на'
Translate 'туѓ' Translate 'туѓ'
Translate 'цех'
EOF
test_replace mk "Dzidarski pejzaž: šugav bilmez so čudenje džvaka ćofte i kelj na tuđ ceh."
Translate 'цех'"


##### sr: Serbian ##### sr: Serbian


# Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos.
cat > expected.txt <<EOF
Translate 'ljubazni'
test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni'
Translate 'fenjerdžija' Translate 'fenjerdžija'
Translate 'čađavog' Translate 'čađavog'
Translate 'lica' Translate 'lica'
Translate 'da' Translate 'da'
Translate 'mi' Translate 'mi'
Translate 'pokaže' Translate 'pokaže'
Translate 'štos'
EOF
test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос."

Translate 'štos'"

+ 17
- 11
tests/ssml.test View File

OPTS=$4 OPTS=$4


echo "testing ${TEST_NAME}" echo "testing ${TEST_NAME}"
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} \
> actual.txt || exit 1
< actual.txt $sha1sum | awk '{ print $1 }' > sum.txt
echo "${EXPECTED}" > expected.txt
diff expected.txt sum.txt || exit 1
RESULT=$(
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} | $sha1sum | awk '{ print $1 }' || exit 1
)
if [ "x$RESULT" != "x$EXPECTED" ] ; then
echo "$RESULT != $EXPECTED"
exit 1
fi
} }


test_ssml() { test_ssml() {
fi fi


echo "testing ${INPUT}" echo "testing ${INPUT}"
cp $(dirname $INPUT)/$(basename ${INPUT%.*}).expected expected.txt
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} \
> actual.txt || exit 1
diff expected.txt actual.txt || exit 1
EXPECTED=$(cat $(dirname $INPUT)/$(basename ${INPUT%.*}).expected)
RESULT=$(
ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \
$VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} || exit 1
)
if [ "x$RESULT" != "x$EXPECTED" ] ; then
echo "$RESULT != $EXPECTED"
exit 1
fi
} }


for i in `dirname $0`/ssml/*.ssml ; do test_ssml $i; done for i in `dirname $0`/ssml/*.ssml ; do test_ssml $i; done

+ 1
- 1
tests/translate.test View File

# https://github.com/espeak-ng/espeak-ng/issues/706 # https://github.com/espeak-ng/espeak-ng/issues/706
test_phon en ",aIb,i:;'Em m'It 'Ib@mz m'Its ,aIb,i:;'Em ,Em,aIt'i:; ,eIp,i:;'eItS s,i:;,i:;'Es ,aIt,i:;'Eks ,aIb,i:;'Emz ,Em,aIt'i:z ,eIp,i:;'eItSIz s,i:;,i:;'EsIz ,aIt,i:;'EksIz" "ibm mit ibms mits IBM MIT APH CES ITX IBMs MIT's APHs CES's ITXs" test_phon en ",aIb,i:;'Em m'It 'Ib@mz m'Its ,aIb,i:;'Em ,Em,aIt'i:; ,eIp,i:;'eItS s,i:;,i:;'Es ,aIt,i:;'Eks ,aIb,i:;'Emz ,Em,aIt'i:z ,eIp,i:;'eItSIz s,i:;,i:;'EsIz ,aIt,i:;'EksIz" "ibm mit ibms mits IBM MIT APH CES ITX IBMs MIT's APHs CES's ITXs"
test_phon lv "'ibm m'it 'ibm-s m'its 'ibm m'it 'aph ts'Es 'it_ks 'ibm-s m'its 'aphs ts'Ess 'it_kss 'a>_:,ess_! ,a:_:,ess_!v'e:_:_:_: s'i:a:_ 'u>_:t,e:_:t,e:_:" "ibm mit ibms mits IBM MIT APH CES ITX IBMs MIT's APHs CES's ITXs AS ASV SIA utt" test_phon lv "'ibm m'it 'ibm-s m'its 'ibm m'it 'aph ts'Es 'it_ks 'ibm-s m'its 'aphs ts'Ess 'it_kss 'a>_:,ess_! ,a:_:,ess_!v'e:_:_:_: s'i:a:_ 'u>_:t,e:_:t,e:_:" "ibm mit ibms mits IBM MIT APH CES ITX IBMs MIT's APHs CES's ITXs AS ASV SIA utt"
test_phon ru "'Ibm (en),aIb,i:;'Em m'It 'Ib@mz m'Its ,aIb,i:;'Em ,Em,aIt'i:; ,eIp,i:;'eItS s,i:;,i:;'Es ,aIt,i:;'Eks 'Ib@mz m'Its 'afz s'EI2zI2z 'ItEksz(ru) SS'A" "ИБМ ibm mit ibms mits IBM MIT APH CES ITX IBMs MIT's APHs CES's ITXs США"
test_phon ru "'Ibm (en),aIb,i:;'Em m'It 'Ib@mz m'Its ,aIb,i:;'Em ,Em,aIt'i:; ,eIp,i:;'eItS s,i:;,i:;'Es ,aIt,i:;'Eks 'Ib@mz m'Its 'afz s'EI2zI2z 'ItEksz(ru) sE#SE#'A" "ИБМ ibm mit ibms mits IBM MIT APH CES ITX IBMs MIT's APHs CES's ITXs США"


# bug: https://github.com/nvaccess/nvda/issues/7740 # bug: https://github.com/nvaccess/nvda/issues/7740
test_phon ta "'il." "ள்" test_phon ta "'il." "ள்"

Loading…
Cancel
Save