Skip to the content.

Affixi

A helper library for Turkish noun suffixes written in typescript.

Table

Functions

Classes

Objects

Enums

Interfaces

Usage

install

npm install affixi

There is no default export in the library, so you can import whatever you need and only the things you need. This makes the library tree-shakable.

import { makePlural, makePossesive, Pronoun } from 'affixi';

makePlural('O'); // Onlar
makePossesive('Akıl', Pronoun.PluralFirst); // Aklımız
makeCase(makePossesive('Ongözlü Köprü', Pronoun.SingularThird), Case.Locative, true); // Ongözlü Köprüsü'nde

Reference

Functions

getPluralSuffix

getPluralSuffix(base: string) => string

Returns the appropriate plural suffix for a given noun. Suffixes are affected by vowel harmony rules.

e.g:

makePlural

makePlural(base: string) => string

Returns the word base concatenated with the appropriate plural suffix for a given noun.

e.g:

getEqualitySuffix

getEqualitySuffix(base: string) => string

Returns the appropriate equality suffix for a given noun. These types of suffixes are affected by both vowel harmony, consonant softening, consonant assimilation and buch of other rules.

e.g:

makeEqual

makeEqual(base: string) => string

Returns the word base concatenated with the appropriate equality suffix for a given noun.

e.g:

getPossesiveSuffix

getPossesiveSuffix(base: string, pronoun: Pronoun) => string

Returns the appropriate possesive suffix for a given noun and pronoun. These types of suffixes are affected by vowel harmony and given pronoun.

e.g:

makePossesive

makePossesive(base: string, pronoun: Pronoun, isProperNoun: boolean = false) => string

Returns the word base concatenated with the appropriate possesive suffix for a given noun and pronoun.

Proper nouns are seperated with an apostrophe character.

e.g:

getCaseSuffix

getCaseSuffix(base: string, _case: Case) => string

Returns the appropriate case suffix for a given base word and a case

makeCase

makeCase(base: string, _case: Case, isProperNoun: boolean = false) => string

Returns the word base concatenated with the appropriate case suffix for a given base word and a case Proper nouns are seperated with an apostrophe character.

getCompoundSuffix

getCompoundSuffix(base: string, compound: Compound) => string

Returns the appropriate compound suffix for a given base word and a compound

makeCompound

makeCompound(base: string, compound: Compound, isProperNoun: boolean = false) => string

Returns the word base concatenated with the appropriate compound suffix for a given base word and a compound Proper nouns are seperated with an apostrophe character.

getVoicedConsonant

getVoicedConsonant(base: string) => string | undefined

Some words that end with an unvoiced consonants (p,ç,t,k) may be converted into their voiced counterparts (b,c,d,ğ). If extist, this function returns the voiced consonant. If not returns undefined.

alterToVoicedConsonant

alterToVoicedConsonant(base: string) => string

This function returns the mutated version of a word with its voiced consonant. If base does not have a voiced counterpart, the base itself is returned.

alterToVowelDrop

alterToVowelDrop(base: string) => string

Some two syllable words that has acute vowels in their last syllable drop that vowel after they are conjugated with a suffix. This function returns the words mutated version with the dropped vowel.

Note: Because certain words are subjected to this phenomenon, these words are kept in an exceptions array. Contributions to this limited list is appreciated.

Util

Some utility functions that may help word generation.

getComponents
util.getComponents(base: string) => WordComponent

This method returns the last letter and the last vowel in the last syllable of a given word. It returns a WordComponent interface.

export interface WordComponent {
  letter: string;
  vowel: string;
}
getSyllableCount
util.getSyllableCount(base: string) => number

This method returns the syllable count of a base word. Almost always the syllabale count of a word is equal to the vowel count of a word in Turkish because the stress is delimited by vowels.

Classes

AffixiWord

AffixiWord is a construct that makes it easier to handle nouns in a complex manner. It holds a state that can be undone and handles aspects like compoundness in itslef. It has a toString method that returns the resulting word and can be used with String(word). All its methods apart from toString return the instance itself so they are chainable.

Properties
  base: string; // Given base word
  word: string; // Current state of the word
  isCompound: boolean;
  isProperNoun: boolean;
  history: AffixiWordState[] = [];

See: AffixiWordState

Methods
AffixiWord.makeCompound

Concatenates the word with the appropriate compound suffix for a given compound type.

makeCompound(type: Compound): AffixiWord
AffixiWord.makeCase

Concatenates the word with the appropriate case suffix for a given case.

makeCase(_case: Case): AffixiWord
AffixiWord.makeComplete

Concatenates the word with the completion suffix.

makeComplete(): AffixiWord
AffixiWord.makePossesive

Concatenates the word with the possesive suffix for a given pronoun.

  makePossesive(pronoun: Pronoun): AffixiWord
AffixiWord.makeEqual

Transforms the word into equal form.

makeEqual(): AffixiWord
AffixiWord.makePlural

Transforms the word into plural form.

makePlural(): AffixiWord
AffixiWord.undo

Undoes the last operation

undo(): AffixiWord

Objects

sounds

Turkish sounds categorized by different metrics.

interface sounds {
  unvoicedStoppingConsonants: string[];
  unvoicedContinuousConsonants: string[];
  voicedStoppingConsonants: string[];
  concatentorConsonants: string[];
  unvoicedConsonants: string[];
  roundedVowels: string[];
  unRoundedVowels: string[];
  backVowels: string[];
  frontVowels: string[];
  acuteVowels: string[];
  wideVowels: string[];
  vowels: string[];
}

Enums

Pronoun

enum Pronoun {
  SingularFirst, // I
  SingularSecond, // You (singular)
  SingularThird, // He/She/It
  PluralFirst, // We
  PluralSecond, // You (plural)
  PluralThird, // They
}

I think this one is pretty self-explanatory.

Case

enum Case {
  Absolute,
  Accusative, // -i
  Ablative, // -den
  Locative, // -de
  Instrumental, // -le
  Dative, // -e
}

Turkish noun case names.

Compound

enum Compound {
  Compounder, // tamlayan
  Compoundee, // tamlanan
}

Turkish compound types

Interfaces

AffixiWordState

export interface AffixiWordState {
  word: string;
  isCompound: boolean;
  isProperNoun: boolean;
}