From 649974ffb25aacbba39951f856872928fbf0c119 Mon Sep 17 00:00:00 2001 From: Keyman Build Server Date: Tue, 28 Apr 2026 14:34:19 -0500 Subject: [PATCH 1/9] auto: Keyboard help deployment --- .../shanghai_telex/1.0/shanghai_telex.php | 755 ++++++++++++++++++ 1 file changed, 755 insertions(+) create mode 100644 keyboard/shanghai_telex/1.0/shanghai_telex.php diff --git a/keyboard/shanghai_telex/1.0/shanghai_telex.php b/keyboard/shanghai_telex/1.0/shanghai_telex.php new file mode 100644 index 000000000..056714796 --- /dev/null +++ b/keyboard/shanghai_telex/1.0/shanghai_telex.php @@ -0,0 +1,755 @@ + + +

+ Shanghai Telex keyboard for Script of the National Language for Wu Ğồ-Nhủ Koâc-Nhủ-Zụ̆ +

+

Ğồ-Nhủ Koâc-Nhủ-Zụ̆ zụ̆ yêt chủng Lơ-Mỏ-hó căh Ğồ-Nhủ Vằn-Zụ̆, mọc-tich zụ̆ păh Ğồ-Nhủ yêt chủng piao-chuẩn căh šư-siả ğiệ-thổng

+

Ğồ-Nhủ Koâc-Nhủ-Zụ̆ căh thông-dụng pản-pởn kiêt-ğợt lặh cac-chủng Ğồ-Nhủ fang-nhiền căh đặc-tiển, ğình-žềnh yêt chủng hảo piảo-žụ̆ tăh miào-žuật cac-šưc-cac-diạng Ğồ-Nhủ fang-nhiền căh šư-sỉa ğiệ-thổng, ğã kản-šiảo đồng-in-zụ̆, điề-cung păh făh-đông đị-fang făh-đồng khẩu-in căh cảng Ğồ-Nhủ căh nhìn yêt tháo ğộng-đồng căh šư-siả ğiệ-thổng.

+

The script of national language for Wu is a romanized Wu script is aimed at developing a standard phonetic writing system for Wu.

+

The universal version of the script of national language for Wu combines the character of various accents of Wu, forms a phonetic writing system for Wu which demonstrates and describes various of Wu accents, and reduces the impact of homophone, provides a common written system for Wu speakers in different areas with different accents.

+ +

Alphabet Zụ̆-Mổ-Piảo

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
characterNamepronunciation
aa[a]
auau[ɔ]
ââ[ə] [i]
ăâ[ə]
aiai[e]
anan[æ̃]
bbe[b]
cse/că[k]
chchă[tʃ]
d[ɦi]
dzdză[dz]
džă[dʒ]
đđe/đă[d]
ee[ɛ]
êê[e]
ênên[ẽ]
fef/fă[f]
gže/gă[ɡ]
gigi[dʑ] [gi]
ğğă[ɦ]
hha[h]
hihi[hi] [ɕi]
ii[i]
jži[dʒ] [j] [ʒ]
kka/kă[k]
kiki[ki] [tɕi]
khkhă[kʰ]
khikhi[kʰi] [tɕʰi]
le-lẳ/lă[l]
me-mẳ/mă[m]
ne-nẳ/nă[n]
ngngă[ŋ]
nhnhă[ȵ]
oo[o] [u]
ôô[əu] [u]
ơơ[ou] [ɯ]
ppe/pă[p]
phphă[pʰ]
qku[ku]
re-rẳ/ră[ɹ]
ses/să[s]
ššă[ʃ]
tte/tă[t]
ththă[tʰ]
țță[ts]
țhthă[tsʰ]
uu[y]
ưư[ʮ]
ươươ[ø]
ŭŭ[ɿ]
unun[ui]
vve/vă[v]
wđa-bliổ/wă[ɦu]
xekhs/xă[tʃʰ]
yy-grek[i]
zze-tả/ză[z]
žžă[ʒ]
+ +

in-điạo vù-ğạo tone marks

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tone markCantonese Nametone value
ain-bình/in-zật˦/˦˧
žạng-šênh˥˩
áin-khú˥˨˧
àdiàng-bình˨˨˧
diàng-khú/diàng-žật˨˧˩/˨˧
+ +

in-dụn-piảo phonologic map

+

šênh-mổ consonants

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
scriptIPAexamples
b[b]
p[p]
ph[pʰ]
m[m]
f[f]
v[v]
đ[d]
t[t]
th[tʰ]
n[n]
l[l]
g[g]
k/c[k]
kh[kʰ]
ng[ŋ]
h[h]
ğ[ɦ]
gi[gi] [dʑi]
ki[ki] [tɕi]
khi[kʰi] [tɕʰi]
hi[hi] [ɕi]
ği[ɦi] [ʑi]
nh[ȵ]廿
d[j]
w[ɦu]
ch[tʃ]
ț[ts]
x[tʃʰ]
țh[tsʰ]
š[ʃ]
s[s]
ž[ʒ]
z[z]
[dʒ]
dz[dz]
o[u]
y[i]
u[y]
/[ʔ]
+

In Wu language, the "k" "kh" "h" "g" and "ğ" consonants are often palatalized to [tɕ] [tɕʰ] [ɕ] [dʑ] and [ʑ] when before "i" "u" or "ưu"vowels.

+

In Taiwoo Wu dialect, the "ği" combination often merges to "d" consonant and pronounced as [ɦi].

+

In Taiwoo Wu dialect, the "ğu" combination often merges to "w" consonant and pronounced as [ɦu].

+

In modern day north Wu dialect, the "ch" "x" "š" "ž" and "dž" have already merged to "ț" "țh" "s" "z" and "dz"

+

The "k" consonant at the front can be replaced with "c" if it appears before the letter "a" "ă" "â" "o" "ô" "ơ" "u" or "ư".

+ +

dụn-mổ vowels and end consonants

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
vowelsIPAexamplesvowelsIPAexamplesvowelsIPAexamplesvowelsIPAexamples
ă[ə]i/y[i]ô[u]u[y]
a[a]ia[ia]oa[ua]ua[ya]
au[ɔ]豪𢜶iau[iɔ]交關oau[uɔ]uau[yɔ]
âu[ɤ]ưu[iɤ]oâu[uɤɯ]fu/vu[v̩]
e[ɛ]ie[iɛ]oe[uɛ]ue[yɛ]
ê[e][ie][ue][ye]
o[o]io[io][uo]uyo[yʮ]
ơ[ou][ioɯ]ơi[uɐi]uo[yo]
ŭ[ɿ]iu[iʏ]ôi[uei]ư[ʮ]
ao[ɑo]iao[iɑo]ôy[ui]ươu[øʏ]
ai[æi]iai[iæ]oai[uæ]
ay[ai]iay[iai]oay[uai]
ây[ei][iu]oây[uei]uây[yei]
âư[əɯ]iâư[iəɯ]
ei[ɛi]oei[uɛi]uei[yɛi]
eo[ɛu]iêu[ieɯ]
ươ[ø]iươ[iø]oươ[uø]uươ[yø]
an[æ̃]an[iæ̃]廿oan[uæ̃]
ên[ẽ]iên[iẽ]oên[uẽ]uyên[yẽ]
on[ø̃]
ang[ɑŋ]iong[ɑŋ]oang[uɑŋ]uang[yɒ̃]
anh[aŋ]iang[iaŋ]oanh[uaŋ]
ông[oŋ]iông[ioŋ]ơn[on]uông[yoŋ]
ân[in]in[in]ôn[øn]un[yn]
âng[əŋ]inh[iŋ]uynh[yiŋ]
êng[eŋ]iêng[ieŋ]
ăn[ən]ênh[iəŋ]oăn[uən]uân[yən]
ăng[əŋ]iăng[iəŋ]oăng[uəŋ]uăng[yəŋ]
ât[iɪʔ]iêt[iɪʔ]oâc[uɪʔ]uât[yøʔ]
ach[ɑʔ]iac[iɑʔ]oach[uɑʔ]uot[yoʔ]
ăc[əʔ]ưc[ɿʔ]ơt[uɔʔ]uât[yəʔ]
ich[iʌʔ]it[iʔ]uyt[yɪʔ]
at[aʔ]iat[iaʔ]oat[uaʔ]uat[yaʔ]
oc[oʔ]祿ioc[ioʔ]oăc[uəʔ]uoc[yoʔ]
ôc[uʔ]iôc[iuʔ]uôc[yuʔ]
ôt[uəʔ]ôt[uəʔ]ươt[œʔ]
ac[ɒʔ]oac[uɒʔ]uac[yɔʔ]
êch[eʔ]oec[uɛʔ]uyêt[yeʔ]
ăl[əl]m[m̩]n[n̩]ng[ŋ̩]
+

The vowels with white background are common single vowels in Wu language.

+

The phonemes with yellow background are common in Taiwoo Wu dialect.

+

The phonemes with red background only exist in north Wu accent.

+

The phonemes with skyblue background only exist in north Liampo accent.

+

The phonemes with pink background exist in other minority Wu accent outside of Taiwoo Wu dialect

+

The vowels in the phonemes with a green background shift from [ə] in the North Wu accent to [i] in the Liampo accent.

+

The vowels in the phonemes with a orange background may shift to [ø] in Shanghai accent.

+

The "ang" [ɑŋ] and "anh"[aŋ] vowel can lose their end consonants and shift to nasal vowels [ɑ̃] and [ã].

+

The letter "y" represents the [i] consonant as well as the letter "i". However, unlike letter "i", the letter "y" does not combine with nearby letters to form other consonants or vowels.

+

The vowels in grey background indicate the pronunciation in some accents of Wu and loanwords. However, they are seldom used to indicate phonemes with clear etymology.

+

The end consonant [ʔ] can be spell as "h" when the vowel is in a particle, the word without a clear etymology about its original end consonant, the loanword, or just for representing the sound of the vowel.

+ + + + + + + + + + + + + + + + + + + + + + + + +
vowelsIPAvowelsIPAvowelsIPAvowelsIPA
ăh[əʔ]iăh[iəʔ]oăh[uəʔ]uăh[yəʔ]
ih[iʔ][iɪʔ][ɪʔ]ưh[ɿʔ]oih[uɪʔ]uih[yɪʔ]
ah[aʔ]iah[iaʔ]oah[uaʔ]uah[yaʔ]
ôh[uʔ]iôh[iuʔ]uôh[yuʔ]
ươh[œʔ]uươh[yœʔ]
oh[oʔ]ioh[ioʔ]oơh[uoʔ]uoh[yoʔ]
auh[ɔʔ][ɑʔ]iauh[iɔʔ][iɑʔ]oauh[uɔʔ][uɑʔ]uauh[yɔʔ][yɑʔ]
aih[æʔ]iaih[iæʔ]oaih[uæʔ]uaih[yæʔ]
êh[eʔ]iêh[ieʔ]oêh[ueʔ]uêh[yeʔ]
eh[ɛʔ]ieh[iɛʔ]oeh[uɛʔ]ueh[yɛʔ]
+

The nasalization mark 'ⁿ' indicates the vowel at the front is nasalized. This mark is used to represent the nasal vowel in some Wu accents or loanword.

+ + + + + + + + + + + + + + + + + + + + + + + +
vowelsIPAvowelsIPAvowelsIPAvowelsIPA
ăⁿ[ə̃]iăⁿ[iə̃]oăⁿ[uə̃]uăⁿ[yə̃]
iⁿ[ĩ][iɪ̃][ɪ̃]ưⁿ[ɨ̃]oiⁿ[uɪ̃]uiⁿ[yɪ̃]
aⁿ[ã]iaⁿ[iã]oaⁿ[uã]uaⁿ[yã]
ôⁿ[ũ]iôⁿ[iũ]ươⁿ[œ̃]uươⁿ[yœ̃]
oⁿ[õ]ioⁿ[iõ]oơⁿ[uõ]uoⁿ[yõ]
auⁿ[ɔ̃][ɑ̃]iauⁿ[iɔ̃][iɑ̃]oauⁿ[uɔ̃][uɑ̃]uauⁿ[yɔ̃][yɑ̃]
aiⁿ[æ̃]iaiⁿ[iæ̃]oaiⁿ[uæ̃]uaiⁿ[yæ̃]
êⁿ[ẽ]iêⁿ[iẽ]oêⁿ[uẽ]uêⁿ[yẽ]
eⁿ[ɛ̃]ieⁿ[iɛ̃]oeⁿ[uɛ̃]ueⁿ[yɛ̃]
+ + +

šênh-điạo accent tones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tone nametone markSoochow tone valueShanghai tone valueLiampo tone valueexampletriggering key
unvoiced flat in-bìnha˦˥˧˥˧加ca/
rising tone žạng-šênh˥˩˧˥假cảr
unvoiced falling in-khúá˥˨˧˧˦˦界cás
voiced flat diàng-bìnhà˨˨˧˩˧˨˦茄gàf
voiced entering diàng-khù˨˧˩˨˩˧大đạj
unvoiced entering in-zậta˦˧˥˥答tat/
voiced entering diàng-zật˨˧˩˨˩˨踏đạtj
+

The Shanghai accent only has unvoiced flat tone, unvoiced falling tone, voiced flat tone, unvoiced entering tone, and voiced entering tone.

+ +

Specific Alphabet đặc-biệt zụ̆-mổ

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CharacterKey pressed
đdd
ğgg
ăaw
âaa
êee
ôoo
ơow
oow
ưuw
ŭii
šss
țtt
žzz
ALT + n
+ +

Liệ-țŭ̉ examples:

+

ar > ả, as > á, af > à, ax > ã, aj > ạ

+

If you want to type "liảng",please input "liangx"

+

+

Punctuation and Capitalization piao-tiển vù-ğạo tăh đọ-sỉa

+

A space " " should be added betweem each words.

+

The first letter in one sentence should be capitalized.

+

The first letter in a proper noun such as the name of a particular person and place should be capitalized.

+

In an acronym, the first letter of each syllable should be capitalized, and a period "." can be added behind each capitalized letter.

+

In a multi-syllable single word, the space " " should be added between each syllable.

+

In a multi-syllable combined word, the hyphen "-" can be added between each syllable for avoid confusion.

+

In compound vowel and vowel with end consonant in loanword or certain accent, the hyphen "-" can be added between vowels or added between vowel and end consonant to mark the sounds out and avoid misreading.

+

Other uses of punctuation are similar with English and Vietnamese.

+

+ + +

doubletaping leads to generate original letters:

+

+ If more than one tone marking key is pressed, the last one will be used. For example, typing asf will return "à". To write a tone marking key as a normal character, one has to press it twice: her becomes hẻ, while herr becomes her. +

+

tap Z key to remove tonations

+ + Dictionary for Shanghainese National Language Script Orthography Zạng-Hai Ğàn-Ğọ Chếnh-In Zụ̆-Tiển +

+Dictionary for Liampo National Language Script Orthography Nhình-Pơ Ğàn-Ğọ Chếnh-In Zụ̆-Tiển +

+Dictionary for Soochow National Language Script Orthography Sô-Châu Ğàn-Ğọ Chếnh-In Zụ̆-Tiển +

+Dictionary for Wu National Language Script Orthography Ğồ-Nhủ Chếnh-In Zụ̆-Tiển +

+ +

example vạn-vằn

+ +

南國山河

+

Nền Koâc San Ğờ

+

南國山河南帝居

+

Nền Koâc San Ğờ Nền Điế Cu

+

截然定分在天書

+

Dziệt Žền Định Făn Dzại Thiên Sư

+

如何逆虜來侵犯

+

Žừ Ğờ Nhịch Lỗ Lài Țhin Vạn

+

汝等行看取敗虛

+

Žử Tẳng Ğình Khến Țhủ Bạ Hu

+ +

© cathaylab

From df16b9653dcca7fa6d634faeea4fdadd4b4e1717 Mon Sep 17 00:00:00 2001 From: Keyman Build Server Date: Tue, 28 Apr 2026 16:47:04 -0500 Subject: [PATCH 2/9] auto: Keyboard help deployment --- keyboard/sil_tchad_qwerty/5.4.2/Td.css | 269 +++++++++ .../sil_tchad_qwerty/5.4.2/drapeau.tchad.png | Bin 0 -> 239 bytes .../sil_tchad_qwerty/5.4.2/sil-logo-blue.png | Bin 0 -> 748 bytes .../sil_tchad_qwerty/5.4.2/sil_tchad_logo.png | Bin 0 -> 8482 bytes .../5.4.2/sil_tchad_qwerty.php | 561 ++++++++++++++++++ keyboard/sil_tchad_qwerty/5.4.2/touche TD.png | Bin 0 -> 2351 bytes .../sil_tchad_qwerty/5.4.2/windows.logo.png | Bin 0 -> 4174 bytes 7 files changed, 830 insertions(+) create mode 100644 keyboard/sil_tchad_qwerty/5.4.2/Td.css create mode 100644 keyboard/sil_tchad_qwerty/5.4.2/drapeau.tchad.png create mode 100644 keyboard/sil_tchad_qwerty/5.4.2/sil-logo-blue.png create mode 100644 keyboard/sil_tchad_qwerty/5.4.2/sil_tchad_logo.png create mode 100644 keyboard/sil_tchad_qwerty/5.4.2/sil_tchad_qwerty.php create mode 100644 keyboard/sil_tchad_qwerty/5.4.2/touche TD.png create mode 100644 keyboard/sil_tchad_qwerty/5.4.2/windows.logo.png diff --git a/keyboard/sil_tchad_qwerty/5.4.2/Td.css b/keyboard/sil_tchad_qwerty/5.4.2/Td.css new file mode 100644 index 000000000..062c7ac8f --- /dev/null +++ b/keyboard/sil_tchad_qwerty/5.4.2/Td.css @@ -0,0 +1,269 @@ +@font-face { + font-family: CharisSILWeb; + font-weight: normal; + font-style: normal; + src: url("https://fonts.languagetechnology.org/fonts/sil/charissil/web/CharisSIL-Regular.woff2") format("woff2"); +} +@font-face { + font-family: CharisSILWeb; + font-weight: bold; + font-style: normal; + src: url("https://fonts.languagetechnology.org/fonts/sil/charissil/web/CharisSIL-Bold.woff2") format("woff2"); +} + +body { + font-family: 'Charis SIL', CharisSILWeb, Gentium, serif; + +} + + +.tab-folder > .tab-content:target ~ .tab-content:last-child, .tab-folder > .tab-content { + display: none; +} + +.tab-folder > :last-child, .tab-folder > .tab-content:target { + display: block; +} +.right { + float: right; +} +.left { + float: left; +} +.full { + width: 98%; + min-width: 700px; +} + +.red { + color:red; +} + + +img.responsive { + height: 100px; + width: auto; +} +/* style.css */ +.my-class { + vertical-align: baseline; +} + +/* Responsive (si besoin) */ +@media (max-width: 600px) { + img.responsive { + height: 60px; + } + #container { + flex-direction: column; + text-align: center; + } +} + +/* Pour le paragraphe du haut entre les images */ +.top-tagline { + font-weight: bold; + text-align: center; + flex: 1; + margin: 2px; + font-size: 2em; + font-style: italic; /* facultatif */ +} + +/* Pour tous les autres paragraphes "normaux" */ +p.tagline { + font-size: 100%; +} + +h1.color { + text-align: center; + font-size: 130%; + display: block; +} +.tagline { + text-align: center; + font-style: italic; +} +.buttonlang { + background-color: pink; + border: none; + color: white; + padding: 5px; + word-wrap: break-word; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 18px; + font-weight: 800; + margin: 6px 30px; + cursor: pointer; + border-radius: 8px; + width: 94%; + animation: pulse 1.5s ease infinite; +} + +h3.color { + display: block; + font-weight: bold; + text-align: left; + padding: 1rem; + color: #000000; + background: linear-gradient(90deg, rgba(255,206,0,1) 0%, rgba(255,206,0,0) 100%); + cursor: pointer; + border-radius: 7px; + transition: all 0.25s ease-out; +} + +@keyframes pulse { + 0% { + transform: scale(1); + box-shadow: 0 2px 2px rgba(0,0,0,.2); + background-color: #F1506C; + } + 50% { + transform: scale(1.05); + box-shadow: 0 2px 2px rgba(0,0,0,.2); + background-color: #D21034; + } + 100% { + transform: scale(1); + box-shadow: 0 2px 2px rgba(0,0,0,.2); + background-color: #F1506C; + } +} + +table { + border-collapse: collapse; + border: 2px solid rgb(140,140,140); + text-align: center; +} + +td { + border: 1px solid rgb(160,160,160); + padding: 8px 10px; +} + +th { + color: white; + background-color: rgb(0,78,221); +} + +tr:nth-child(even) td { + background-color: rgb(240,240,240); +} + +.heman { + font: 1.4rem molot; + text-shadow: + 1px 1px 1px #fff, + 2px 2px 1px #000; +} + +.skeletor { + font: 1.7rem rapscallion; + letter-spacing: 3px; + text-shadow: + 1px 1px 0 #fff, + 0 0 9px #000; +} + +.keyboard--row { + display: block; + height: 3em; + margin: 0.5em; +} + +.keyboard--row > * { + display: inline-block; + box-sizing: border-box; + position: relative; + cursor: pointer; + -webkit-user-select: none; + border-radius: 0.3em; + margin: 0.06em; + padding: 0 0.2em; + width: 3.3em; + height: 100%; +} + +.key--bottom-left > * { + position: absolute; + text-align: left; + bottom: 0.4em; + left: 0.4em; +} + +.key--bottom-right > * { + position: absolute; + text-align: right; + bottom: 0.4em; + right: 0.4em; + white-space:pre; +} + +.key--word > * { + font-size: 0.8em; +} + +.key--letter > div { + font-size: 1.2em; + height: 1.2em; + float: right; + clear: right; +} + +.key--letter > div:first-child { + margin-top: -0.2em; +} + +.key--letter > span { + font-size: 1.2em; + height: 1.2em; + display: block; + position: absolute; + margin-top: -0.2em; + margin-left: 0.1em; +} +.key--letter > span:last-child { + margin-top: 1em; +} + +/* Light keyboard */ + +.keyboard--light { + font-size: 20px; + white-space: nowrap; + max-width: 900px; /* largeur maximale */ + box-sizing: border-box; + flex-wrap: wrap; +} + +.keyboard.keyboard--light .keyboard--row > * { + background: #ccc; + color: #111; + border: 1px solid #888; + box-shadow: 0 0.2em 0 0.05em #666; + border-bottom-color: #ddd; +} + +.keyboard.keyboard--light .keyboard--row > .key--letter { + background: #f0f0f0; + box-shadow: 0 0.2em 0 0.05em #666; + border-bottom-color: #ddd; +} + +.keyboard.keyboard--light .key--letter > span { + color: black +} + +.keyboard.keyboard--light .key--letter span.french { + color: blue +} + +.keyboard.keyboard--light .key--letter span.spec { + color: gray +} + +.keyboard.keyboard--light .key--letter span.specTd { + color: #9400D3 +} diff --git a/keyboard/sil_tchad_qwerty/5.4.2/drapeau.tchad.png b/keyboard/sil_tchad_qwerty/5.4.2/drapeau.tchad.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb828bb7fbca31e9aa061a82ebbf45c7e9faa89 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^4}o|Z2Q!eA_mVdRQk(%kA+8K+DgRD09OE&_op4VK zD7etm#WAE}&fD{bj0_AM%nLIAUuY{(H&J*wbKYA`Hr@dT@_c(QH(zJ5*&+#aEQ6=3 KpUXO@geCw9r6r;O literal 0 HcmV?d00001 diff --git a/keyboard/sil_tchad_qwerty/5.4.2/sil-logo-blue.png b/keyboard/sil_tchad_qwerty/5.4.2/sil-logo-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2c0731746dd8cec4bf02f57183907352a0ec9c GIT binary patch literal 748 zcmVHkk0zpeGx=Oibjl{Ss&`Z_E8OUPXz5r^hNCHUijS-ytKQ6M7y*N zp+zgvFtJP!-nIbq-XM8E3`9dMnDz~%Z}Rhz2h#0c`KbW;LCDS!7%`8XOJ`$ruu}-e zT;S&1+9-G2G=ed`kegtVOYzwDxo&T|F~%BFxVZvqtnt=B zXhq)22vf|J5GI+cBXly?MTlo^iD0$P+p~ih_*}DwSp@JqVr`KE&ZEB>)1oK31C(8!W8PfBmjgQGlhp9GQf42DLnR-0S=X0Bbl(fj!o+iqgZ| zgA*a2H_RhMGuKD(Wp0|_$=n>lhq-=27;~|Nbl!S^_?@%s3ZTwfBArfmA$Wc!dLnqZ zJ>8aU3slEvlbbyF`_S;wvEdWLr(m|ZXmS>PO(l|0AsmlYq8}Ba8Wo~SQwO_lq;eLq zgUS#(uAv%O`PXfrR11=xVK`HA_CIrq8hYk#Q1*(aXo6U|r>Wy-t+jzj@4&B*icpYt ziO)ZRAC+J__%%2=X0Pyz5|p%P_HP-3D*;N7-LF|EdOYlTC_zh}=B#B54kjwWt^4c{ e?u>daD*;HB`g{=xZ7fZ01E_nTihYI2ba6= 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 a6_fUryA%!l{DfE@l7ft?bhRWn^nU=*TUJ#7 literal 0 HcmV?d00001 diff --git a/keyboard/sil_tchad_qwerty/5.4.2/sil_tchad_qwerty.php b/keyboard/sil_tchad_qwerty/5.4.2/sil_tchad_qwerty.php new file mode 100644 index 000000000..46a0880b3 --- /dev/null +++ b/keyboard/sil_tchad_qwerty/5.4.2/sil_tchad_qwerty.php @@ -0,0 +1,561 @@ + + +
+ +
+ Cliquer ici pour voir cette page en français... +
+ + +

Chad QWERTY Keyboard for Keyman +
by SIL Chad +

+

Welcome to the Chad QWERTY Keyboard!
+This keyboard, maintained by the Language Technology team of SIL Chad, +allows you to type all of the special characters of the languages of Chad.

+
+ +

Using the keyboard

+

To learn how to type a character with this keyboard, refer to the graphical keyboard layout below. The characters to the right on each key cap are typed with the help of a special “Chad” key. +This key is found just to the left of the right-Shift key, and will likely appear like this on your keyboard: (for typing slash and question mark). +On the keyboard layout below, this key appears with a Chadian flag, to remind you that the “special” characters of Chad are typed with this key.

+

To type a character, find the character you want to type on the graphical keyboard layout below, +and note the position of the key on the keyboard and the position of the character on the key cap (one of four positions). +Depending on the position of that character on the key cap, you might need to tap the “Chad” key and/or hold down the Shift key as shown here:

+ + + + + + + +
+

Hold down Shift and tap the B key →

+

Simply tap the B key →

+
+
+
+
Ɓ
ɓ
Bb
+
+
+
+

← tap the Chad key, then hold down Shift and tap the B key

+

← tap the Chad key, then tap the B key

+
+ +

Note that you can type a slash character by tapping the “Chad” key twice, since the “/” character appears in the lower-right corner of that key cap.

+ + + +

Chad QWERTY Keyboard layout

+ +
+
+
~
`
◌̃◌̧
+
!1
+
@
◌̥2
+
#
◌̈3
+
$
◌̩4
+
%
◌̣5
+
^
◌̂6
+
&7
+
°
º
*8
+
(9
+
)0
+
_
◌̰-
+
 
=
+◌̄
+
Backspace
+
+
+
Tab
+
ɖ
ʁ
Qq
+
 
ø
Ww
+
Ə
ə
Ee
+
ɽ
ɾ
Rr
+
θ
ʈ
Tt
+
Ƴ
ƴ
Yy
+
Ʊ
ʊ
Uu
+
Ɨ
ɨ
Ii
+
Ɔ
ɔ
Oo
+
Œ
œ
Pp
+
[
{◌́
+
]
}◌̀
+
|
◌̌\
+
+
+
Caps Lock
+
Æ
æ
Aa
+
ß
ʃ
Ss
+
Ɗ
ɗ
Dd
+
Ɛ
ɛ
Ff
+
Ǝ
ɣ
Gg
+
ɦ
Hh
+
ɟ
ʄ
Jj
+
Ɨ
ɪ
Kk
+
ɮ
ɬ
Ll
+
ː
'
:;
+
"ʼ
+
Enter
+
+
+
Shift
+
ð
ʒ
Zz
+
ħ
χ
Xx
+
Ç
ç
Cc
+
ʋ
Vv
+
Ɓ
ɓ
Bb
+
Ŋ
ŋ
Nn
+
Ɲ
ɲ
Mm
+
<,
+
>.
+
ʔ
/
?
+
Shift
+
+
+
Ctrl
+
Fn
+
+
Alt
+
+
Alt
+
Ctrl
+
Home
+
PgUp PgDn
+
End
+
+
+ +

Note that the special characters that appear in purple can be used in Chadian languages, but that those in blue are just used in French, +and those in gray are intended to be used phonetically, not orthographically in Chadian languages.

+ +

Typing accents / combining diacritics

+

Note that some of the characters appear with dotted circles: . +These indicate accents (diacritics) which are combined with the previous character typed. +So if you type “a” and then type the character “◌́”, then the resulting character on the screen will be “á”. + Type “n” plus “◌̃” to get “ñ”. As much as possible, the keyboard will produce the combined form of the character– + both of the previous examples are one single character at the end, even though they are each typed with two separate keypresses. + However not all accents can combine with all base characters. So if you type “n̰” or “ɛ̂”, + each resulting text contains two characters – the base character and the combining accent.

+ +

Additional Characters

+

There are some additional characters that can be typed with this keyboard that are not displayed on the graphical keyboard layout above. +In most cases they are modified forms of other characters that are on the layout.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
type:to get:type:to get:type:to get:
////$$/@@©
--/$$$£/@@@
---/##̚/@@@@®
/??ʕ/::ˑ
+ +

In addition, the “Chad” key plus space ( /⎵ ) gives a no-break space, and typing space bar again ( /⎵ ⎵ ) gives a narrow no-break space. +The “Chad” key plus hyphen ( /- ) gives a no-break hyphen.

+ +

Quotation Marks and Glottal Stop Characters

+

When you type an apostrophe ( ' ), this keyboard produces a right single quotation mark ( ’ ), i.e. the character used for contractions in English and French. +If you immediately type another apostrophe, you will get a “modifier letter apostrophe” ( ʼ ). +While this looks identical to the single quotation mark, it is considered a letter and not punctuation, +and can be used as a glottal stop character in the middle of words without causing any unwanted word-breaking issues. +And if you type the “Chad” key plus apostrophe ( /' ), you get something that looks like a heavy apostrophe ( ꞌ ) – a character called the “saltillo”. +The “Chad” key plus Shift-apostrophe ( /" ) produces the capital saltillo which is just heavier still ( Ꞌ ). +Both of these saltillo characters and the modifier letter apostrophe (typed with two consecutive apostrophes) are word-forming characters, +and not punctuation. In Unicode, there is a difference. You should use one of these options for the glottal stop character, so that it will be considered part of the word. +For quotation marks as punctuation, use the following guide:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
type:to get:type:to get:type:to get:
<<«/{
>>»/{""
/</(/;'
/>/)
'
+ +

You may use the “smart quotes” auto-correct feature in your editor. If you do, +all of the straight apostrophes and double-quotes (in the right column of the table above) +will be changed to curled quotes depending on the context. If you need to use straight apostrophes or straight double-quotes in your text, + you must turn off the “smart quotes” feature. In this case, you can still type curled quotes, as shown in the middle column of the table above. + The left column shows how to type French guillemets. If the language of your document is French, + you may get these automatically by typing straight double-quotes if the “smart quotes” feature is on. + Remember that typing a double apostrophe ( ' ' ) or a “Chad” key plus apostrophe ( /' ) does not give you punctuation, + but a word-forming character to be used as a glottal in Chadian languages.

+ +

Fonts

+

Make sure you have a Unicode font selected (e.g. Charis SIL, Doulos SIL, Andika, Gentium, Times New Roman, etc.) to type special characters.

+ +

Contact

+

For more information and guidance on the QWERTY Keyboard of Chad, you can reach us here : +Language Technology Chad

+ +

© SIL Global

+
+
+ + + +
+Click here to view this page in English... +
+ + + +

Clavier Tchad QWERTY pour Keyman +
par SIL Tchad +

+

Bienvenue au Clavier Tchad QWERTY !
+Ce clavier, maintenu par l’équipe de Technologie Linguistique de SIL Tchad, +vous permet de taper tous les caractères spéciaux des langues du Tchad.

+
+ +

Utilisation du clavier

+

Pour apprendre comment taper un caractère avec ce clavier, référez-vous à la disposition graphique du clavier ci-dessous. +Les caractères à droite de chaque touche sont tapés a l’aide d’une touche spéciale « Tchad ». +Cette touche se trouve juste à gauche de la touche Majuscule-droite et apparaîtra probablement ainsi sur votre clavier : +(pour taper le slash et le point d’interrogation). Sur la disposition du clavier ci-dessous, +cette touche apparaît avec un drapeau tchadien, pour vous rappeler que les caractères « spéciaux » du Tchad sont tapés avec cette touche.

+

Pour taper un caractère, repérez le caractère que vous souhaitez taper sur la disposition graphique du clavier ci-dessous, +et notez la position de la touche sur le clavier et la position du caractère sur la touche (une des quatre positions). +Selon la position de ce caractère sur la touche, +vous devrez peut-être taper sur la touche « Tchad » et/ou maintenir la touche Majuscule enfoncée comme indiqué ici :

+ + + + + + + +
+

Maintenez la touche Majuscule enfoncée et tapez sur la touche B →

+

Tapez simplement sur la touche B →

+
+
+
+
Ɓ
ɓ
Bb
+
+
+
+

← Tapez sur la touche « Tchad », puis maintenez la touche Majuscule enfoncée et tapez sur la touche B

+

← Tapez sur la touche « Tchad », puis tapez sur la touche B

+
+ +

Notez que vous pouvez taper un caractère slash en tapant deux fois sur la touche « Tchad », puisque le caractère « / » apparaît dans le coin inférieur droit de cette touche.

+ + + +

Disposition du clavier QWERTY Tchad

+ +
+
+
~
`
◌̃◌̧
+
!1
+
@
◌̥2
+
#
◌̈3
+
$
◌̩4
+
%
◌̣5
+
^
◌̂6
+
&7
+
°
º
*8
+
(9
+
)0
+
_
◌̰-
+
 
=
+◌̄
+
Backspace
+
+
+
Tab
+
ɖ
ʁ
Qq
+
 
ø
Ww
+
Ə
ə
Ee
+
ɽ
ɾ
Rr
+
θ
ʈ
Tt
+
Ƴ
ƴ
Yy
+
Ʊ
ʊ
Uu
+
Ɨ
ɨ
Ii
+
Ɔ
ɔ
Oo
+
Œ
œ
Pp
+
[
{◌́
+
]
}◌̀
+
|
◌̌\
+
+
+
Caps Lock
+
Æ
æ
Aa
+
ß
ʃ
Ss
+
Ɗ
ɗ
Dd
+
Ɛ
ɛ
Ff
+
Ǝ
ɣ
Gg
+
ɦ
Hh
+
ɟ
ʄ
Jj
+
Ɨ
ɪ
Kk
+
ɮ
ɬ
Ll
+
ː
'
:;
+
"ʼ
+
Enter
+
+
+
Shift
+
ð
ʒ
Zz
+
ħ
χ
Xx
+
Ç
ç
Cc
+
ʋ
Vv
+
Ɓ
ɓ
Bb
+
Ŋ
ŋ
Nn
+
Ɲ
ɲ
Mm
+
<,
+
>.
+
ʔ
/
?
+
Shift
+
+
+
Ctrl
+
Fn
+
+
Alt
+
+
Alt
+
Ctrl
+
Home
+
PgUp PgDn
+
End
+
+
+ +

Notez aussi que les caractères spéciaux qui apparaissent en violet peuvent être utilisés dans les langues tchadiennes, +mais que ceux en bleu sont seulement utilisés en français, et ceux en gris sont destinés à être utilisés phonétiquement, +pas orthographiquement dans les langues tchadiennes.

+ +

Taper des accents / diacritiques de combinaison

+

Notez que certains des caractères apparaissent avec des cercles en pointillés : . +Ceux-ci indiquent des accents (diacritiques) qui sont combinés avec le caractère précédent tapé. Ainsi, si vous tapez « a » puis tapez le caractère « ◌́ », + le caractère résultant à l’écran sera « á ». Tapez « n » plus « ◌̃ » pour obtenir « ñ ». Autant que possible, + le clavier produira la forme combinée du caractère – les deux exemples précédents sont un seul caractère à la fin, + même s’ils sont chacun tapés avec deux frappes de touche séparées. Cependant, tous les accents ne peuvent pas se combiner avec tous les caractères de base. + Donc si vous tapez « n̰ » ou « ɛ̂ », chaque texte résultant contient deux caractères  –  le caractère de base et l’accent combinant.

+ +

Caractères supplémentaires

+

Il y a quelques caractères supplémentaires qui peuvent être tapés avec ce clavier et qui ne sont pas affichés sur la disposition graphique du clavier ci-dessus. +Dans la plupart des cas, ce sont des formes modifiées d’autres caractères qui se trouvent sur la disposition.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
taper:pour avoir:taper:pour avoir:taper:pour avoir:
////$$/@@©
--/$$$£/@@@
---/##̚/@@@@®
/??ʕ/::ˑ
+ +

De plus, la touche « Tchad » suivie de la barre d’espace ( /⎵ ) vous donne un espace insécable, +et si vous ajoutez un autre espace ( /⎵ ⎵ ), vous obtenez un espace insécable étroit. +La touche « Tchad » plus le trait d’union ( /- ) donne un trait d’union insécable.

+ +

Guillemets et caractères de coup de glotte

+ +

Lorsque vous tapez une apostrophe ( ' ), ce clavier produit un guillemet simple fermant ( ’ ), +c’est-à-dire le caractère utilisé pour les contractions en anglais et en français. Si vous tapez immédiatement une autre apostrophe, +vous obtiendrez une « lettre de modification apostrophe » ( ʼ ). Bien qu’elle semble identique au guillemet simple, +elle est considérée comme une lettre et non comme une ponctuation, +et peut être utilisée comme un caractère de coup de glotte au milieu des mots sans causer de problèmes de séparation de mots indésirables. +Et si vous tapez la touche « Tchad » suivie de l’apostrophe ( /' ), vous obtenez quelque chose qui ressemble à une apostrophe lourde ( ꞌ ) – un caractère appelé le « saltillo ». +La touche « Tchad » suivie de Majuscule-apostrophe ( /" ) produit le saltillo en majuscule qui est simplement plus lourd encore ( Ꞌ ). +Ces deux caractères de saltillo et la lettre de modification apostrophe (tapée avec deux apostrophes consécutives) sont des caractères de formation de mots, +et non de ponctuation. En Unicode, il y a une différence. Vous devez utiliser l’une de ces options pour le caractère de coupure glottale, +afin qu’il soit considéré comme faisant partie du mot. Pour les guillemets en tant que ponctuation, suivez le guide suivant :

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
taper :pour avoir :taper :pour avoir :taper :pour avoir :
<<«/{
>>»/{""
/</(/;'
/>/)
'
+ +

Vous pouvez utiliser la fonctionnalité de correction automatique des « guillemets intelligents » dans votre éditeur. Si vous le faites, +tous les apostrophes droits et guillemets doubles (dans la colonne de droite du tableau ci-dessus) seront transformés en guillemets courbes en fonction du contexte. +Si vous avez besoin d’utiliser des apostrophes droites ou des guillemets droits dans votre texte, vous devez désactiver la fonctionnalité des « guillemets intelligents ». +Dans ce cas, vous pouvez toujours taper des guillemets courbes, comme indiqué dans la colonne du milieu du tableau ci-dessus. +La colonne de gauche montre comment taper les guillemets français. Si la langue de votre document est le français, + vous pouvez les obtenir automatiquement en tapant des guillemets droits si la fonctionnalité des « guillemets intelligents » est activée. +N’oubliez pas que taper deux apostrophes ( ' ' ) ou la touche « Tchad » suivie de l’apostrophe ( /' ) ne vous donne pas de ponctuation, +mais un caractère formateur de mot à utiliser comme coup de glotte dans les langues tchadiennes.

+ +

Polices

+

Assurez-vous d’avoir sélectionné une police Unicode (par exemple, Charis SIL, Doulos SIL, Andika, Gentium, Times New Roman, etc.) +pour taper des caractères spéciaux.

+ +

Contact

+

Pour plus d’information et orientation sur le Clavier QWERTY du Tchad vous pouvez nous joindre ici : +Technologie Linguistique Tchad

+ +

© SIL Global

+
+
+ +
diff --git a/keyboard/sil_tchad_qwerty/5.4.2/touche TD.png b/keyboard/sil_tchad_qwerty/5.4.2/touche TD.png new file mode 100644 index 0000000000000000000000000000000000000000..69c9a710d30ad72e4bc66348ea5bf415cd2b0075 GIT binary patch literal 2351 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 Y3bw3iM{LGk(*OVf07*qoM6N<$f^M<%kpKVy literal 0 HcmV?d00001 From ce7aa6d1a8cfe4da39f474724b8491a3cea28fda Mon Sep 17 00:00:00 2001 From: Keyman Build Server Date: Wed, 29 Apr 2026 23:04:15 -0500 Subject: [PATCH 3/9] auto: Keyboard help deployment --- keyboard/poorigbelle/1.0/poorigbelle.php | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 keyboard/poorigbelle/1.0/poorigbelle.php diff --git a/keyboard/poorigbelle/1.0/poorigbelle.php b/keyboard/poorigbelle/1.0/poorigbelle.php new file mode 100644 index 000000000..4ec5e693d --- /dev/null +++ b/keyboard/poorigbelle/1.0/poorigbelle.php @@ -0,0 +1,29 @@ + + +

+ Are you tired of struggling to find the right characters for your native language? + poorigbellé is a custom-designed keyboard created specifically to support + the unique phonetic needs of African Darfurian native languages. +

+ +

+ We speak from Darfur (98%) and West Sudan. Whether you are texting friends, writing emails, + or posting on social media, poorigbellé ensures your words are written + exactly as they are spoken. +

+ +

Desktop Keyboard Layout

+
+
+ +

Mobile/Phone Keyboard Layout

+

Due to the size and number of keys, some characters are hidden in the long press. + Press and hold on the key with a little dot on the top right to reveal and use them.

+ +
+
+ From d49e152fecee225b0694996cc5892d510a97be63 Mon Sep 17 00:00:00 2001 From: Keyman Build Server Date: Thu, 30 Apr 2026 10:20:23 -0500 Subject: [PATCH 4/9] auto: Keyboard help deployment --- .../1.0/khmer_traditional.php | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 keyboard/khmer_traditional/1.0/khmer_traditional.php diff --git a/keyboard/khmer_traditional/1.0/khmer_traditional.php b/keyboard/khmer_traditional/1.0/khmer_traditional.php new file mode 100644 index 000000000..4b5dfd66a --- /dev/null +++ b/keyboard/khmer_traditional/1.0/khmer_traditional.php @@ -0,0 +1,35 @@ + + +

+ The Khmer Traditional keyboard is designed to facilitate a seamless transition from the standard Microsoft + Khmer keyboard layout to the Keyman platform. It preserves the canonical character inventory and key mappings + familiar to users across both desktop and mobile environments, thereby minimizing cognitive load and supporting continuity + in typing Khmer alphabets. +

+ +

+ A distinctive feature of this keyboard is the inclusion of the character ឲ, which is mapped to the Right Alt + y + key combination. This character is not currently represented in the standard Microsoft Khmer layout, + although its inclusion is under consideration as of April 2026. The present implementation addresses this gap + by providing direct access within Keyman. +

+ +
+ +
+

Desktop Keyboard Layout

+ +
+ +
+ +
+

Mobile Keyboard Layout

+ +
+ +
\ No newline at end of file From 7eed521ce348eb1df04594dbd1142dd206c7a356 Mon Sep 17 00:00:00 2001 From: Keyman Build Server Date: Mon, 4 May 2026 12:07:49 -0500 Subject: [PATCH 5/9] auto: Keyboard help deployment --- keyboard/vietnam/2.0.5/vietnam.php | 207 +++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 keyboard/vietnam/2.0.5/vietnam.php diff --git a/keyboard/vietnam/2.0.5/vietnam.php b/keyboard/vietnam/2.0.5/vietnam.php new file mode 100644 index 000000000..18c705fe2 --- /dev/null +++ b/keyboard/vietnam/2.0.5/vietnam.php @@ -0,0 +1,207 @@ + + +

+vietnam keyboard for Chữ Quốc Ngữ Tiếng Việt (Vietnamese) +

+

+ Because the Vietnamese alphabet uses a complex system of diacritical marks, Telex requires the user to type in a base letter, followed by one or two characters that represent the diacritical marks: +

+ +

Non-tonal diacritics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CharacterKey pressedSample inputSample output
ăawtrangwtrăng
âaacanacân
đddddaauđâu
êeeddeemđêm
ôoonhoonhô
iibiinbiên
uyêuyychuyynchuyên
ơowmow
ưuwtuw
ênheenntheennthênh
ươnguonnuonnương
ôngoonnoonnông
ângaannvaannvâng
ăngawnntawnntăng
ưnguwnncuwnncưng
iêngiinnliinn/lieennliêng
ơioiioiiơi
ươiuoiituoiitươi
+ +

+ To write the pair of keys as two distinct characters, the second character has to be repeated. For example, the Vietnamese word cải xoong must be entered as cari xooong rather than cari xoong (*cải xông). +

+ +

Tonal diacritics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ToneKeys added to syllableSample inputSample output +
Ngang (level)nothingngangngang
Huyền (falling)fhuyeenfhuyền +
Sắc (rising)ssawcssắc +
Hỏi (dipping-rising)rhoirhỏi +
Ngã (rising glottalized)xngaxngã +
Nặng (falling glottalized)jnawngjnặng +
+ +

+ If more than one tone marking key is pressed, the last one will be used. For example, typing asf will return "à". To write a tone marking key as a normal character, one has to press it twice: her becomes hẻ, while herr becomes her. +

+ +
+

Important Notice: This keyboard uses Quy tắc đặt dấu thanh kiểu cũ (òa, òe, úy).

+
+ +
+ +

©cathaylab

From 946edb281b68fbceab8b436baeccea0880273936 Mon Sep 17 00:00:00 2001 From: Keyman Build Server Date: Thu, 7 May 2026 11:18:45 -0500 Subject: [PATCH 6/9] auto: Keyboard help deployment --- .../cantonese_telex/4.0.2/cantonese_telex.php | 928 ++++++++++++++++++ 1 file changed, 928 insertions(+) create mode 100644 keyboard/cantonese_telex/4.0.2/cantonese_telex.php diff --git a/keyboard/cantonese_telex/4.0.2/cantonese_telex.php b/keyboard/cantonese_telex/4.0.2/cantonese_telex.php new file mode 100644 index 000000000..f691e5ad6 --- /dev/null +++ b/keyboard/cantonese_telex/4.0.2/cantonese_telex.php @@ -0,0 +1,928 @@ + + +

+ Cantonese Telex keyboard for the Universal Version Script of the National Language for Cantonese Việt Ngữ Quóc Ngữ Țụ̆ Thung Dụng Bản粵語國語字通用版 +

+

粵語國語字係一種拉丁化嘅粵語文字,意在發展粵語表音文字,縮短粵文學習同書寫時間,增強粵語使用者之間嘅凝聚力同自我認同

+

粵語國語字通用版本集合咗各種粵語口音嘅特點,形成咗一種能夠體現並且描述各種粵語口音嘅粵語表音文字,又減低咗同音字現象嘅影響,為唔同地區唔同口音嘅粵語使用者提供咗一種通用嘅書面文字

+

Việt-Ngữ Quóc-Ngữ-Țụ̆ hệ yât chủng Lai-tinh-hóa ké Việt-Ngữ mằn-țụ̆, ý-țọi phát-chiển Việt Ngữ biểu-yâm mằn-țụ̆, suc-đuỏn Việt-Mằn học-țập thùng sư-ŧẻ sì-kan, țăng-khường Việt-Ngữ sŭ̉-dụng-chẻ chi-kan ké ngình-țự-lịch thùng țụ̆-ngõ nhịnh-thùng

+

Việt-Ngữ Quóc-Ngữ-Țụ̆ Thung-dụng Bản-Bủn țập-họp chỏ cóc-chủng Việt-Ngữ hẩu-yâm ké đặc-điểm, hình-sình chỏ yât chủng nằng-cấu thể-hiện bính-xẻ miều-suật cóc-chủng Việt-Ngữ hẩu-yâm ké Việt-Ngữ biểu-yâm mằn-țụ̆, dựu kảm-đê chỏ thùng-yâm-țụ̆ ké Ỉnh-hưởng, vỵ m̀-thùng đỵ-khư m̀-thùng hẩu-yâm ké Việt-Ngữ sŭ̉-dụng-chẻ thề-cung chỏ yât chủng thung-dụng ké sư-miện mằn-țụ̆

+

Chữ Quốc Ngữ tiếng Quảng Đông là một loại chữ viết La-tinh hóa của tiếng Quảng Đông, nhằm mục đích phát triển chữ viết biểu âm của tiếng Quảng Đông, giảm bớt thời gian học và viết tiếng Quảng Đông, nâng cao sự gắn kết và ý thức bản sắc của những người sử dụng tiếng Quảng Đông

+

Chữ Quốc Ngữ tiếng Quảng Đông thông dụng đã tổng hợp đặc trưng của các loại giọng của tiếng Quảng, hình thành một chữ viết biểu âm có thể thể hiện và mô tả các loại giọng của tiếng Quảng, cũng bớt ảnh hưởng của hiện tượng từ đồng âm, cho những người nói các giọng của tiếng Quảng Đông ở khắp nơi một hệ thống chữ viết thung dụng

+

The script of national language for Cantonese is a romanized Cantonese script aimed at developing a phonetic writing system for Cantonese, reduce the time of learning and writing of Cantonese, while strengthening the cohesion and self-identity among Cantonese speakers.

+

The universal version of the script of national language for Cantonese combine the character of various accents of Cantonese, forms a phonetic writing system for Cantonese which demonstrates and describe various of Cantonese accents, and reduced the impact of homophone, provides a common written system for Cantonese speakers in different area with different accent.

+ +

Alphabet 字母表 Țụ̆-Mỗ-Biểu

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
characterEnglish nameCantonese Namepronunciation
aeia[a]
â/â[ɐ]
ă/â[ɐ]
bbi[p] [ɓ] [b]
csi[k]
ch/chơ[ʧ] [ʨ]
dđi[j] [ʝ] [d]
đ/đơ[t] [ɗ]
edie[ɛ]
ê/ây[ɐi]
fe-phù/[f]
gchư/[ɡ][dʒ][ʒ]
hei-xừha[h]
iaii[i]
/ie[iɜ] [i]
jchei/[dʒ] [j] [ʒ]
kkheika[k]
kh/kha[kʰ]
le-lồ[l]
mem[m]
nen[n]
ng/ngơ[ŋ]
nh/nhơ[ȵ] [ŋ]
oouo[ɔ]
ô/ô[ou] [ɔu] [u]
ơ/ơ[ə]
ppi[pʰ]
ph/phơ[f]
qkhiuqui[kʷ]
ra-lồ[ɹ]
se-sì[ʃ] [ɕ]
tthi[tʰ] [t]
th/thơ[tʰ]
ŧ/ŧơ[s] [θ] [ɬ]
ț/țơ[ʦ]
tx/txơ[ʦʰ]
tr/chi-tổ-sinh-mỗ知組聲母[ʧ] [ʧʰ] [ʨ] [ʨʰ]
udiuu[u]
/[ɵ]
ư/uyê/ư[y]
ươ/ưa/ươ[œ]
ŭ/ŭ[ɿ]
ui/ui[ɵy] [ui]
vvi[ʋ] [w] [v]
wđa-bi-diu[w]
xek-sì[ʧʰ] [ʨʰ]
yoaiơi[ei] [ɪi] [i] [j] [ʝ]
zdì-set/[z]
+ +

Tone Marks 音調符號 Yâm-Điệu Phù-Hạu

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tone markCantonese Nametone value
ațiêm sinh尖聲˥ / ˥˧
đẩu sinh陡聲˧˥
ákhóng sinh亢聲˧
àxầm sinh沉聲˩ / ˨˩
ãngõng sinh仰聲˩˧ / ˨˧
hạ sinh下聲˨
+ +

Phonologic Map 音韻表 Yâm-Vận-Biểu

+

建議以下嘅粵語國語字音韻表打字

+

The suggested form of spelling of Cantonese Romanization

+

Consonants 韻首 Vận-Sửu

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
scriptIPAexamples
b[ɓ]
p[pʰ]
m[m]
ph/f[f]
đ[ɗ]
t[t]
th[tʰ]
n[n]
l[l]
k/c[k]
kh[kʰ]
ng[ŋ]
nh[ȵ]廿
h[h]
qu[kʷ]
khu/kho[kʰʷ]
hu/ho[hʷ]
v[ʋ]
u/o[w]
ch[ʨ]
ț[ʦ]
x[ʨʰ]
tx/țh[ʦʰ]
s[ɕ]
ŧ[θ]
d[j]
y[ʔi]
/[ø]
tr[ʈ]
r[ɹ]friend
z[z]
+

韻首[k]位於元音 e ê i y之前嘅韻首一定使用字母k嚟表示,位於元音â ă u ư ô ơ 之前嘅韻首一定使用字母c表示。如果位於元音a o以前,呢個字嘅古音同儋州話發音入面存在介音i,咁就使用字母k嚟表示。如果呢個音節冇介音i,一係表音詞同外來詞,咁就用字母c嚟表示。

+

The consonant [k] must be written as the letter "k" when it appears before the vowels "e, ê, i, y". When it appears before the vowels "â, ă, u, ư, ô, ơ", it must be written as the letter "c". If it appears before the vowels "a" or "o", and the word’s historical pronunciation and its pronunciation in Damchau dialect contain the medial sound [i], then the letter "k" will be applicated. If the syllable does not have the medial sound [i], or if it is an onomatopoeic word or a loanword, then the letter "c" will be applicated.

+

位於字母i ê e之前嘅韻首ng可以轉變為ngh

+

The consonant "ng" before vowels i ê e can be transformed to "ngh"

+

廣州音入面消失咗嘅某啲日母nh韻首同疑母ng韻首保留喺通用版入面,呢啲日母nh同疑母ng喺台山話欽州話同南寧話仍然存在

+

The "nh" and "ng" consonants disappeared in Cantonese of Hong Kong and Canton city are preserved in the universal version, which are still existing in Hoisan, Yamchow and Namning accent

+

廣州音入面唔再分別嘅 ch(知)同ț(精)韻首、x(持)同tx(青)韻首、s(詩)同ŧ(思)韻首依然喺通用版本入面得到體現

+

The "ch" and "ț" consonants pair, "x" and "tx" consonants pair, "s" and "ŧ" consonants pair which are not differed in Hong Kong and Canton city accent, are still presented in universal version.

+

"tr"韻首用嚟表示依家粵語依家已經冇咗嘅「知組」聲母,"tr"韻首用嚟表示專有名詞譬如話人同地方嘅名,"tr"韻首係第一聲、第二聲、第三聲、第六聲嘅韻腹前邊時同"ch"韻首嘅發音相同,"tr"韻首係第四聲、第五聲嘅韻腹前邊時同"x"韻首嘅發音相同

+

"tr" consonant is used to represent the "tr" serie consonants which is no longer existing Cantonese. The "tr" is applied in the proper noun such as name of a person and a place. The pronunciation of "tr" is same as "ch" in syllable with the first, second, third and sixth tone. The pronunciation of "tr" is same as "x" in syllable with the forth and fifth tone.

+

喺廣州音入面讀"ph"而係喺南寧音入面有機會讀"v"嘅韻首,通用版本寫"ho" "hu"或者"kho"譬如話 「花hoa」「化hóa」「葷huân」「訓huấn」「快khoái」

+

The consonants pronounce "ph" in Canton city accent and have change to be pronounced as "v", should be spelled as "ho" "hu" or "kho" in universal version, such as "花hoa" "化hóa" "葷huân" "訓huấn" "快khoái"

+

字母"f"嘅發音同"ph"相同,主要用嚟表音同書寫外來詞語

+

The letter "f" has the same pronunciation with consonant "ph". "f" is mainly used to represent sounds and spelling loanword from foreign languages.

+

字母"t"嘅發音同"đ"嘅廣州音相同,都係[t], "t"用嚟標記聲音、表示廣州音專有詞語同書寫外來詞語,例如「點解tỉm-kải」「我哋ngõ-tỵ」「一啲yât-ti」「拉丁Lai-tinh」

+

The pronunciation of letter "t" is same with consonant "đ" in Canton city accent. They are both pronounced as [t] in Canton city accent. "t" is used to mark sounds, indicate words only for Canton city accent and spell loanwords, such as "點解tỉm-kải" "我哋ngõ-tỵ" "一啲yât-ti" "拉丁Lai-tinh".

+

字母"d" 字母"z" 同字母組合 "dz" 喺粵語源頭嘅詞語入面同字母"y"都用嚟表示韻首/j/或者/z/,字母"y"用嚟表示古音同儋州話入面[ʔ]韻首嘅音節

+

Letter "d", letter "z", and letter combination "dz" and letter "y" in Cantonese origin words, are used to represent /j/ or /z/ consonant. The letter “y” is applicated on the syllables with [ʔ] consonant in historical pronunciation and the Damchau dialect.

+

Vowels and End Consonants 韻腹 Vận-Phục

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
vowelsIPAexamplesvowelsIPAexamplesvowelsIPAexamples
ă/â[ɐ]i[i]u[u]
ơ[ə][iə]uă/oă[uə]
a[a]ia[ia]ua/oa[wa]
ai[ai]iai[iai]uai/oai[wai]
ao[au]iao[iau]oao[wau]wow
ây[ɐi]ê[ɐi]uây[wɐi]油炸鬼
âu[ɐu]ưu[iəu]
e[ɛ]ie[iɛ]ue/oe[wɛ]
ơi[ei]y[ɪi]uy/vy[wei]
eo[ɛu]iêu[iɛu]oeo[wɜu]
o[ɔ]io[iɔ]uo[wɔ]
au[ɔu]iu[iu]燒賣ô[ou]
ôi[ui]ui[ɵy]
oi[ɔi]uoi[uɔi]
ŭ[ɿ]ưa[œ]ư[y]
am[am]iam[iam]
an[an]ian[ian]uan/oan[wan]
anh[aŋ]uanh/oanh[waŋ]
ang[aŋ]iang[iaŋ]uang/oang[waŋ]
âm[ɐm]im[im]點解
ân[ɐn]in[in]uân[wɐn]論 軍
ăng[ɐŋ]iăng[iɐŋ]uăng/oăng[uɐŋ]
em[ɛm]𦧷iêm/iem[iɛm]
en[ɛn]Niên/ien[iɛn]uen/oen[wɛn]
eng/ênh[ɛŋ]iêng[iɛŋ]uênh/oênh/oeng[wɛŋ]
om[ɔm]iom[iɔm]
on[ɔn]ion[iɔn]uon[uɔn]
ong[ɔŋ]ương[œŋuong[wɔŋ]
ôn[un]uyên/viên[yn]ăn[un]
un[uɔn]滿iun[iun]uôn[un]
ung[ʊŋ]iung[iuŋ]ông[oŋ]
inh[iŋ]uynh[wiŋ]
ơn[ən]ưn[yn]魚丸
ơm[əm]um[um]
ơng[əŋ]iong[iɔŋ]
ap[ap]iap[iap]
at[at]iat[iat]uat/oat[wat]
ach/ak[ak]iac/iak[iak]uach/oach/oak[wak]
âp[ɐp]ip[ip]
ât[ɐt]it[it]uât[wɐt]律 屈
ăc/ăk[ɐk]iăc/iăk[iɐk]uăc/oăc/oăk[wɐk]𥕏
ep[ɛp]iêp[iɛp]
et[ɛt]iêt[iɛt]uet/oet[wɛt]
êc/ek[ɛk]iêc/iek[iɛk]uêch/oêch/oek[wɛk]
op[ɔp]iop[iɔp]
ot[ɔt]iot[iɔt]uot[uɔt]
oc/ok[ɔk]ươc[œk]uoc/uok[wɔk]
ôt[ut]uyêt/viêt[yt]ăt[ut]
ut[uɔt]iut[iut]
uc/uk[ʊk]iuc/iuk[iuk]ôc/ôk[ok]
ich/ik[ik]uich/uik[wik]
ơt[ət]ưt[yt]
ơp[əp]up[up]
ơc/ơk[ək]ioc/iok[iɔk]
ng[ŋ]m[m]
+

喺廣州音入面讀"ô"而係喺台山音入面讀"ao"嘅韻腹寫成"au"

+

The vowels pronounce "ô" in Canton city and Hong Kong accent while pronounce "ao" in Hoisan accent are spelled as "au"

+

喺廣州音入面讀"âu"而係喺台山音入面讀"ưu"嘅韻腹寫成"ưu"

+

The vowels pronounce "âu" in Canton city and Hong Kong accent while pronounce "ưu" in Hoisan accent are spelled as "ưu"

+

如果"ưu"韻腹前邊嘅韻首係[j], 音調係第一聲、第二聲、第三聲, 咁就唔使寫韻首,直程寫"ưu"就得,譬如話「優ưu」「幼ứu」

+

If the consonant before the vowel "ưu" is "y", with the first, second, third tone, then this consonant will be omitted, only "ưu" will be spelled, such as "優ưu" "幼ứu"

+

如果一個字嘅南寧音版本嘅韻腹係"ư", 喺廣州音或者台山話入面讀"cui/kui" "khui" "hui" "ngui" "ŧui" "txui" "tui" "nui" "lui",咁呢啲字嘅通用版正寫係"cư/kư" "khư" "hư" "ngư" "ŧư" "txư" "tư" "nư" "lư"

+

If a character's vowel is "ư" in Namning accent, and the character is pronounced "cui/kui" "khui" "hui" "ngui" "ŧui" "txui" "tui" "nui" "lui" in Canton city and Hong Kong accent or Hoisan accent, then the character should be spelled as "cư/kư" "khư" "hư" "ngư" "ŧư" "txư" "tư" "nư" "lư" in the universal version

+

元音"ŭ"喺南寧話入面讀[ɿ],喺廣州音入面讀"i", 喺台山話入面讀"u"

+

Vowel "ŭ" is pronounced as [ɿ] in Namning accent, pronounced as "i" in Canton city accent and "u" in Hoisan accent

+

"it"用嚟表示喺廣州音入面發音係[it],但係喺其他粵語口音入面唔會變成[iɛt]嘅韻腹,例如「必bit」 「秩địt」

+

"it" is applied on those vowels which pronounced as [it] in Canton city accent but have no chance to be pronounced as [iɛt] in other accents, such as "必bit" and "秩địt".

+

「麵」嘅正寫係"mịn"

+

The spelling of "noodles" in Cantonese is "mịn"

+

疑問詞[tim˧˥]嘅正寫係"tỉm"

+

The spelling of questioning word [tim˧˥] is "tỉm".

+

"iu" "im" "in" "ip" "it" 組合嘅發音係[iu] [im] [in] [ip] [it]。佢哋可以用嚟表示發音或者串唔係漢越詞詞源嘅詞語,譬如話來自嘅英文嘅借詞「𨋢lip」「天拿水thin-nà sủi」,或者係借用漢字嚟表示詞語嘅發音但係字嘅意思同漢字本身嘅意思無關嘅字

+

The pronunciations of "iu" "im" "in" "ip" "it" combiniations are [iu] [im] [in] [ip] and [it]. They can be used to represent sounds and spell words without sino-cantonese origin. For example, the loanwords from English "lip" and "thin-nà sủi", or in case of using chinese characters to represent sounds or a word but the meaning of the character is not linked with its origin meaning.

+

ê同ây用嚟表示一樣嘅發音[ɐi],ê用嚟拼寫漢字詞源嘅字同有明確嘅詞源喺古音入面讀呢個韻腹嘅詞語,ây用嚟拼寫語氣詞、少部分嘅非漢字嘅詞語或者係漢字但係係由唔規則嘅音變產生出呢個讀音嘅字,譬如話「哎ấy」「嚟lầy」「睇thẩy」「咪mây」「咪mậy」「米mây」「呢nây」「矮ẩy」「曳dây」「喺hẩy」「使sẩy」「费phấy」「沸phấy」

+

"ê" and "ây" are used to represent the same pronunciation [ɐi]. "ê" is used to spell sino-cantonese words and the words with clear etymology that pronounce this vowel in ancient time. "ây" is used to spell few non-sino-cantonese words and sino-cantonese words with irregular sound change, such as"哎ấy" "嚟lầy" "睇thẩy" "咪mây" "咪mậy" "米mây" "呢nây" "矮ẩy" "曳dây" "喺hẩy" "使sẩy" "费phấy" "沸phấy"

+

y同ơi用嚟表示一樣嘅發音[ɪi] 一係 [ei],y用嚟拼寫有明確嘅詞源讀呢個韻腹嘅漢越詞或者純越詞,ơi用嚟拼寫語氣詞、冇韻首嘅單獨嘅音節譬如話「誒ợi」,同少部分嘅非漢字嘅詞語或者係漢字但係由不規則音變產生出嘅讀音,譬如話「嚟lời」,同用嚟表示外來語入面嘅呢個韻腹,譬如話「士多啤梨sị-đo-be-lởi」

+

"y" and "ơi" are used to represent the same pronunciation [ɪi] or [ei]. "y" is used to spell native cantonese words and sino-cantonese words with clear etymology that should pronounce this vowel. "ơi" is used to spell the vowel without consonant, such as 「誒ợi」, and few native cantonese words and sino-cantonese words with irregular sound change, such as "嚟lời", and representing this vowel in borrowed words, such as "士多啤梨sị-to-be-lởi"

+

"oai"用嚟表示語氣詞「㗏」[ʔwaːj]

+

"oai" is used to spell the interjection「㗏」[ʔwaːj]

+

"uấy"同"uẩy"用嚟表示語氣詞「喂」[ʔwəj]

+

"uấy" and "uẩy" are used to spell the interjection "喂" [ʔwəj]

+

如果一個單獨嘅廣州話[ji]音嘅音節聲調係第1、2、3聲調,咁要寫成"y" "ỷ" or "ý"

+

If a [ji] sound Canton city accent syllable has first, second, or third tone, then it should be spelled as "y" "ỷ" or "ý"

+

如果一個單獨嘅廣州話[ji]音嘅音節聲調係第4、5、6聲調,前邊都冇"nh" "ng" 嘅韻首,咁要寫成"dì" "dĩ" or "dị"

+

If a [ji] sound Canton city accent syllable has forth, fifth, or sixth tone, and without a "nh" or "ng" consonant at the front, then it should be spelled as "dì" "dĩ" or "dị"

+

如果一個單獨嘅uy音嘅音節聲調係第4、5、6聲調,咁要寫"vỳ" "vỹ" 一係 "vỵ",

+

If a "uy" sound syllable has forth, fifth, or sixth tone, it should be spelled as "vỳ" "vỹ" or "vỵ",

+

如果一個單獨嘅uy音節嘅音節聲調係第1、2、3聲調,咁要寫成uy,譬如話「威uy」「委ủy」「畏úy」

+

If a "uy" sound syllable has first, second, or third tone, it should be spelled as "uy", such as "威uy" "委ủy" "畏úy"

+

如果一個單獨嘅[jʊŋ] 音節廣州音音節聲調係第1、2、3聲調,咁要寫成yung,譬如話「翁yung」「擁yủng」「雍yúng」

+

If a [jʊŋ] sound Canton city accent syllable has first, second, or third tone, it should be spelled as "yung", such as "翁yung" "擁yủng" "雍yúng"

+

如果一個單獨嘅[jʊk] 音節廣州音音節聲調係第1聲調,咁要寫成yuc,譬如話「郁yuc」

+

If a [jʊk] sound Canton city accent syllable has first tone, it should be spelled as "yuc", such as "郁yuc"

+

如果一個單獨嘅[jɪŋ] 音節廣州音音節聲調係第1、2、3聲調,咁要寫成inh,譬如話「英inh」「影ỉnh」「應ính」

+

If a [jɪŋ] sound Canton city accent syllable has first, second, or third tone, it should be spelled as "inh", such as "英inh" "影ỉnh" "應ính"

+

如果一個單獨嘅[jɪk] 音節廣州音音節聲調係第1聲調,咁要寫成ich,譬如話「益ich」

+

If a [jɪk] sound Canton city accent syllable has first, second, or third tone, it should be spelled as "ich", such as "益ich"

+

如果一個單獨嘅[jœŋ] 音節廣州音音節聲調係第1、2、3聲調,咁要寫成ương,譬如話「央ương」「炴ưởng」「怏ưởng」

+

If a [jœŋ] sound Canton city accent syllable has first tone, it should be spelled as "ương", such as "央ương" "炴ưởng" "怏ưởng"

+

如果一個單獨嘅[jœk] 音節廣州音音節聲調係第3聲調,咁要寫成ươc,譬如話「約ước」

+

If a [jœk] sound Canton city accent syllable has third tone, it should be spelled as "ươc", such as "約ước"

+

如果一個單獨嘅[jit] [jin] [jim]音節廣州音音節聲調係第1、2、3聲調,咁韻首寫成y,譬如話「噎yết」「煙yên」「腌yêm」

+

If a [jit] [jin] [jim] sound Canton city accent syllable has first, second, or third tone, the consonant should be written as "y", such as "噎yết" "煙yên" "腌yêm"

+

如果一個單獨嘅[jɐt] [jɐn] [jɐm]音節廣州音音節聲調係第1、2、3聲調,咁韻首寫成y,譬如話「一yât」「恩yân」「音yâm」

+

If a [jɐt] [jɐn] [jɐm] sound Canton city accent syllable has first, second, or third tone, the consonant should be written as "y", such as "一yât" "恩yân" "音yâm"

+

如果[ei] [ɐi] 嘅元音前邊冇韻首單獨出現,咁要寫"ơi" "ấy",譬如話「誒ợi」「哎ấy」

+

If [ei] and [ɐi] vowels appear without a consonant before, it should be spelled as "ơi" "ay", such as "誒ợi" "哎ấy"

+

如果[ə]嘅元音後邊冇韻尾單獨出現,咁要寫"ơ",譬如話「㗎cớ」「嘞lớ」

+

If [ə] vowels appear without a consonant behind, the vowel should be spelled as "ơ", such as "㗎cớ" "嘞lớ"

+

使用正寫"iêng" "eng"同韻腹"ênh"嘅音位一樣,正寫"iêc" "ek"同韻腹"êc"嘅音位一樣

+

The spelling "iêng" "eng" has the same phoneme with "ênh" sound, the spelling "iêc" "ek" has the same phoneme with "êc" sound

+

使用正寫"iong"同韻腹"ương"嘅音位一樣,正寫"iok"同韻腹"ươc"嘅音位一樣

+

The spelling "iong" has the same phoneme with "ương" sound, the spelling "iok" has the same phoneme with "ươc" sound

+

如果一個韻腹喺廣州話入面嘅發音係[yn],喺台山話入面嘅發音係[un],咁呢個韻腹用"uyên"表示,例如「聯luyền」

+

If a vowel is pronounced as [yn] in Canton city dialect,and pronounced as [un] in Hoisan dialect,This vowel will be written as "uyên", such as "聯luyền"

+

如果一個字嘅韻腹喺廣州話入面嘅發音係[yn]又係[ɵn],喺台山話入面嘅發音係[un],咁呢個韻腹用"ôn"表示,例如「孫ŧôn」

+

If a vowel of a word is pronounced as [yn] and [ɵn] in Canton city dialect,and pronounced as [uɔn] in Hoisan dialect,This vowel will be written as "ôn", such as "孫ŧôn"

+

如果一個韻腹喺廣州話入面嘅發音係[yn],喺台山話入面嘅發音係[uɔn],咁呢個韻腹用"uon"表示。

+

If a vowel is pronounced as [yn] in Canton city dialect,and pronounced as [uɔn] in Hoisan dialect,This vowel will be written as "uon", such as "團thuòn"

+

如果一個韻腹喺廣州話入面嘅發音係[yt],喺台山話入面嘅發音係[ut],咁呢個韻腹用"uyêt"表示,例如「説suyết」。

+

If a vowel is pronounced as [yn] in Canton city dialect,and pronounced as [un] in Hoisan dialect,This vowel will be written as "uyêt", such as "説suyết".

+

如果一個韻腹喺廣州話入面嘅發音係[yt],喺台山話入面嘅發音係[uɔt],咁呢個韻腹用"uot"表示,例如「脱thuót」。

+

If a vowel is pronounced as [yt] in Canton city dialect,and pronounced as [uɔt] in Hoisan dialect,This vowel will be written as "uot", such as "脱thuót"

+

如果一個韻腹喺廣州話入面嘅發音係[ɐn],喺台山話入面嘅發音係[un],咁呢個韻腹用"ăn"表示。例如「文mằn」

+

If a vowel is pronounced as [ɐn] in Canton city dialect,and pronounced as [un] in Hoisan dialect,This vowel will be written as "ăn", such as "文mằn"

+

如果一個韻腹喺廣州話入面嘅發音係[un],喺台山話入面嘅發音係[uɔn],咁呢個韻腹用"un"表示。例如「門mùn」

+

If a vowel is pronounced as [un] in Canton city dialect,and pronounced as [uɔn] in Hoisan dialect,This vowel will be written as "on", such as "門mòn"

+

如果一個韻腹喺廣州話入面嘅發音係[ɐt],喺台山話入面嘅發音係[ut],咁呢個韻腹用"ăt"表示。例如「不băt」

+

If a vowel is pronounced as [ɐt] in Canton city dialect,and pronounced as [ut] in Hoisan dialect,This vowel will be written as "ăt", such as "不băt"

+

如果一個韻腹喺廣州話入面嘅發音係[ut],喺台山話入面嘅發音係[uɔt],咁呢個韻腹用"ut"表示。例如「撥bụt」

+

If a vowel is pronounced as [ut] in Canton city dialect, and pronounced as [uɔt] in Hoisan dialect,This vowel will be written as "ot", such as "撥bọt"

+

如果一個音節嘅廣州音發音係[jyn],台山話發音又係[juɔn], 會有「uyên鴛」「duyên鳶」「uon冤」「uyển婉」「viền員袁」「duyền緣鉛」「huòn丸完」「viễn遠」「viện院」等等唔同嘅正寫

+

If a syllable is pronounced as [jyn] in Canton city accent and pronounced as [juɔn] in Hoisan accent, the spellings will be "uyên鴛" "duyên鳶" "uon冤" "uyển婉" "viền員袁" "duyền緣鉛" "huòn丸完" "viễn遠" "viện院" etc.

+

如果一個音節嘅廣州音發音係[jyt],台山話發音又係[juɔt], 會有「việt越粵」「duyệt閲悦」「uyết乙」「uót曰」「duật聿」等等唔同嘅正寫

+

If a syllable is pronounced as [jyt] in Canton city accent and pronounced as [juɔt] in Hoisan accent, the spellings will be "việt越粵" "duyệt閲悦" "uyết乙" "uót曰" "duật聿" etc.

+

"ơng"用嚟表示[əŋ],"ơc"用嚟表示[ək]

+

"ơng" represents [əŋ],"ơc" represents [ək]

+

"ơn"用嚟表示[ən]

+

"ơn" represents [ən]

+

"ưn"用嚟表示[yn],"ưt"用嚟表示[yt],用嚟串唔係"uyên" "uon" "uyêt" "uot"韻母起源嘅詞語同表示發音,例如「肥嘟嘟phỳ-tưt-tưt」「魚丸dừ-dửn」「海豚hỏi-thừn」

+

"ưn" represents [yn],"ưt" represents [yt]. They are used to spell the words without the origin of "uyên" "uon" "uyêt" or "uot" vowel combination, or indicate the sound, such as "肥嘟嘟phỳ-tưt-tưt" "魚丸dừ-dửn" and "海豚hỏi-thừn"

+

"uoi"用嚟表示[uɔi]

+

"uoi" represents [uɔi]

+

韻尾字母k同韻尾字母c ch嘅作用一樣

+

The end consonant letter "k" has the same effect as the end consonant letter "c" and "ch"

+

Tones 音調 Yâm-Điệu

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
tone nametone marktone valueexampletriggering keynumber mark
unvoiced flat陰平a˥ / ˥˧分phân/1
unvoiced rising陰上˧˥粉phẩnr2
unvoiced falling陰去á˧瞓phấns3
voiced flat陽平à˩ / ˨˩焚phầnf4
voiced rising陽上ã˩˧ / ˨˧奮phẫnx5
voiced entering陽去˨份phậnj6
high unvoiced entering高陰入a˥忽phât/1
low unvoiced entering低陰入á˧發pháts3
high voiced entering高陽入ả/ã˧˥甴țảtr/x2/5
low voiced entering低陽入˨佛phậtj6
+ +

+

Input of Specific Alphabet 特別字母嘅輸入 Đặc-Biệt Țụ̆-Mỗ ké Sư-Nhập

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CharacterKey pressedSample inputSample output
ăawttacwțăc則
âaayatayât一
êeeleeclêc叻
iê-ii-thiinthiên天
uyêuyyquyynquyên捐
ôooddoođô都
ơowcowcơ㗎
ưuwsuwđo多
ŭiisiisŭ師
ŧssssamŧam三
țttttiițŭ資
đddddođo多
+ +

Tone Rules 音調規則 Yâm-Điệu Khuy-Țăc

+

對應粵拼嘅第一聲唔使打,第二聲打r,第三聲打s,第四聲打f,第五聲打x,第六聲打j

+

tone 1 for nothing, tone 2 = r, tone 3 =s, tone 4 = f, tone 5 = x, tone 6 = j

+ +

Tonal Diacritics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tone MarksKeys added to syllableSample inputSample output +
țiêm (first tone)caucau高
đẩu (second tone)rhaurhảu好 +
khóng (third tone)shuwshứ去 +
xầm (forth tone)fxafxà茶 +
ngõng (fifth tone)xmaxmã馬 +
hạ (sixth tone)jheejhệ係 +
+ +

Examples 舉例 Cử-Lệ:

+

ar > ả, as > á, af > à, ax > ã, aj > ạ

+

譬如話『兩』嘅國語字係"lưỡng", 咁輸入內容就係"luongwx"

+

+

Punctuation and Capitalization 標點同大小寫 Biêu-Điểm thùng Đại-Ŧiểu-Ŧẻ

+

A space " " should be added betweem each words or between each syllable of cantonese origin or sino-cantonese origin words.

+

每個詞語或者每個粵語詞語或者漢粵詞嘅每個音節之間應該添加空格" "

+

The first letter in one sentence should be capitalized

+

每個句子嘅第一個字母要大寫

+

The first letter in a proper noun such as the name of a particular person and place should be capitalized

+

專有名詞譬如話人同地方嘅第一個字母要大寫

+

The first letter in each syllable of a Cantonese origin or Sino-cantonese origin proper noun such as the name of a person and a place should be capitalized

+

粵語或者漢粵詞詞源嘅專有名詞嘅每一個音節嘅第一個字母要大寫

+

In an acronym, the first letter of each syllable should be capitalized, and a period "." can be added behind each capitalized letter

+

喺縮寫入面,每個音節嘅第一個字母要大寫,每個大寫字母嘅後邊可以添埋一個句號"."

+

In a multi-syllable single word, the space " " should be added between each syllable.

+

喺一個多音字單詞入面,每個音節之間應該加入一個連字符"-"

+

In a multi-syllable combined word or a Cantonese origin or Sino-cantonese origin word, the hyphen "-" can be added between each syllable for avoid confusion

+

喺一個多音節嘅組合詞或者粵語詞或者漢粵詞嘅每一個音節之間,可以加入一個連字符"-"避免撈亂

+

Other punctuation works similar with punctuations in English and Vietnamese

+

「等等đẳng đẳng」嘅縮寫係"đ.đ."

+

The acronym of "đẳng đẳng" is "đ.đ."

+

「云云vần vần」嘅縮寫係"v.v."

+

The acronym of "vần vần" is "v.v."

+

"&"符號象徵「同thùng」

+

The ampersand "&" symbolizes "同thùng".

+

有三個字或四個字嘅男性姓名嘅第二個字「文mằn」字嘅縮寫係"M."

+

The acronym of the second syllable of a male name with 3 syllables or 4 syllables "文mằn" is "M."

+

如果某一個音節歷史上由兩個音節演化然後合併,咁喺呢個音節嘅韻首同韻腹中間可以加入一個撇"’",譬如話自"mât-dẽ乜嘢"變成嘅"m’e咩" 自"nhị-sập二十"變成嘅"nh’ạ廿" 自"ŧam-sập三十"變成嘅"ŧ’a卅" 自"m̀-hệ唔係"變成嘅"m’ệ咪"

+

If one syllable was historically evolved from the merging of two syllables, an apostrophe can be inserted between the front consonant and the vowel. For example, "mât-yẽ乜嘢" evolved to "m’e咩" "nhị-sập二十" evolved to "nh’ạ廿" "ŧam-sập三十" evolved to "ŧ’a卅" "m̀-hệ唔係" evolved to "m’ệ咪"

+

其他標點嘅作用同英文同越南文類似

+

Other uses of punctuation are similar with English and Vietnamese

+

+ + +

雙擊音調鍵同特殊轉化鍵,取消轉化,變返原本嘅拼寫

+

doubletaping leads to generate original letters:

+

+ If more than one tone marking key is pressed, the last one will be used. For example, typing asf will return "à". To write a tone marking key as a normal character, one has to press it twice: her becomes hẻ, while herr becomes her. +

+

使用Z鍵取消音調轉換

+

tap Z key to remove tonations

+ + + Dictionary for the script of National Language universal version Quóc Ngữ Țụ̆大粤國音字匯-粵語國語字字典總合通用版 +

+ Dictionary for the script of National Language for Hong Kong and Canton city accent Quóc Dữ Chị粵語國語字字典香港同廣州音 +

+ Dictionary for the script of National Language for Hoisanese accent Koc Ngũi Tụ台山話國語字字典 +

+ Dictionary for the script of National Language for Yamchow accent Quóc Dĩ Chì粵語國語字字典欽州音 +

+ Dictionary for the script of National Language for Namning accent Quóc Dữ Chị粵語國語字字典南寧音 +

+

粵語國語字通用版本係一種收納咗多種粵語口音發音嘅粵語文字,粵語國語字通用版本嘅使用同粵語國語字嘅廣州音、台山音、南寧音、欽州音等等粵語口音嘅版本嘅使用之間唔衝突

+

Việt-Ngữ Quóc-Ngữ-Țụ̆ thung-dụng bản-bủn hệ yât chủng sưu-nạp chỏ đo-chủng Việt-Ngữ hẩu-yâm ké Việt-Ngữ mằn-țụ̆, Việt-Ngữ Quóc-Ngữ-Țụ̆ thung-dụng bản-bủn ké sŭ̉-dụng thùng Việt-Ngữ Quóc-Ngữ-Țụ̆ ké Quỏng-Châu yâm, Thòi-San yâm, Nàm-Nình yâm, Hâm-Châu yâm đ.đ. Việt-Ngữ hẩu-yâm ké bản-bủn ké sŭ̉-dụng m̀ xung-đặt

+

The universal version of Script of Nation Language of Cantonese is a Cantonese script gathered various of Cantonese accents and dialects, the uses of the universal version of Script of Nation Language of Cantonese is not conflict with the use of the Script of Nation Language of Cantonese for cantonese accents, such as Hong Kong and Canton city accent, Hoisan accent, Namning accent and Yamchow accent.

+

+

範文:南國山河

+

Nàm Quóc San Hò

+

南國山河南帝居

+

Nàm Quóc San Hò Nàm Đế Cư

+

截然定分在天書

+

Țiệt Nhiền Định Phân Țọi Thiên Sư

+

如何逆虜來侵犯

+

Nhừ Hò Ngịch Lỗ Lòi Txâm Phạm

+

汝等行看取敗虛

+

Nhữ Đẳng Hành Hón Txử Bại Hư

+ +

© cathaylab

\ No newline at end of file From fb3f987851dd8c0e2369a027cd6945d1f28eeaa0 Mon Sep 17 00:00:00 2001 From: Keyman Build Server Date: Fri, 8 May 2026 08:37:53 -0500 Subject: [PATCH 7/9] auto: Keyboard help deployment --- keyboard/assyrian_audo/1.0/assyrian_audo.php | 24 ++++++++++++++++++ .../assyrian_audo/1.0/phone_longpress.png | Bin 0 -> 17026 bytes 2 files changed, 24 insertions(+) create mode 100644 keyboard/assyrian_audo/1.0/assyrian_audo.php create mode 100644 keyboard/assyrian_audo/1.0/phone_longpress.png diff --git a/keyboard/assyrian_audo/1.0/assyrian_audo.php b/keyboard/assyrian_audo/1.0/assyrian_audo.php new file mode 100644 index 000000000..22d9c44b8 --- /dev/null +++ b/keyboard/assyrian_audo/1.0/assyrian_audo.php @@ -0,0 +1,24 @@ + + +

+ Assyrian Audo keyboard is designed for the Assyrian language. This keyboard is a non-phonetic layout, and it is packaged with the Ramsina font. +

+ +

Desktop/Tablet Keyboard Layout

+
+
+ +

Mobile/Phone Keyboard Layout

+

Due to the size and number of keys, some characters are hidden in the long press. + Press and hold on the key with a little dot on the top right to reveal and use them.

+ +
+
+ +

Longpress

+

On mobile phone, keys with a little dot on the top right can be pressed and held for more keys.

+

Longpress state

diff --git a/keyboard/assyrian_audo/1.0/phone_longpress.png b/keyboard/assyrian_audo/1.0/phone_longpress.png new file mode 100644 index 0000000000000000000000000000000000000000..56c7ff9ce9c201f0520f6f1b484e5f66bd14d778 GIT binary patch literal 17026 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

x=B`eGqNW-1osb% zbYk1C)th1I*ypB+PM2q%7t{q79a^dj3_LxT>I<>%e!%#XkG#)@Z(C1%rz zaJ|7YTulrLmat7Ux_8I)9F~^OYDtlNX{l-j_(^gROfJ8T*#CoxL1FIper+wnThFOd zDIt@Y09^w1DO`7h&?NvtkSY4Rq?VfUF1OWXlV^&{6-#lP32jF}y`(=(@zqS6ISj^b z!hsmk`QW3jH%Z_f=H!*h3}zX~`d-;jfg19aU)DB}o`_uOO?VZds`@7W{+(t}XX}@q zzz@M;@nLy}n>@TT$A4l*52%!ey=0_XEX6*EWp0(v!%6uoMdi#g!+&IQ$Cz*ZoqW*ci zBsUSJ#B2A2%>2fmja`(^Db~8DZ2KbLLdeBS2ieSNf1e?X67>djuD$FWm~If8=7<-c zo(oz$321)QhoJ%Y?ffZE8AKH?I;3MQ_G$Ek=~xY2Ucjomrx7)j#Zg*j1e+p1S?hk0 zdu7xJP1DkkLR=!zgN51w)$u&Ffj}Fc@=GHpN0|NT?_PEF2qb+3-ku-j7ogj*?*(Fgr z$oe>Y7fhMj+vg0uBN6&xVD({S;|f_cGnh$2^$SuE^rzqSF^pH|zNmOF2CX_6eGUnU z&$C1{eaibe?f!P4yW?2`Zr*of=p!*Q-B6?tq(_BP{XjZ2T(7MsxfyYUiy^?Y&~~`rF5Y=VPwzX3?%NUk zelY{D_o{vQ(s|d^>njq%5l0ZZgDoh3)hhbHkM%IEURv5OYeNK*BnBexE0k!baC!(M zm~rAWvuX`r?Z7_1<&?>Y#oes4dL>u%B1#HyAwvfh+$%GccCi)Tp>Iu3roAKpv3`dM zwgZk4zrO#gSGWJS!V~`M3MVfDC8d?S-iz}`(_}Q6lj>8(oJ10XCO-bltF;l#>%I=H zv2r^G4hmrTdoF-)(zxey0#s_Y0qt%W&FQ8i!N#)%t4kH?XP_j-|C29_&BON3jZQy0 zoBF@|%#PC13O*u$n6qCWP(_zj8g>m{V+`l-k(i#ZM5P%0@qpeoy9tyo5p@E-yi~7a zLm`)Vx}s4lIg`Jx#M>d$csk3*218wwZn^Y%z;(yM$u;izO)k%D9=5n8X<9gM*F?lX zIKFp2`JQZH(~)b#C{c3j;aft)NU6$C1Q4t+yQ;`{3=%y6_?fGVir>VV{RuQxIUL6D z+%r*6=Z-f>IxJ@Bg>~B0VRuSupimgZrm`h46P&v(cV2$T717mIf*9msP}Bm$o;6C8 z>yDOvo<5LCIF2%~3L^%SHfQ|EKp|WV2P(wENktMA<@i{%POlwh$s0ZX(mF`6DO) zdIfHVA#e^33WZ6ohNg~zL8e?@?B7V2e94&6ed7&2=Y)*nr0di=8}@g~8 Date: Mon, 11 May 2026 09:40:19 +0200 Subject: [PATCH 8/9] fix: parse knowledge base article headings new line and tweak breadcrumbs The KB article was not being split correctly by line so the entire article was being reproduced in the title tag, and this also resulted in repeated headings. At the same time, tweak the layout of the page to put the navigation at the end of the article, add the KMKBxxxx id to the title, and improve the breadcrumb navigation for KB articles. Fixes: #2503 Test-bot: skip --- _includes/includes/template.php | 9 +++++++++ knowledge-base/index.php | 27 +++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/_includes/includes/template.php b/_includes/includes/template.php index 1bbadc261..9babb11de 100644 --- a/_includes/includes/template.php +++ b/_includes/includes/template.php @@ -100,10 +100,19 @@ function head($args=[]){ } function write_breadcrumbs(){ + global $kb_title; $request_uri = explode("?",$_SERVER["REQUEST_URI"]); $crumbs = explode("/",$request_uri[0]); $crumbcount = count($crumbs); $crumbtrail = ''; + if(sizeof($crumbs) > 1 && $crumbs[1] == 'knowledge-base') { + if(isset($_REQUEST['id'])) { + // KB articles are served by a single file, so we need to look for the + // global variable $kb_title to get the appropriate title, which is set + // in /knowledge-base/index.php. + $crumbs[2] = isset($kb_title) ? $kb_title : ''; + } + } for($i=1; $i<$crumbcount; $i++){ $crumb = ucfirst(str_replace(array(".php","_","-"),array(""," "," "),$crumbs[$i]) . ' '); diff --git a/knowledge-base/index.php b/knowledge-base/index.php index cf690216b..b36eca9e2 100644 --- a/knowledge-base/index.php +++ b/knowledge-base/index.php @@ -7,7 +7,7 @@ use function com\keyman\help\kb\link_from_id; $id = null; - $title = 'Knowledge Base index'; + $kb_title = 'Knowledge Base index'; if(isset($_REQUEST['id'])) { $id = $_REQUEST['id']; @@ -24,12 +24,12 @@ } else { // We test the first line of the file for a title. - $text = explode('\n', $kb); + $text = explode("\n", $kb); if(count($text) > 0) { if(substr($text[0], 0, 2) == '# ') { - $title = trim(substr($text[0], 2)); + $kb_title = trim(substr($text[0], 2)) . sprintf(" (KMKB%04.4d)", intval($id)); } else { - $title = $filename; + $kb_title = $filename; } } } @@ -37,25 +37,28 @@ // Required head([ - 'title' =>'Keyman Support | ' . $title, + 'title' =>'Keyman Support | ' . $kb_title, 'css' => ['template.css','prism.css', 'kb-search.css'], 'showMenu' => true, 'index' => false ]); - echo "

Knowledge Base index

"; if($id) { - echo "

"; + $ParsedownAndAlerts = new \Keyman\Site\Common\GFMAlerts(); + echo $ParsedownAndAlerts->text($kb); + + echo "


"; + echo "Knowledge Base index   |   "; $pid = intval($id,10) - 1; - if($pid > 0) echo "< Previous article   "; + if($pid > 0) echo "< Previous article   |   "; $nid = intval($id,10) + 1; if(file_exists(filename_from_id($nid))) { echo "Next article > "; } - echo "


"; - $ParsedownAndAlerts = new \Keyman\Site\Common\GFMAlerts(); - echo $ParsedownAndAlerts->text($kb); - } else { + echo "

"; + + } else { $query = trim($_GET['q'] ?? ''); + echo "

Knowledge Base index

"; echo "