diff --git a/map/mktelex.py b/map/mktelex.py index 37f0c5a..9e5b46c 100755 --- a/map/mktelex.py +++ b/map/mktelex.py @@ -31,7 +31,10 @@ upper = str.maketrans( def addtone(v, t): return v.translate(tone[t]) +entries = [] + def emit(input, output): + entries.append((input, output)) print(f"{input}\t{output}") def up(s): c = s[0].translate(upper) @@ -147,6 +150,24 @@ def final(): for t in tone: emit(i+c+t, o.replace(v, addtone(v, t), 1)+c) +def onsets(): + # Keep the qu-/gi- onset in the preedit so the tone lands on the rime + # nucleus, not on the onset glide (qua->quá not qúa, gia->giá not gía). + # transvi (onsetglide) knows to skip the glide; here we only need the + # composed clusters to exist so the preedit accumulates them. + vowels = set("aeiouy") + tones = set("sfrxj") + base = [(i, o) for (i, o) in list(entries) + if i and i[0] in vowels and not (set(i) & tones)] + for i, o in base: + if i[0] != 'u': # no qu+u syllable; u is the glide + emit("qu" + i, "qu" + o) + emit("gi" + i, "gi" + o) + # gi- with the i as nucleus (no following vowel): gì, gìn, gìm, ... + for c in ["", "c", "m", "n", "p", "t", "ch", "ng", "nh"]: + if c: + emit("gi" + c, "gi" + c) + vowel1() vowel2() vowel3() @@ -157,3 +178,4 @@ tone1mod() tone2mod() escape() final() +onsets() diff --git a/map/telex.map b/map/telex.map index a25efe9..7f65de9 100644 --- a/map/telex.map +++ b/map/telex.map @@ -587,3 +587,903 @@ Yt Yt y y Y Y \ \ +qua qua +Qua Qua +gia gia +Gia Gia +quaa quâ +Quaa Quâ +giaa giâ +Giaa Giâ +quaaa quaa +Quaaa Quaa +giaaa giaa +Giaaa Giaa +quaac quâc +Quaac Quâc +giaac giâc +Giaac Giâc +quaach quâch +Quaach Quâch +giaach giâch +Giaach Giâch +quaam quâm +Quaam Quâm +giaam giâm +Giaam Giâm +quaan quân +Quaan Quân +giaan giân +Giaan Giân +quaang quâng +Quaang Quâng +giaang giâng +Giaang Giâng +quaanh quânh +Quaanh Quânh +giaanh giânh +Giaanh Giânh +quaap quâp +Quaap Quâp +giaap giâp +Giaap Giâp +quaat quât +Quaat Quât +giaat giât +Giaat Giât +quac quac +Quac Quac +giac giac +Giac Giac +quach quach +Quach Quach +giach giach +Giach Giach +quai quai +Quai Quai +giai giai +Giai Giai +quaic quaic +Quaic Quaic +giaic giaic +Giaic Giaic +quaich quaich +Quaich Quaich +giaich giaich +Giaich Giaich +quaim quaim +Quaim Quaim +giaim giaim +Giaim Giaim +quain quain +Quain Quain +giain giain +Giain Giain +quaing quaing +Quaing Quaing +giaing giaing +Giaing Giaing +quainh quainh +Quainh Quainh +giainh giainh +Giainh Giainh +quaip quaip +Quaip Quaip +giaip giaip +Giaip Giaip +quait quait +Quait Quait +giait giait +Giait Giait +quam quam +Quam Quam +giam giam +Giam Giam +quan quan +Quan Quan +gian gian +Gian Gian +quang quang +Quang Quang +giang giang +Giang Giang +quanh quanh +Quanh Quanh +gianh gianh +Gianh Gianh +quao quao +Quao Quao +giao giao +Giao Giao +quaoc quaoc +Quaoc Quaoc +giaoc giaoc +Giaoc Giaoc +quaoch quaoch +Quaoch Quaoch +giaoch giaoch +Giaoch Giaoch +quaom quaom +Quaom Quaom +giaom giaom +Giaom Giaom +quaon quaon +Quaon Quaon +giaon giaon +Giaon Giaon +quaong quaong +Quaong Quaong +giaong giaong +Giaong Giaong +quaonh quaonh +Quaonh Quaonh +giaonh giaonh +Giaonh Giaonh +quaop quaop +Quaop Quaop +giaop giaop +Giaop Giaop +quaot quaot +Quaot Quaot +giaot giaot +Giaot Giaot +quap quap +Quap Quap +giap giap +Giap Giap +quat quat +Quat Quat +giat giat +Giat Giat +quau quau +Quau Quau +giau giau +Giau Giau +quauc quauc +Quauc Quauc +giauc giauc +Giauc Giauc +quauch quauch +Quauch Quauch +giauch giauch +Giauch Giauch +quaum quaum +Quaum Quaum +giaum giaum +Giaum Giaum +quaun quaun +Quaun Quaun +giaun giaun +Giaun Giaun +quaung quaung +Quaung Quaung +giaung giaung +Giaung Giaung +quaunh quaunh +Quaunh Quaunh +giaunh giaunh +Giaunh Giaunh +quaup quaup +Quaup Quaup +giaup giaup +Giaup Giaup +quaut quaut +Quaut Quaut +giaut giaut +Giaut Giaut +quaw quă +Quaw Quă +giaw giă +Giaw Giă +quawc quăc +Quawc Quăc +giawc giăc +Giawc Giăc +quawch quăch +Quawch Quăch +giawch giăch +Giawch Giăch +quawm quăm +Quawm Quăm +giawm giăm +Giawm Giăm +quawn quăn +Quawn Quăn +giawn giăn +Giawn Giăn +quawng quăng +Quawng Quăng +giawng giăng +Giawng Giăng +quawnh quănh +Quawnh Quănh +giawnh giănh +Giawnh Giănh +quawp quăp +Quawp Quăp +giawp giăp +Giawp Giăp +quawt quăt +Quawt Quăt +giawt giăt +Giawt Giăt +quaww quaw +Quaww Quaw +giaww giaw +Giaww Giaw +quay quay +Quay Quay +giay giay +Giay Giay +quayc quayc +Quayc Quayc +giayc giayc +Giayc Giayc +quaych quaych +Quaych Quaych +giaych giaych +Giaych Giaych +quaym quaym +Quaym Quaym +giaym giaym +Giaym Giaym +quayn quayn +Quayn Quayn +giayn giayn +Giayn Giayn +quayng quayng +Quayng Quayng +giayng giayng +Giayng Giayng +quaynh quaynh +Quaynh Quaynh +giaynh giaynh +Giaynh Giaynh +quayp quayp +Quayp Quayp +giayp giayp +Giayp Giayp +quayt quayt +Quayt Quayt +giayt giayt +Giayt Giayt +quec quec +Quec Quec +giec giec +Giec Giec +quech quech +Quech Quech +giech giech +Giech Giech +que que +Que Que +gie gie +Gie Gie +queec quêc +Queec Quêc +gieec giêc +Gieec Giêc +queech quêch +Queech Quêch +gieech giêch +Gieech Giêch +quee quê +Quee Quê +giee giê +Giee Giê +queee quee +Queee Quee +gieee giee +Gieee Giee +queem quêm +Queem Quêm +gieem giêm +Gieem Giêm +queen quên +Queen Quên +gieen giên +Gieen Giên +queeng quêng +Queeng Quêng +gieeng giêng +Gieeng Giêng +queenh quênh +Queenh Quênh +gieenh giênh +Gieenh Giênh +queep quêp +Queep Quêp +gieep giêp +Gieep Giêp +queet quêt +Queet Quêt +gieet giêt +Gieet Giêt +quem quem +Quem Quem +giem giem +Giem Giem +quen quen +Quen Quen +gien gien +Gien Gien +queng queng +Queng Queng +gieng gieng +Gieng Gieng +quenh quenh +Quenh Quenh +gienh gienh +Gienh Gienh +quep quep +Quep Quep +giep giep +Giep Giep +quet quet +Quet Quet +giet giet +Giet Giet +queu queu +Queu Queu +gieu gieu +Gieu Gieu +quich quich +Quich Quich +giich giich +Giich Giich +quic quic +Quic Quic +giic giic +Giic Giic +quieech quiêch +Quieech Quiêch +giieech giiêch +Giieech Giiêch +quieec quiêc +Quieec Quiêc +giieec giiêc +Giieec Giiêc +quiee quiê +Quiee Quiê +giiee giiê +Giiee Giiê +quieem quiêm +Quieem Quiêm +giieem giiêm +Giieem Giiêm +quieeng quiêng +Quieeng Quiêng +giieeng giiêng +Giieeng Giiêng +quieenh quiênh +Quieenh Quiênh +giieenh giiênh +Giieenh Giiênh +quieen quiên +Quieen Quiên +giieen giiên +Giieen Giiên +quieep quiêp +Quieep Quiêp +giieep giiêp +Giieep Giiêp +quieet quiêt +Quieet Quiêt +giieet giiêt +Giieet Giiêt +quieeu quiêu +Quieeu Quiêu +giieeu giiêu +Giieeu Giiêu +quie quie +Quie Quie +giie giie +Giie Giie +qui qui +Qui Qui +gii gii +Gii Gii +quim quim +Quim Quim +giim giim +Giim Giim +quing quing +Quing Quing +giing giing +Giing Giing +quinh quinh +Quinh Quinh +giinh giinh +Giinh Giinh +quin quin +Quin Quin +giin giin +Giin Giin +quip quip +Quip Quip +giip giip +Giip Giip +quit quit +Quit Quit +giit giit +Giit Giit +quiu quiu +Quiu Quiu +giiu giiu +Giiu Giiu +quoach quoach +Quoach Quoach +gioach gioach +Gioach Gioach +quoac quoac +Quoac Quoac +gioac gioac +Gioac Gioac +quoai quoai +Quoai Quoai +gioai gioai +Gioai Gioai +quoam quoam +Quoam Quoam +gioam gioam +Gioam Gioam +quoang quoang +Quoang Quoang +gioang gioang +Gioang Gioang +quoanh quoanh +Quoanh Quoanh +gioanh gioanh +Gioanh Gioanh +quoan quoan +Quoan Quoan +gioan gioan +Gioan Gioan +quoa quoa +Quoa Quoa +gioa gioa +Gioa Gioa +quoap quoap +Quoap Quoap +gioap gioap +Gioap Gioap +quoat quoat +Quoat Quoat +gioat gioat +Gioat Gioat +quoawch quoăch +Quoawch Quoăch +gioawch gioăch +Gioawch Gioăch +quoawc quoăc +Quoawc Quoăc +gioawc gioăc +Gioawc Gioăc +quoawm quoăm +Quoawm Quoăm +gioawm gioăm +Gioawm Gioăm +quoawng quoăng +Quoawng Quoăng +gioawng gioăng +Gioawng Gioăng +quoawnh quoănh +Quoawnh Quoănh +gioawnh gioănh +Gioawnh Gioănh +quoawn quoăn +Quoawn Quoăn +gioawn gioăn +Gioawn Gioăn +quoaw quoă +Quoaw Quoă +gioaw gioă +Gioaw Gioă +quoawp quoăp +Quoawp Quoăp +gioawp gioăp +Gioawp Gioăp +quoawt quoăt +Quoawt Quoăt +gioawt gioăt +Gioawt Gioăt +quoay quoay +Quoay Quoay +gioay gioay +Gioay Gioay +quoch quoch +Quoch Quoch +gioch gioch +Gioch Gioch +quoc quoc +Quoc Quoc +gioc gioc +Gioc Gioc +quoe quoe +Quoe Quoe +gioe gioe +Gioe Gioe +quoich quoich +Quoich Quoich +gioich gioich +Gioich Gioich +quoic quoic +Quoic Quoic +gioic gioic +Gioic Gioic +quoim quoim +Quoim Quoim +gioim gioim +Gioim Gioim +quoing quoing +Quoing Quoing +gioing gioing +Gioing Gioing +quoinh quoinh +Quoinh Quoinh +gioinh gioinh +Gioinh Gioinh +quoin quoin +Quoin Quoin +gioin gioin +Gioin Gioin +quoi quoi +Quoi Quoi +gioi gioi +Gioi Gioi +quoip quoip +Quoip Quoip +gioip gioip +Gioip Gioip +quoit quoit +Quoit Quoit +gioit gioit +Gioit Gioit +quom quom +Quom Quom +giom giom +Giom Giom +quong quong +Quong Quong +giong giong +Giong Giong +quonh quonh +Quonh Quonh +gionh gionh +Gionh Gionh +quon quon +Quon Quon +gion gion +Gion Gion +quo quo +Quo Quo +gio gio +Gio Gio +quooch quôch +Quooch Quôch +giooch giôch +Giooch Giôch +quooc quôc +Quooc Quôc +giooc giôc +Giooc Giôc +quoom quôm +Quoom Quôm +gioom giôm +Gioom Giôm +quoong quông +Quoong Quông +gioong giông +Gioong Giông +quoonh quônh +Quoonh Quônh +gioonh giônh +Gioonh Giônh +quoon quôn +Quoon Quôn +gioon giôn +Gioon Giôn +quoo quô +Quoo Quô +gioo giô +Gioo Giô +quooo quoo +Quooo Quoo +giooo gioo +Giooo Gioo +quoop quôp +Quoop Quôp +gioop giôp +Gioop Giôp +quoot quôt +Quoot Quôt +gioot giôt +Gioot Giôt +quop quop +Quop Quop +giop giop +Giop Giop +quot quot +Quot Quot +giot giot +Giot Giot +quowch quơch +Quowch Quơch +giowch giơch +Giowch Giơch +quowc quơc +Quowc Quơc +giowc giơc +Giowc Giơc +quowm quơm +Quowm Quơm +giowm giơm +Giowm Giơm +quowng quơng +Quowng Quơng +giowng giơng +Giowng Giơng +quownh quơnh +Quownh Quơnh +giownh giơnh +Giownh Giơnh +quown quơn +Quown Quơn +giown giơn +Giown Giơn +quow quơ +Quow Quơ +giow giơ +Giow Giơ +quowp quơp +Quowp Quơp +giowp giơp +Giowp Giơp +quowt quơt +Quowt Quơt +giowt giơt +Giowt Giơt +quoww quow +Quoww Quow +gioww giow +Gioww Giow +giuaach giuâch +Giuaach Giuâch +giuaac giuâc +Giuaac Giuâc +giuaam giuâm +Giuaam Giuâm +giuaang giuâng +Giuaang Giuâng +giuaanh giuânh +Giuaanh Giuânh +giuaan giuân +Giuaan Giuân +giuaap giuâp +Giuaap Giuâp +giuaat giuât +Giuaat Giuât +giuaa giuâ +Giuaa Giuâ +giua giua +Giua Giua +giuch giuch +Giuch Giuch +giuc giuc +Giuc Giuc +giuich giuich +Giuich Giuich +giuic giuic +Giuic Giuic +giuim giuim +Giuim Giuim +giuing giuing +Giuing Giuing +giuinh giuinh +Giuinh Giuinh +giuin giuin +Giuin Giuin +giuip giuip +Giuip Giuip +giuit giuit +Giuit Giuit +giui giui +Giui Giui +gium gium +Gium Gium +giung giung +Giung Giung +giunh giunh +Giunh Giunh +giun giun +Giun Giun +giuooch giuôch +Giuooch Giuôch +giuooc giuôc +Giuooc Giuôc +giuooi giuôi +Giuooi Giuôi +giuoom giuôm +Giuoom Giuôm +giuoong giuông +Giuoong Giuông +giuoonh giuônh +Giuoonh Giuônh +giuoon giuôn +Giuoon Giuôn +giuoop giuôp +Giuoop Giuôp +giuoot giuôt +Giuoot Giuôt +giuoo giuô +Giuoo Giuô +giuo giuo +Giuo Giuo +giuowch giươch +Giuowch Giươch +giuowc giươc +Giuowc Giươc +giuowi giươi +Giuowi Giươi +giuowm giươm +Giuowm Giươm +giuowng giương +Giuowng Giương +giuownh giươnh +Giuownh Giươnh +giuown giươn +Giuown Giươn +giuowp giươp +Giuowp Giươp +giuowt giươt +Giuowt Giươt +giuow giươ +Giuow Giươ +giup giup +Giup Giup +giut giut +Giut Giut +giu giu +Giu Giu +giuwa giưa +Giuwa Giưa +giuwch giưch +Giuwch Giưch +giuwc giưc +Giuwc Giưc +giuwm giưm +Giuwm Giưm +giuwng giưng +Giuwng Giưng +giuwnh giưnh +Giuwnh Giưnh +giuwn giưn +Giuwn Giưn +giuwow giươ +Giuwow Giươ +giuwp giưp +Giuwp Giưp +giuwt giưt +Giuwt Giưt +giuw giư +Giuw Giư +giuww giuw +Giuww Giuw +giuya giuya +Giuya Giuya +giuych giuych +Giuych Giuych +giuyc giuyc +Giuyc Giuyc +giuyee giuyê +Giuyee Giuyê +giuym giuym +Giuym Giuym +giuyng giuyng +Giuyng Giuyng +giuynh giuynh +Giuynh Giuynh +giuyn giuyn +Giuyn Giuyn +giuyp giuyp +Giuyp Giuyp +giuyt giuyt +Giuyt Giuyt +giuy giuy +Giuy Giuy +quych quych +Quych Quych +giych giych +Giych Giych +quyc quyc +Quyc Quyc +giyc giyc +Giyc Giyc +quyeech quyêch +Quyeech Quyêch +giyeech giyêch +Giyeech Giyêch +quyeec quyêc +Quyeec Quyêc +giyeec giyêc +Giyeec Giyêc +quyeem quyêm +Quyeem Quyêm +giyeem giyêm +Giyeem Giyêm +quyeeng quyêng +Quyeeng Quyêng +giyeeng giyêng +Giyeeng Giyêng +quyeenh quyênh +Quyeenh Quyênh +giyeenh giyênh +Giyeenh Giyênh +quyeen quyên +Quyeen Quyên +giyeen giyên +Giyeen Giyên +quyeep quyêp +Quyeep Quyêp +giyeep giyêp +Giyeep Giyêp +quyeet quyêt +Quyeet Quyêt +giyeet giyêt +Giyeet Giyêt +quyeeu quyêu +Quyeeu Quyêu +giyeeu giyêu +Giyeeu Giyêu +quyee quyê +Quyee Quyê +giyee giyê +Giyee Giyê +quye quye +Quye Quye +giye giye +Giye Giye +quym quym +Quym Quym +giym giym +Giym Giym +quyng quyng +Quyng Quyng +giyng giyng +Giyng Giyng +quynh quynh +Quynh Quynh +giynh giynh +Giynh Giynh +quyn quyn +Quyn Quyn +giyn giyn +Giyn Giyn +quyp quyp +Quyp Quyp +giyp giyp +Giyp Giyp +quyt quyt +Quyt Quyt +giyt giyt +Giyt Giyt +quy quy +Quy Quy +giy giy +Giy Giy +gic gic +Gic Gic +gim gim +Gim Gim +gin gin +Gin Gin +gip gip +Gip Gip +git git +Git Git +gich gich +Gich Gich +ging ging +Ging Ging +ginh ginh +Ginh Ginh diff --git a/vi.c b/vi.c index a5a5e4e..5455188 100644 --- a/vi.c +++ b/vi.c @@ -89,12 +89,37 @@ applytone(Rune c, int tidx) return c; } +/* + * In qu- and gi- onsets the u/i is a glide that belongs to the onset, + * not the rime, so it must not bear the tone (qua -> quá, gia -> giá). + * The i of gi- is only a glide when another vowel follows; otherwise it + * is the nucleus itself (gì, gìn). Returns the rune index to skip, or -1. + */ +static int +onsetglide(Str *m) +{ + Rune a, b; + int i; + + if(m->n < 2) + return -1; + a = m->r[0]; + b = removetone(m->r[1]); + if((a == 'q' || a == 'Q') && (b == 'u' || b == 'U')) + return 1; + if((a == 'g' || a == 'G') && (b == 'i' || b == 'I')) + for(i = 2; i < m->n; i++) + if(isvowel(removetone(m->r[i]))) + return 1; + return -1; +} + Emit transvi(Im *im, Rune c) { Emit e; Str mapped, pre; - int i, tidx, vi, last, penult; + int i, tidx, vi, last, penult, glide; Rune v, b1, b2; if(!istone(c) && c != 'z') @@ -115,9 +140,12 @@ transvi(Im *im, Rune c) } if(!mapget(im->l->map, &im->pre, &mapped)) mapped = im->pre; + glide = onsetglide(&mapped); last = -1; penult = -1; for(i = 0; i < mapped.n; i++){ + if(i == glide) + continue; v = removetone(mapped.r[i]); if(isvowel(v)){ penult = last; @@ -140,9 +168,7 @@ transvi(Im *im, Rune c) } } if(vi < 0){ - e.eat = 1; e.s = mapped; - sputr(&e.s, c); return e; }