Sound change rules (also known as phonological rules) can be applied to all words using the Sound Change field. This notation can also in affix rules, Custom Spelling, and Illegal combinations field.
A basic rule like
Input | Rule | Output |
---|---|---|
alabama
|
a > o
|
You can also specify if the change should only happen in a particular environment:
Input | Rule | Output |
---|---|---|
alabama
|
a > o / _b
|
Be aware that letters without diaciritcs are treated as different phonemes to letters with diacritics. Therefore,
Input | Rule | Output |
---|---|---|
tatʰat
|
t > p
|
Word boundaries ![]()
Input | Rule | Output |
---|---|---|
alabama
|
a > o / #_
|
You must use
Input | Rule | Output |
---|---|---|
ooh la la
|
a > o / _##l
|
Similarly,
Classes and sets ![]()
Input | Rule | Output |
---|---|---|
alabama
|
V > o / C_
|
Additionally,
Capture a custom set of phonemes inside curly brackets:
Input | Rule | Output |
---|---|---|
alabama
|
{b,m} > p
|
|
alabama
|
a > o / _{b,m}
|
To capture other classes of phonemes with common features, such as stops, nasals, etc., you should use distinctive feature notation.
Note: Curly brackets cannot be used in the replacement side of the
Optional patterns ![]()
Round brackets makes a pattern optional:
Input | Rule | Output |
---|---|---|
llama hat
|
a > o / _(C)#
|
Adding a star symbol
Input | Rule | Output |
---|---|---|
llama hats
|
a > o / _(C)*#
|
Finally, the star symbol without brackets means one or more instances of the pattern. Eg
Deletion ![]()
Null symbol
Input | Rule | Output |
---|---|---|
alabama
|
C > ∅
|
You can also literally write nothing:
Insertion ![]()
The null symbol can be useful for inserting infixes into a certain position of the word:
Input | Rule | Output |
---|---|---|
burro
|
∅ > it / _V#
|
Exceptions to rules ![]()
The
Exception rules can also be added to the end of a normal rule, eg:
Distinctive features ![]()
Square brackets are used to specify the presence (+) or absence (-) of distinctive features of a phoneme. The following rule nasalizes a vowel before another nasal:
Input | Rule | Output |
---|---|---|
bon
|
V > [+nasal] / _[+nasal]
|
Input | Rule | Output |
---|---|---|
bon boõ
|
V > [+nasal] / _[C +nasal]
|
Various features can be used to narrow down the match. The following rule deletes voiceless stops, which in this case is only
Input | Rule | Output |
---|---|---|
tahad
|
[+stop -voice] > ∅
|
Here is a complete list:
Feature | Meaning |
---|---|
[+affricate] | affricate consonants |
[+alveolar] | alveolar consonants |
[+approx] | approximants |
[+back] | back vowels |
[+click] | click consonants |
C or [+consonant] | consonants |
[+cons] | consonantals (different to consonants - see Wikipedia) |
[+cont] | continuants |
[+dorsal] | dorsals |
[+fricative] | fricative consonants |
[+front] | front vowels |
[+glottal] | glottal consonants |
[+high] | high vowels |
[+implosive] | implosive consonants |
[+labial] | labial consonants and round vowels |
[+laryngeal] | laryngeal consonants |
[+lat] | lateral consonants |
[+liquid] | liquid consonants |
[+long] | long vowels or long (geminate) consonants |
[+low] | low vowels |
[+nasal] | nasal consonants or nasal vowels |
[C +nasal] | nasal consonants |
[V +nasal] | nasal vowels |
[+palatal] | palatal consonants |
[+retroflex] | retroflex consonants |
[+round] | round vowels |
[+son] | sonorants |
[+stop] | stop consonants (a.k.a. plosives) |
[V +stress] | stressed vowels |
[+tap] | tap consonants |
[+trill] | trill consonants |
[+uvular] | uvular consonants |
[±+velar] | velar consonants |
[+voice] | voiced consonant or vowel (unless specifically a voiceless vowel) |
[C +voice] | voiced consonant |
[V +voice] | voiced vowels |
V or [+vowel] | vowels |
Assimilation ![]()
Assimilation is the process where a phoneme takes on a distinctive feature of another phoneme. An example of this in English can be seen in the prefix
It would be possible to capture this process with two separate rules:
Input | Rule | Output |
---|---|---|
inpossible inkomplete
|
n > [@place] / _[@place]
|
This is currently an experimental feature, and works for
Syllables ![]()
Stress ![]()
You can use the feature
To change the stress location of a word, you must target the location of the vowel, eg
Additionally,
Input | Rule | Output |
---|---|---|
ˈama ˈdrama draˈma
|
a > á / ˈ(C)*_
|
Same phoneme in a set ![]()
There may be scenarios where you want to match two of the same phonemes from a class. To do this, use the a matching subscript number (
Input | Rule | Output |
---|---|---|
taotii
|
t > d / _V₁V₁
|
Different numbers can signify that they are different phonemes. The following pattern matches two consonants in a row and swaps them:
Input | Rule | Output |
---|---|---|
ask
|
C₁C₂ > C₂C₁
|
If subscripts are left out, the program will make certain assumptions about what the rule means:
Input | Rule | Output |
---|---|---|
ask
|
CC > CiC
|
Subscripts can also be used after distinctive features:
Input | Rule | Output |
---|---|---|
tada
|
{CV}₁{CV}₂ > {CV}₂{CV}₁
|
For ease of typing, regular numbers also work:
Reduplication ![]()
Reduplication is a process in some languages where the whole word, or part of the word, is repeated exactly (or with a slight change). Although it often plays more of a grammatical function (such as forming the plural of a word) rather than being a global sound change.
A quick-and-dirty rule to do a full word reduplication is
Input | Rule | Output |
---|---|---|
bye
|
X* > __
|
Partial reduplication comes in many forms, and there a few strategies for expressing them as rules. The Pangasinan language (Philippines) may reduplicate the first CVC pattern:
Input | Rule | Output |
---|---|---|
baley
|
#CVC > __
|
However, in a more complicated example, it repeats the first consonant only and first vowel. You could express this as being inserted at the beginning of the word with subscript numbers:
Input | Rule | Output |
---|---|---|
plato
|
∅ > C₁V₁ / #_C₁C₂V₁
|
First and last match ![]()
In same cases, you may want to only change the first or last match in the word. Use
Input | Rule | Output |
---|---|---|
alabama
|
C >> x
|
Input | Rule | Output |
---|---|---|
alabama
|
C << x
|
Conditional statements ![]()
There may be scenarios where you want to create sound changes based on whether a pattern exist in a word, and apply a different change if the pattern doesn't exist. Use the key words
Input | Rule | Output |
---|---|---|
alabama
|
IF #a THEN a > o ELSE a > e
|
The ELSE condition is optional and can be omitted. Multiple IF statements are permitted:
Input | Rule | Output |
---|---|---|
mars
|
IF #s THEN #s > z IF s# THEN s# > z
|
In Vulgar, secondary IF statements are technically what other programming languages call “ELSE IF” statements. Meaning, they don’t get tested if a previous IF condition is satisfied. To create a truly independent IF statement, you need to break up the rules up with a semi-colon ; at the end of the first IF statement.
Non-Latin alphabets ![]()
Custom spelling supports all Unicode alphabets and scripts, such as Japanese, Chinese, Cyrillic and even Unicode Emojis.
Order of rules ![]()
The order of rules matter. Vulgar will find-and-replace the first rule to a word, then apply the next rule over the top of what it just did. This can be a problem if a IPA symbol appears in multiple patterns. For instance, the following ordering is problematic:
The intent here is for the diphthong
Another solution is to use the exception