Browse Source

Merge branch 'master' into dutch-emoji-translation

master
Juho Hiltunen 1 year ago
parent
commit
d19b6606dc
No account linked to committer's email address
53 changed files with 4230 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. 1
    0
      dictsource/cmn_list
  15. 6
    1
      dictsource/en_list
  16. 39
    3
      dictsource/extra/ru_listx
  17. 5
    2
      dictsource/hu_list
  18. 1384
    13
      dictsource/hu_rules
  19. 69
    2
      dictsource/it_list
  20. 16
    9
      dictsource/it_listx
  21. 3
    1
      dictsource/it_rules
  22. 0
    17
      dictsource/pl_rules
  23. 4
    2
      dictsource/ru_list
  24. 18
    9
      dictsource/ru_rules
  25. 1824
    0
      dictsource/ti_emoji
  26. 40
    0
      dictsource/ti_list
  27. 429
    0
      dictsource/ti_rules
  28. 1
    1
      docs/voices.md
  29. 5
    0
      espeak-ng-data/lang/sem/ti
  30. 140
    0
      phsource/ph_tigrinya
  31. 3
    0
      phsource/phonemes
  32. 4
    0
      src/libespeak-ng/dictionary.c
  33. 1
    1
      src/libespeak-ng/readclause.c
  34. 14
    4
      src/libespeak-ng/synthdata.c
  35. 1
    0
      src/libespeak-ng/translate.c
  36. 1
    0
      src/libespeak-ng/translate.h
  37. 12
    8
      src/libespeak-ng/voices.c
  38. 6
    3
      src/libespeak-ng/wavegen.c
  39. 1
    0
      tests/CMakeLists.txt
  40. 69
    59
      tests/common
  41. 17
    0
      tests/crash.test
  42. 1
    0
      tests/crash_vectors/cve-2023-49990.txt
  43. 1
    0
      tests/crash_vectors/cve-2023-49991.txt
  44. BIN
      tests/crash_vectors/cve-2023-49992.txt
  45. BIN
      tests/crash_vectors/cve-2023-49993.txt
  46. 1
    0
      tests/crash_vectors/cve-2023-49994.txt
  47. 1
    0
      tests/dictionary.test
  48. 1
    1
      tests/language-numbers-cardinal.test
  49. 1
    1
      tests/language-numbers-ordinal.test
  50. 1
    0
      tests/language-phonemes.test
  51. 12
    31
      tests/language-replace.test
  52. 17
    11
      tests/ssml.test
  53. 1
    1
      tests/translate.test

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

@@ -235,4 +235,4 @@ jobs:
- name: test
run: |
${{ 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

@@ -53,7 +53,7 @@ jobs:
- name: make
run: cmake --build build
- 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
run: cmake --build build --target package_source
@@ -65,4 +65,4 @@ jobs:
- name: re-make
run: cd unpack/espeak-ng-* && cmake --build build
- 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

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

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

@@ -30,4 +30,4 @@ jobs:
- name: make
run: cmake --build build --config ${{ matrix.config }}
- 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

@@ -39,6 +39,7 @@ updated languages:
* uz (Uzbek) -- Andiv06

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

### 1.51

+ 5
- 1
Makefile.am View File

@@ -16,7 +16,7 @@ SHARED_VERSION=2:51:1 # = *.so.1.1.51
MKDIR=mkdir -p

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
AM_CXXFLAGS =

@@ -545,6 +545,7 @@ dictionaries: \
espeak-ng-data/sw_dict \
espeak-ng-data/ta_dict \
espeak-ng-data/te_dict \
espeak-ng-data/ti_dict \
espeak-ng-data/th_dict \
espeak-ng-data/tk_dict \
espeak-ng-data/tn_dict \
@@ -890,6 +891,9 @@ espeak-ng-data/ta_dict: dictsource/ta_list dictsource/ta_rules dictsource/ta_ext
te: espeak-ng-data/te_dict
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
espeak-ng-data/th: dictsource/th dictsource/th dictsource/te_extra


+ 36
- 7
android/build.gradle View File

@@ -4,7 +4,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.2'
classpath 'com.android.tools.build:gradle:8.2.2'
}
}
plugins {
@@ -26,13 +26,17 @@ dependencies {
}

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"

buildFeatures {
buildConfig = true
}

defaultConfig {
minSdk 19
minSdk 21
targetSdk 33
versionCode 22
versionName "1.52-dev"
@@ -105,9 +109,34 @@ tasks.register('createDataVersion', Copy) {
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 {
tasks.checkData.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

@@ -0,0 +1 @@
android.nonFinalResIds=false

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


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

@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
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
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

+ 17
- 12
android/gradlew View File

@@ -83,10 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
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.
MAX_FD=maximum
@@ -133,10 +131,13 @@ location of your Java installation."
fi
else
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
location of your Java installation."
fi
fi

# Increase the maximum file descriptors if we can.
@@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# 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 ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# 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" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
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 -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

+ 10
- 10
android/gradlew.bat View File

@@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
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
@@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
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

+ 2
- 1
cmake/data.cmake View File

@@ -18,7 +18,7 @@ list(APPEND _dict_compile_list
qdb quc qu qya
ro ru
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
vi
yue
@@ -99,6 +99,7 @@ add_custom_command(
WORKING_DIRECTORY "${PHONEME_SRC_DIR}"
COMMENT "Compile phonemes"
DEPENDS
"${DATA_DIST_DIR}/intonations"
"$<TARGET_FILE:espeak-ng-bin>"
${_phon_deps}
)

+ 1
- 0
dictsource/cmn_list View File

@@ -1,6 +1,7 @@
_?? @:11 // unrecognized character

//numbers
_dpt t'iE35n_|
_0 liN35
_1 ji55
_2 @r51

+ 6
- 1
dictsource/en_list View File

@@ -471,7 +471,7 @@ _0M3 b'Ili@n
_0M4 tr'Ili@n
_0M5 kw0dr'Ili@n
_0M6 kwInt'Ili@n
_0M7 sExt'Ili@n
_0M7 sEkst'Ili@n
_0M8 sEpt'Ili@n
_0M9 0kt'Ili@n
_0M10 n0n'Ili@n
@@ -1065,6 +1065,7 @@ bass $alt6 //beIs
bassist $alt6 //beIsIst
baste $alt6 //beIst
bastion basti@n
bateau ba'toU
batman batman
?3 baton $alt3
battalion $alt3
@@ -1186,6 +1187,7 @@ bugaboo bVg@bu:
?3 bulimia bUl'Imi@
bunion bVnI2@n
bureaucracy bjU@'0kr@si
burien 'bjU@ri@n $only
bursar b3:s3
?5 bursar bVRs3
bus bVs
@@ -2638,6 +2640,7 @@ mouthwater m'aUTw,O:t3 // ing
movies mu:vIz
mozilla m@zIl@
mujaheddin mUdZ@hId'i:n
mukilteo ,mVk@l'ti:oU
?3 multi mVltaI
multitude $1
multiplexer $1
@@ -3545,6 +3548,7 @@ tabasco $alt3
tablet tabl@t
taboo $2
tabu tabu:
tacoma t@'koUm@
(tae kwon do) t'aIkw0nd'oU
taffeta tafI2t@
(tai chi) taI'tSi:
@@ -4480,6 +4484,7 @@ Winnipeg wInI#pEg
Wisconsin wI2sk'0nsI2n
Wyoming waI'oUmIN
Xhosa kO:s@
yakima 'jakImA: $only
Yemen $alt2
Ypres i:pr@
Yogyakarta j0gj@k'A@t@

+ 39
- 3
dictsource/extra/ru_listx View File

@@ -10487,6 +10487,7 @@
анонс $2
анонсировавший $3
анонсировалось $3
анонсированная $3
анонсированного $3
анонсированной $3
анонсированные $3
@@ -14700,7 +14701,6 @@
арчах $2
арче $2
арчей $2
арчи $2
арчибальда $3
арчибальде $3
арчинец $2
@@ -56754,6 +56754,7 @@
видеоконтентом $5
видеоконтенту $5
видеоконтрольного $5
видеоконференции $6
видеоконференций $6
видеокремом $4
видеокурс $4
@@ -62201,6 +62202,7 @@
внедрявшимися $2
внедрявшуюся $2
внедряемой $2
внедряемых $2
внедряет $2
внедряетесь $2
внедрял $2
@@ -69855,6 +69857,7 @@
воспитываемое $2
воспитываемся $2
воспитываемы $2
воспитываемый $2
воспитывает $2
воспитываете $2
воспитываетесь $2
@@ -141030,6 +141033,7 @@
делячествах $2
делячеством $2
делящей $1
делящейся $1
делящийся $1
делящими $1
делящимся $1
@@ -143341,6 +143345,7 @@
детализированной $4
детализированному $4
детализированный $4
детализированным $4
деталировка $4
деталировкам $4
деталировками $4
@@ -174253,6 +174258,7 @@
заверша $3
завершай $3
завершайся $3
завершайте $3
завершал $3
завершала $3
завершали $3
@@ -208108,6 +208114,7 @@
зашкаливала $2
зашкаливало $2
зашкаливающей $2
зашкаливающие $2
зашкуренная $2
зашкуренного $2
зашкуренное $2
@@ -213991,6 +213998,7 @@
зомбаря $3
зомберов $1
зомбирование $2
зомбированию $2
зомбирования $2
зомбированности $2
зомбированы $2
@@ -227013,6 +227021,7 @@
индексированный $3
индексированных $3
индексируемый $3
индексируемых $3
индексна $1
индексная $1
индекснее $1
@@ -252207,6 +252216,7 @@
кодеровка $3
кодеровке $3
кодерская $1
кодеру $1
кодеры $1
кодигорически $4
кодировал $2
@@ -252238,6 +252248,7 @@
кодировки $3
кодировку $3
кодируемое $2
кодируемый $2
кодирует $2
кодируется $2
кодируют $2
@@ -282383,6 +282394,7 @@
лицензированный $3
лицензированных $3
лицензируемой $3
лицензируемый $3
лицензиям $2
лицензиями $2
лицензиях $2
@@ -302324,6 +302336,7 @@
микроманометру $4
микроманометры $4
микромашинах $4
микроменеджментом $3
микромер $3
микромера $3
микромере $3
@@ -305338,6 +305351,7 @@
многоколосной $4
многокомпонентная $5
многокомпонентного $5
многокомпонентной $5
многокомпонентный $5
многоконечную $4
многократна $3
@@ -352796,6 +352810,7 @@
несанкционированных $5
несбалансированности $4
несбалансированный $4
несбалансированным $4
несбалансированными $4
несбывшаяся $2
несбывшегося $2
@@ -353524,6 +353539,8 @@
несостоятельностях $4
несостоятельны $4
несострадание $4
несостыковка $4
несостыковок $4
несотворенному $4
несотворенный $4
несохраненная $4
@@ -355974,6 +355991,7 @@
низкоконтрастными $4
низкоконтрастных $4
низколатентной $4
низколатентный $4
низколегированная $4
низколегированнее $4
низколегированней $4
@@ -363564,6 +363582,7 @@
обеспечивавшуюся $3
обеспечиваем $3
обеспечиваемая $3
обеспечиваемого $3
обеспечиваемое $3
обеспечиваемому $3
обеспечиваемся $3
@@ -371063,6 +371082,7 @@
обозником $2
обозновещевого $6
обозрев $3
обозреваете $4
обозревал $4
обозревание $4
обозревании $4
@@ -392768,6 +392788,7 @@
опустошителю $4
опустошителя $4
опустошить $4
опустошиться $4
опустошишь $4
опустошишься $4
опустошу $4
@@ -396327,6 +396348,7 @@
оскорблюсь $3
оскорбляй $3
оскорбляйся $3
оскорбляйте $3
оскорблял $3
оскорбляла $3
оскорбляли $3
@@ -442898,6 +442920,7 @@
перелистываемой $3
перелистываемых $3
перелистывает $3
перелистываете $3
перелита $4
перелито $1
перелиты $1
@@ -448044,6 +448067,7 @@
перепроверялось $5
перепроверят $4
перепроверять $5
перепроверяют $5
перепрограммирование $5
перепрограммирования $5
перепрограммированный $5
@@ -460154,7 +460178,6 @@
письмосекретка $4
письмотелеграмма $5
письму $2
пита $2
питавшаяся $2
питавшегося $2
питавшееся $2
@@ -534756,6 +534779,7 @@
пошаговая $2
пошагового $2
пошаговое $2
пошаговой $2
пошаговую $2
пошаговые $2
пошаговых $2
@@ -612829,6 +612853,7 @@
распаляющуюся $3
распаляя $3
распар $2
распараллеливаемых $4
распараллеливания $4
распараллеливаются $4
распаренная $2
@@ -647295,6 +647320,7 @@
свинобойцы $3
свинобою $3
свинобоя $3
свинобраз $3
свиновода $3
свиноводе $3
свиноводств $3
@@ -658899,6 +658925,7 @@
синхронизация $4
синхронизированные $4
синхронизированный $4
синхронизированных $4
синхронизирующее $4
синхронизируя $4
синхронизм $3
@@ -699957,7 +699984,6 @@
страхкасс $2
страхоборца $3
страхоборцу $3
страхова $3
страховался $3
страховаться $3
страховая $3
@@ -715683,7 +715709,9 @@
теплопродукция $4
теплопрозрачность $4
теплопрозрачный $4
теплорассеиватели $4
теплорассеивателя $4
теплорассеивателями $4
теплорассеивающая $4
теплорассеивающей $4
теплорассеивающими $4
@@ -727185,6 +727213,7 @@
труднопреодолимых $6
труднопроизносимое $6
труднопроизносимые $6
труднопроизносимым $6
труднопроизносимыми $6
труднопроизносимых $6
труднопроходим $5
@@ -729008,6 +729037,7 @@
тунис $2
тунисец $2
тунисок $2
туннелирование $3
туннелирующими $3
туннель $2
тунца $2
@@ -763083,6 +763113,8 @@
фрагментарны $3
фрагментированного $3
фрагментированном $3
фрагментированную $3
фрагментированными $3
фрагментированных $3
фрагонара $3
фраерами $3
@@ -773191,6 +773223,10 @@
цветоеде $3
цветоеду $3
цветоеды $3
цветокоррекции $4
цветокоррекций $4
цветокоррекцию $4
цветокоррекция $4
цветолож $3
цветоложа $3
цветоложе $3

+ 5
- 2
dictsource/hu_list View File

@@ -2745,6 +2745,7 @@ bizonyíték $unstressend
gyötörte $unstressend
ismerve $unstressend
fognia $unstressend
(mint azt látni) $unstressend
(azt látni) $unstressend
fontosak $unstressend
futni $unstressend
@@ -4361,7 +4362,7 @@ havonta $unstressend
(elmarad attól) ElmAR2Ad_||At:o:l $unstressend
(szív el) si:v_||El $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
(forintba kerülnek) foR2intbA_||kER2ylnEk $unstressend
hozzátette $unstressend
@@ -5346,6 +5347,8 @@ _. pont
§ s'AkAs
~ tildE
° fokjEl
˄ konjunktsio:
˅ disjunktsio:
Ft foR2int $unstressend
(Ft-tal) foR2int:Al $unstressend
(ft-ot) foR2intot $unstressend
@@ -5435,8 +5438,8 @@ _braille bR2Ail:E
nato na:to:
(end-of line) u:jS,oR2


$textmode
bacch bahh
MSZP emeszpé
MSZMP emeszempé
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

@@ -1,6 +1,6 @@

// 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]
// $alt2 change [E] or [O] in the stressed syllable to [e] or [o]
@@ -832,6 +832,7 @@ bye _^_EN
bypass b'aI||p'as
byte _^_EN
cabaret $3 $only
cameraman k'ame*am,En
camper $1
cancan $2 $only
carter $1 $only
@@ -886,7 +887,7 @@ corporation ko@-*poR'ESon
couscous k,us||k'us
cover $1
cowboy k'aw||b'oI
cracker $1
cracker k@-*'E:ke@-*
croissant k@-*uass'an
cult k'a/:lt $onlys
cyclette sikl'Et:
@@ -902,6 +903,7 @@ design d,ez'aIn $only
designer d,ez'aIne@-*
desktop d'esk||t,Op
dessert d,Ess'e@-* $only
detective det'Ektiv
detector $2
device dIv'aIs
devolution devol'uSon
@@ -981,6 +983,7 @@ greenpeace g@-*,iN||p'i:s
guinness g'iness
guardrail g'a@-*d||@-*,Eil
gustibus $1
habemus $2 $alt
hacker 'ake@-*
hackeraggio akeR'adZ:o
hackerare ake*'a:Re
@@ -1021,6 +1024,7 @@ iphone 'aI_fon
italy $1
iter $1
jaguar $1
jingle dZ'ingol
jaws dZ'O:z
jazz _^_EN
jeans dZi:ns
@@ -1110,6 +1114,7 @@ page p'EidZ $onlys
palace _^_en $only
papillon papiJ^'on $onlys
pancake pan_k'eIk
parquet pa@-*k'E
partner $1
passepartout pas_pa@-*t'u
paternoster $3
@@ -1176,6 +1181,7 @@ scoop sk'u:p $onlys
scooter sk'utE@-*
scorpion $1 $onlys
scotch sk'OtS
Scout sk'awt $onlys
screen sk@-*'i:n
screenreader sk@-*'i:n||@-*'i:de@-*
scuter $1
@@ -1282,6 +1288,7 @@ voodoo vud'u
wafer v'afe@-*
walkman w'Olk||m,En
wall _^_EN
Walt _^_EN
walzer v'altsE@-*
water v'atE@-* $only
wave _^_EN
@@ -1296,6 +1303,8 @@ window w2'IndOw2
wireless _^_EN
wow w'a:u
writer v@-*'aIte@-*
wurstel vj'u:stel
würstel vj'u:stel
yacht j'Ot[
yahoo _^_EN
yahtzee j'Ets:i
@@ -1328,6 +1337,7 @@ rock'n'roll @-*,Oken@-*'O:l
(ladies and gentlemen) l'eIdIz||and||dZ'Ent@lm@n
(nôtre dame) noUt@-*'da:m
(question time) kw'estiont'aIm
(fair play) f,E@-*||pl'Ei

// Main nouns Dictionary (see also it_listx)

@@ -1891,6 +1901,7 @@ cecina $1
ceca $alt
chambery Samber'i
champs S'amps
chelsea tS'Elsi
chernobyl tS'e@-*nobil
chianciano $2
chicago tSikago
@@ -1978,6 +1989,7 @@ hawaiʻi aw'a:i:
helsinki $1
hiroshima $3
hollywood _^_EN
honolulu $3
houston hj'uston
huligano $3
iglesias $2 $alt
@@ -2222,6 +2234,8 @@ tatari $1
tavazzano $3
teheran t,I_iR'a:n
tennessee t'en:,essi
tiananmen tienanm'En
Tienanmen tienanm'En
teramo $1
ternano $2
tertenia $3
@@ -2263,6 +2277,7 @@ vitorchiano $4
washington _^_EN
wimbledon $1
woodstock _^_EN
yellowstone _^_EN
zaire dza'i:Re
zanzibar $1
zigano ts-ig'a/no
@@ -2345,9 +2360,11 @@ beauxbatons bobat'on
bearzot bea*_dz'Ot $only
beatle b'i:tol
beccaria $3
beckenbauer $3
beethoven be:t'o:ven
benetton $3
benjamin $1
bentegodi $3 $alt2
bergomi $1
behringer b'e:RiNg,E@-*
bertold $alt
@@ -2355,6 +2372,7 @@ bettega $1 $alt
biagini $2
björk b,i'O@-*k
boeing b'O:ing
bougot _^_FR
brandon b@-*'Endon
brian b@-*'aian
brigitte b@-*iZ'it[
@@ -2375,6 +2393,7 @@ cassano $2
casula $2
catherine _^_EN
catia k'a:tia
causio k'awzio
celentano $3
cesare $1
chaplin tS'apliN
@@ -2384,6 +2403,7 @@ charlotte Sa@-*l'Ot
charriere SaR*j'e*
chesterfield tS'Este@-*fild
chevalier _^_FR
cheyenne tSej'En
chopin Sop'EN
christensen $1
christie k@-*'istI
@@ -2399,13 +2419,17 @@ corine k'ORIn $capital
corrias $2
cristofor $2
cupido $2
cyndi s'indi
cyrille siR'il
danilo $2
danny d'En:I
davidson $1
debor $1 $alt
deborah $1 $alt2
deidda de'i:d:a
delogu $2
delrio del||@-*'io/
deschamps deS'amp
dessolis $2 $onlys
diaz d'iats $only
Dickinson $1
@@ -2429,6 +2453,7 @@ enric $2
ericsson $1 $alt
erika $1
esposit $2
eastwood _^_en
ettore $1 $alt
euclide $3
eugenia $alt
@@ -2444,6 +2469,7 @@ fenice $2
ferlaino fe@-*la'i:no
ferrer $2 $alt2
fischer f'iSE@-* $onlys
fletcher fl'EtS:e@-*
florencio fl,OR'ensIo
françois f@-*,a/NsU'a
francisco f@-*ans'isko
@@ -2451,6 +2477,7 @@ frankenstein f@-*'ankenst,ain
frederic $1
freud f@-*'Oid $only
fujitsu fudZ'itsu
gaber $1 $onlys
gandolfi $alt
garcía _^_ES
gargiul $2
@@ -2470,12 +2497,15 @@ gianpaol dZan_p'aol
gibson g'Ibson
giordano $2
giorgia $1
giorgini $2
giovagnol $3
girolamo $2
gorbaciov $1
grace g@-*'Eis $only
gray g@-*'eI
gregoria $2 $alt2
grisostomo $2
gruber $1 $only
halen 'alen
halloween 'allow2in
harrison h'ER*izon
@@ -2509,6 +2539,7 @@ jackie dZ'E:kI
Jaqueline Z,ak_l'i:n
james _^_EN
jane _^_EN
jannacci jan:'atS:i
jarno j'a:@-*no
jefferson $1
jennifer $1
@@ -2528,6 +2559,7 @@ katia k'a:tia
kennedy $1 $alt
kinder $1 $onlys
landolf $alt
lauper _^_EN
lawrence l'oRens
laurenzi $alt
lee _^_en $capital
@@ -2550,6 +2582,7 @@ ludwig l'u:dvIc
luigi lu'i:dZI
luigia lU'i:dZa
luther $1 $only
maneskin $1 $onlys
manolo ma/n'Olo
manuel $1 $only
Marcel ma@-*s'El
@@ -2580,6 +2613,7 @@ michielin mik,el'in
michelangel $3
michelle m,iS'el $only
miguel mig'E:l
mihajlovic mi_'ajlovitS
mike _^_EN
mikolaj mik,Ol'a:j
misseri $2
@@ -2650,9 +2684,14 @@ roger $1 $alt
ron @-*'On $only
rosalia $3
Rosemarie @-*'ozm,a*i
rossetti @-*os:'ett:i
rottweiler @-*otv'ajle@-*
roosevelt @-*'u:z|v,Elt
ryanair @-*'aIaneR
sànchez s'antSets
sanchez s'antSets
sánchez s'antSets
santalucia santa||lutS'ia
santamaria s,anta||maR'ia
saša s'aSa/
saddam $2
@@ -2679,6 +2718,8 @@ shanice S'an,is
sharazad $3
shaun S'O:n $only
simon s'aImon $onlys
sioux si'u:ks
schiffer S'if:e@-* $only
socrate $1
sofia sof'ia
sonia $1 $alt2
@@ -2695,6 +2736,7 @@ tamara $2
taylor t'EIlo@-*
terence t'ERens $onlys
thatcher t'a/tSe@-*
theodore t'Eodo@-*
tiffany $1
timoteo $2
tobia $2
@@ -2713,6 +2755,7 @@ vazquez vask'Ets
vedder $1 $onlys
vermouth v'E@-*mut
victor $1 $only
vierchowod vi'E@-*kov,ud
villeneuve v,iln'e:v
vincent v'inseNt[ $only
vladimir $3
@@ -3031,6 +3074,7 @@ augurino $1
auguro $1
aumentino aUm'entino
auspicano $1
avvalorano $3
avanzano $2
avanzino $2
avvalere $3
@@ -3061,6 +3105,7 @@ badano $1
bagnano $1
ballano $1
ballino $1
balzano $1
balzino $1
barino $1
barricano $1
@@ -3366,6 +3411,7 @@ dimentichino $2
dimezzano dim'edz:ano
dimezzino $2
dimorano $2
dimorino $2
dimostrano $2
dimostrino $2
diramano $2
@@ -3393,6 +3439,7 @@ disperano $2
disperino $2
dispiace dispI'a:tSe
dispregia $2 $alt
disputano $1
disputino $1
dissemin $2
dissetano $2
@@ -3409,6 +3456,7 @@ distrino $1
disturbano $2
disturbino $2
divaghino $2
divampano $2
divaricano $2
diventino $2
divertano $2
@@ -3422,6 +3470,7 @@ divulghino $2
dolere $2
domandano $2
domandino $2
domin $1
dondolano $1
donino $1
dotano $1
@@ -3458,6 +3507,7 @@ emulano $1
emulino $2
entrano $1
entrino $1
entusiasmano $3
enuncino $2
equivalere $4
eredit $2
@@ -4033,6 +4083,7 @@ ottenere ot:en'eRe
ovviano $1
ovvino $1
paghino $1
palesano $2
palpano $1
palpita $1
palpitano $1
@@ -4071,6 +4122,7 @@ permanere $3
permettev $alt2
perseguita $2
perseguitano $2
persever $2
pervaderti $2
pesano $1
pettegol $2
@@ -4117,6 +4169,7 @@ predice $2
predichino $1
predici $2
predomin $2
prefigurano $3
preghino $1
pregia $1
pregiudicano $2
@@ -4140,6 +4193,7 @@ prevedano $2
prevedere $3
previd $2
previdero $2
primeggiano $2
privatizzino $3
privilegia $3
privilegiano $3
@@ -4226,6 +4280,7 @@ recitino $1
reclamano $2
recludano $2
reclutano $2
recrimin $2
recuper $2
recuperino $2
regalano $2
@@ -4419,6 +4474,7 @@ sabot $1
sabotano $1
salpano $1
saltano $1
saltellano $2 $alt
salutano $2
salvaguardano $3
salvano $1
@@ -4646,6 +4702,7 @@ sottovalutino $3
spaccano $1
spacchino $1
spaccino $1
spalancano $2
spalmano $1
sparano $1
sparecchino $2
@@ -4993,6 +5050,7 @@ abituarcisi $4
accadutomi $3
accertatene $2
accertati $2 $atstart
adempiutesi $3
affittasi $2
affrettati $2 $atstart
aggiornal $2 $alt2
@@ -5043,6 +5101,7 @@ coprimi $1
copriti $1
costituitosi $4
creal k@-*'Ea/l
daccel $1
daccene $1
dacel $1
dagliel $1
@@ -5077,6 +5136,7 @@ espellerl $2
esprimiti $2
evolverci $2
evolversi $2
faccel $1
facendomici fatS'endom,itSi
fammel $1
fattel f'at:el
@@ -5105,6 +5165,7 @@ importal $2
impostaci $2
impostal $2
impostomi $2
impostigli $2
indirizzati indiRits2:'ati
indirizziamoci indiRi_tsj'amotSI // $5
indirizziamol indiRi_tsj'amol // $5
@@ -5143,12 +5204,14 @@ portalo $1
portamici $1
portatel $2
posizionati $4 $atstart
resasi $1
presentaci $2
privaci $1
procurati $2 $atstart
promessomi $2
proponiti $2
proteggiti $2 $alt2
protrattosi $2
pulisciti $2
raddrizzarl @-*ad:@-*its2:'a@-*l
rafforzal $2
@@ -5170,6 +5233,7 @@ rieccoti $2
riformatisi $3
riformatosi $3
rincorrerl $2
ripercuotersi $4
riportal $2
ripresosi $2
risparmiaci $2
@@ -5202,6 +5266,7 @@ spogliati $1 $alt $atstart
sposatisi $2
stabilitosi $3
stampal $1
succedutesi $3
suggeritomi $3
svegliati $1 $atstart
svelaci $1
@@ -5213,11 +5278,13 @@ svoltisi $1 $alt
svuotal $2 $alt2
tastal $1
tenutasi $2
tenutesi $2
tenutisi $2
tenutosi $2
tornaci $1
tornatene $1
trasferirvisi $3
trasferitosi $3
trattieniti $2
trattasi $1
tuffati $1 $atstart

+ 16
- 9
dictsource/it_listx View File

@@ -38,8 +38,8 @@ acetil atSe'til
achei $2
achemene $2
acheni $alt
achillea $2
achillee $2
achillea $3
achillee $3
acin $1
acquafredd $alt2
acquaragia a/k:ua_R'adZa/
@@ -95,7 +95,7 @@ agora $3
agord $1
agost $alt2
agrifogli $alt
agronomi $2
agronom $2
agrosistem $alt
aikido $2
ailoche $alt
@@ -215,6 +215,7 @@ anglosassoni $3
angol $1
angor $1
angoscia ang'OSa
angustia $2
angustie $2
anidr $1
anidrid anid@-*'Id
@@ -361,6 +362,7 @@ asintot $2
asol $1
asparag $2
asparagine $4
aspecifici $3
aspett $alt
assaggini $3
assedi $alt
@@ -710,9 +712,9 @@ canter $1
canterellio $4
cantoria $3
canzoncine $3
caorle $1
capannori $2
capell $alt2
capezzal kapets:'al
capifila $3
capiner $alt2
capocchia $alt
@@ -1042,6 +1044,7 @@ coppol $alt
coprolalia $4
copt $alt
copti $alt
cordami $2
cordenons $3 $alt
cordob $1 $alt2
cordogli $alt
@@ -1292,8 +1295,6 @@ doma $alt
domandone $3
domenic $alt2
domicili $3
domini $2
domino $1
domusnovas $alt
don $alt2
dondolio $3
@@ -1331,6 +1332,7 @@ ec $alt
ecate $1 $alt
eccentric $alt
ecceter $2 $alt
Ecchimosi $2
echo 'e:ko
economy $2
ecosistem $alt
@@ -1620,6 +1622,7 @@ ferrei $1
ferreo $1
ferrovia $3
fes $alt
festicciol festitS:Ol
festival $1
fet $alt
fettuccine $3
@@ -1921,7 +1924,9 @@ idroterapeutiche $5
idrovor $2
iempsale $1 $alt
ifigenia $4
ifit $1
ignifughe $2
ignifughi $2
ignifug $2
ignitor $1
ignot $alt
ileo $1
@@ -2069,6 +2074,7 @@ jesi $alt
jesol $alt
joppol $alt
juazeir $1
juta j'uta
juventin juvent'in
kairos $2
kampuchea $alt2
@@ -3498,7 +3504,7 @@ schem $alt
scherm $alt2
schern $alt2
scherz $alt2
schettin $1 $alt2
schiaccine $2
schiribizz skiRib'its2:
schivenoglia $alt
schizofrenia $4
@@ -3507,7 +3513,7 @@ schizoid skits'O:jd
schizoid skits'ojd
schizzati skits2:'ati
sciabol $1
sciliar $3
sciabordio Sabo@-*d'i:o
scioper $1
sciovia $2
sclerodermia $4
@@ -3941,6 +3947,7 @@ teroldeg $2 $alt
terranov $alt
terremot $alt
terren $alt2
terreo $1
terzogenit $3
teschi $alt
teser $1

+ 3
- 1
dictsource/it_rules View File

@@ -1,7 +1,7 @@

// Italian translation rules
// 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
// A any vowel
// C any consonant
@@ -630,6 +630,8 @@
_ri) scola (L07_ sk'ola
_) stacca (L07_ st'ak:a
_) sazia (L07_ s'atsja
_) scuoter (L04_ sku'ote@-*
ri) scuoter (L04_ sku'ote@-*
L02) sei (_ _s'Ej // numbers

.group t

+ 0
- 17
dictsource/pl_rules View File

@@ -77,25 +77,10 @@
_ar) c (adią_ k
_ar) c (adię_ k
_) c (alend k
cal (l kO
cal (lA ka
c (alv k
caly (ps kali
_) ca (m kE
_) c (amembert ka
_) c (an 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
casc kask
c (at_ k
c (ata_ k
c (atami_ k
c (atem_ k
c (ato_ k
@@ -646,7 +631,6 @@ _salce) son (_++ =sOn
skj (A S

.group sc
sch S
pa) sch (a sx
sch (abA_ sx
sch (ab_ sx
@@ -796,7 +780,6 @@ _anasta) si (L03_ sj
.group th
_e) th (anak t
_) the (_ dE
th s
th (ie_ s;
_) th t
_) thank fENk

+ 4
- 2
dictsource/ru_list View File

@@ -135,11 +135,11 @@ _, zVpit'aja
а $u // and
и I $u // and
или $u
при $u
при $atend
или $atend // stressed at the end
ибо $u $pause // for
но $u $pause // but
при $u
при $atend
хотя $2 $pause // although
чтобы $pause // in order that

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

+ 18
- 9
dictsource/ru_rules View File

@@ -113,7 +113,7 @@
_мое) г (о_ v
_намно) г (о_ g
_ненамно) г (о_ g
_примно) г (о_ g
(некое) г (о v
_убо) г (о_ g
_настро) г (о_ g
_нестро) г (о_ g
@@ -121,6 +121,7 @@
_недоро) г (о_ g
_занедоро) г (о_ g
_немно) г (о_ g
_примно) г (о_ g
_се) г (о v
_страте) г (о_ g // stratego board game
_стро) г (о g
@@ -132,7 +133,7 @@
д (B d;
д (Y d;
д (_ t
д (вк- t
д (вк t
д (дY d;
д (зY d;
д (к t
@@ -146,8 +147,8 @@
д (х t
д (хкY t
д (ш t
д (ч t
д (ц t
д (ч t
д (ь_ t;
д (ьк t;
_бан) д (жо_ // silent д (непроизносимая д)
@@ -159,6 +160,7 @@
_мо) де (лир dE%
мо) де (льер dE%
мо) де (лист dE%
ше) де (вр dE

.group е
е e
@@ -263,7 +265,8 @@
м (пY m;
м (фY m;
м (ффY m;
майоне (з mVjin'E
мене (дж mEnE#
майоне (з mVjin'E

.group н
н n
@@ -275,6 +278,7 @@
_клар) не (т nE
клар) не (тист nE%
э) не (рг nE

н (_ n_

.group о
@@ -330,6 +334,7 @@
с (щ s;s;
сь (G z;


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

.group у
у u
@@ -441,8 +447,10 @@
скворе)ч (н S
ску) ч (н S
_ни) ч (то_ S
наро) ч (но S
никити) ч (н S
ильини) ч (н S
подсве) ч (н S
савви) ч (н S
_) ч (то S
яи) ч (ни S
@@ -514,6 +522,7 @@

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

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


+ 40
- 0
dictsource/ti_list View File

@@ -0,0 +1,40 @@
// 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

@@ -0,0 +1,429 @@
// 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

@@ -84,7 +84,7 @@ It selects the default behaviour and characteristics for the language,
and sets default values for "phonemes", "dictionary" and other
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)
option for any language.


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

@@ -0,0 +1,5 @@
name Tigrinya
language ti

maintainer Biniam Gebremichael <[email protected]>
status testing

+ 140
- 0
phsource/ph_tigrinya View File

@@ -0,0 +1,140 @@

//====================================================
// 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

@@ -1805,6 +1805,9 @@ include ph_swedish
phonemetable sw base1
include ph_swahili

phonemetable ti base1
include ph_tigrinya

phonemetable tn base1
include ph_setswana


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

@@ -927,6 +927,9 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags,

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;

if (dictionary_flags != NULL)
@@ -2897,6 +2900,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy)
*word_end = 'e';
}
i = word_end - word;
if (i >= N_WORD_BYTES) i = N_WORD_BYTES-1;

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

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

@@ -664,7 +664,7 @@ int ReadClause(Translator *tr, char *buf, short *charix, int *charix_top, int n_
if (c2 != '1') {
// a list of punctuation characters to be spoken, terminated by space
j = 0;
while (!Eof() && !iswspace(c2)) {
while (!Eof() && !iswspace(c2) && (j < N_PUNCTLIST-1)) {
option_punctlist[j++] = c2;
c2 = GetC();
buf[ix++] = ' ';

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

@@ -79,8 +79,15 @@ static espeak_ng_STATUS ReadPhFile(void **ptr, const char *fname, int *size, esp
if ((f_in = fopen(buf, "rb")) == NULL)
return create_file_error_context(context, errno, buf);

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

if ((*ptr = malloc(length)) == NULL) {
fclose(f_in);
@@ -90,6 +97,7 @@ static espeak_ng_STATUS ReadPhFile(void **ptr, const char *fname, int *size, esp
int error = errno;
fclose(f_in);
free(*ptr);
*ptr = NULL;
return create_file_error_context(context, error, buf);
}

@@ -122,9 +130,11 @@ espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context)
// read the version number and sample rate from the first 8 bytes of phondata
version = 0; // bytes 0-3, version number
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)

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

@@ -1601,6 +1601,7 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change)
if (dict_flags & FLAG_SPELLWORD) {
// redo the word, speaking single letters
for (pw = word; *pw != ' ';) {
memset(number_buf, 0, sizeof(number_buf));
memset(number_buf, ' ', 9);
nx = utf8_in(&c_temp, pw);
memcpy(&number_buf[2], pw, nx);

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

@@ -669,6 +669,7 @@ void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len);

int TranslateWord(Translator *tr, char *word1, WORD_TAB *wtab, char *word_out);
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);


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

@@ -442,6 +442,10 @@ voice_t *LoadVoice(const char *vname, int control)
MAKE_MEM_UNDEFINED(&voice_languages, sizeof(voice_languages));
}

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

strncpy0(voicename, vname, sizeof(voicename));
if (control & 0x10) {
strcpy(buf, vname);
@@ -702,14 +706,14 @@ voice_t *LoadVoice(const char *vname, int control)

if (!tone_only) {
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);
ix = 0;
}

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

@@ -540,14 +540,14 @@ static void AdvanceParameters(void)
if (wvoice == NULL)
return;

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

// advance the pitch
wdata.pitch_ix += wdata.pitch_inc;
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;
@@ -563,7 +563,7 @@ static void AdvanceParameters(void)
if(const_f0)
wdata.pitch = (const_f0<<12);
if (wdata.pitch < 102400)
wdata.pitch = 102400; // min pitch, 25 Hz (25 << 12)

@@ -1265,6 +1265,9 @@ static int WavegenFill2(void)
static bool resume = false;
static int echo_complete = 0;

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

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

+ 1
- 0
tests/CMakeLists.txt View File

@@ -61,6 +61,7 @@ shell_test(ssml)
shell_test(translate)
shell_test(variants)
shell_test(voices)
shell_test(crash)

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

+ 69
- 59
tests/common View File

@@ -1,23 +1,23 @@
#!/bin/sh
# Test a command for presence and ability to output the sha1 hash of a file
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() {
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
@@ -44,53 +44,59 @@ test_phon() {
fi

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
}

# Check generated wav file from processed text
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} \
$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
diff expected.txt sum.txt || (echo "... ignoring error" && true)
echo "... ignoring error"
else
diff expected.txt sum.txt || exit 1
exit 1
fi
fi
}

# Check generated wav file from processed text, where $EXPECTED is grep string
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
@@ -98,27 +104,31 @@ test_phwav() {
TEST_LANG=$1
EXPECTED=$2
TEST_TEXT=$3
test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]"
test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]"
}

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

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

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
}


+ 17
- 0
tests/crash.test View File

@@ -0,0 +1,17 @@
#!/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

@@ -0,0 +1 @@
ã¦à»Vñ€¦ñ €¦V €äVñ€ãÂà¦æsññâñþâññà¶æØØsññâñþâññeeeeeeeeseee€ññûñ

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

@@ -0,0 +1 @@
€¦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

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

+ 1
- 0
tests/dictionary.test View File

@@ -35,3 +35,4 @@ test_phon ru "V#d;'in_ _:'i_: n'ojl n'ojl_d;Is;'AtYx" "1,00" "_dpt2"
test_phon en "t'u:h'VndrI2d@n tw'Enti" "220" "_0and"
test_phon af "(fr)avinj'O~(en) b'0st@n(af) S'ina" "avignon boston china" "_^_"
test_phon en "s'VtS _a#z" "such as" "(multiple words)"
test_phon cmn "s.,i.35_|@r51_| t'iE35n_|_| tS;iou214_|" "12.9" "_dpt"

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

@@ -19,7 +19,7 @@ test_phon en "t'En Il'Ev@n tw'Elv T'3:ti:n f'o@ti:n f'Ifti:n s'Iksti:n s'Ev@nt,i
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-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"

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

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

@@ -12,7 +12,7 @@ test_phon en "t'EnT Il'Ev@nT tw'ElfT T'3:ti:nT f'o@ti:nT f'Ifti:nT s'Iksti:nT s'
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-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 lv "p'iRmais g'ads
'uotRais g'ads

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

@@ -133,6 +133,7 @@ test_phwav sv 520bab254d665ddf72f7e792cbc9591f911b90ed "m#a ma n#a na n^#a n^a N
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 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 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@"

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

@@ -5,8 +5,7 @@
##### bs: Bosnian

# 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 'čađavog'
Translate 'lica'
@@ -14,27 +13,21 @@ Translate 'hoće'
Translate 'da'
Translate 'mi'
Translate 'pokaže'
Translate 'štos'
EOF
test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос."
Translate 'štos'"

##### en: English

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

##### hr: Croatian

# 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 'čađavog'
Translate 'lica'
@@ -42,30 +35,24 @@ Translate 'hoće'
Translate 'da'
Translate 'mi'
Translate 'pokaže'
Translate 'štos'
EOF
test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос."
Translate 'štos'"

##### ja: Japanese

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

##### 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 'билмез'
@@ -77,15 +64,12 @@ Found: 'и' [i_:] \$u \$pause
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

# 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 'čađavog'
Translate 'lica'
@@ -93,7 +77,4 @@ Translate 'hoće'
Translate 'da'
Translate 'mi'
Translate 'pokaže'
Translate 'štos'
EOF
test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос."

Translate 'štos'"

+ 17
- 11
tests/ssml.test View File

@@ -11,12 +11,14 @@ test_ssml_audio() {
OPTS=$4

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() {
@@ -30,11 +32,15 @@ test_ssml() {
fi

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

+ 1
- 1
tests/translate.test View File

@@ -21,7 +21,7 @@ test_phon en-US "d'eIbju:t#I#d" "débuted"
# 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 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
test_phon ta "'il." "ள்"

Loading…
Cancel
Save