Browse Source

Add basic stress rules for Quenya and Sindarin

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
master
Lucas Werkmeister 3 years ago
parent
commit
3fa62f0ee3
4 changed files with 39 additions and 0 deletions
  1. 15
    0
      dictsource/qya_rules
  2. 20
    0
      dictsource/sjn_rules
  3. 2
    0
      espeak-ng-data/lang/art/qya
  4. 2
    0
      espeak-ng-data/lang/art/sjn

+ 15
- 0
dictsource/qya_rules View File

@@ -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

+ 20
- 0
dictsource/sjn_rules View File

@@ -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

+ 2
- 0
espeak-ng-data/lang/art/qya View File

@@ -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

+ 2
- 0
espeak-ng-data/lang/art/sjn View File

@@ -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

Loading…
Cancel
Save