Lexurgy Sound Changer Tutorial — Using Syllables
Lexurgy understands that words can be broken down into syllables. It offers two approaches for working with syllables: manual syllables and automatic syllables
Manual Syllables
The IPA uses the period (.
) to mark syllable breaks. You can put .
characters in your input words to show where the syllable breaks are. But by default, Lexurgy treats .
as a sound like any other:
The words with the .
characters in them aren't affected by the voicing
rule, since the "sound" before the stop is .
, not a vowel.
But as soon as you provide a syllables
rule, this changes:
This sets syllables to explicit
(i.e. manual) mode. Now the .
characters are treated as syllable breaks, not sounds, which means they no longer disrupt adjacency.
Once you're done with syllables, you can clear
them:
Inserting and Deleting Syllable Breaks
When working with syllables manually, sound changes can easily mess up the syllables. Take this rule that deletes a final vowel:
Realistically, this would produce ki.kik
and bou.bab
, but Lexurgy leaves the syllable breaks where they were, resulting in ki.ki.k
and bou.ba.b
.
To fix this, you can remove the extra syllable break the same way you remove sounds:
Similarly, you can insert syllable breaks with * => .
rules:
Matching Syllable Breaks
You can use the .
character in rules to match syllable breaks. For example, it's common for a rule to affect only coda consonants. This rule nasalizes vowels before a coda nasal:
You can also use !.
to match a syllable interior, i.e. to only apply the rule if there is no syllable break at the specified location:
Matching Entire Syllables
If you want to match an entire syllable, use <syl>
in the rule. This rule deletes the second-last syllable:
Syllable-Level Features
You can declare features that operate on entire syllables, rather than individual sounds. This is most often used to represent stress:
As this example shows, if you define a diacritic to mark a syllable-level feature, that diacritic will attach to the end of the entire syllable. Of course, normally the IPA stress symbol is written at the beginning of the syllable, not the end; you can enforce this with the (before)
modifier:
You can assign a syllable-level feature to a syllable in a rule by changing any sound in the syllable to a matrix containing the feature:
Or you can assign it to the entire syllable:
Automatic Syllables
Instead of manually inserting and managing syllable breaks, you can have Lexurgy automatically divide words into syllables by describing the shapes of valid syllables. Here's a syllable rule that allows only syllables with a consonant followed by a vowel:
The ::
symbol separates the syllable onset (usually its initial consonants) from the syllable nucleus (usually its vowel).
Some languages also allow a syllable coda—consonants after the vowel. You can specify a coda after another ::
symbol:
Both of these examples make the consonants mandatory:
But in most languages the onset and coda are optional. You can mark them optional with ?
, just like in ordinary rules:
Notice that apat
becomes a.pat
, not ap.at
. In general, Lexurgy tries to put as many sounds as possible into the onset of a syllable, rather than the coda of the previous syllable.
In cases where you don't want maximal onsets, add a reluctant onset before the normal onset, separated from it by ?:
:
Most of the syntax available in ordinary rules can also be used in syllable rules, allowing for complex restrictions on syllable shapes:
Changing Syllable Structure
Syllable rules are automatically re-applied after every named rule:
Deleting the second p
from pam.pat
would result in pam.at
, but the syllable rule adjusts this to pa.mat
. You can see the syllable rule getting re-applied if you trace changes.
But sometimes sound changes alter the syllable structure. Suppose you add a vowel-deletion change to the language with only open syllables:
Now these words have consonant clusters, which the syllable rule disallows. To solve this, add a new syllable rule after the syncope rule:
You can also switch back to manual syllables at any time using explicit
:
Or you can remove syllable breaks entirely using clear
:
Automatically Assigning Syllable-Level Features
You can also assign syllable-level features directly in the syllabification rules. The following uses the syllabifier to distinguish "heavy" syllables (with a long vowel or coda) from "light" syllables (all others):
Capturing Syllable Information
By default, captures copy only sounds, not syllable information. Take this rule:
The stress stays on the first syllable instead of moving with the captured a
to the second syllable.
If you want to copy syllable information, you can put a .
between the $
and the capture number on the output side:
This can be useful if you want to move around whole chunks of words:
Using ordinary captures would yield the bizarre kiki.ˈka.n
instead, as the rule tried to graft the original syllable structure onto the new sounds.