From 3fa62f0ee3e952548e7024e20fde9e58435e8257 Mon Sep 17 00:00:00 2001 From: Lucas Werkmeister Date: Sun, 27 Jun 2021 16:00:00 +0200 Subject: [PATCH] Add basic stress rules for Quenya and Sindarin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Elvish languages have the same general stress rule as Latin [1]: stress falls on the penultimate syllable if that is heavy (contains a long vowel, a diphthong, or a vowel followed by two or more consonants), otherwise on the antepenultimate syllable. For Latin, espeak-ng implements this by declaring “penultimate syllable” as the general stress rule in espeak-ng-data/, and then adding rules in dictsource/ that match light syllables and move the primary stress to the previous syllable, i.e. the antepenultimate one. We use the same basic principle for the Elvish languages here (but using the terms “heavy” and “light” rather than “weak” and “strong” like in the Latin files). Note that this doesn’t fully implement the stress rules yet: we have no concept of diphthongs, long vowels aren’t really properly handled yet, and we also still count ⟨ch⟩, ⟨dh⟩, ⟨th⟩ as two consonants rather than one as it should be. This will be improved separately (I prefer doing this in small incremental steps). [1]: https://menegroth.github.io/stress-in-sindarin.html --- dictsource/qya_rules | 15 +++++++++++++++ dictsource/sjn_rules | 20 ++++++++++++++++++++ espeak-ng-data/lang/art/qya | 2 ++ espeak-ng-data/lang/art/sjn | 2 ++ 4 files changed, 39 insertions(+) diff --git a/dictsource/qya_rules b/dictsource/qya_rules index 93db9149..8fe97970 100644 --- a/dictsource/qya_rules +++ b/dictsource/qya_rules @@ -1,5 +1,8 @@ .group a a a + // light penultimate syllable: put stress on antepenultimate + a (AX =a + a (CAX =a .group b b b @@ -18,6 +21,9 @@ .group e e e + // light penultimate syllable: put stress on antepenultimate + e (AX =e + e (CAX =e .group f f f @@ -32,6 +38,9 @@ .group i i i + // light penultimate syllable: put stress on antepenultimate + i (AX =i + i (CAX =i // j and k do not occur in Quenya @@ -50,6 +59,9 @@ .group o o o + // light penultimate syllable: put stress on antepenultimate + o (AX =o + o (CAX =o .group p p p @@ -77,6 +89,9 @@ .group u u u + // light penultimate syllable: put stress on antepenultimate + u (AX =u + u (CAX =u .group v v v diff --git a/dictsource/sjn_rules b/dictsource/sjn_rules index 3771ea41..9dd836d3 100644 --- a/dictsource/sjn_rules +++ b/dictsource/sjn_rules @@ -1,5 +1,8 @@ .group a a a + // light penultimate syllable: put stress on antepenultimate + a (AX =a + a (CAX =a .group b b b @@ -18,6 +21,9 @@ .group e e e + // light penultimate syllable: put stress on antepenultimate + e (AX =e + e (CAX =e .group f f f @@ -33,6 +39,11 @@ .group i i i _) i (A j + // light penultimate syllable: put stress on antepenultimate + i (AX =i + i (CAX =i + // (unless initial) + _) i (AX j // j and k do not occur in Sindarin @@ -52,6 +63,9 @@ .group o o o + // light penultimate syllable: put stress on antepenultimate + o (AX =o + o (CAX =o .group p p p @@ -79,6 +93,9 @@ .group u u u + // light penultimate syllable: put stress on antepenultimate + u (AX =u + u (CAX =u .group v v v @@ -90,5 +107,8 @@ .group y y y + // light penultimate syllable: put stress on antepenultimate + y (AX =y + y (CAX =y // z does not occur in Sindarin diff --git a/espeak-ng-data/lang/art/qya b/espeak-ng-data/lang/art/qya index 22b178a4..2b515813 100644 --- a/espeak-ng-data/lang/art/qya +++ b/espeak-ng-data/lang/art/qya @@ -1,2 +1,4 @@ name Quenya language qya +stressRule 2 +// rule=penultimate, with qya_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable diff --git a/espeak-ng-data/lang/art/sjn b/espeak-ng-data/lang/art/sjn index 02a587ee..f927bc93 100644 --- a/espeak-ng-data/lang/art/sjn +++ b/espeak-ng-data/lang/art/sjn @@ -1,2 +1,4 @@ name Sindarin language sjn +stressRule 2 +// rule=penultimate, with sjn_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable