Skip to content

Commit 6bb59b0

Browse files
authored
Update dongguk.js
Fix Yale Romanization
1 parent 253ca82 commit 6bb59b0

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

dongguk.js

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ if (!音韻地位) return [
2525

2626
const is推導例外 = 選項.推導原書部分例外讀音;
2727
const is推導現代 = 選項.推導現代讀音;
28+
const is耶魯轉寫 = 選項.注音方案 === '耶魯轉寫';
2829

2930
const 轉寫 = {
3031
'耶魯轉寫': {
@@ -35,11 +36,11 @@ const 轉寫 = {
3536
: 's',   : 'ss',   : 'z',
3637
: 'q', : 'h', : 'hh',   : '',
3738

38-
: 'o', : 'oy', : 'wo', : 'woy', : 'yo',
39-
: 'u', : 'uy', : 'wu', : 'wuy', : 'yu', : 'yuy',
40-
: 'i',
41-
: 'a', : 'ay', : 'wa', : 'way', : 'ya', : 'yay',
42-
: 'e', : 'ey', : 'we', : 'wey', : 'ye', : 'yey', : 'yuye', : 'yuyey',
39+
: 'o', : 'oy',     : 'wo', : 'woy', : 'ywo',
40+
: 'u', : 'uy',     : 'wu', : 'wuy', : 'ywu', : 'ywuy',
41+
: 'i',       // ᅱ: 'wi',
42+
: 'a', : 'ay', : 'ya', : 'yay', : 'wa', : 'way',
43+
: 'e', : 'ey', : 'ye', : 'yey', : 'we', : 'wey', : 'ywe', : 'ywey',
4344

4445
: 'ng', : 'k', : is推導現代 ? 'ng' : '',
4546
: 'n', : 'lq', : 'l',
@@ -61,6 +62,7 @@ const 轉寫 = {
6162
};
6263

6364
function 音變(音節) {
65+
const hasᅵ = 'ᅵᅭᅣᅲᅧᅨ'.includes(音節.中聲);
6466
function 替換(key, rule, condition = true) {
6567
if (condition) Object.entries(rule).forEach(([k, v]) => {
6668
音節[key] = 音節[key].replace(k, v);
@@ -74,8 +76,8 @@ function 音變(音節) {
7476
替換('中聲', { : 'ᅡ', : 'ᅢ', : 'ᅲ', : 'ᅧ', : 'ᅨ' });
7577
替換('終聲', { : '', : '', : 'ᆼ', : 'ᆯ' });
7678
替換('初聲', { : 'ᄂ' }, 選項.應用頭音法則);
77-
替換('初聲', { : 'ᄋ' }, 'ᅵᅭᅣᅲᅧᅨ'.includes(音節.中聲) && 選項.應用頭音法則);
78-
替換('初聲', { : 'ᄌ', : 'ᄎ' }, 'ᅵᅭᅣᅲᅧᅨ'.includes(音節.中聲));
79+
替換('初聲', { : 'ᄋ' }, hasᅵ && 選項.應用頭音法則);
80+
替換('初聲', { : 'ᄌ', : 'ᄎ' }, hasᅵ);
7981
替換('中聲', { : 'ᅩ', : 'ᅡ', : 'ᅮ', : 'ᅥ', : 'ᅦ' }, 'ᄌᄎᄉ'.includes(音節.初聲));
8082
替換('中聲', { : 'ᅮ' }, 'ᄇᄆ'.includes(音節.初聲));
8183
替換('中聲', { : 'ᅵ' }, !'ᄒᄋ'.includes(音節.初聲));
@@ -260,13 +262,18 @@ function 聲調() {
260262
}
261263
return {
262264
諺文: { : '', : '〯', : '〮', : '〮' },
263-
耶魯轉寫: { : '', : '̌', : '́', : '́' },
265+
耶魯轉寫: { : '̀', : '̌', : '́', : '́' },
264266
}[選項.注音方案][音韻地位.];
265267
}
266268

267269
音節 = 音節.初聲 + 音節.中聲 + 音節.終聲;
268-
if (選項.注音方案 !== '諺文') Object.entries(轉寫[選項.注音方案]).forEach(([k, v]) => {
269-
音節 = 音節.replace(k, v);
270-
});
271-
if (選項.注音方案 === '耶魯轉寫') return 音節.replace(/.*[aeiou]/, "$&" + 聲調());
270+
if (選項.注音方案 !== '諺文') Object.entries(轉寫[選項.注音方案]).forEach(([k, v]) => { 音節 = 音節.replace(k, v); });
271+
if (選項.注音方案 === '耶魯轉寫') {
272+
if (is推導現代) {
273+
音節 = 音節.replace('wo', 'o');
274+
if (is`脣音` || 音節.includes('ywu')) 音節 = 音節.replace('wu', 'u');
275+
音節 = 音節.replace('wuy', 'wi');
276+
}
277+
return 音節.replace(/.*[aeiou]/, "$&" + 聲調());
278+
}
272279
return 音節 + 聲調();

0 commit comments

Comments
 (0)