// translation rules for lingua franca nova
// This file is UTF-8 encoded

.replace
        а	a
        б	b
        к	c
        д	d
        е	e
        ф	f
        г	g
        х	h
        и	i
        ж	j
        л	l
        м	m	
        н	n
        о	o
        п	p
        р	r
        с	s
        т	t
        у	u
        в	v
        ш	x
        з	z

        ё	io
        й	i
        ц	ts
        ч	tx
        щ	xtx
        ы	i
        э	e
        ю	iu
        я	ia


.group a
        a (CX      'a  // + consonant and no more vowels
        a          a
        ai (X      'aI
        ai         aI
        au (X      'aU
        au         aU
        

.group b
        b          b

.group c
        c          k

.group d
        d          d
        dj         dZ

.group e
        e (CX      'e
        e          e
     _) ei         e
        eu         eU
        eu (X      'eU


.group f
        f          f

.group g
        g          g


.group h
        h          h

.group i        
        i          i
        i (CX     'i
     _) i (A       j
     A) i (A       j
    Al) i (A       j
    An) i (A       j
     @) i (A_     =i

.group j
     A) j          Z
        j          Z

.group k
        k          k

.group l
        l          l

.group m
        m          m
     _) mn (em     n

.group n
        n          n
        n (c       N
        n (g       N
        ng (X      N

.group o
        o          o
        o (CX      'o
        oi         oI
        oi (X      'oI
        ou         o

.group p
        p          p
        
     _) p (sA
     _) ph         f
     _) pre (i     p**e
     _) pro (i     p**o

.group q
        q          k

.group r
        r (C       R2
        r          **

    _) re (i       **e

.group s
        s          s
        s (_S1     s       // plural suffix
     X) s (_S1     'es 
        s (_$w_alt1+ s    // not plural, stress is on the last vowel
        
     _) supra      sup**a

.group t
        t          t
        tx         tS

.group u
        u          u
        u (CX      'u
     _) u (A       w
     A) u (A       w
     c) u (A+      w
     g) u (A+      w
     @) u (a_      =u
     @) u (e_      =u
     @) u (o_      =u

.group v
        v          v

.group w
        w          w

.group x
        x          S

.group y
     C) y (K       i
        y          j

.group z
        z          z


.group
        á          ''a
        é          ''e
        í          ''i
        ó          ''o
        ú          ''u

        