Transformation Rules Editor
Write custom sound change rules and apply them to a vocabulary list to see how words change.
Rules
| bilabial | labiodental | dental | alveolar | postalveolar | retroflex | alveolopalatal | palatal | velar | uvular | pharyngeal | glottal | labial_palatal | labial_velar | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| stop |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| lateral_fricative |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| fricative |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| lateral_affricate |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| affricate |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| lateral_approximant |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| approximant |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| lateral_tap |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| tap |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| nasal |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| trill |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vocabulary
# Basic rule format
```
# an optional comment line
ID: [environment] input -> output
```
| Part | Required | Meaning |
|-----------------|:--------:|----------------------------------------------------------------|
| `#` comment | no | A line starting with `#` is ignored — use it for notes. |
| `ID:` | no | An optional label (e.g. `V01`) so you can find the rule later. |
| `[environment]` | no | Where the rule applies; omitted means "everywhere". |
| `input` | yes | What to match (see [Input](#input)) |
| `output` | yes | Which changes the rule makes (see [Output](#output)). |
## Examples
```
# pata -> pada
[intervocalic] voiceless stop -> +voice
# tab -> tap
[word final] voiced obstruent -> -voice
# etan -> esan
/t/ -> /s/
# tik -> tʃik
[before front vowel] /t/ -> /tʃ/
# uli -> uli; ena -> en
[word final] vowel except high -> delete
# apta -> atta
[before consonant] stop -> place from right
```
## Input
| Written | Matches |
|-----------------------------------|------------------------------------------------------|
| `vowel` | syllabic vowels (i.e., not the glide of a diphthong) |
| `high vowel` | syllabic high vowels only |
| `nonsyllabic vowel` | non-syllabic vowels only |
| `(syllabic or nonsyllabic) vowel` | both |
## Environment
The optional `[environment]` restricts where the rule fires.
- Combine conditions with `,` (all must hold): `[word final, after vowel]`.
- Use `or` for alternatives: `[word initial or stressed]`.
- `before ` / `after ` match a neighbouring phoneme
(e.g. `[before front vowel]`, `[after nasal]`).
| Keyword | Matches when the phoneme is… |
|-------------------|---------------------------------------------------|
| `intervocalic` | between two vowels |
| `word initial` | at the start of the word |
| `word final` | at the end of the word |
| `stressed` | in a stressed syllable |
| `unstressed` | in an unstressed syllable |
| `pre_tonic` | in a syllable before the stressed one |
| `post_tonic` | in a syllable after the stressed one |
| `open syllable` | in a syllable without a coda |
| `closed syllable` | in a syllable with a coda |
| `before DESC` | immediately followed by a phoneme matching `DESC` |
| `after DESC` | immediately preceded by a phoneme matching `DESC` |
> **Stress input:** stress-sensitive keywords (`stressed`, `unstressed`, `pre_tonic`,
> `post_tonic`) only match when the input word has a stressed syllable.
> You can mark stress explicitly with `ˈ` or `'` before a syllable, or set a
> default stress position in the sandbox editor.
```
[intervocalic]
[word final, after vowel]
[after vowel, before voiced consonant except glottal]
[stressed, open syllable]
[word initial or intervocalic]
```
## Input
The `input` describes which phonemes the rule targets. It can be:
- A **feature description** — one or more keywords, e.g. `voiceless stop`,
`front rounded vowel`, `voiced obstruent except glottal`.
- An **IPA literal** — specific symbols between slashes, e.g. `/s/`,
`/k, ɡ/`.
- The wildcard **`any`** — matches any phoneme; combine with `except` to
narrow it, e.g. `any except vowel`.
- A **disjunction** — `(A or B or C)`, e.g.
`(high or near_high) front rounded vowel`.
`except` removes a subgroup from the match: `voiceless obstruent except
glottal`, `/s, t/ except /t/`, `any except vowel`.
## Consonant features
| Category | Keywords |
|-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Manner | **stop**, **fricative**, **affricate**, **approximant**, **tap** / **flap**, **nasal**, **trill**, **obstruent** (= stop + fricative + affricate) |
| Place | **bilabial**, **labiodental**, **dental**, **alveolar**, **postalveolar**, **retroflex**, **alveolopalatal**, **palatal**, **labial_palatal**, **velar**, **uvular**, **pharyngeal**, **glottal**, **labial** (= bilabial + labiodental) |
| Phonation | **voiced**, **voiceless** / **unvoiced** |
| Secondary | **aspirated**, **palatalized**, **labialized** |
| Lateral | **lateral** (matches any consonant with lateral articulation) |
## Vowel features
| Category | Keywords |
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Height | **high** / **close**, **near_high** / **near_close**, **mid_high** / **close_mid**, **mid**, **mid_low** / **open_mid**, **near_low** / **near_open**, **low** / **open** |
| Backness | **front**, **central**, **back** |
| Rounding | **rounded**, **unrounded** |
| Nasality | **nasal**, **oral** |
| Syllabicity | **syllabic** / **full**, **nonsyllabic** |
| Length | **long**, **short** |
| Type | **vowel** (required when using vowel features) |
## Output
The `output` says what happens to the matched phoneme.
| Form | Effect |
|------------------------------------|----------------------------------------------------------------------------------------------------------------|
| `delete` | Remove the phoneme. |
| `add /X/ to left` / `to right` | Insert `/X/` before / after the matched phoneme (which itself is unchanged). |
| `/X/` | Substitute the input with a specific IPA symbol. |
| `+feature` / `-feature` | Toggle a binary feature — see [Output deltas](#output-deltas). |
| single feature keyword | Set a categorical feature to one value (e.g. `fricative`, `palatal`). |
| `feature from left` / `from right` | Assimilation: copy that feature from the neighbour — see [Copyable features](#copyable-features-assimilation). |
| `A, B, …` | Combine several of the above, comma-separated (e.g. `fricative, +voice`). |
```
delete
add /ʔ/ to left
add /ə/ to right
+voice
fricative
/v/
place from right
fricative, +voice
```
## Output deltas
| Delta | Effect |
|--------------------------------------------------------------------------|-------------------------------------------|
| **+voice** / **-voice** (also **+voiced** / **-voiced**) | Set phonation to voiced / voiceless |
| **+aspiration** / **-aspiration** (also **+aspirated** / **-aspirated**) | Add / remove aspiration |
| **+palatalized** / **-palatalized** | Add / remove palatalization |
| **+labialized** / **-labialized** | Add / remove labialization |
| **+nasal** / **-nasal** | Set nasality to nasal / oral |
| **+rounded** / **-rounded** | Set rounding to rounded / unrounded |
| **+long** / **-long** | Set vowel length to long / short |
| **+syllabic** / **-syllabic** | Set syllabicity to syllabic / nonsyllabic |
| **+nonsyllabic** / **-nonsyllabic** | Set syllabicity to nonsyllabic / syllabic |
## Copyable features (assimilation)
Feature names that can be copied from a neighbouring phoneme via the
` from ` output syntax:
**place**, **manner**, **phonation** (also **voice**, **voiced**), **secondary**, **gemination**,
**height**, **backness**, **rounded**, **nasal**