|
| 1 | +/* 高本漢擬音 |
| 2 | + * |
| 3 | + * 擬音來自高本漢後期著作: |
| 4 | + * |
| 5 | + * - Grammata Serica. BMFEA, 1940, 12: 1–471. |
| 6 | + * - Compendium of Phonetics in Ancient and Archaic Chinese. BMFEA, 1954, 26: 211–367. |
| 7 | + * - Grammata Serica Recensa. BMFEA, 1957, 29: 1–332. |
| 8 | + * - 中國聲韻學大綱. 張洪年, 譯. 香港: 香港中文大學研究院中國語言文學會, 1968. (臺北: 中華叢書編審委員會, 1972) |
| 9 | + * - 中上古漢語音韻綱要. 聶鴻音, 譯. 濟南: 齊魯書社, 1987. |
| 10 | + * - 漢文典(修訂本). 潘悟雲, 楊劍橋, 陳重業, 張洪明, 編譯. 上海: 上海辭書出版社, 1997. |
| 11 | + * |
| 12 | + * 以及後來學者的整理: |
| 13 | + * |
| 14 | + * - Samuel E. Martin. The Phonemes of Ancient Chinese. JAOS, 1953, 73 (2): Supplement. |
| 15 | + * - 李榮. 高本漢構擬的切韵音. 切韵音系. 北京: 科學出版社, 1956: 104–106. (黃笑山, 校訂. 北京: 商務印書館, 2020) |
| 16 | + * - 李方桂. 中古音系. 上古音研究. 北京: 商務印書館, 1980: 5–9. |
| 17 | + * - 潘悟雲. 諸家《切韻》聲類擬音比較表, 諸家《切韻》韻母擬音比較表. 漢語歷史音韻學. 上海: 上海教育出版社, 2000: 59–61, 83–88. |
| 18 | + * |
| 19 | + * 這些後期著作與高本漢早期的 Études sur la phonologie chinoise(《中國音韻學研究》)相比, |
| 20 | + * 不僅個別聲韻母的擬音作了改動,所採用的音標字母、介音的拼寫風格也完全不同。 |
| 21 | + * 再考慮到今天引用高本漢擬音一般是引用其後期擬音,因此本方案暫不收錄其早期擬音。 |
| 22 | + * |
| 23 | + * 音標提供 3 種風格: |
| 24 | + * |
| 25 | + * - 原書音標:高本漢後期著作採用的拉丁字母音標 |
| 26 | + * - 國際音標(原貌):《中國音韻學研究》中譯本風格(但原書 ɡ 作 g,不採用) |
| 27 | + * - 國際音標(通用):現在的中國通用音標符號(即比標準國際音標多 ȶ、ȡ、ȵ) |
| 28 | + * |
| 29 | + * 聲調提供 3 種風格: |
| 30 | + * |
| 31 | + * - 不標 |
| 32 | + * - 平ˉ 上ˊ 去ˋ:Grammata Serica 和 Compendium 的標法 |
| 33 | + * - 上꞉ 去˗:Grammata Serica Recensa 的標法 |
| 34 | + * |
| 35 | + * @author unt |
| 36 | + */ |
| 37 | + |
| 38 | +const is = (...x) => 音韻地位.屬於(...x); |
| 39 | +const when = (...x) => 音韻地位.判斷(...x); |
| 40 | + |
| 41 | +const 音標字典 = { |
| 42 | + '原書音標': { |
| 43 | + ʰ: 'ʼ', ʱ: 'ʼ', |
| 44 | + ʔ: 'ꞏ', ɡ: 'g', ŋ: 'ng', |
| 45 | + ȶ: 't̑', ȡ: 'd̑', ȵ: 'ń', // 上加弧線是瑞典方言字母表腭化的一種方式,不是揚抑符 |
| 46 | + ɕ: 'ṣ', ʑ: 'ẓ', |
| 47 | + ʂ: 'ś', ʐ: 'ź', |
| 48 | + x: 'χ', ɣ: 'γ', |
| 49 | + |
| 50 | + ă: 'ă', ɑ̆: 'ậ', ĕ: 'ĕ', |
| 51 | + ɛ: 'ä', ɔ: 'å', |
| 52 | + // 央次低元音原書作“ɒ”形,實際上是 ɐ 的斜體,不是很多人引用成的 ɒ。這個符號來自瑞典方言字母 |
| 53 | + æ: 'ɛ', ɐ: 選項.央次低元音?.slice(0, 1) || 'ɐ', |
| 54 | + ɑ: 'â', |
| 55 | + }, |
| 56 | + '國際音標(原貌)': { |
| 57 | + ʰ: 'ʻ', ʱ: 'ʻ', ʔ: 'ˀ', // ɡ: 'g', |
| 58 | + tʂ: 'ʈʂ', dʐ: 'ɖʐ', |
| 59 | + tɕ: 'ȶɕ', dʑ: 'ȡʑ', |
| 60 | + }, |
| 61 | + '國際音標(通用)': { |
| 62 | + ʱ: 選項.濁送氣 || 'ʰ', |
| 63 | + }, |
| 64 | +}; |
| 65 | + |
| 66 | +if (!音韻地位) return [ |
| 67 | + ['音標體系', [3].concat(Object.keys(音標字典))], |
| 68 | + ['聲調記號', [3, '不標', '平ˉ 上ˊ 去ˋ', '上꞉ 去˗']], |
| 69 | + ['央次低元音', 選項.音標體系?.includes('原書') ? [1, 'ɐ(準確)', 'ɒ(流行但不準確)'] : null], |
| 70 | + ['濁送氣', 選項.音標體系?.includes('通用') ? [1, 'ʰ', 'ʱ'] : null], |
| 71 | +]; |
| 72 | + |
| 73 | +function get聲母() { |
| 74 | + let 聲母 = { |
| 75 | + 幫: 'p', 滂: 'pʰ', 並: 'bʱ', 明: 'm', |
| 76 | + 端: 't', 透: 'tʰ', 定: 'dʱ', 泥: 'n', 來: 'l', |
| 77 | + 知: 'ȶ', 徹: 'ȶʰ', 澄: 'ȡʱ', 孃: 'ȵ', |
| 78 | + 見: 'k', 溪: 'kʰ', 羣: 'ɡʱ', 疑: 'ŋ', |
| 79 | + 影: 'ʔ', 曉: 'x', 匣: 'ɣ', 以: '', |
| 80 | + 精: 'ts', 清: 'tsʰ', 從: 'dzʱ', 心: 's', 邪: 'z', |
| 81 | + 莊: 'tʂ', 初: 'tʂʰ', 崇: 'dʐʱ', 生: 'ʂ', 俟: 'dʐʱ', |
| 82 | + 章: 'tɕ', 昌: 'tɕʰ', 船: 'dʑʱ', 書: 'ɕ', 常: 'ʑ', 日: 'ȵʑ', 云: 'j', |
| 83 | + // 注意云以、常船是顛倒的,俟同崇 |
| 84 | + }[音韻地位.母]; |
| 85 | + return 聲母; |
| 86 | +} |
| 87 | + |
| 88 | +function get韻母() { |
| 89 | + const 韻 = { |
| 90 | + 文: '欣', 魂: '痕', 灰: '咍', 凡: '嚴', |
| 91 | + 之: '脂', 夬: '佳', // 這兩對高本漢無法找到區分方法 |
| 92 | + }[音韻地位.韻] ?? 音韻地位.韻; |
| 93 | + const 元音表 = { |
| 94 | + // 三等的 ə、o 暫加短音符以便與一等區分,之後移除 |
| 95 | + i: '脂 ', ï: ' ', u: '虞東', |
| 96 | + ĕ: ' 眞幽 ', ə̆: ' 蒸 欣 侵', ŏ: '魚鍾', e̯i: '微', ə̯̆u: '尤', |
| 97 | + e: ' 青齊先蕭添', ə: ' 登 痕 ', o: '模冬', ie̯: '支', ə̯u: '侯', |
| 98 | + ɛ: ' 清祭仙宵鹽', ɐ: ' 庚廢元 嚴', ɔ: ' 江', |
| 99 | + æ: ' 耕 臻 ', |
| 100 | + ă: ' 皆山 咸', ɑ̆: ' 咍 覃', |
| 101 | + a: '麻陽佳刪肴銜', ɑ: '歌唐泰寒豪談', |
| 102 | + }; |
| 103 | + const 韻尾列表 = is`舒聲` ? ['', ...'ŋinum'] : [...' k t p']; |
| 104 | + |
| 105 | + let 韻核 = Object.keys(元音表).find(e => 元音表[e].includes(韻)); |
| 106 | + let 韻尾 = 韻尾列表[元音表[韻核].indexOf(韻)]; |
| 107 | + 韻核 = 韻核.replace('ə̆', 'ə').replace('ŏ', 'o'); |
| 108 | + let 介音 = ''; |
| 109 | + if (is`止攝 (鈍音 非 云母 或 來母)`) 介音 += 'j'; // 云母已經是 j,無需加 |
| 110 | + if (is`三等 非 止攝`) 介音 += 'i̯'; |
| 111 | + if (is`四等`) 介音 += 'i'; |
| 112 | + 介音 += when([ |
| 113 | + ['模冬灰文魂韻', 'u'], |
| 114 | + ['歌寒韻 非 開口', 'u'], // 戈桓 |
| 115 | + ['眞韻 合口 (重紐A類 或 銳音 非 莊組)', 'u'], // 諄 |
| 116 | + ['合口 或 魚鍾凡韻', 'w'], |
| 117 | + ['幫組', [ |
| 118 | + ['微韻', 'w'], |
| 119 | + ['廢元韻 或 庚韻 三等', 'w'], // ɐ |
| 120 | + ['耕韻 明母', 'w'], // æ |
| 121 | + ['陽夬刪韻', 'w'], // a, 但麻佳韻原書無 w(儘管擬音不分佳夬) |
| 122 | + ['皆韻 或 山韻 入聲', 'w'], // ă,但山韻舒聲原書無 w |
| 123 | + ['泰韻 或 唐韻 舒聲', 'w'], // ɑ,同歌寒,但唐韻入聲原書無 w |
| 124 | + // 個別字合口的情況不計入,如《漢文典》中: |
| 125 | + // “邊”歸合口,但同小韻的“編”歸開口 |
| 126 | + // “憫”歸合口,但同小韻的“緡”歸開口 |
| 127 | + ]], |
| 128 | + ['', ''], |
| 129 | + ], '', true); |
| 130 | + |
| 131 | + return 介音 + 韻核 + 韻尾; |
| 132 | +} |
| 133 | + |
| 134 | +function get聲調() { |
| 135 | + if (選項.聲調記號 === '四角標圈') return { |
| 136 | + |
| 137 | + }; |
| 138 | + const 聲調記號字典 = Object.fromEntries(選項.聲調記號.split(' ').map(e => [...e])); |
| 139 | + return 聲調記號字典[音韻地位.聲] ?? ''; |
| 140 | +} |
| 141 | + |
| 142 | +let 音節 = get聲母() + get韻母() + get聲調(); |
| 143 | +Object.entries(音標字典[選項.音標體系]).forEach(([k, v]) => { 音節 = 音節.replace(k, v); }); |
| 144 | +return 音節; |
0 commit comments