@@ -25,6 +25,7 @@ if (!音韻地位) return [
2525
2626const is推導例外 = 選項 . 推導原書部分例外讀音 ;
2727const is推導現代 = 選項 . 推導現代讀音 ;
28+ const is耶魯轉寫 = 選項 . 注音方案 === '耶魯轉寫' ;
2829
2930const 轉寫 = {
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
6364function 音變 ( 音節 ) {
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 ( / .* [ a e i o u ] / , "$&" + 聲調 ( ) ) ;
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 ( / .* [ a e i o u ] / , "$&" + 聲調 ( ) ) ;
278+ }
272279return 音節 + 聲調 ( ) ;
0 commit comments