Inflexp (Inflection Expressions)

Editor:

TJ Mora
(τугеⅼјоɴаѕ.ⅿога@ɡⅿаіⅼ.ϲоⅿ) Type it! All lowercase. Don't copy-paste!

Issues:

On Github

Change Log:

On Github

Last updated:

15 December 2020


Abstract

Inflection Expressions, or inflexp for short, are a sequence of characters that define the rules or steps that should be undertaken by an implementing software library in inflecting a base or root word of a natural language. Inflexp has character sequences for repetition (of the word or its syllables), prefixation, suffixation, infixation, sound shifting (including stress and tone shifting), sound dropping, and others.

This specification is agnostic on how libraries should implement their data structures and method logic. To give an example however, one way to implement inflexp is to define a class Word which main value is of an array type Syllable[] and where each Syllable has some or all of the following properties: onset: char[], nucleus: char[], coda: char[], stress: int, length: int, tone: int, premark: char, and postmark: char. Then various inflection methods can be defined to manipulate the syllables and their properties.

License

Public Domain Mark This specification (Inflection Expressions Specification) is free of known copyright restrictions.

Note: Implementing libraries may have a different license.

Table of Contents

  1. Background
  2. Terminology
  3. Syntax
    1. Syntax examples
    2. Notes on stress, long vowels, tones, pitches and special marks
  4. Specification Examples
    1. Repetitions
    2. Prefixation
    3. Suffixation
    4. Infixation
    5. Integrative Inflection
  5. Limitations and Considerations
  6. Implementations

I. Background

Inflexp originally arose from another open-source natural language project, Halita. Halita is a word-inflection and -deinflection library for Philippine languages like Tagalog. The many native languages of the Philippines are inflected languages. As different Philippine languages have different affixes and different ways of repeating their syllables and root words, a new kind of inflection expression was needed. A simple prefix expression like pang- can only do so much it also introduces sound changes and sound dropping along the way.

Early in the development of Halita, it became apparent that its class Word and class Syllable source files can be generalized to work not just with Philippine languages but also with other languages in the world. So those source files were taken out of Halita, moved into a new open source project, Inflexer, and rewritten to reflect their new purpose. This very document serves to standardize the specification of the inflection expression used by Inflexer.

II. Terminology

A character is a symbol or glyph, which can be a letter, a number, an ideogram, a pictogram, a punctuation mark or any other special mark.

A word is a character or a sequence of characters which on its own provides a semantic meaning.

A syllable is a phonological (sound-based) building block of a word. It is comprised at least by a nucleus (which is typically a vowel) with optional onset and final sounds (which are typically consonants).

An onset is any sound, typically a consonant or cluster of consonants, at the start of a syllable before the nucleus. If it is comprised of a cluster of consonants, the first consonant is known as the initial while the last consonant is the medial. The initial can be any consonant while the medial is typically a liquid consonant like <l> or <r> or a semivowel like <w> or <j>.

A nucleus is the central part of a syllable, typically a vowel or a multiphthong but can also be a syllabic consonant (a consonant that forms a syllable on its own).

A coda is any sound, typically a consonant or cluster of consonants, in a syllable that comes after the nucleus.

A body is the combination of both the entire onset and the entire nucleus of a syllable.

A rhyme is the combination of both the entire nucleus and the entire coda of a syllable.

A stress is a an emphasis that may be given to a syllable. Different languages have different methods for stress. It can be increasing the loudness of the syllable, or lengthening the pronunciation of the nucleus, or changing the tone.

A vowel length is any shortening or elongation in the pronunciation of a syllable's nucleus. In many languages, vowel length is conflated with stress but there are some languages where stress is different from vowel lengths.

A tone is a pitch applied to a syllable. In tonal languages like the Chinese languages, changing the tone of a syllable can change a word into a different word with a different meaning.

Special marks are any symbol (like the dash <-> and the apostrophe <’>) that a syllable contains.

An implementing natural language-agnostic library is a software library that implements inflexp through the provision of abstract classes. Its methods deal more with the manipulation of the data structures to accomplish the inflection without actually requiring or knowing the orthography and irregularities of any natural language. An example of this kind of library is Inflexer.

An implementing natural language-specific library is a software library that implements inflexp but also transforms inflexp's default behavior to better suit the orthography and irregularities of its target natural language. This kind of library usually extends the the abstract classes provided by an implementing natural language-agnostic library like Inflexer. An example of an implementing natural language-specific library is Halita, which is specific to the Philippine language family.

III. Syntax

A. Syntax examples

The following table defines what each inflexp symbol or sequence of symbols does.

The examples below are just meant to give a quick glimpse on how inflexp should work. For a more definitive list of specification examples that any implementing library should be able to test themselves against, see the section, IV. Specification Examples.

Note: The example words below are showed syllabified through the use of the interpunct <·> symbol to give a better view on how an inflexp-inflection should take place. In reality, implementing libraries should be able to take un-syllabified words and also output un-syllabified words, with the syllabification and un-syllabification happening silently in the background.

Note: The examples below use diacritics to denote a stress (acute accent) and a tone (hook above). Implementing natural language-specific libraries should handle stresses and tones according to the orthography of that natural language.

Symbol NameSymbolRepresentationExample
hash sign # whole base word repeater/designator inflect("sin·taks", "#") => "sin·taks·sin·taks"
equal sign = special mark placer inflect("sin·taks", "=#") => "sin·taks·-sin·taks"
inflect("sin·taks", "#=") => "sin·taks-·sin·taks"
dash - affixation direction designator inflect("sin·taks", "de-") => "de·sin·taks"
inflect("sin·taks","-ing") => "sin·taks·ing"
underscore _ skip to other end designator
plus sign + duplicator
semicolon ; context direction designator
colon : syllable position designator
underscore + in-syllable positioning designator
comma , syllable separator for multi-syllabic repetition
digit 1 1 entire onset repeater/designator inflect("sin·taks", "14;") => "si·sin·taks"
inflect("sin·taks", ";14") => "sin·taks·ta"
digit 2 2 initial repeater/designator inflect("klubs·trolp", "24;") => "ku·klubs·trolp"
inflect("klubs·trolp", "_24;") => "klubs·ku·trolp"
digit 3 3 medial repeater/designator inflect("klubs·trolp", ":34;") => "klubs·ro·trolp"
inflect("klubs·trolp", ";34:") => "klubs·lu·trolp"
digit 4 4 entire nucleus repeater/designator inflect("dak·mein·toi", ":4;") => "dak·ei·mein·toi"
digit 5 5 first vowel or syllabic consonant of nucleus repeater/designator inflect("dak·mein·toi", ":15:15;") => "dak·me·mein·to·toi"
inflect("dak·mein·toi", ";15:15") => "dak·mein·me·toi·to"
digit 6 6 last sound of multiphthong nucleus repeater/designator inflect("dak·mein·toi", ":_67;") => "dak·mein·in·toi"
digit 7 7 entire coda repeater/designator inflect("sart·pelk·mork", "47:47:47;") => "art·sart·elk·pelk·ork·mork"
inflect("sart·pelk·mork", "_47:_47:_47;") => "sart·art·pelk·elk·mork·ork"
digit 8 8 first sound of coda repeater/designator inflect("sart·pelk·mork", "148,148;") => "sar·pel·sart·pelk·mork"
inflect("sart·pelk·mork", ";148,148") => "sart·pelk·mork·pel·mor"
digit 9 9 last sound of coda repeater/designator inflect("sart·pelk·mork", ":149,149;") => "sart·pek·mok·pelk·mork"
inflect("sart·pelk·mork", ":_149,149;") => "sart·pelk·pek·mok·mork"
double dollar sign $$ stress repeater/designator inflect("pán·pen", ";14$$:") => "pán·pá·pen"
double percent sign %% vowel length repeater/designator inflect("kan·kēn", ";%%14") => "kan·kēn·kē"
double at sign @@ tone repeater/designator inflect("pản·pen", "47@@;") => "ản·pản·pen"
asterisk * entire body repeater/designator inflect("treiks", "*;") => "trei·treiks"
double asterisk ** entire rhyme repeater/designator inflect("treiks", ";**") => "treiks·eiks"
triple asterisk *** whole syllable repeater/designator inflect("treiks", "***+;") => "treiks·treiks·treiks"
tilde ~ sound magnet inflect("sin·taks", "-~ing") => "sin·tak·sing"
inflect("dak·mein·toi", ":~4;") => "da·kei·mein·toi"
inflect("en·trot", ";24~_") => "en·tot·rot"
tilde followed by dollar sign ~$ stress magnet inflect("da·gán", "-~$on") => "da·gan·ón"
inflect("da·gán", "-~~$on") => "da·ga·nón"
tilde followed by percent sign ~% vowel length magnet inflect("fa·tēk", "-~%an") => "fa·tek·ān"
inflect("fa·tēk", "-~~%an") => "fa·te·kān"
tilde followed by at sign ~@ tone magnet inflect("trẻp", "-~@on") => "trep·ỏn"
inflect("trẻp", "-~~@on") => "tre·pỏn"
dot . sound pusher inflect("as·ka·don", "sa.t-") => "sa·tas·ka·don"
inflect("len", "ta.p-") => "ta·plen"
dollar sign followed by a number (within the scope of a dot) .$n
$n.
stress pusher inflect("as·ka·don", "sa.t$4-") => "sa·tás·ka·don"
percent sign followed by a number (within the scope of a dot) .%n
%n.
vowel length pusher inflect("as·ka·don", "te.m%12-") => "te·mās·ka·don"
at sign followed by a number (within the scope of a dot) .@n
@n.
tone pusher inflect("tre·pon", "-@2.") => "tre·pỏn"
exclamation mark !
!
sound suppressor inflect("ven·zod", ".!-") => "en·zod"
inflect("vlen·zod", ".!-") => "len·zod"
inflect("vlen·zod", "-!k.") => "vlen·zok"
double exclamation mark !!
!!
sound cluster suppressor inflect("vlen·zod", ".!!-") => "en·zod"
inflect("vlern·zod", "-!!..") => "vle·zod"
triple exclamation mark !!! whole syllable suppressor inflect("ti·gus·rom", "..!!!-") => "ti·rom"
pipes | for infixing expression inflect("plan·traks", "|1in|") => "plin·an·traks"
inflect("plan·traks", "|2in|") => "pin·lan·traks"
inflect("plan·traks", "|4in|") => "plainn·traks"
inflect("plan·traks", "|7in|") => "plan·in·traks"
inflect("plan·traks", "|7~in|") => "pla·nin·traks"

B. Notes on stresses, vowel lengths, tones, pitches and special marks

For stresses, inflexp defines $0 as without stress, $2 as with secondary stress, and $4 as with primary stress. The stress suppressor syntax turns a syllable with primary or a secondary stress into a no-stress syllable.

For vowel lengths, inflexp defines %2 as a extra-short vowel, %4 as a half-long vowel, %8 as regular-length vowel, and %12 as a long vowel. The vowel length suppressor syntax turns an extra-short or a half-long or a long vowel into a regular-length vowel.

For tones, it is up to implementing natural language-specific library to define what each tone number represents (@0 to @99). The tone suppressor syntax turns any tone into whatever the @0 represents.

For pitch-accented languages, their pitches must be defined using inflexp's tone number system, as described in the previous paragraph.

The inflexp symbol =, or the special mark placer, though shown in the above examples to be placing the dash symbol <->, can actually place any mark. Implementing natural language-specific libraries should define what the special mark placer places. It can even be set to be conditional, that given a particular condition it places a mark, but given another condition it places another mark. Of course these conditional placements cannot be done through the inflexp syntax alone. Condition checking and the mark placement will need to take place under the hood.

IV. Specification Examples

Any implementing natural language-agnostic library should implement test classes (that extend their main abstract classes) and test their methods against all the specification examples contained in this section. Only those that successfully pass all the tests against all these specification examples can be considered to be full-pledged implementation of inflexp.

Any implementing natural language-specific library, on the other hand, does not need to test itself against all these specification examples. They are simply encouraged to preserve many of inflexp's syntax patterns and other definitions as conventions of their libraries.

The base words and resulting words in the tables in this section are shown syllabified to better show how the words should be represented internally in any implementing library. In reality though, implementing libraries should be able to take un-syllabified words and do their own syllabification of them, and output results in a valid orthography without syllabification.

The example words in the tables in this section use the letters <a>, <e>, <i>, <o>, and <u> exclusively as the nucleus of syllables. Any other letter or cluster of other letters bounding the nucleus are the onset and/or coda.

Solely for the purposes of this specification, the following diacritical marks represent the following:
none (e.g., a) - no stress, regular-length vowel, or @0 tone
grave above (e.g., à) - with secondary stress
acute above (e.g., á) - with primary stress
breve above (e.g., ă) - extra-short vowel
arch above (e.g., ȃ) - half-long vowel
bar above (e.g., ā) - long vowel
dot below (e.g., ạ) - @1 tone
hook above (e.g., ả) - @2 tone
tilde above (e.g., ã) - @3 tone

All of the following specification examples are also available in csv form.

A. Repetitions

Base WordApplied inflexpResulting Word
tleimp·kraugs#tleimp·kraugs·tleimp·kraugs
tleimp·kraugs=#tleimp·kraugs·-tleimp·kraugs
tleimp·kraugs#=tleimp·kraugs-·tleimp·kraugs
tleimp·kraugs##tleimp·kraugs·tleimp·kraugs·tleimp·kraugs
tleimp·kraugs#+tleimp·kraugs·tleimp·kraugs·tleimp·kraugs
tleimp·kraugs=#+tleimp·kraugs·-tleimp·kraugs·tleimp·kraugs
tleimp·kraugs#+=tleimp·kraugs·tleimp·kraugs-·tleimp·kraugs
tleimp·kraugs=#=#tleimp·kraugs·-tleimp·kraugs·-tleimp·kraugs
tleimp·kraugs#=#=tleimp·kraugs-·tleimp·kraugs-·tleimp·kraugs
tleimp·kraugs=##=tleimp·kraugs-·tleimp·kraugs·-tleimp·kraugs-
tleimp·kraugs#==#tleimp·kraugs-·tleimp·kraugs·-tleimp·kraugs
tleimp·kraugs1;tl·tleimp·kraugs
tleimp·kraugs1=;tl-·tleimp·kraugs
tleimp·kraugs1+;tl·tl·tleimp·kraugs
tleimp·kraugs1,1;tl·kr·tleimp·kraugs
tleimp·kraugs;1tleimp·kraugs·kr
tleimp·kraugs;=1tleimp·kraugs·-kr
tleimp·kraugs;1+tleimp·kraugs·kr·kr
tleimp·kraugs;1,1tleimp·kraugs·tl·kr
tleimp·kraugs2;t·tleimp·kraugs
tleimp·kraugs2=;t-·tleimp·kraugs
tleimp·kraugs2+;t·t·tleimp·kraugs
tleimp·kraugs2,2;t·k·tleimp·kraugs
tleimp·kraugs;2tleimp·kraugs·k
tleimp·kraugs;=2tleimp·kraugs·-k
tleimp·kraugs;2+tleimp·kraugs·k·k
tleimp·kraugs;2,2tleimp·kraugs·t·k
tleimp·kraugs3;l·tleimp·kraugs
tleimp·kraugs3=;l-·tleimp·kraugs
tleimp·kraugs3+;l·l·tleimp·kraugs
tleimp·kraugs3,3;l·r·tleimp·kraugs
tleimp·kraugs;3tleimp·kraugs·r
tleimp·kraugs;=3tleimp·kraugs·-r
tleimp·kraugs;3+tleimp·kraugs·r·r
tleimp·kraugs;3,3tleimp·kraugs·l·r
tleimp·kraugs4;ei·tleimp·kraugs
tleimp·kraugs4~;eit·leimp·kraugs
tleimp·kraugs4=;ei-·tleimp·kraugs
tleimp·kraugs4+;ei·ei·tleimp·kraugs
tleimp·kraugs4+~;ei·eit·leimp·kraugs
tleimp·kraugs4,4;ei·au·tleimp·kraugs
tleimp·kraugs4,4~;ei·aut·leimp·kraugs
tleimp·kraugs;4tleimp·kraugs·au
tleimp·kraugs;~4tleimp·kraug·sau
tleimp·kraugs;=4tleimp·kraugs·-au
tleimp·kraugs;4+tleimp·kraugs·au·au
tleimp·kraugs;~4+tleimp·kraug·sau·au
tleimp·kraugs;4,4tleimp·kraugs·ei·au
tleimp·kraugs;~4,4tleimp·kraug·sei·au
tleimp·kraugs5;e·tleimp·kraugs
tleimp·kraugs5~;et·leimp·kraugs
tleimp·kraugs5=;e-·tleimp·kraugs
tleimp·kraugs5+;e·e·tleimp·kraugs
tleimp·kraugs5+~;e·et·leimp·kraugs
tleimp·kraugs5,5;e·a·tleimp·kraugs
tleimp·kraugs5,5~;e·at·leimp·kraugs
tleimp·kraugs;5tleimp·kraugs·a
tleimp·kraugs;~5tleimp·kraug·sa
tleimp·kraugs;=5tleimp·kraugs·-a
tleimp·kraugs;5+tleimp·kraugs·a·a
tleimp·kraugs;~5+tleimp·kraug·sa·a
tleimp·kraugs;5,5tleimp·kraugs·e·a
tleimp·kraugs;~5,5tleimp·kraug·se·a
tleimp·kraugs6;i·tleimp·kraugs
tleimp·kraugs6~;it·leimp·kraugs
tleimp·kraugs6=;i-·tleimp·kraugs
tleimp·kraugs6+;i·i·tleimp·kraugs
tleimp·kraugs6+~;i·it·leimp·kraugs
tleimp·kraugs6,6;i·u·tleimp·kraugs
tleimp·kraugs6,6~;i·ut·leimp·kraugs
tleimp·kraugs;6tleimp·kraugs·u
tleimp·kraugs;~6tleimp·kraug·su
tleimp·kraugs;=6tleimp·kraugs·-u
tleimp·kraugs;6+tleimp·kraugs·u·u
tleimp·kraugs;~6+tleimp·kraug·su·u
tleimp·kraugs;6,6tleimp·kraugs·i·u
tleimp·kraugs;~6,6tleimp·kraug·si·u
tleimp·kraugs7;mp·tleimp·kraugs
tleimp·kraugs7=;mp-·tleimp·kraugs
tleimp·kraugs7+;mp·mp·tleimp·kraugs
tleimp·kraugs7,7;mp·gs·tleimp·kraugs
tleimp·kraugs;7tleimp·kraugs·gs
tleimp·kraugs;=7tleimp·kraugs·-gs
tleimp·kraugs;7+tleimp·kraugs·gs·gs
tleimp·kraugs;7,7tleimp·kraugs·mp·gs
tleimp·kraugs8;m·tleimp·kraugs
tleimp·kraugs8=;m-·tleimp·kraugs
tleimp·kraugs8+;m·m·tleimp·kraugs
tleimp·kraugs8,8;m·g·tleimp·kraugs
tleimp·kraugs;8tleimp·kraugs·g
tleimp·kraugs;=8tleimp·kraugs·-g
tleimp·kraugs;8+tleimp·kraugs·g·g
tleimp·kraugs;8,8tleimp·kraugs·m·g
tleimp·kraugs9;p·tleimp·kraugs
tleimp·kraugs9=;p-·tleimp·kraugs
tleimp·kraugs9+;p·p·tleimp·kraugs
tleimp·kraugs9,9;p·s·tleimp·kraugs
tleimp·kraugs;9tleimp·kraugs·s
tleimp·kraugs;=9tleimp·kraugs·-s
tleimp·kraugs;9+tleimp·kraugs·s·s
tleimp·kraugs;9,9tleimp·kraugs·p·s
tleimp·kraugs14;tlei·tleimp·kraugs
tleimp·kraugs14~;tleit·leimp·kraugs
tleimp·kraugs15=;tle-·tleimp·kraugs
tleimp·kraugs16+;tli·tli·tleimp·kraugs
tleimp·kraugs16+~;tli·tlit·leimp·kraugs
tleimp·kraugs15,16;tle·kru·tleimp·kraugs
tleimp·kraugs15,16~;tle·krut·leimp·kraugs
tleimp·kraugs;14tleimp·kraugs·krau
tleimp·kraugs;=15tleimp·kraugs·-kra
tleimp·kraugs;16+tleimp·kraugs·kru·kru
tleimp·kraugs;15,16tleimp·kraugs·tle·kru
tleimp·kraugs24;tei·tleimp·kraugs
tleimp·kraugs24~;teit·leimp·kraugs
tleimp·kraugs25=;te-·tleimp·kraugs
tleimp·kraugs26+;ti·ti·tleimp·kraugs
tleimp·kraugs26+~;ti·tit·leimp·kraugs
tleimp·kraugs25,26;te·ku·tleimp·kraugs
tleimp·kraugs25,26~;te·kut·leimp·kraugs
tleimp·kraugs;24tleimp·kraugs·kau
tleimp·kraugs;=25tleimp·kraugs·-ka
tleimp·kraugs;26+tleimp·kraugs·ku·ku
tleimp·kraugs;25,26tleimp·kraugs·te·ku
tleimp·kraugs34;lei·tleimp·kraugs
tleimp·kraugs34~;leit·leimp·kraugs
tleimp·kraugs35=;le-·tleimp·kraugs
tleimp·kraugs36+;li·li·tleimp·kraugs
tleimp·kraugs36+~;li·lit·leimp·kraugs
tleimp·kraugs35,36;le·ru·tleimp·kraugs
tleimp·kraugs35,36~;le·rut·leimp·kraugs
tleimp·kraugs;34tleimp·kraugs·rau
tleimp·kraugs;=35tleimp·kraugs·-ra
tleimp·kraugs;36+tleimp·kraugs·ru·ru
tleimp·kraugs;35,36tleimp·kraugs·le·ru
tleimp·kraugs47;eimp·tleimp·kraugs
tleimp·kraugs48=;eim-·tleimp·kraugs
tleimp·kraugs49+;eip·eip·tleimp·kraugs
tleimp·kraugs48,49;eim·aus·tleimp·kraugs
tleimp·kraugs;47tleimp·kraugs·augs
tleimp·kraugs;~47tleimp·kraug·saugs
tleimp·kraugs;=48tleimp·kraugs·-aug
tleimp·kraugs;49+tleimp·kraugs·aus·aus
tleimp·kraugs;~49+tleimp·kraug·saus·aus
tleimp·kraugs;48,49tleimp·kraugs·eim·aus
tleimp·kraugs;~48,49tleimp·kraug·seim·aus
tleimp·kraugs57;emp·tleimp·kraugs
tleimp·kraugs58=;em-·tleimp·kraugs
tleimp·kraugs59+;ep·ep·tleimp·kraugs
tleimp·kraugs58,59;em·as·tleimp·kraugs
tleimp·kraugs;57tleimp·kraugs·ags
tleimp·kraugs;~57tleimp·kraug·sags
tleimp·kraugs;=58tleimp·kraugs·-ag
tleimp·kraugs;59+tleimp·kraugs·as·as
tleimp·kraugs;~59+tleimp·kraug·sas·as
tleimp·kraugs;58,59tleimp·kraugs·em·as
tleimp·kraugs;~58,59tleimp·kraug·sem·as
tleimp·kraugs67;imp·tleimp·kraugs
tleimp·kraugs68=;im-·tleimp·kraugs
tleimp·kraugs69+;ip·ip·tleimp·kraugs
tleimp·kraugs68,69;im·us·tleimp·kraugs
tleimp·kraugs;67tleimp·kraugs·ugs
tleimp·kraugs;~67tleimp·kraug·sugs
tleimp·kraugs;=68tleimp·kraugs·-ug
tleimp·kraugs;69+tleimp·kraugs·us·us
tleimp·kraugs;~69+tleimp·kraug·sus·us
tleimp·kraugs;68,69tleimp·kraugs·im·us
tleimp·kraugs;~68,69tleimp·kraug·sim·us
tleimp·kraugs*;tlei·tleimp·kraugs
tleimp·kraugs*~;tleit·leimp·kraugs
tleimp·kraugs*=;tlei-·tleimp·kraugs
tleimp·kraugs*+;tlei·tlei·tleimp·kraugs
tleimp·kraugs*+~;tlei·tleit·leimp·kraugs
tleimp·kraugs*,*;tlei·krau·tleimp·kraugs
tleimp·kraugs*,*~;tlei·kraut·leimp·kraugs
tleimp·kraugs;*tleimp·kraugs·krau
tleimp·kraugs;=*tleimp·kraugs·-krau
tleimp·kraugs;*+tleimp·kraugs·krau·krau
tleimp·kraugs;*,*tleimp·kraugs·tlei·krau
tleimp·kraugs**;eimp·tleimp·kraugs
tleimp·kraugs**=;eimp-·tleimp·kraugs
tleimp·kraugs**+;eimp·eimp·tleimp·kraugs
tleimp·kraugs**,**;eimp·augs·tleimp·kraugs
tleimp·kraugs;**tleimp·kraugs·augs
tleimp·kraugs;~**tleimp·kraug·saugs
tleimp·kraugs;=**tleimp·kraugs·-augs
tleimp·kraugs;**+tleimp·kraugs·augs·augs
tleimp·kraugs;~**+tleimp·kraug·saugs·augs
tleimp·kraugs;**,**tleimp·kraugs·eimp·augs
tleimp·kraugs;~**,**tleimp·kraug·seimp·augs
tleimp·kraugs***;tleimp·tleimp·kraugs
tleimp·kraugs***=;tleimp-·tleimp·kraugs
tleimp·kraugs***+;tleimp·tleimp·tleimp·kraugs
tleimp·kraugs***,***;tleimp·kraugs·tleimp·kraugs
tleimp·kraugs;***tleimp·kraugs·kraugs
tleimp·kraugs;=***tleimp·kraugs·-kraugs
tleimp·kraugs;***+tleimp·kraugs·kraugs·kraugs
tleimp·kraugs;***,***tleimp·kraugs·tleimp·kraugs
bak·zeb*~:_~**;bab·ak·ze·beb
ak·ze*~:_~**;a·ak·ze·e
ak·ze*:_**;a·ak·ze·e
brailp·gleird·tsoint:14;brailp·glei·gleird·tsoint
brailp·gleird·tsoint:14~;brailp·gleig·leird·tsoint
brailp·gleird·tsoint:25;brailp·ge·gleird·tsoint
brailp·gleird·tsoint:25~;brailp·geg·leird·tsoint
brailp·gleird·tsoint:36;brailp·li·gleird·tsoint
brailp·gleird·tsoint:36~;brailp·lig·leird·tsoint
brailp·gleird·tsoint:15,16;brailp·gle·tsi·gleird·tsoint
brailp·gleird·tsoint:15,16~;brailp·gle·tsig·leird·tsoint
brailp·gleird·tsoint:*;brailp·glei·gleird·tsoint
brailp·gleird·tsoint:*~;brailp·gleig·leird·tsoint
brailp·gleird·tsoint:***;brailp·gleird·gleird·tsoint
brailp·gleird·tsoint:_14;brailp·gleird·glei·tsoint
brailp·gleird·tsoint:_14~;brailp·gleird·gleit·soint
brailp·gleird·tsoint:_25;brailp·gleird·ge·tsoint
brailp·gleird·tsoint:_25~;brailp·gleird·get·soint
brailp·gleird·tsoint:_36;brailp·gleird·li·tsoint
brailp·gleird·tsoint:_36~;brailp·gleird·lit·soint
brailp·gleird·tsoint:_15,16;brailp·gleird·gle·tsi·tsoint
brailp·gleird·tsoint:_15,16~;brailp·gleird·gle·tsit·soint
brailp·gleird·tsoint:_*;brailp·gleird·glei·tsoint
brailp·gleird·tsoint:_*~;brailp·gleird·gleit·soint
brailp·gleird·tsoint:_***;brailp·gleird·gleird·tsoint
brailp·gleird·tsoint;47:brailp·gleird·eird·tsoint
brailp·gleird·tsoint;~47:brailp·gleir·deird·tsoint
brailp·gleird·tsoint;58:brailp·gleird·er·tsoint
brailp·gleird·tsoint;~58:brailp·gleir·der·tsoint
brailp·gleird·tsoint;69:brailp·gleird·id·tsoint
brailp·gleird·tsoint;~69:brailp·gleir·did·tsoint
brailp·gleird·tsoint;48,49:brailp·gleird·ail·eid·tsoint
brailp·gleird·tsoint;~48,49:brailp·gleir·dail·eid·tsoint
brailp·gleird·tsoint;**:brailp·gleird·eird·tsoint
brailp·gleird·tsoint;~**:brailp·gleir·deird·tsoint
brailp·gleird·tsoint;***:brailp·gleird·gleird·tsoint
brailp·gleird·tsoint;47_:brailp·eird·gleird·tsoint
brailp·gleird·tsoint;~47_:brail·peird·gleird·tsoint
brailp·gleird·tsoint;58_:brailp·er·gleird·tsoint
brailp·gleird·tsoint;~58_:brail·per·gleird·tsoint
brailp·gleird·tsoint;69_:brailp·id·gleird·tsoint
brailp·gleird·tsoint;~69_:brail·pid·gleird·tsoint
brailp·gleird·tsoint;48,49_:brailp·ail·eid·gleird·tsoint
brailp·gleird·tsoint;~48,49_:brail·pail·eid·gleird·tsoint
brailp·gleird·tsoint;**_:brailp·eird·gleird·tsoint
brailp·gleird·tsoint;~**_:brail·peird·gleird·tsoint
brailp·gleird·tsoint;***_:brailp·gleird·gleird·tsoint
kan·ken·kin·kon·kun:*;kan·ke·ken·kin·kon·kun
kan·ken·kin·kon·kun:_*;kan·ken·ke·kin·kon·kun
kan·ken·kin·kon·kun::**;kan·ken·in·kin·kon·kun
kan·ken·kin·kon·kun::_**;kan·ken·kin·in·kon·kun
kan·ken·kin·kon·kun:::***;kan·ken·kin·kon·kon·kun
kan·ken·kin·kon·kun:::_***;kan·ken·kin·kon·kon·kun
kan·ken·kin·kon·kun::::*;kan·ken·kin·kon·ku·kun
kan·ken·kin·kon·kun::::_*;kan·ken·kin·kon·kun·ku
kan·ken·kin·kon·kun*:*:*;ka·kan·ke·ken·ki·kin·kon·kun
kan·ken·kin·kon·kun_*:_*:_*;kan·ka·ken·ke·kin·ki·kon·kun
kan·ken·kin·kon·kun;*:kan·ken·kin·kon·ko·kun
kan·ken·kin·kon·kun;*_:kan·ken·kin·ko·kon·kun
kan·ken·kin·kon·kun;**::kan·ken·kin·in·kon·kun
kan·ken·kin·kon·kun;**_::kan·ken·in·kin·kon·kun
kan·ken·kin·kon·kun;***:::kan·ken·ken·kin·kon·kun
kan·ken·kin·kon·kun;***_:::kan·ken·ken·kin·kon·kun
kan·ken·kin·kon·kun;*::::kan·ka·ken·kin·kon·kun
kan·ken·kin·kon·kun;*_::::ka·kan·ken·kin·kon·kun
kan·ken·kin·kon·kun;*:*:*kan·ken·kin·ki·kon·ko·kun·ku
kan·ken·kin·kon·kun;*_:*_:*_kan·ken·ki·kin·ko·kon·ku·kun
kan·ken·kin·kon·kun*,**:**,*;ka·en·kan·en·ki·ken·kin·kon·kun
kan·ken·kin·kon·kun;*,**:**,*kan·ken·kin·kon·ki·on·kun·on·ku
sa·pó·tan·sàr:*::*;sa·po·pó·tan·sa·sàr
sa·pó·tan·sàr:*$$::$$*;sa·pó·pó·tan·sà·sàr
sa·pó·tan·sàr:*~$::*~$;sa·pó·po·tan·sà·sar
sa·pó·tan·sàr:_~$*::_~$*;sa·po·pó·tan·sar·sà
bă·bȇ·bī*:14:*;ba·bă·be·bȇ·bi·bī
bă·bȇ·bī%%*:%%14:*%%;bă·bă·bȇ·bȇ·bī·bī
bă·bȇ·bī_~%*:~%14:*~%;ba·ba·bĕ·bȇ·bī·bi
bạ·kỏ·dũ;*:26:*bạ·ba·kỏ·ko·dũ·du
bạ·kỏ·dũ;*@@:@@26:@@*bạ·bạ·kỏ·kỏ·dũ·dũ
bạ·kỏ·dũ;~@*:~@26:*ba·bạ·ko·kỏ·dũ·du

B. Prefixation

Like in the previous subsection for Repetition, base words and result words here are shown syllabified using the interpunct >·< symbol. However, this syllabification is shown only for illustrative purposes. Multi-syllable prefixes in inflexp are shown in the table below without syllabification though.

Base WordApplied inflexpResulting Word
o·nike-ke·o·ni
o·nike=-ke-·o·ni
o·nikes-kes·o·ni
o·nikesr-kesr·o·ni
o·nike.s-ke·so·ni
o·nikes.r-kes·ro·ni
o·nike.sr-ke·sro·ni
o·nike.sa-ke·sao·ni
o·nike.sra-ke·srao·ni
o·nike.srap-ke·srap·ni
o·nike=.sr-ke-·sro·ni
o·nimeke-me·ke·o·ni
o·nimeke.s-me·ke·so·ni
o·nike.$2-ke·ò·ni
o·nike=.$4-ke-·ó·ni
o·nike=.$2.$4-ke-·ò·ní
o·nikes.%2-kes·ŏ·ni
o·nikesr.%4-kesr·ȏ·ni
o·nike.s%12-ke·sō·ni
o·nike.s.%12-ke·so·nī
o·nikes.r@1-kes·rọ·ni
o·nike.sr@2-ke·srỏ·ni
o·nike=.sr@3-ke-·srõ·ni
pleiks·vake-ke·pleiks·va
pleiks·vake=-ke-·pleiks·va
pleiks·vakes-kes·pleiks·va
pleiks·vakesr-kesr·pleiks·va
pleiks·vake.s-ke·spleiks·va
pleiks·vakes.r-kes·rpleiks·va
pleiks·vake.sr-ke·srpleiks·va
pleiks·vake.sa-ke·saeiks·va
pleiks·vake.sra-ke·sraeiks·va
pleiks·vake.sral-ke·sralks·va
pleiks·vake.s!-ke·sleiks·va
pleiks·vakes.r!-kes·rleiks·va
pleiks·vake.sr!-ke·srleiks·va
pleiks·vake.sa!-ke·saiks·va
pleiks·vake.sra!-ke·sraiks·va
pleiks·vake.sral!-ke·srals·va
pleiks·vake.s!!-ke·seiks·va
pleiks·vakes.r!!-kes·reiks·va
pleiks·vake.sr!!-ke·sreiks·va
pleiks·vake.sa!!-ke·saks·va
pleiks·vake.sra!!-ke·sraks·va
pleiks·vake.sral!!-ke·sral·va
pleiks·vake.s!$2-ke·slèiks·va
pleiks·vakes.r!$4-kes·rléiks·va
pleiks·vake.sr!%2-ke·srlĕiks·va
pleiks·vake.s!!%12-ke·sēiks·va
pleiks·vakes.r!!@1-kes·rẹiks·va
pleiks·vake.sr!!@2-ke·srẻiks·va
pleiks·vameke.s!!@3-me·ke·sẽiks·va
oi·kaa.p-a·poi·ka
oi·kaa.p!-a·poi·ka
oi·kaa.p!!-a·poi·ka
oi·kaa.p!!!-a·p·ka
ra·re·rodo.t.s.v-do·tra·sre·vro
ra·re·rodo.t!.s!!.v!!!-do·ta·se·v

Suffixation

Base words and result words here are shown syllabified using the interpunct >·< symbol. Any multi-syllabic suffix inflexp, however, is not shown syllabified.

Base WordApplied inflexpResulting Word
a·to-ona·to·on
a·to-=ona·to·-on
a·to-sona·to·son
a·to-slona·to·slon
a·to-s.ona·tos·on
a·to-s.lona·tos·lon
a·to-sl.ona·tosl·on
a·to-is.ona·tois·on
a·to-is.lona·tois·lon
a·to-ris.lona·tris·lon
a·to-sl.=ona·tosl·-on
a·to-onisa·to·o·nis
a·to-s.onisa·tos·o·nis
a·to-$2.ona·tò·on
a·to-$4.=ona·tó·-on
a·to-$2.$4.=onà·tó·-on
a·to-%2.sona·tŏ·son
a·to-%4.slona·tȏ·slon
a·to-%12s.ona·tōs·on
a·to-%12.s.onā·tos·on
a·to-@1s.lona·tọs·lon
a·to-@2sl.ona·tỏsl·on
a·to-@3sl.=ona·tõsl·-on
in·kaurp-onin·kaurp·on
in·kaurp-=onin·kaurp·-on
in·kaurp-tonin·kaurp·ton
in·kaurp-tsonin·kaurp·tson
in·kaurp-t.onin·kaurpt·on
in·kaurp-t.sonin·kaurpt·son
in·kaurp-ts.onin·kaurpts·on
in·kaurp-it.onin·kauit·on
in·kaurp-it.sonin·kauit·son
in·kaurp-rits.onin·krits·on
in·kaurp-!t.onin·kaurt·on
in·kaurp-!t.sonin·kaurt·son
in·kaurp-!ts.onin·kaurts·on
in·kaurp-!it.onin·kait·on
in·kaurp-!it.sonin·kait·son
in·kaurp-!rits.onin·rits·on
in·kaurp-!!t.onin·kaut·on
in·kaurp-!!t.sonin·kaut·son
in·kaurp-!!ts.onin·kauts·on
in·kaurp-!!it.onin·kit·on
in·kaurp-!!it.sonin·kit·son
in·kaurp-!!rits.onin·rits·on
in·kaurp-$2!t.onin·kàurt·on
in·kaurp-$4!t.sonin·káurt·son
in·kaurp-%2!ts.onin·kăurts·on
in·kaurp-%12!!t.onin·kāut·on
in·kaurp-@1!!t.sonin·kạut·son
in·kaurp-@2!!ts.onin·kảuts·on
in·kaurp-@3!!ts.onisin·kãuts·o·nis
a·koi-m.paa·koim·pa
a·koi-!m.paa·koim·pa
a·koi-!!m.paa·koim·pa
a·koi-!!!m.paa·m·pa
ras·res·ros-t.l.r.odrast·resl·rosr·od
ras·res·ros-!t.!!l.!!!r.odrat·rel·r·od

Infixation

Base words and result words here are shown syllabified using the interpunct >·< symbol. Any multi-syllabic suffix inflexp, however, is not shown syllabified.

Base WordApplied inflexpResulting Word
pláins·tak·sin|1om|plom·áins·tak·sin
pláins·tak·sin|1om~$|plóm·ains·tak·sin
pláins·tak·sin|1o.m|plo·máins·tak·sin
pláins·tak·sin|1o~$.m|pló·mains·tak·sin
pláins·tak·sin|2om|pom·láins·tak·sin
pláins·tak·sin|3om|plom·áins·tak·sin
pláins·tak·sin|3o.m|plo·máins·tak·sin
pláins·tak·sin|4om|pláiomns·tak·sin
pláins·tak·sin|5om|pláom·ins·tak·sin
pláins·tak·sin|5o.m|pláo·mins·tak·sin
pláins·tak·sin|6om|pláiomns·tak·sin
pláins·tak·sin|7om|pláins·om·tak·sin
pláins·tak·sin|7~om|pláin·som·tak·sin
pláins·tak·sin|7~~$om|plain·sóm·tak·sin
pláins·tak·sin|8om|pláin·oms·tak·sin
pláins·tak·sin|8om!|pláin·om·tak·sin
pláins·tak·sin|8~om|plái·noms·tak·sin
pláins·tak·sin|8~om!!|plái·nom·tak·sin
pláins·tak·sin|8~$~om|plai·nóms·tak·sin
pláins·tak·sin|9om|pláins·om·tak·sin
pláins·tak·sin|9~om|pláin·som·tak·sin
pláins·tak·sin|9~om!|pláin·som·tak·sin
pláins·tak·sin|1oman|plo·man·áins·tak·sin
pláins·tak·sin|1oma.n|plo·ma·náins·tak·sin
pláins·tak·sin|.1om|pláins·tom·ak·sin
pláins·tak·sin|.1~$om|plains·tóm·ak·sin
pláins·tak·sin|.1o.m|pláins·to·mak·sin
pláins·tak·sin|.1~$o.m|plains·tó·mak·sin
pláins·tak·sin|.4om|pláins·taomk·sin
pláins·tak·sin|.7om|pláins·tak·om·sin
pláins·tak·sin|.7~om|pláins·ta·kom·sin
pláins·tak·sin|..1om|pláins·tak·som·in
pláins·tak·sin|..1o.m|pláins·tak·so·min
pláins·tak·sin|1no|plnóains·tak·sin
pláins·tak·sin|1no!|plnóins·tak·sin
pláins·tak·sin|1no!!|plnóns·tak·sin
pláins·tak·sin|1no!!!|plnó·tak·sin
pláins·tak·sin|2no|pno·láins·tak·sin
pláins·tak·sin|2no~$|pnó·lains·tak·sin
pláins·tak·sin|3no|plnóains·tak·sin
pláins·tak·sin|3no!|plnóins·tak·sin
pláins·tak·sin|4no|plái·nons·tak·sin
pláins·tak·sin|4~.no|pláin·ons·tak·sin
pláins·tak·sin|4no!!!|plái·no·tak·sin
pláins·tak·sin|5no|plá·noins·tak·sin
pláins·tak·sin|5~.no|plán·oins·tak·sin
pláins·tak·sin|5no!|plá·nons·tak·sin
pláins·tak·sin|5no!!|plá·nons·tak·sin
pláins·tak·sin|5no!!!|plá·no·tak·sin
pláins·tak·sin|5~$no|pla·nóins·tak·sin
pláins·tak·sin|6no|plái·nons·tak·sin
pláins·tak·sin|7no|pláins·no·tak·sin
pláins·tak·sin|8no|pláin·nos·tak·sin
pláins·tak·sin|8~$no|plain·nós·tak·sin
pláins·tak·sin|9no|pláins·no·tak·sin
pláins·tak·sin|om9|pláins·tak·siomn
pláins·tak·sin|!om9|pláins·tak·somn
pláins·tak·sin|!!om9|pláins·tak·somn
pláins·tak·sin|!!!om9|pláins·tak·omn
pláins·tak·sin|om9.|pláins·taomk·sin
pláins·tak·sin|~$om9.|plains·táomk·sin
pláins·tak·sin|!~$om9.|plains·tómk·sin
pláins·tak·sin|!!~$om9.|plains·tómk·sin
pláins·tak·sin|!!!~$om9.|plains·ómk·sin
pláins·tak·sin|om9..|pláin·oms·tak·sin
pláins·tak·sin|~~$om9..|plai·nóms·tak·sin
pláins·tak·sin|om8..|pláiomns·tak·sin
pláins·tak·sin|om7..|pláiomns·tak·sin
pláins·tak·sin|om6..|pláom·ins·tak·sin
pláins·tak·sin|om5..|plom·áins·tak·sin
pláins·tak·sin|om4..|plom·áins·tak·sin
pláins·tak·sin|om3..|pom·láins·tak·sin
pláins·tak·sin|om2..|om·pláins·tak·sin
pláins·tak·sin|om1..|om·pláins·tak·sin
pláins·tak·sin|no9|pláins·tak·si·non
pláins·tak·sin|no9.|pláins·ta·nok·sin
pláins·tak·sin|no9..|pláin·nos·tak·sin
pláins·tak·sin|no8..|plái·nons·tak·sin
pláins·tak·sin|~$no8..|plai·nóns·tak·sin
pláins·tak·sin|no7..|plái·nons·tak·sin
pláins·tak·sin|no6..|plá·noins·tak·sin
pláins·tak·sin|~$no6..|pla·nóins·tak·sin
pláins·tak·sin|no5..|plnóains·tak·sin
pláins·tak·sin|!no5..|pnóains·tak·sin
pláins·tak·sin|!!no5..|nóains·tak·sin
pláins·tak·sin|!!!no5..|nóains·tak·sin
pláins·tak·sin|no4..|plnóains·tak·sin
pláins·tak·sin|no3..|pno·láins·tak·sin
pláins·tak·sin|no~$3..|pnó·lains·tak·sin
pláins·tak·sin|no2..|no·pláins·tak·sin
pláins·tak·sin|no~$1..|nó·plains·tak·sin
tìn·dom|1a~$.r|tà·rin·dom
tĭn·dom|.1~%a.r|tin·dă·rom
tin·dȏm|1a.r~%|ta·rȋn·dom
tin·dōm|.1a~%.r|tin·dā·rom
tịn·dom|~@ar7|tin·dọarm
tin·dỏm|ar~@7.|tỉarn·dom
tin·dõm|ar~@7.|tĩarn·dom

Integrative Inflection

Base words and result words here are shown syllabified using the interpunct >·< symbol. Any multi-syllabic suffix inflexp, however, is not shown syllabified.

For all the specification examples below, the default order of precedence on which affixation will be executed first are as follows: repetition > infixation > prefixation > suffixation. To change the order of precedence, use the / expression.

Base WordApplied inflexpResulting Word
sreind·flaust

V. Limitations and Considerations

One of the limitations of inflexp is its lack of conditional sub-expressions. For example, if a natural language only drop certain consonants and preserves other consonants at the start of the base word when prefixed with a particular prefix, there is no inflexp that can tell that rule. Instead, implementing natural language-specific libraries will need to perform the checking and the sound change within their implementation methods.

Digraphs, glottal stops and other orthographic features need to be addressed under the hood by implementing language-specific libraries. Digraphs and glottal stops for example can be represented internally by a single character (like their own IPA character), with their real-world representation only realized when decoding the data structure in the proper orthography.

While this specification assumes that multiphthongs are always the nucleus, implementing natural language-specific libraries are free not to follow this. They may instead treat the latter element of a multiphthong as consonant coda (e.g. <w>, <y>), for example. In many natural languages, treating the latter element of a diphthong as a coda is actually more efficient.

VI. Implementations

Inflexer - An orthography-agnostic JS/TypeScript library that takes inflexp arguments for its inflection methods.

Halita - An inflection and de-inflection JS/TypeScript library for Philippine languages. It extends Inflexer methods for a more accurate inflection and de-inflection of Philippine native words. Halita's own methods can take inflexp arguments.