From dd47faa849415b0733419cce372cc76cb5b17bdf Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Thu, 5 May 2022 17:58:30 +0800 Subject: [PATCH 01/24] add naamning.js and naamningdingzi.js --- naamning.js | 321 ++++++++++++++++++++++++++++++++++++++++++++++ naamningdingzi.js | 303 +++++++++++++++++++++++++++++++++++++++++++ test/main.js | 4 + 3 files changed, 628 insertions(+) create mode 100644 naamning.js create mode 100644 naamningdingzi.js diff --git a/naamning.js b/naamning.js new file mode 100644 index 0000000..d9170cb --- /dev/null +++ b/naamning.js @@ -0,0 +1,321 @@ +/* 推導南寧白話 + * + * https://github.com/leimaau/naamning_jyutping + * + * version: 2022-05-04 + * + * 【符號說明】 + * 心母字讀 sl[ɬ](清齒齦邊擦音),效咸山攝二等字讀 -eu[-ɛu]、-em[-ɛm]/-ep[-ɛp]、-en[-ɛn]/-et[-ɛt],但演變不平衡,以下只推導文讀音,同理,梗三四的演變不平衡,以下也只推導文讀音 + * 老派的師韻(止開三精莊組)字讀 zy[tsɿ]、cy[tsʰɿ]、sy[sɿ],津韻(臻合三舌齒音、部份臻開三)字讀 -yun[-yn]/-yut[-yt],推導以老派音爲準 + * 聲母韻母有些部分依靠經驗給出推導條例,莊組白讀j不涉及,比較零散 + * + * @author LeiMaau + */ + +if (!音韻地位) return [['$legacy', true]]; + +const is = (x) => 音韻地位.屬於(x); + +function 聲母規則() { + if (is('幫母')) { + if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + return 'b'; + } + if (is('滂母')) { + if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + return 'p'; + } + if (is('並母')) { + if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + if (is('平聲')) return 'p'; + return 'b'; + } + if (is('明母')) return 'm'; + + if (is('端母')) return 'd'; + if (is('透母')) return 't'; + if (is('定母')) return is('平聲') ? 't' : 'd'; + if (is('泥母')) return 'n'; + if (is('來母')) return 'l'; + + if (is('知母')) return 'z'; + if (is('徹母')) return 'c'; + if (is('澄母')) return is('平聲') ? 'c' : 'z'; + if (is('孃母')) return 'n'; + + if (is('精母')) return 'z'; + if (is('清母')) return 'c'; + if (is('從母')) return is('平聲') ? 'c' : 'z'; + + if (is('心母')) { + if (is('止攝 開口 三等')) return is('支韻 上聲') ? 'sl' : 's'; // 徙璽 絲斯 + if (is('止攝 合口 三等 上聲 或 蟹攝 開口 一等 去聲 或 山攝 開口 一等 平聲')) return 's'; // 髓賽珊 + return 'sl'; + } + + if (is('邪母 平聲')) { + if (is('山臻攝 三等')) return 'sl'; + return 'c'; + } + if (is('邪母 仄聲')) return 'z'; + + if (is('莊母')) return 'z'; + if (is('初母')) return 'c'; + if (is('崇母')) return is('平聲') ? 'c' : 'z'; + if (is('生母')) return 's'; + if (is('俟母')) return 's'; + + if (is('章母')) return 'z'; + if (is('昌母')) return 'c'; + if (is('常母')) return 's'; + if (is('書母')) return 's'; + if (is('船母')) return 's'; + if (is('日母')) return 'j'; + + if (is('見母')) return 'g'; + + if (is('溪母')) { + if (is('模韻')) return 'f'; + if (is('開口') && !is('模韻')) { + if (is('侯韻')) return is('上聲') ? 'h' : 'k'; + if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; + if (is('尤韻 或 侵韻 入聲')) return 'j'; + return 'h'; + } + if (is('合口') && !is('模韻')) { + if (is('臻攝 三等 文韻 舒聲')) return 'kw'; + if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; + if (is('曾攝 一等 登韻 舒聲')) return 'w'; + return 'h'; + } + return 'h'; + } + + if (is('羣母')) return is('平聲') ? 'k' : 'g'; + if (is('疑母')) return 'ng'; + + if (is('曉母')) { + if (is('模韻')) return 'f'; + if (is('開口') && !is('模韻')) { + if (is('侯韻 去聲')) return 'k'; + if (is('尤韻 或 鍾韻 入聲')) return 'j'; + return 'h'; + } + if (is('合口') && !is('模韻')) { + if (is('梗攝 二等 庚耕韻 舒聲 或 曾攝 一等 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; + if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢韻 舒聲 或 蟹攝 二等')) return 'w'; + if (is('宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲')) return 'k'; + if (is('通遇梗曾攝 或 果山攝 三等 或 果山攝 四等') || (is('三等') && !is('宕攝 上聲')) ) return 'h'; + return 'f'; + } + return 'h'; + } + + if (is('匣母')) { + if (is('模韻')) return 'w'; + if (is('開口') && !is('模韻')) return 'h'; + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通攝') ? 'h' : 'w'; + if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; + } + return 'h'; + } + if (is('影云以母')) { + if (is('模韻')) return 'w'; + if (is('開口') && !is('模韻')) { + if (is('三等 或 四等') && !is('影母 蟹攝')) return 'j'; + if (is('云母 二等')) return 'w'; + if (is('一等 或 二等') && is('以母')) return 'j'; + return ''; + } + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通攝') ? '' : 'w'; + if (is('三等 或 四等')) { + if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝')) return 'j'; + return 'w'; + } + } + return is('三四等') ? 'j' : ''; + } + + throw new Error('無聲母規則'); +} + +function 韻母規則() { + // 通攝 + if (is('東冬鍾韻')) return 'ung'; + + // 江攝 + if (is('江韻')) return 'ong'; + + // 止攝 + if (is('支脂之微韻 幫組')) return 'i'; + if (is('支脂之微韻 開口') && !is('幫組')) { + if (is('精組 三等 或 莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'y'; + return 'i'; + } + if (is('支脂之微韻 合口 舌齒音')) return 'ui'; + if (is('支脂之微韻 合口 牙喉音')) return 'ai'; + + // 遇攝 + if (is('魚虞韻')) { + if (is('幫組')) return 'u'; + if (is('莊組')) return 'o'; + return 'yu'; + } + if (is('模韻')) return is('疑母') ? '' : 'u'; + + // 蟹攝 + if (is('齊韻')) return 'ai'; + if (is('祭韻')) { + if (is('合口 以母')) return 'ui'; + if (is('合口') && !is('牙喉音')) return 'ui'; + return 'ai'; + } + if (is('泰韻 幫組')) return 'ui'; + if (is('泰韻 開口') && !is('幫組')) { + if (is('牙喉音 或 精組 或 泥孃母')) return 'oi'; + return 'aai'; + } + if (is('泰韻 合口') && !is('幫組')) return is('疑母') ? 'oi' : 'ai'; + if (is('佳皆夬韻')) return 'aai'; + if (is('灰韻')) return is('疑母') ? 'ai' : 'ui'; + if (is('咍韻')) return is('幫組 或 以母') ? 'ui' : 'oi'; + if (is('廢韻')) return 'ai'; + + // 臻攝 + if (is('眞臻文欣魂痕韻')) { + if (is('魂韻 精組')) return 'yun'; + if (is('魂韻 幫組')) return 'un'; + if (is('合口 三等') && !is('幫組') && !is('牙喉音')) return 'yun'; + return 'an'; + } + + // 山攝 + if (is('寒韻 幫組')) return 'un'; + if (is('寒韻 開口 舌齒音')) return 'aan'; + if (is('寒韻 開口 牙喉音')) return 'on'; + if (is('寒韻 合口 舌齒音')) return 'yun'; + if (is('寒韻 合口 牙喉音')) return 'un'; + if (is('元韻 幫組')) return 'aan'; + if (is('元韻 開口')) return 'in'; + if (is('元韻 合口')) return 'yun'; + if (is('刪山韻')) return 'aan'; + if (is('仙先韻 幫組')) return 'in'; + if (is('仙先韻 開口')) return 'in'; + if (is('仙先韻 合口')) return 'yun'; + + // 效攝 + if (is('蕭宵韻')) return 'iu'; + if (is('肴韻')) return 'aau'; + if (is('豪韻')) return is('溪母') ? 'aau' : 'u'; + + // 果攝 + if (is('歌韻 一等')) return 'o'; + if (is('歌韻 三等')) return is('合口') ? 'oe' : 'e'; + + // 假攝 + if (is('麻韻 二等')) return 'aa'; + if (is('麻韻 三等')) return 'e'; + + // 宕攝 + if (is('陽韻 幫組')) return 'ong'; + if (is('陽韻 開口 莊組')) return 'ong'; + if (is('陽韻 開口')) return 'oeng'; + if (is('陽韻 合口')) return 'ong'; + if (is('唐韻')) return 'ong'; + + // 梗攝 + if (is('庚韻 二等')) return is('影見曉母') || is('溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; + if (is('庚韻 三等 莊組')) return 'aang'; + if (is('庚韻 三等')) return 'ing'; + if (is('耕韻')) return is('影見曉母') || is('溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; + if (is('清青韻')) return 'ing'; + + // 曾攝 + if (is('蒸韻')) return 'ing'; + if (is('登韻')) return 'ang'; + + // 流攝 + if (is('尤侯幽韻')) return 'au'; + + // 深攝 + if (is('侵韻')) return 'am'; + + // 咸攝 + if (is('覃談韻 幫組')) return 'aam'; + if (is('覃談韻 舌齒音')) return 'aam'; + if (is('覃談韻 牙喉音')) return 'am'; + if (is('鹽添嚴韻')) return 'im'; + if (is('咸銜凡韻')) return 'aam'; // return is('莊初崇見溪曉匣母') 'em' : 'aam'; 白讀。狎洽韻則是見莊初崇生知徹澄孃母。 + + throw new Error('無韻母規則'); +} + +function 聲調規則() { + if (is('全清 或 次清')) { + if (is('平聲')) return '1'; // 陰平 + if (is('上聲')) return '2'; // 陰上 + if (is('去聲')) return '3'; // 陰去 + if (is('入聲')) { + if (is('咸山江宕攝') || (is('梗攝 二等') && !is('影母'))){ // 清紐外轉字,影母特例 + if (is('咸攝 一等 影母')) return '1'; + return '3'; + } + if (is('梗攝 三等 莊組')) return '3'; + return '1'; // 清紐內轉字 + } + } else { + if (is('平聲')) return '4'; // 陽平 + if (is('全濁 上聲')) return '6'; // 陽去,全濁上變去 + if (is('上聲')) return '5'; // 陽上 + if (is('去聲')) return '6'; // 陽去 + if (is('入聲')) return '6'; // 陽入 + } + throw new Error('無聲調規則'); +} + +let 聲母 = 聲母規則(); +let 韻母 = 韻母規則(); +let 聲調 = 聲調規則(); + + +if (is('合口') && !['u', 'o', 'yu'].some((x) => 韻母.startsWith(x))) { // 合口字 + if (聲母 === 'g' && !韻母.startsWith('im')) 聲母 = 'gw'; + else if (聲母 === 'k' && !韻母.startsWith('ing') && !韻母.startsWith('im')) 聲母 = 'kw'; + else if (聲母 === 'h' && !韻母.startsWith('i')) 聲母 = 'hw'; + else if (聲母 === 'w' && 韻母 === 'yu') 聲母 = 'j'; + else if (聲母 === 'h' && (韻母 === 'ui' || 韻母 === 'un')) 聲母 = 'f'; +} + + +// 疑母拼細音時: i-類和oe-類 入聲n- 舒聲j-;yu類 舒入聲j-;u-類 ngung/k->jung/k,ngun/t->wun/t,ngu不變 +const is細音i和oe類 = ['i', 'oe'].some((x) => 韻母.startsWith(x)); +const is細音yu類 = ['yu'].some((x) => 韻母.startsWith(x)); +const is細音u類 = ['u'].some((x) => 韻母.startsWith(x)); +if (聲母 === 'ng' && is細音i和oe類 && is('入聲')) 聲母 = 'n'; +if (聲母 === 'ng' && is細音i和oe類 && is('舒聲')) 聲母 = 'j'; +if (聲母 === 'ng' && is細音yu類) 聲母 = 'j'; +if (聲母 === 'ng' && is細音u類 && 韻母 === 'ung') 聲母 = 'j'; +if (聲母 === 'ng' && is細音u類 && 韻母 === 'un') 聲母 = 'w'; + +// 其他變換 +if (聲母 === 'w' && 韻母 === 'yu') 聲母 = 'j'; // 保險起見再寫一遍 +if (聲母 === 'h' && (韻母 === 'ui' || 韻母 === 'un')) 聲母 = 'f'; // 保險起見再寫一遍 +if (聲母 === 'hw' && 韻母.startsWith('a')) 聲母 = 'f'; + + +// 南寧的 詠泳咏 濁去作上 +if (is('云匣母 合口 庚韻 去聲')) 聲調='5'; + + +// m 韻尾在聲母為脣音時為 n +if (is('幫組') && 韻母.endsWith('m')) 韻母 = 韻母.slice(0, -1) + 'n'; + +if (is('入聲')) { + if (韻母.endsWith('m')) 韻母 = 韻母.slice(0, -1) + 'p'; + else if (韻母.endsWith('n')) 韻母 = 韻母.slice(0, -1) + 't'; + else if (韻母.endsWith('ng')) 韻母 = 韻母.slice(0, -2) + 'k'; +} + +return 聲母 + 韻母 + 聲調; diff --git a/naamningdingzi.js b/naamningdingzi.js new file mode 100644 index 0000000..156a731 --- /dev/null +++ b/naamningdingzi.js @@ -0,0 +1,303 @@ +/* 推導南寧亭子平話 + * + * https://github.com/leimaau/naamning_jyutping + * + * version: 2022-05-04 + * + * 【符號說明】 + * 心母字讀 sl[ɬ](清齒齦邊擦音),日母和疑母細音字讀 nj[ȵ](齦齶音) + * 老派的疑母模韻字讀 ngu[ŋu],微母遇攝臻攝字讀 fu[fu]、fat[fɐt]、fan[fɐn],遇合一讀o[o],果合一讀u[u],推導以老派音爲準 + * 聲母韻母有些部分依靠經驗給出推導條例,莊組白讀nj不涉及,比較零散 + * + * @author LeiMaau + */ + +if (!音韻地位) return [['$legacy', true]]; + +const is = (x) => 音韻地位.屬於(x); + +function 聲母規則() { + if (is('幫母')) { + if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + return 'b'; + } + if (is('滂母')) { + if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + return 'p'; + } + if (is('並母')) { + if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + return 'b'; + } + if (is('明母')) return is('遇臻攝 三等') ? 'f' : 'm'; + + if (is('端母')) return 'd'; + if (is('透母')) return 't'; + if (is('定母')) return 'd'; + if (is('泥母')) return 'n'; + if (is('來母')) return 'l'; + + if (is('知母')) return 'z'; + if (is('徹母')) return 'c'; + if (is('澄母')) return 'z'; + if (is('孃母')) return 'n'; + + if (is('精母')) return 'z'; + if (is('清母')) return 'c'; + if (is('從母')) return 'z'; + + if (is('心母')) { + if (is('止攝 合口 三等 上聲 或 蟹攝 開口 一等 去聲 或 山攝 開口 一等 平聲')) return 's'; // 髓賽珊 + return 'sl'; + } + + if (is('邪母 平聲')) { + if (is('山臻攝 三等')) return 'sl'; + return 'z'; + } + if (is('邪母 仄聲')) return 'z'; + + if (is('莊母')) return 'z'; + if (is('初母')) return 'c'; + if (is('崇母')) return is('平聲') ? 'c' : 'z'; + if (is('生母')) return 's'; + if (is('俟母')) return 's'; + + if (is('章母')) return 'z'; + if (is('昌母')) return 'c'; + if (is('常母')) return 's'; + if (is('書母')) return 's'; + if (is('船母')) return 's'; + if (is('日母')) return 'nj'; + + if (is('見母')) return 'g'; + + if (is('溪母')) { + if (is('模韻')) return 'h'; + if (is('開口') && !is('模韻')) { + if (is('侯韻')) return is('上聲') ? 'h' : 'k'; + if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; + if (is('尤韻 或 侵韻 入聲')) return 'j'; + return 'h'; + } + if (is('合口') && !is('模韻')) { + if (is('臻攝 三等 文韻 舒聲')) return 'kw'; + if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; + if (is('曾攝 一等 登韻 舒聲')) return 'w'; + return 'h'; + } + return 'h'; + } + + if (is('羣母')) return is('平聲') ? 'k' : 'g'; + if (is('疑母')) return 'ng'; + + if (is('曉母')) { + if (is('模韻')) return 'h'; + if (is('開口') && !is('模韻')) { + if (is('侯韻 去聲')) return 'k'; + if (is('尤韻 或 鍾韻 入聲')) return 'j'; + return 'h'; + } + if (is('合口') && !is('模韻')) { + if (is('梗攝 二等 庚耕韻 舒聲 或 曾攝 一等 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; + if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢韻 舒聲 或 蟹攝 二等')) return 'w'; + if (is('宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲')) return 'k'; + return 'f'; + } + return 'h'; + } + + if (is('匣母')) { + if (is('模韻')) return 'h'; + if (is('開口') && !is('模韻')) return 'h'; + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通果宕攝') ? 'h' : 'w'; + if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; + } + return 'h'; + } + if (is('影云以母')) { + if (is('模韻')) return 'w'; + if (is('開口') && !is('模韻')) { + if (is('三等 或 四等') && !is('影母 蟹曾梗臻通攝')) return 'j'; + if (is('云母 二等')) return 'w'; + if (is('一等 或 二等') && is('以母')) return 'j'; + return ''; + } + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通果宕攝') ? '' : 'w'; + if (is('三等 或 四等')) { + if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝 或 梗攝 四等')) return is('影母 通果攝') ? '' : 'j'; + return 'w'; + } + } + return is('三四等') ? 'j' : ''; + } + + throw new Error('無聲母規則'); +} + +function 韻母規則() { + // 通攝 + if (is('東冬鍾韻')) return 'oeng'; + + // 江攝 + if (is('江韻')) return is('知莊組 或 明母') ? 'ung' : 'aang'; + + // 止攝 + if (is('支脂之微韻 幫組')) return 'i'; + if (is('支脂之微韻 開口') && !is('幫組')) { + if (is('精組 三等 或 莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'i'; + return 'i'; + } + if (is('支脂之微韻 合口 舌齒音')) return 'ui'; + if (is('支脂之微韻 合口 牙喉音')) return 'ai'; + + // 遇攝 + if (is('魚虞韻')) return is('幫組 或 莊組') ? 'u' : 'yu'; // 莊組部分字o + if (is('模韻')) return 'u'; // 新派疑母字讀零聲母 + + // 蟹攝 + if (is('齊韻')) return 'ai'; + if (is('祭韻')) { + if (is('合口 以母')) return 'ui'; + if (is('合口') && !is('牙喉音')) return 'ui'; + return 'ai'; + } + if (is('泰韻 幫組')) return 'ui'; + if (is('泰韻 開口') && !is('幫組')) return 'aai'; + if (is('泰韻 合口') && !is('幫組')) return is('疑母') ? 'waai' : 'ai'; + if (is('佳皆夬韻')) return 'aai'; + if (is('灰韻')) return is('疑母') ? 'ai' : 'ui'; + if (is('咍韻')) return is('幫組 或 以母') ? 'ui' : 'aai'; + if (is('廢韻')) return is('幫組') ? 'i' : 'ai'; + + // 臻攝 + if (is('眞臻文欣魂痕韻')) return is('魂韻 精組 或 魂韻 幫組') ? 'un' : 'an'; + + // 山攝 + if (is('寒韻 幫組')) return 'un'; + if (is('寒韻 開口')) return 'aan'; + if (is('寒韻 合口')) return 'un'; + if (is('元韻 幫組')) return 'aan'; + if (is('元韻 開口')) return 'in'; + if (is('元韻 合口')) return 'yun'; + if (is('刪山韻')) return 'aan'; + if (is('仙先韻 幫組')) return 'in'; + if (is('仙先韻 開口')) return 'in'; + if (is('仙先韻 合口')) return 'yun'; + + // 效攝 + if (is('蕭宵韻')) return 'iu'; + if (is('肴豪韻')) return 'aau'; + + // 果攝 + if (is('歌韻 一等 幫組') && is('幫組')) return 'u'; + if (is('歌韻 開口 一等') && !is('幫組')) return 'o'; + if (is('歌韻 合口 一等')) return 'u'; + if (is('歌韻 三等')) return is('合口') ? 'oe' : 'e'; + + // 假攝 + if (is('麻韻 二等')) return 'aa'; + if (is('麻韻 三等')) return 'e'; + + // 宕攝 + if (is('陽韻 幫組')) return 'aang'; + if (is('陽韻 開口 莊組')) return 'aang'; + if (is('陽韻 開口')) return 'iang'; + if (is('陽韻 合口')) return 'ung'; + if (is('唐韻 幫組')) return 'aang'; + if (is('唐韻 開口')) return 'aang'; + if (is('唐韻 合口')) return 'ung'; + + // 梗攝 + if (is('庚韻 二等')) return is('影見曉幫滂並母') ? 'ang' : 'iang'; + if (is('庚韻 三等 莊組')) return 'iang'; + if (is('庚韻 三等')) return 'ing'; + if (is('耕韻')) return is('影見曉幫滂並母') ? 'ang' : 'iang'; + if (is('清青韻')) return 'ing'; + + // 曾攝 + if (is('蒸韻')) return 'ing'; + if (is('登韻')) return 'ang'; + + // 流攝 + if (is('尤侯幽韻')) return 'au'; + + // 深攝 + if (is('侵韻')) return 'am'; + + // 咸攝 + if (is('覃談韻')) return 'aam'; + if (is('鹽添嚴韻')) return 'im'; + if (is('咸銜凡韻')) return 'aam'; + + throw new Error('無韻母規則'); +} + +function 聲調規則() { + if (is('全清 或 次清')) { + if (is('平聲')) return '1'; // 陰平 + if (is('上聲')) return '2'; // 陰上 + if (is('去聲')) return '3'; // 陰去 + if (is('入聲')) return '2' + } else { + if (is('平聲')) return '4'; // 陽平 + if (is('全濁 上聲')) return '6'; // 陽去,全濁上變去 + if (is('上聲')) return '5'; // 陽上 + if (is('去聲')) return '6'; // 陽去 + if (is('入聲')) return is('次濁') ? '5' : '6'; // 上陽入 下陽入 + } + throw new Error('無聲調規則'); +} + +let 聲母 = 聲母規則(); +let 韻母 = 韻母規則(); +let 聲調 = 聲調規則(); + + +if (is('合口') && !['u', 'o', 'yu'].some((x) => 韻母.startsWith(x))) { // 合口字 + if (聲母 === 'g' && !韻母.startsWith('im')) 聲母 = 'gw'; + else if (聲母 === 'k' && !韻母.startsWith('ing') && !韻母.startsWith('im')) 聲母 = 'kw'; + else if (聲母 === 'h' && !韻母.startsWith('i')) 聲母 = 'hw'; + else if (聲母 === 'w' && 韻母 === 'yu') 聲母 = 'j'; + else if (聲母 === 'w' && 韻母 === 'ung') 聲母 = ''; +} + + +// 疑母拼細音時: i-類和oe-類 nj-;yu類 j-;u-類 ngung/k->njung/k,ngun/t->wun/t,ngu不變 +const is細音i和oe類 = ['i', 'oe'].some((x) => 韻母.startsWith(x)); +const is細音yu類 = ['yu'].some((x) => 韻母.startsWith(x)); +const is細音u類 = ['u'].some((x) => 韻母.startsWith(x)); +if (聲母 === 'ng' && is細音i和oe類) 聲母 = 'nj'; +if (聲母 === 'ng' && is細音yu類) 聲母 = 'j'; +if (聲母 === 'ng' && is細音u類 && 韻母 === 'ung') 聲母 = 'nj'; +if (聲母 === 'ng' && is細音u類 && 韻母 === 'un') 聲母 = 'w'; + +// 其他變換 +if (聲母 === 'w' && 韻母 === 'yu') 聲母 = 'j'; // 保險起見再寫一遍 +if (聲母 === 'w' && 韻母 === 'ung') 聲母 = ''; // 保險起見再寫一遍 +if (聲母 === 'ng' && 韻母.startsWith('w')) 聲母 = ''; // 特殊字「外」 +if (聲母 === 'hw' && 韻母.startsWith('a')) 聲母 = 'w'; +if (聲母 === 'w' && 韻母.startsWith('ui')) 韻母 = 'ai'; + +// 進一步 +if (聲母 === 'nj' && (韻母 === 'ing' || 韻母 === 'iang')) 聲母 = 'ng'; +if (聲母 === 'nj' && 韻母.startsWith('i') && is('入聲')) 聲母 = 'n'; + + +// 南寧的 詠泳咏 濁去作上 +if (is('云匣母 合口 庚韻 去聲')) 聲調='5'; + + +// m 韻尾在聲母為脣音時為 n +if (is('幫組') && 韻母.endsWith('m')) 韻母 = 韻母.slice(0, -1) + 'n'; + +if (is('入聲')) { + if (韻母.endsWith('m')) 韻母 = 韻母.slice(0, -1) + 'p'; + else if (韻母.endsWith('n')) 韻母 = 韻母.slice(0, -1) + 't'; + else if (韻母.endsWith('ng')) 韻母 = 韻母.slice(0, -2) + 'k'; +} + +return 聲母 + 韻母 + 聲調; diff --git a/test/main.js b/test/main.js index b778803..709ddcd 100644 --- a/test/main.js +++ b/test/main.js @@ -15,6 +15,8 @@ import { fanwan, putonghua, gwongzau, + naamning, + naamningdingzi, zaonhe, langjin, taibu, @@ -45,6 +47,8 @@ assert_equal(chiangxhua(音韻地位), "ɕɉɐ́w \n[ɕj̈ɐ́w]"); assert_equal(fanwan(音韻地位), "shiu2"); assert_equal(putonghua(音韻地位), "shǎo"); assert_equal(gwongzau(音韻地位), "siu2"); +assert_equal(naamning(音韻地位), "siu2"); +assert_equal(naamningdingzi(音韻地位), "siu2"); assert_equal(zaonhe(音韻地位), "sɔ̄"); assert_equal(langjin(音韻地位), "shao³"); assert_equal(taibu(音韻地位), "shau3"); From d3a0aa36ed578eb77bae8c7ed3b00033bbdd1628 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Thu, 5 May 2022 18:05:42 +0800 Subject: [PATCH 02/24] fix --- naamningdingzi.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/naamningdingzi.js b/naamningdingzi.js index 156a731..1c33f91 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -193,7 +193,7 @@ function 韻母規則() { if (is('肴豪韻')) return 'aau'; // 果攝 - if (is('歌韻 一等 幫組') && is('幫組')) return 'u'; + if (is('歌韻 一等 幫組')) return 'u'; if (is('歌韻 開口 一等') && !is('幫組')) return 'o'; if (is('歌韻 合口 一等')) return 'u'; if (is('歌韻 三等')) return is('合口') ? 'oe' : 'e'; From 475d94d86cacd082af6fd877dc4bec3a7dce616a Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Thu, 5 May 2022 18:11:50 +0800 Subject: [PATCH 03/24] fix ; --- naamningdingzi.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/naamningdingzi.js b/naamningdingzi.js index 1c33f91..5bc7d0b 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -241,7 +241,7 @@ function 聲調規則() { if (is('平聲')) return '1'; // 陰平 if (is('上聲')) return '2'; // 陰上 if (is('去聲')) return '3'; // 陰去 - if (is('入聲')) return '2' + if (is('入聲')) return '2'; } else { if (is('平聲')) return '4'; // 陽平 if (is('全濁 上聲')) return '6'; // 陽去,全濁上變去 From a87f6c6b9f3dfc078e16b5faaada0cd681bdd7f2 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Thu, 5 May 2022 18:17:10 +0800 Subject: [PATCH 04/24] fix --- naamningdingzi.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/naamningdingzi.js b/naamningdingzi.js index 5bc7d0b..5a176de 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -103,7 +103,7 @@ function 聲母規則() { if (is('梗攝 二等 庚耕韻 舒聲 或 曾攝 一等 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢韻 舒聲 或 蟹攝 二等')) return 'w'; if (is('宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲')) return 'k'; - return 'f'; + return 'h'; } return 'h'; } From 22742d07bfc846ec2d4a41e2946210438e0a1fd9 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 12:15:38 +0800 Subject: [PATCH 05/24] =?UTF-8?q?update=20=E8=BC=95=E8=84=A3=E9=9F=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ naamning.js | 18 +++++++++--------- naamningdingzi.js | 12 ++++++------ 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 117d6ab..66fd7f2 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,8 @@ https://nk2028-1305783649.file.myqcloud.com/qieyun-examples/ - 推導《分韻撮要》擬音 (Extrapolated Reconstruction of _Fan-Wan Ts'üt-Iú_): `fanwan.js` - 推導普通話 (Extrapolated Putonghua): `putonghua.js` - 推導廣州音 (Extrapolated Cantonese): `gwongzau.js` +- 推導南寧白話 (Extrapolated Nanning Cantonese): `naamning.js` +- 推導南寧亭子平話 (Extrapolated Nanning Tingzi Cantonese): `naamningdingzi.js` - 推導上海話 (Extrapolated Shanghainese): `zaonhe.js` - 推導南京話 (Extrapolated Nankinese): `langjin.js` - 推導大埔話 (Extrapolated Taibu Hakka): `taibu.js` diff --git a/naamning.js b/naamning.js index d9170cb..4e67f7d 100644 --- a/naamning.js +++ b/naamning.js @@ -18,15 +18,15 @@ const is = (x) => 音韻地位.屬於(x); function 聲母規則() { if (is('幫母')) { - if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + if (is('輕脣韻')) return 'f'; return 'b'; } if (is('滂母')) { - if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + if (is('輕脣韻')) return 'f'; return 'p'; } if (is('並母')) { - if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + if (is('輕脣韻')) return 'f'; if (is('平聲')) return 'p'; return 'b'; } @@ -197,9 +197,9 @@ function 韻母規則() { if (is('寒韻 開口 牙喉音')) return 'on'; if (is('寒韻 合口 舌齒音')) return 'yun'; if (is('寒韻 合口 牙喉音')) return 'un'; - if (is('元韻 幫組')) return 'aan'; - if (is('元韻 開口')) return 'in'; - if (is('元韻 合口')) return 'yun'; + if (is('元韻 幫組')) return 'aan'; // 放山攝是個人習慣 + if (is('元韻 開口')) return 'in'; // 放山攝是個人習慣 + if (is('元韻 合口')) return 'yun'; // 放山攝是個人習慣 if (is('刪山韻')) return 'aan'; if (is('仙先韻 幫組')) return 'in'; if (is('仙先韻 開口')) return 'in'; @@ -226,10 +226,10 @@ function 韻母規則() { if (is('唐韻')) return 'ong'; // 梗攝 - if (is('庚韻 二等')) return is('影見曉母') || is('溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; + if (is('庚韻 二等')) return is('影見曉母 或 溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; if (is('庚韻 三等 莊組')) return 'aang'; if (is('庚韻 三等')) return 'ing'; - if (is('耕韻')) return is('影見曉母') || is('溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; + if (is('耕韻')) return is('影見曉母 或 溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; if (is('清青韻')) return 'ing'; // 曾攝 @@ -247,7 +247,7 @@ function 韻母規則() { if (is('覃談韻 舌齒音')) return 'aam'; if (is('覃談韻 牙喉音')) return 'am'; if (is('鹽添嚴韻')) return 'im'; - if (is('咸銜凡韻')) return 'aam'; // return is('莊初崇見溪曉匣母') 'em' : 'aam'; 白讀。狎洽韻則是見莊初崇生知徹澄孃母。 + if (is('咸銜凡韻')) return 'aam'; // return is('莊初崇見溪曉匣母') ? 'em' : 'aam'; 白讀。狎洽韻則是見莊初崇生知徹澄孃母。 throw new Error('無韻母規則'); } diff --git a/naamningdingzi.js b/naamningdingzi.js index 5a176de..5234a85 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -18,15 +18,15 @@ const is = (x) => 音韻地位.屬於(x); function 聲母規則() { if (is('幫母')) { - if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + if (is('輕脣韻')) return 'f'; return 'b'; } if (is('滂母')) { - if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + if (is('輕脣韻')) return 'f'; return 'p'; } if (is('並母')) { - if (is('東韻 三等 或 鍾微虞廢文元陽尤凡韻')) return 'f'; + if (is('輕脣韻')) return 'f'; return 'b'; } if (is('明母')) return is('遇臻攝 三等') ? 'f' : 'm'; @@ -180,9 +180,9 @@ function 韻母規則() { if (is('寒韻 幫組')) return 'un'; if (is('寒韻 開口')) return 'aan'; if (is('寒韻 合口')) return 'un'; - if (is('元韻 幫組')) return 'aan'; - if (is('元韻 開口')) return 'in'; - if (is('元韻 合口')) return 'yun'; + if (is('元韻 幫組')) return 'aan'; // 放山攝是個人習慣 + if (is('元韻 開口')) return 'in'; // 放山攝是個人習慣 + if (is('元韻 合口')) return 'yun'; // 放山攝是個人習慣 if (is('刪山韻')) return 'aan'; if (is('仙先韻 幫組')) return 'in'; if (is('仙先韻 開口')) return 'in'; From c09dc0830ee75413937356396777f0e34f786acf Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 12:36:09 +0800 Subject: [PATCH 06/24] fix space --- naamning.js | 4 ++-- naamningdingzi.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/naamning.js b/naamning.js index 4e67f7d..7ffe93e 100644 --- a/naamning.js +++ b/naamning.js @@ -83,8 +83,8 @@ function 聲母規則() { return 'h'; } if (is('合口') && !is('模韻')) { - if (is('臻攝 三等 文韻 舒聲')) return 'kw'; - if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; + if (is('文韻 舒聲')) return 'kw'; + if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('曾攝 一等 登韻 舒聲')) return 'w'; return 'h'; } diff --git a/naamningdingzi.js b/naamningdingzi.js index 5234a85..474f1ae 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -81,8 +81,8 @@ function 聲母規則() { return 'h'; } if (is('合口') && !is('模韻')) { - if (is('臻攝 三等 文韻 舒聲')) return 'kw'; - if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; + if (is('文韻 舒聲')) return 'kw'; + if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('曾攝 一等 登韻 舒聲')) return 'w'; return 'h'; } From cb72064c95952af75238626fb6781cc0d4271c88 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 14:12:25 +0800 Subject: [PATCH 07/24] =?UTF-8?q?fix=20=E6=91=84=20and=20space?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- naamning.js | 146 +++++++++++++++++++++++----------------------- naamningdingzi.js | 114 ++++++++++++++++++------------------ 2 files changed, 130 insertions(+), 130 deletions(-) diff --git a/naamning.js b/naamning.js index 7ffe93e..5f3b934 100644 --- a/naamning.js +++ b/naamning.js @@ -48,13 +48,13 @@ function 聲母規則() { if (is('從母')) return is('平聲') ? 'c' : 'z'; if (is('心母')) { - if (is('止攝 開口 三等')) return is('支韻 上聲') ? 'sl' : 's'; // 徙璽 絲斯 - if (is('止攝 合口 三等 上聲 或 蟹攝 開口 一等 去聲 或 山攝 開口 一等 平聲')) return 's'; // 髓賽珊 + if (is('支脂之微韻 開口')) return is('支韻 上聲') ? 'sl' : 's'; // 徙璽 絲斯 + if (is('支脂之微韻 合口 上聲 或 泰咍韻 開口 去聲 或 寒韻 開口 平聲')) return 's'; // 髓賽珊 return 'sl'; } if (is('邪母 平聲')) { - if (is('山臻攝 三等')) return 'sl'; + if (is('山仙元文臻眞欣韻 三等')) return 'sl'; // 山臻攝 三等 return 'c'; } if (is('邪母 仄聲')) return 'z'; @@ -75,19 +75,19 @@ function 聲母規則() { if (is('見母')) return 'g'; if (is('溪母')) { - if (is('模韻')) return 'f'; - if (is('開口') && !is('模韻')) { - if (is('侯韻')) return is('上聲') ? 'h' : 'k'; - if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; - if (is('尤韻 或 侵韻 入聲')) return 'j'; - return 'h'; - } + if (is('模韻')) return 'f'; + if (is('開口') && !is('模韻')) { + if (is('侯韻')) return is('上聲') ? 'h' : 'k'; + if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; + if (is('尤韻 或 侵韻 入聲')) return 'j'; + return 'h'; + } if (is('合口') && !is('模韻')) { - if (is('文韻 舒聲')) return 'kw'; - if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; - if (is('曾攝 一等 登韻 舒聲')) return 'w'; - return 'h'; - } + if (is('文韻 舒聲')) return 'kw'; + if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; + if (is('登韻 舒聲')) return 'w'; + return 'h'; + } return 'h'; } @@ -95,47 +95,47 @@ function 聲母規則() { if (is('疑母')) return 'ng'; if (is('曉母')) { - if (is('模韻')) return 'f'; - if (is('開口') && !is('模韻')) { - if (is('侯韻 去聲')) return 'k'; - if (is('尤韻 或 鍾韻 入聲')) return 'j'; - return 'h'; - } - if (is('合口') && !is('模韻')) { - if (is('梗攝 二等 庚耕韻 舒聲 或 曾攝 一等 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; - if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢韻 舒聲 或 蟹攝 二等')) return 'w'; - if (is('宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲')) return 'k'; - if (is('通遇梗曾攝 或 果山攝 三等 或 果山攝 四等') || (is('三等') && !is('宕攝 上聲')) ) return 'h'; - return 'f'; - } - return 'h'; + if (is('模韻')) return 'f'; + if (is('開口') && !is('模韻')) { + if (is('侯韻 去聲')) return 'k'; + if (is('尤韻 或 鍾韻 入聲')) return 'j'; + return 'h'; + } + if (is('合口') && !is('模韻')) { + if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; + if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; + if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 + if (is('通遇梗曾攝 或 山元先仙韻 四等') || (is('三等') && !is('陽韻 上聲')) ) return 'h'; + return 'f'; + } + return 'h'; } if (is('匣母')) { - if (is('模韻')) return 'w'; - if (is('開口') && !is('模韻')) return 'h'; - if (is('合口') && !is('模韻')) { - if (is('一等 或 二等')) return is('通攝') ? 'h' : 'w'; - if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; - } - return 'h'; + if (is('模韻')) return 'w'; + if (is('開口') && !is('模韻')) return 'h'; + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通攝') ? 'h' : 'w'; + if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; + } + return 'h'; } if (is('影云以母')) { - if (is('模韻')) return 'w'; - if (is('開口') && !is('模韻')) { - if (is('三等 或 四等') && !is('影母 蟹攝')) return 'j'; - if (is('云母 二等')) return 'w'; - if (is('一等 或 二等') && is('以母')) return 'j'; - return ''; - } - if (is('合口') && !is('模韻')) { - if (is('一等 或 二等')) return is('通攝') ? '' : 'w'; - if (is('三等 或 四等')) { - if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝')) return 'j'; - return 'w'; - } - } - return is('三四等') ? 'j' : ''; + if (is('模韻')) return 'w'; + if (is('開口') && !is('模韻')) { + if (is('三等 或 四等') && !is('影母 蟹攝')) return 'j'; + if (is('云母 二等')) return 'w'; + if (is('一等 或 二等') && is('以母')) return 'j'; + return ''; + } + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通攝') ? '' : 'w'; + if (is('三等 或 四等')) { + if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝')) return 'j'; + return 'w'; + } + } + return is('三四等') ? 'j' : ''; } throw new Error('無聲母規則'); @@ -151,31 +151,31 @@ function 韻母規則() { // 止攝 if (is('支脂之微韻 幫組')) return 'i'; if (is('支脂之微韻 開口') && !is('幫組')) { - if (is('精組 三等 或 莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'y'; - return 'i'; + if (is('精莊組')) return is('心生母 支韻 上聲') ? 'ai' : 'y'; + return 'i'; } if (is('支脂之微韻 合口 舌齒音')) return 'ui'; if (is('支脂之微韻 合口 牙喉音')) return 'ai'; // 遇攝 if (is('魚虞韻')) { - if (is('幫組')) return 'u'; - if (is('莊組')) return 'o'; - return 'yu'; + if (is('幫組')) return 'u'; + if (is('莊組')) return 'o'; + return 'yu'; } if (is('模韻')) return is('疑母') ? '' : 'u'; // 蟹攝 if (is('齊韻')) return 'ai'; if (is('祭韻')) { - if (is('合口 以母')) return 'ui'; - if (is('合口') && !is('牙喉音')) return 'ui'; - return 'ai'; + if (is('合口 以母')) return 'ui'; + if (is('合口') && !is('牙喉音')) return 'ui'; + return 'ai'; } if (is('泰韻 幫組')) return 'ui'; if (is('泰韻 開口') && !is('幫組')) { - if (is('牙喉音 或 精組 或 泥孃母')) return 'oi'; - return 'aai'; + if (is('牙喉音 或 精組 或 泥孃母')) return 'oi'; + return 'aai'; } if (is('泰韻 合口') && !is('幫組')) return is('疑母') ? 'oi' : 'ai'; if (is('佳皆夬韻')) return 'aai'; @@ -185,10 +185,10 @@ function 韻母規則() { // 臻攝 if (is('眞臻文欣魂痕韻')) { - if (is('魂韻 精組')) return 'yun'; - if (is('魂韻 幫組')) return 'un'; - if (is('合口 三等') && !is('幫組') && !is('牙喉音')) return 'yun'; - return 'an'; + if (is('魂韻 精組')) return 'yun'; + if (is('魂韻 幫組')) return 'un'; + if (is('合口 三等') && !is('幫組') && !is('牙喉音')) return 'yun'; + return 'an'; } // 山攝 @@ -258,13 +258,13 @@ function 聲調規則() { if (is('上聲')) return '2'; // 陰上 if (is('去聲')) return '3'; // 陰去 if (is('入聲')) { - if (is('咸山江宕攝') || (is('梗攝 二等') && !is('影母'))){ // 清紐外轉字,影母特例 - if (is('咸攝 一等 影母')) return '1'; - return '3'; - } - if (is('梗攝 三等 莊組')) return '3'; - return '1'; // 清紐內轉字 - } + if (is('咸山江宕攝') || (is('庚耕韻 二等') && !is('影母'))){ // 清紐外轉字,梗攝二等影母特例 + if (is('覃談韻 一等 影母')) return '1'; // 咸攝 一等 影母 + return '3'; + } + if (is('庚清韻 三等 莊組')) return '3'; // 梗攝 三等 莊組 + return '1'; // 清紐內轉字 + } } else { if (is('平聲')) return '4'; // 陽平 if (is('全濁 上聲')) return '6'; // 陽去,全濁上變去 @@ -306,7 +306,7 @@ if (聲母 === 'hw' && 韻母.startsWith('a')) 聲母 = 'f'; // 南寧的 詠泳咏 濁去作上 -if (is('云匣母 合口 庚韻 去聲')) 聲調='5'; +if (is('云匣母 庚韻 合口 去聲')) 聲調='5'; // m 韻尾在聲母為脣音時為 n diff --git a/naamningdingzi.js b/naamningdingzi.js index 474f1ae..818e06f 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -47,12 +47,12 @@ function 聲母規則() { if (is('從母')) return 'z'; if (is('心母')) { - if (is('止攝 合口 三等 上聲 或 蟹攝 開口 一等 去聲 或 山攝 開口 一等 平聲')) return 's'; // 髓賽珊 + if (is('支脂之微韻 合口 上聲 或 支脂之微韻 開口 去聲 或 寒韻 開口 平聲')) return 's'; // 髓賽珊 return 'sl'; } if (is('邪母 平聲')) { - if (is('山臻攝 三等')) return 'sl'; + if (is('山仙元文臻眞欣韻 三等')) return 'sl'; // 山臻攝 三等 return 'z'; } if (is('邪母 仄聲')) return 'z'; @@ -73,66 +73,66 @@ function 聲母規則() { if (is('見母')) return 'g'; if (is('溪母')) { - if (is('模韻')) return 'h'; - if (is('開口') && !is('模韻')) { - if (is('侯韻')) return is('上聲') ? 'h' : 'k'; - if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; - if (is('尤韻 或 侵韻 入聲')) return 'j'; - return 'h'; - } - if (is('合口') && !is('模韻')) { - if (is('文韻 舒聲')) return 'kw'; - if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; - if (is('曾攝 一等 登韻 舒聲')) return 'w'; - return 'h'; - } - return 'h'; + if (is('模韻')) return 'h'; + if (is('開口') && !is('模韻')) { + if (is('侯韻')) return is('上聲') ? 'h' : 'k'; + if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; + if (is('尤韻 或 侵韻 入聲')) return 'j'; + return 'h'; + } + if (is('合口') && !is('模韻')) { + if (is('文韻 舒聲')) return 'kw'; + if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; + if (is('登韻 舒聲')) return 'w'; + return 'h'; + } + return 'h'; } if (is('羣母')) return is('平聲') ? 'k' : 'g'; if (is('疑母')) return 'ng'; if (is('曉母')) { - if (is('模韻')) return 'h'; - if (is('開口') && !is('模韻')) { - if (is('侯韻 去聲')) return 'k'; - if (is('尤韻 或 鍾韻 入聲')) return 'j'; - return 'h'; - } - if (is('合口') && !is('模韻')) { - if (is('梗攝 二等 庚耕韻 舒聲 或 曾攝 一等 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; - if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢韻 舒聲 或 蟹攝 二等')) return 'w'; - if (is('宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲')) return 'k'; - return 'h'; - } - return 'h'; + if (is('模韻')) return 'h'; + if (is('開口') && !is('模韻')) { + if (is('侯韻 去聲')) return 'k'; + if (is('尤韻 或 鍾韻 入聲')) return 'j'; + return 'h'; + } + if (is('合口') && !is('模韻')) { + if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; + if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; + if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 + return 'h'; + } + return 'h'; } if (is('匣母')) { - if (is('模韻')) return 'h'; - if (is('開口') && !is('模韻')) return 'h'; - if (is('合口') && !is('模韻')) { - if (is('一等 或 二等')) return is('通果宕攝') ? 'h' : 'w'; - if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; - } - return 'h'; + if (is('模韻')) return 'h'; + if (is('開口') && !is('模韻')) return 'h'; + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通果宕攝') ? 'h' : 'w'; + if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; + } + return 'h'; } if (is('影云以母')) { - if (is('模韻')) return 'w'; - if (is('開口') && !is('模韻')) { - if (is('三等 或 四等') && !is('影母 蟹曾梗臻通攝')) return 'j'; - if (is('云母 二等')) return 'w'; - if (is('一等 或 二等') && is('以母')) return 'j'; - return ''; - } - if (is('合口') && !is('模韻')) { - if (is('一等 或 二等')) return is('通果宕攝') ? '' : 'w'; - if (is('三等 或 四等')) { - if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝 或 梗攝 四等')) return is('影母 通果攝') ? '' : 'j'; - return 'w'; - } - } - return is('三四等') ? 'j' : ''; + if (is('模韻')) return 'w'; + if (is('開口') && !is('模韻')) { + if (is('三等 或 四等') && !is('影母 蟹曾梗臻通攝')) return 'j'; + if (is('云母 二等')) return 'w'; + if (is('一等 或 二等') && is('以母')) return 'j'; + return ''; + } + if (is('合口') && !is('模韻')) { + if (is('一等 或 二等')) return is('通果宕攝') ? '' : 'w'; + if (is('三等 或 四等')) { + if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝 或 青韻')) return is('影母 通果攝') ? '' : 'j'; + return 'w'; + } + } + return is('三四等') ? 'j' : ''; } throw new Error('無聲母規則'); @@ -148,8 +148,8 @@ function 韻母規則() { // 止攝 if (is('支脂之微韻 幫組')) return 'i'; if (is('支脂之微韻 開口') && !is('幫組')) { - if (is('精組 三等 或 莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'i'; - return 'i'; + if (is('精組 三等 或 莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'i'; + return 'i'; } if (is('支脂之微韻 合口 舌齒音')) return 'ui'; if (is('支脂之微韻 合口 牙喉音')) return 'ai'; @@ -161,9 +161,9 @@ function 韻母規則() { // 蟹攝 if (is('齊韻')) return 'ai'; if (is('祭韻')) { - if (is('合口 以母')) return 'ui'; - if (is('合口') && !is('牙喉音')) return 'ui'; - return 'ai'; + if (is('合口 以母')) return 'ui'; + if (is('合口') && !is('牙喉音')) return 'ui'; + return 'ai'; } if (is('泰韻 幫組')) return 'ui'; if (is('泰韻 開口') && !is('幫組')) return 'aai'; @@ -288,7 +288,7 @@ if (聲母 === 'nj' && 韻母.startsWith('i') && is('入聲')) 聲母 = 'n'; // 南寧的 詠泳咏 濁去作上 -if (is('云匣母 合口 庚韻 去聲')) 聲調='5'; +if (is('云匣母 庚韻 合口 去聲')) 聲調='5'; // m 韻尾在聲母為脣音時為 n From 2c7cd6cb3268ad98f83b944b8023f3aeb640ce74 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 14:19:51 +0800 Subject: [PATCH 08/24] fix space --- naamning.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/naamning.js b/naamning.js index 5f3b934..c802334 100644 --- a/naamning.js +++ b/naamning.js @@ -48,7 +48,7 @@ function 聲母規則() { if (is('從母')) return is('平聲') ? 'c' : 'z'; if (is('心母')) { - if (is('支脂之微韻 開口')) return is('支韻 上聲') ? 'sl' : 's'; // 徙璽 絲斯 + if (is('支脂之微韻 開口')) return is('支韻 上聲') ? 'sl' : 's'; // 徙璽 絲斯 if (is('支脂之微韻 合口 上聲 或 泰咍韻 開口 去聲 或 寒韻 開口 平聲')) return 's'; // 髓賽珊 return 'sl'; } @@ -82,13 +82,13 @@ function 聲母規則() { if (is('尤韻 或 侵韻 入聲')) return 'j'; return 'h'; } - if (is('合口') && !is('模韻')) { + if (is('合口') && !is('模韻')) { if (is('文韻 舒聲')) return 'kw'; if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('登韻 舒聲')) return 'w'; return 'h'; } - return 'h'; + return 'h'; } if (is('羣母')) return is('平聲') ? 'k' : 'g'; @@ -100,7 +100,7 @@ function 聲母規則() { if (is('侯韻 去聲')) return 'k'; if (is('尤韻 或 鍾韻 入聲')) return 'j'; return 'h'; - } + } if (is('合口') && !is('模韻')) { if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; From cbea2e898ff909b96d3ccbb30e3665cc6263a524 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 14:35:55 +0800 Subject: [PATCH 09/24] =?UTF-8?q?fix=20=E6=91=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- naamningdingzi.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/naamningdingzi.js b/naamningdingzi.js index 818e06f..1ff4238 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -29,7 +29,7 @@ function 聲母規則() { if (is('輕脣韻')) return 'f'; return 'b'; } - if (is('明母')) return is('遇臻攝 三等') ? 'f' : 'm'; + if (is('明母')) return is('魚虞眞臻文欣韻 三等') ? 'f' : 'm'; // 遇臻攝 三等 if (is('端母')) return 'd'; if (is('透母')) return 't'; From d9545c2737745882c7ac9ae57416ecfb7fd4e4b6 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 14:59:22 +0800 Subject: [PATCH 10/24] fix space --- naamning.js | 2 +- naamningdingzi.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/naamning.js b/naamning.js index c802334..bfc9f2b 100644 --- a/naamning.js +++ b/naamning.js @@ -306,7 +306,7 @@ if (聲母 === 'hw' && 韻母.startsWith('a')) 聲母 = 'f'; // 南寧的 詠泳咏 濁去作上 -if (is('云匣母 庚韻 合口 去聲')) 聲調='5'; +if (is('云匣母 庚韻 合口 去聲')) 聲調 = '5'; // m 韻尾在聲母為脣音時為 n diff --git a/naamningdingzi.js b/naamningdingzi.js index 1ff4238..3d89be7 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -288,7 +288,7 @@ if (聲母 === 'nj' && 韻母.startsWith('i') && is('入聲')) 聲母 = 'n'; // 南寧的 詠泳咏 濁去作上 -if (is('云匣母 庚韻 合口 去聲')) 聲調='5'; +if (is('云匣母 庚韻 合口 去聲')) 聲調 = '5'; // m 韻尾在聲母為脣音時為 n From 19e85a2bccab789d0cd93eeffcf14c70ded4803d Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 18:46:40 +0800 Subject: [PATCH 11/24] =?UTF-8?q?=E7=B0=A1=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- naamning.js | 20 ++++++++++---------- naamningdingzi.js | 12 ++++++------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/naamning.js b/naamning.js index bfc9f2b..1095df3 100644 --- a/naamning.js +++ b/naamning.js @@ -54,7 +54,7 @@ function 聲母規則() { } if (is('邪母 平聲')) { - if (is('山仙元文臻眞欣韻 三等')) return 'sl'; // 山臻攝 三等 + if (is('山臻攝 三等')) return 'sl'; return 'c'; } if (is('邪母 仄聲')) return 'z'; @@ -190,6 +190,9 @@ function 韻母規則() { if (is('合口 三等') && !is('幫組') && !is('牙喉音')) return 'yun'; return 'an'; } + if (is('元韻 幫組')) return 'aan'; + if (is('元韻 開口')) return 'in'; + if (is('元韻 合口')) return 'yun'; // 山攝 if (is('寒韻 幫組')) return 'un'; @@ -197,17 +200,14 @@ function 韻母規則() { if (is('寒韻 開口 牙喉音')) return 'on'; if (is('寒韻 合口 舌齒音')) return 'yun'; if (is('寒韻 合口 牙喉音')) return 'un'; - if (is('元韻 幫組')) return 'aan'; // 放山攝是個人習慣 - if (is('元韻 開口')) return 'in'; // 放山攝是個人習慣 - if (is('元韻 合口')) return 'yun'; // 放山攝是個人習慣 - if (is('刪山韻')) return 'aan'; + if (is('刪山韻')) return 'aan'; // is('見溪疑曉匣母') ? 'en' : 'aan'; 白讀 if (is('仙先韻 幫組')) return 'in'; if (is('仙先韻 開口')) return 'in'; if (is('仙先韻 合口')) return 'yun'; // 效攝 if (is('蕭宵韻')) return 'iu'; - if (is('肴韻')) return 'aau'; + if (is('肴韻')) return 'aau'; // !is('曉母') ? 'eu' : 'aau'; 白讀 if (is('豪韻')) return is('溪母') ? 'aau' : 'u'; // 果攝 @@ -247,7 +247,7 @@ function 韻母規則() { if (is('覃談韻 舌齒音')) return 'aam'; if (is('覃談韻 牙喉音')) return 'am'; if (is('鹽添嚴韻')) return 'im'; - if (is('咸銜凡韻')) return 'aam'; // return is('莊初崇見溪曉匣母') ? 'em' : 'aam'; 白讀。狎洽韻則是見莊初崇生知徹澄孃母。 + if (is('咸銜凡韻')) return 'aam'; // return is('莊初崇見溪曉匣母') ? 'em' : 'aam'; 白讀;狎洽韻則是見莊初崇生知徹澄孃母 throw new Error('無韻母規則'); } @@ -258,11 +258,11 @@ function 聲調規則() { if (is('上聲')) return '2'; // 陰上 if (is('去聲')) return '3'; // 陰去 if (is('入聲')) { - if (is('咸山江宕攝') || (is('庚耕韻 二等') && !is('影母'))){ // 清紐外轉字,梗攝二等影母特例 - if (is('覃談韻 一等 影母')) return '1'; // 咸攝 一等 影母 + if (is('咸山江宕攝') || (is('梗攝 二等') && !is('影母'))){ // 清紐外轉字,影母特例 + if (is('咸攝 一等 影母')) return '1'; return '3'; } - if (is('庚清韻 三等 莊組')) return '3'; // 梗攝 三等 莊組 + if (is('梗攝 三等 莊組')) return '3'; return '1'; // 清紐內轉字 } } else { diff --git a/naamningdingzi.js b/naamningdingzi.js index 3d89be7..df42fd3 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -29,7 +29,7 @@ function 聲母規則() { if (is('輕脣韻')) return 'f'; return 'b'; } - if (is('明母')) return is('魚虞眞臻文欣韻 三等') ? 'f' : 'm'; // 遇臻攝 三等 + if (is('明母')) return is('虞文韻') ? 'f' : 'm'; if (is('端母')) return 'd'; if (is('透母')) return 't'; @@ -52,7 +52,7 @@ function 聲母規則() { } if (is('邪母 平聲')) { - if (is('山仙元文臻眞欣韻 三等')) return 'sl'; // 山臻攝 三等 + if (is('山臻攝 三等')) return 'sl'; return 'z'; } if (is('邪母 仄聲')) return 'z'; @@ -175,14 +175,14 @@ function 韻母規則() { // 臻攝 if (is('眞臻文欣魂痕韻')) return is('魂韻 精組 或 魂韻 幫組') ? 'un' : 'an'; + if (is('元韻 幫組')) return 'aan'; + if (is('元韻 開口')) return 'in'; + if (is('元韻 合口')) return 'yun'; // 山攝 if (is('寒韻 幫組')) return 'un'; if (is('寒韻 開口')) return 'aan'; if (is('寒韻 合口')) return 'un'; - if (is('元韻 幫組')) return 'aan'; // 放山攝是個人習慣 - if (is('元韻 開口')) return 'in'; // 放山攝是個人習慣 - if (is('元韻 合口')) return 'yun'; // 放山攝是個人習慣 if (is('刪山韻')) return 'aan'; if (is('仙先韻 幫組')) return 'in'; if (is('仙先韻 開口')) return 'in'; @@ -241,7 +241,7 @@ function 聲調規則() { if (is('平聲')) return '1'; // 陰平 if (is('上聲')) return '2'; // 陰上 if (is('去聲')) return '3'; // 陰去 - if (is('入聲')) return '2'; + if (is('入聲')) return '2'; // 下陰入,上陰入屬外來層,不參與推導 } else { if (is('平聲')) return '4'; // 陽平 if (is('全濁 上聲')) return '6'; // 陽去,全濁上變去 From 3daf6d8d0efa87ff8a5c47ca4473b726d653941e Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 20:02:57 +0800 Subject: [PATCH 12/24] fix --- README.md | 4 ++-- naamning.js | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 66fd7f2..3e3af50 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ https://nk2028-1305783649.file.myqcloud.com/qieyun-examples/ - 推導《分韻撮要》擬音 (Extrapolated Reconstruction of _Fan-Wan Ts'üt-Iú_): `fanwan.js` - 推導普通話 (Extrapolated Putonghua): `putonghua.js` - 推導廣州音 (Extrapolated Cantonese): `gwongzau.js` -- 推導南寧白話 (Extrapolated Nanning Cantonese): `naamning.js` -- 推導南寧亭子平話 (Extrapolated Nanning Tingzi Cantonese): `naamningdingzi.js` +- 推導南寧白話 (Extrapolated Nanning Dialect): `naamning.js` +- 推導南寧亭子平話 (Extrapolated Nanning Tingzi Dialect): `naamningdingzi.js` - 推導上海話 (Extrapolated Shanghainese): `zaonhe.js` - 推導南京話 (Extrapolated Nankinese): `langjin.js` - 推導大埔話 (Extrapolated Taibu Hakka): `taibu.js` diff --git a/naamning.js b/naamning.js index 1095df3..c4ffd8a 100644 --- a/naamning.js +++ b/naamning.js @@ -82,13 +82,13 @@ function 聲母規則() { if (is('尤韻 或 侵韻 入聲')) return 'j'; return 'h'; } - if (is('合口') && !is('模韻')) { + if (is('合口') && !is('模韻')) { if (is('文韻 舒聲')) return 'kw'; if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('登韻 舒聲')) return 'w'; return 'h'; } - return 'h'; + return 'h'; } if (is('羣母')) return is('平聲') ? 'k' : 'g'; @@ -105,7 +105,7 @@ function 聲母規則() { if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 - if (is('通遇梗曾攝 或 山元先仙韻 四等') || (is('三等') && !is('陽韻 上聲')) ) return 'h'; + if (is('通遇梗曾攝 或 山元先仙韻 四等 或 三等') return is('陽韻 上聲') ? 'f' : 'h'; return 'f'; } return 'h'; @@ -262,8 +262,8 @@ function 聲調規則() { if (is('咸攝 一等 影母')) return '1'; return '3'; } - if (is('梗攝 三等 莊組')) return '3'; - return '1'; // 清紐內轉字 + if (is('梗攝 三等 莊組')) return '3'; + return '1'; // 清紐內轉字 } } else { if (is('平聲')) return '4'; // 陽平 From b81341fa95a4b1cf8ee5162bfbe283fb0c760968 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 20:45:52 +0800 Subject: [PATCH 13/24] fix --- naamning.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/naamning.js b/naamning.js index c4ffd8a..e061297 100644 --- a/naamning.js +++ b/naamning.js @@ -146,7 +146,7 @@ function 韻母規則() { if (is('東冬鍾韻')) return 'ung'; // 江攝 - if (is('江韻')) return 'ong'; + if (is('江韻')) return is('初生母 舒聲') ? 'oeng' : 'ong'; // 雙囪 // 止攝 if (is('支脂之微韻 幫組')) return 'i'; From d209ffa2d9b690a50b08edabc7e492c821bd5222 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Fri, 6 May 2022 23:51:03 +0800 Subject: [PATCH 14/24] fix bug --- naamning.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/naamning.js b/naamning.js index e061297..58ed418 100644 --- a/naamning.js +++ b/naamning.js @@ -105,7 +105,7 @@ function 聲母規則() { if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 - if (is('通遇梗曾攝 或 山元先仙韻 四等 或 三等') return is('陽韻 上聲') ? 'f' : 'h'; + if (is('通遇梗曾攝 或 山元先仙韻 四等 或 三等')) return is('陽韻 上聲') ? 'f' : 'h'; return 'f'; } return 'h'; @@ -146,7 +146,7 @@ function 韻母規則() { if (is('東冬鍾韻')) return 'ung'; // 江攝 - if (is('江韻')) return is('初生母 舒聲') ? 'oeng' : 'ong'; // 雙囪 + if (is('江韻')) return is('初生母 舒聲') ? 'oeng' : is('影母 入聲') ? 'ang' : 'ong'; // 雙囪握 // 止攝 if (is('支脂之微韻 幫組')) return 'i'; @@ -258,8 +258,8 @@ function 聲調規則() { if (is('上聲')) return '2'; // 陰上 if (is('去聲')) return '3'; // 陰去 if (is('入聲')) { - if (is('咸山江宕攝') || (is('梗攝 二等') && !is('影母'))){ // 清紐外轉字,影母特例 - if (is('咸攝 一等 影母')) return '1'; + if (is('咸山江宕攝 或 梗攝 二等')){ // 清紐外轉字,影母特例 + if (is('咸攝 一等 影母 或 江攝 影母 或 梗攝 影母')) return '1'; return '3'; } if (is('梗攝 三等 莊組')) return '3'; From c8b19e1189e4e907ea2c27e025e792c06cf076aa Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Sat, 7 May 2022 00:29:56 +0800 Subject: [PATCH 15/24] =?UTF-8?q?add=20=E9=9D=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- naamning.js | 16 ++++++++-------- naamningdingzi.js | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/naamning.js b/naamning.js index 58ed418..ca9c858 100644 --- a/naamning.js +++ b/naamning.js @@ -76,13 +76,13 @@ function 聲母規則() { if (is('溪母')) { if (is('模韻')) return 'f'; - if (is('開口') && !is('模韻')) { + if (is('開口 非 模韻')) { if (is('侯韻')) return is('上聲') ? 'h' : 'k'; if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; if (is('尤韻 或 侵韻 入聲')) return 'j'; return 'h'; } - if (is('合口') && !is('模韻')) { + if (is('合口 非 模韻')) { if (is('文韻 舒聲')) return 'kw'; if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('登韻 舒聲')) return 'w'; @@ -96,12 +96,12 @@ function 聲母規則() { if (is('曉母')) { if (is('模韻')) return 'f'; - if (is('開口') && !is('模韻')) { + if (is('開口 非 模韻')) { if (is('侯韻 去聲')) return 'k'; if (is('尤韻 或 鍾韻 入聲')) return 'j'; return 'h'; } - if (is('合口') && !is('模韻')) { + if (is('合口 非 模韻')) { if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 @@ -113,8 +113,8 @@ function 聲母規則() { if (is('匣母')) { if (is('模韻')) return 'w'; - if (is('開口') && !is('模韻')) return 'h'; - if (is('合口') && !is('模韻')) { + if (is('開口 非 模韻')) return 'h'; + if (is('合口 非 模韻')) { if (is('一等 或 二等')) return is('通攝') ? 'h' : 'w'; if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; } @@ -122,13 +122,13 @@ function 聲母規則() { } if (is('影云以母')) { if (is('模韻')) return 'w'; - if (is('開口') && !is('模韻')) { + if (is('開口 非 模韻')) { if (is('三等 或 四等') && !is('影母 蟹攝')) return 'j'; if (is('云母 二等')) return 'w'; if (is('一等 或 二等') && is('以母')) return 'j'; return ''; } - if (is('合口') && !is('模韻')) { + if (is('合口 非 模韻')) { if (is('一等 或 二等')) return is('通攝') ? '' : 'w'; if (is('三等 或 四等')) { if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝')) return 'j'; diff --git a/naamningdingzi.js b/naamningdingzi.js index df42fd3..f115d85 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -74,13 +74,13 @@ function 聲母規則() { if (is('溪母')) { if (is('模韻')) return 'h'; - if (is('開口') && !is('模韻')) { + if (is('開口 非 模韻')) { if (is('侯韻')) return is('上聲') ? 'h' : 'k'; if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; if (is('尤韻 或 侵韻 入聲')) return 'j'; return 'h'; } - if (is('合口') && !is('模韻')) { + if (is('合口 非 模韻')) { if (is('文韻 舒聲')) return 'kw'; if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('登韻 舒聲')) return 'w'; @@ -94,12 +94,12 @@ function 聲母規則() { if (is('曉母')) { if (is('模韻')) return 'h'; - if (is('開口') && !is('模韻')) { + if (is('開口 非 模韻')) { if (is('侯韻 去聲')) return 'k'; if (is('尤韻 或 鍾韻 入聲')) return 'j'; return 'h'; } - if (is('合口') && !is('模韻')) { + if (is('合口 非 模韻')) { if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 @@ -110,8 +110,8 @@ function 聲母規則() { if (is('匣母')) { if (is('模韻')) return 'h'; - if (is('開口') && !is('模韻')) return 'h'; - if (is('合口') && !is('模韻')) { + if (is('開口 非 模韻')) return 'h'; + if (is('合口 非 模韻')) { if (is('一等 或 二等')) return is('通果宕攝') ? 'h' : 'w'; if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; } @@ -119,13 +119,13 @@ function 聲母規則() { } if (is('影云以母')) { if (is('模韻')) return 'w'; - if (is('開口') && !is('模韻')) { + if (is('開口 非 模韻')) { if (is('三等 或 四等') && !is('影母 蟹曾梗臻通攝')) return 'j'; if (is('云母 二等')) return 'w'; if (is('一等 或 二等') && is('以母')) return 'j'; return ''; } - if (is('合口') && !is('模韻')) { + if (is('合口 非 模韻')) { if (is('一等 或 二等')) return is('通果宕攝') ? '' : 'w'; if (is('三等 或 四等')) { if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝 或 青韻')) return is('影母 通果攝') ? '' : 'j'; From 39e925adc03dd057a88702943ee38ecb7c596021 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Sat, 7 May 2022 16:41:50 +0800 Subject: [PATCH 16/24] fix explain --- naamning.js | 10 +++++----- naamningdingzi.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/naamning.js b/naamning.js index ca9c858..e9395ae 100644 --- a/naamning.js +++ b/naamning.js @@ -54,7 +54,7 @@ function 聲母規則() { } if (is('邪母 平聲')) { - if (is('山臻攝 三等')) return 'sl'; + if (is('山臻攝 三等')) return 'sl'; // 新派 return is('臻攝 合口 三等') ? 'c' : 'sl'; return 'c'; } if (is('邪母 仄聲')) return 'z'; @@ -187,7 +187,7 @@ function 韻母規則() { if (is('眞臻文欣魂痕韻')) { if (is('魂韻 精組')) return 'yun'; if (is('魂韻 幫組')) return 'un'; - if (is('合口 三等') && !is('幫組') && !is('牙喉音')) return 'yun'; + if (is('合口 三等') && !is('幫組') && !is('牙喉音')) return 'yun'; // 新派 return 'an'; return 'an'; } if (is('元韻 幫組')) return 'aan'; @@ -200,14 +200,14 @@ function 韻母規則() { if (is('寒韻 開口 牙喉音')) return 'on'; if (is('寒韻 合口 舌齒音')) return 'yun'; if (is('寒韻 合口 牙喉音')) return 'un'; - if (is('刪山韻')) return 'aan'; // is('見溪疑曉匣母') ? 'en' : 'aan'; 白讀 + if (is('刪山韻')) return 'aan'; // 白讀 return is('見溪疑曉匣母') ? 'en' : 'aan'; if (is('仙先韻 幫組')) return 'in'; if (is('仙先韻 開口')) return 'in'; if (is('仙先韻 合口')) return 'yun'; // 效攝 if (is('蕭宵韻')) return 'iu'; - if (is('肴韻')) return 'aau'; // !is('曉母') ? 'eu' : 'aau'; 白讀 + if (is('肴韻')) return 'aau'; // 白讀 return !is('曉母') ? 'eu' : 'aau'; if (is('豪韻')) return is('溪母') ? 'aau' : 'u'; // 果攝 @@ -247,7 +247,7 @@ function 韻母規則() { if (is('覃談韻 舌齒音')) return 'aam'; if (is('覃談韻 牙喉音')) return 'am'; if (is('鹽添嚴韻')) return 'im'; - if (is('咸銜凡韻')) return 'aam'; // return is('莊初崇見溪曉匣母') ? 'em' : 'aam'; 白讀;狎洽韻則是見莊初崇生知徹澄孃母 + if (is('咸銜凡韻')) return 'aam'; // 白讀 { return is('銜咸韻 舒聲 莊初崇見溪曉匣母') ? 'em' : 'aam'; return is('銜咸韻 入聲 見莊初崇生知徹澄孃母') ? 'em' : 'aam'; } throw new Error('無韻母規則'); } diff --git a/naamningdingzi.js b/naamningdingzi.js index f115d85..7f065e7 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -156,7 +156,7 @@ function 韻母規則() { // 遇攝 if (is('魚虞韻')) return is('幫組 或 莊組') ? 'u' : 'yu'; // 莊組部分字o - if (is('模韻')) return 'u'; // 新派疑母字讀零聲母 + if (is('模韻')) return 'u'; // 新派 return is('疑母') ? '' : 'u'; // 蟹攝 if (is('齊韻')) return 'ai'; From ae4dd42a985ac50d5753b4a22bb49276bffe69d4 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Sun, 8 May 2022 22:38:03 +0800 Subject: [PATCH 17/24] =?UTF-8?q?add=20=E6=96=B0=E8=80=81=E6=B4=BE=20?= =?UTF-8?q?=E6=96=87=E7=99=BD=E8=AE=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- naamning.js | 51 ++++++++++++++++++++++++++++++++++++++++------- naamningdingzi.js | 18 ++++++++++++++--- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/naamning.js b/naamning.js index e9395ae..28eeb57 100644 --- a/naamning.js +++ b/naamning.js @@ -12,7 +12,10 @@ * @author LeiMaau */ -if (!音韻地位) return [['$legacy', true]]; +if (!音韻地位) return [ + ['文白讀', [1, '白讀', '文讀']], + ['新老派', [2, '新派', '老派']] +]; const is = (x) => 音韻地位.屬於(x); @@ -54,7 +57,11 @@ function 聲母規則() { } if (is('邪母 平聲')) { - if (is('山臻攝 三等')) return 'sl'; // 新派 return is('臻攝 合口 三等') ? 'c' : 'sl'; + if (選項.新老派 === '老派') { + if (is('山臻攝 三等')) return 'sl'; + } else { + if (is('山臻攝 三等')) return is('臻攝 合口 三等') ? 'c' : 'sl'; + } return 'c'; } if (is('邪母 仄聲')) return 'z'; @@ -151,7 +158,13 @@ function 韻母規則() { // 止攝 if (is('支脂之微韻 幫組')) return 'i'; if (is('支脂之微韻 開口') && !is('幫組')) { - if (is('精莊組')) return is('心生母 支韻 上聲') ? 'ai' : 'y'; + if (is('精莊組')) { + if (選項.新老派 === '老派') { + return is('心生母 支韻 上聲') ? 'ai' : 'y'; + } else { + return is('心生母 支韻 上聲') ? 'ai' : 'i'; + } + } return 'i'; } if (is('支脂之微韻 合口 舌齒音')) return 'ui'; @@ -187,7 +200,13 @@ function 韻母規則() { if (is('眞臻文欣魂痕韻')) { if (is('魂韻 精組')) return 'yun'; if (is('魂韻 幫組')) return 'un'; - if (is('合口 三等') && !is('幫組') && !is('牙喉音')) return 'yun'; // 新派 return 'an'; + if (is('合口 三等') && !is('幫組') && !is('牙喉音')) { + if (選項.新老派 === '老派') { + return 'yun'; + } else { + return 'an'; + } + } return 'an'; } if (is('元韻 幫組')) return 'aan'; @@ -200,14 +219,26 @@ function 韻母規則() { if (is('寒韻 開口 牙喉音')) return 'on'; if (is('寒韻 合口 舌齒音')) return 'yun'; if (is('寒韻 合口 牙喉音')) return 'un'; - if (is('刪山韻')) return 'aan'; // 白讀 return is('見溪疑曉匣母') ? 'en' : 'aan'; + if (is('刪山韻')) { + if (選項.文白讀 === '文讀') { + return 'aan'; + } else { + return is('見溪疑曉匣母 或 山韻 幫母') ? 'en' : 'aan'; + } + } if (is('仙先韻 幫組')) return 'in'; if (is('仙先韻 開口')) return 'in'; if (is('仙先韻 合口')) return 'yun'; // 效攝 if (is('蕭宵韻')) return 'iu'; - if (is('肴韻')) return 'aau'; // 白讀 return !is('曉母') ? 'eu' : 'aau'; + if (is('肴韻')) { + if (選項.文白讀 === '文讀') { + return 'aau'; + } else { + return !is('曉母') ? 'eu' : 'aau'; + } + } if (is('豪韻')) return is('溪母') ? 'aau' : 'u'; // 果攝 @@ -247,7 +278,13 @@ function 韻母規則() { if (is('覃談韻 舌齒音')) return 'aam'; if (is('覃談韻 牙喉音')) return 'am'; if (is('鹽添嚴韻')) return 'im'; - if (is('咸銜凡韻')) return 'aam'; // 白讀 { return is('銜咸韻 舒聲 莊初崇見溪曉匣母') ? 'em' : 'aam'; return is('銜咸韻 入聲 見莊初崇生知徹澄孃母') ? 'em' : 'aam'; } + if (is('咸銜凡韻')) { + if (選項.文白讀 === '文讀') { + return 'aam'; + } else { + return is('銜咸韻 舒聲 莊初崇見溪曉匣母') ? 'em' : is('銜咸韻 入聲 見莊初崇生知徹澄孃母') ? 'em' : 'aam'; + } + } throw new Error('無韻母規則'); } diff --git a/naamningdingzi.js b/naamningdingzi.js index 7f065e7..9b360c6 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -12,7 +12,7 @@ * @author LeiMaau */ -if (!音韻地位) return [['$legacy', true]]; +if (!音韻地位) return [['新老派', [2, '新派', '老派']]]; const is = (x) => 音韻地位.屬於(x); @@ -29,7 +29,13 @@ function 聲母規則() { if (is('輕脣韻')) return 'f'; return 'b'; } - if (is('明母')) return is('虞文韻') ? 'f' : 'm'; + if (is('明母')) { + if (選項.新老派 === '老派') { + return is('虞文韻') ? 'f' : 'm'; + } else { + return 'm'; + } + } if (is('端母')) return 'd'; if (is('透母')) return 't'; @@ -156,7 +162,13 @@ function 韻母規則() { // 遇攝 if (is('魚虞韻')) return is('幫組 或 莊組') ? 'u' : 'yu'; // 莊組部分字o - if (is('模韻')) return 'u'; // 新派 return is('疑母') ? '' : 'u'; + if (is('模韻')) { + if (選項.新老派 === '老派') { + return 'u'; + } else { + return is('疑母') ? '' : 'u'; + } + } // 蟹攝 if (is('齊韻')) return 'ai'; From 30a263726a0738551889f3df0fc6717c7ad61ed5 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Sun, 8 May 2022 22:45:33 +0800 Subject: [PATCH 18/24] fix seq --- naamning.js | 2 +- naamningdingzi.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/naamning.js b/naamning.js index 28eeb57..c634133 100644 --- a/naamning.js +++ b/naamning.js @@ -14,7 +14,7 @@ if (!音韻地位) return [ ['文白讀', [1, '白讀', '文讀']], - ['新老派', [2, '新派', '老派']] + ['新老派', [1, '新派', '老派']] ]; const is = (x) => 音韻地位.屬於(x); diff --git a/naamningdingzi.js b/naamningdingzi.js index 9b360c6..9494231 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -12,7 +12,7 @@ * @author LeiMaau */ -if (!音韻地位) return [['新老派', [2, '新派', '老派']]]; +if (!音韻地位) return [['新老派', [1, '新派', '老派']]]; const is = (x) => 音韻地位.屬於(x); From b1cc6f542bf19d36bf773eeb0e1e6a556e79c5b1 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Mon, 9 May 2022 00:53:02 +0800 Subject: [PATCH 19/24] fix --- naamning.js | 16 +++++++++------- naamningdingzi.js | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/naamning.js b/naamning.js index c634133..34068e0 100644 --- a/naamning.js +++ b/naamning.js @@ -13,8 +13,8 @@ */ if (!音韻地位) return [ - ['文白讀', [1, '白讀', '文讀']], - ['新老派', [1, '新派', '老派']] + ['文白讀', [2, '白讀', '文讀']], + ['新老派', [2, '新派', '老派']] ]; const is = (x) => 音韻地位.屬於(x); @@ -57,11 +57,13 @@ function 聲母規則() { } if (is('邪母 平聲')) { - if (選項.新老派 === '老派') { - if (is('山臻攝 三等')) return 'sl'; - } else { - if (is('山臻攝 三等')) return is('臻攝 合口 三等') ? 'c' : 'sl'; - } + if (is('山臻攝 三等')) { + if (選項.新老派 === '老派') { + return 'sl'; + } else { + return is('臻攝 合口 三等') ? 'c' : 'sl'; + } + } return 'c'; } if (is('邪母 仄聲')) return 'z'; diff --git a/naamningdingzi.js b/naamningdingzi.js index 9494231..9b360c6 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -12,7 +12,7 @@ * @author LeiMaau */ -if (!音韻地位) return [['新老派', [1, '新派', '老派']]]; +if (!音韻地位) return [['新老派', [2, '新派', '老派']]]; const is = (x) => 音韻地位.屬於(x); From f64825a47df5641ee09409769f9d68f06b59289a Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Mon, 9 May 2022 00:56:09 +0800 Subject: [PATCH 20/24] fix space --- naamning.js | 4 ++-- naamningdingzi.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/naamning.js b/naamning.js index 34068e0..e65b479 100644 --- a/naamning.js +++ b/naamning.js @@ -2,7 +2,7 @@ * * https://github.com/leimaau/naamning_jyutping * - * version: 2022-05-04 + * version: 2022-05-09 * * 【符號說明】 * 心母字讀 sl[ɬ](清齒齦邊擦音),效咸山攝二等字讀 -eu[-ɛu]、-em[-ɛm]/-ep[-ɛp]、-en[-ɛn]/-et[-ɛt],但演變不平衡,以下只推導文讀音,同理,梗三四的演變不平衡,以下也只推導文讀音 @@ -63,7 +63,7 @@ function 聲母規則() { } else { return is('臻攝 合口 三等') ? 'c' : 'sl'; } - } + } return 'c'; } if (is('邪母 仄聲')) return 'z'; diff --git a/naamningdingzi.js b/naamningdingzi.js index 9b360c6..d7d3147 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -2,7 +2,7 @@ * * https://github.com/leimaau/naamning_jyutping * - * version: 2022-05-04 + * version: 2022-05-09 * * 【符號說明】 * 心母字讀 sl[ɬ](清齒齦邊擦音),日母和疑母細音字讀 nj[ȵ](齦齶音) From 126605c7f0cfcbce7646b6172fc0d07d7e6c4635 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Mon, 9 May 2022 01:35:46 +0800 Subject: [PATCH 21/24] update file --- naamning.js | 54 +++++++++++++++++++++++---------------------- naamningdingzi.js | 56 ++++++++++++++++++++++++----------------------- 2 files changed, 57 insertions(+), 53 deletions(-) diff --git a/naamning.js b/naamning.js index e65b479..b997e4a 100644 --- a/naamning.js +++ b/naamning.js @@ -85,13 +85,13 @@ function 聲母規則() { if (is('溪母')) { if (is('模韻')) return 'f'; - if (is('開口 非 模韻')) { + if (is('開口')) { if (is('侯韻')) return is('上聲') ? 'h' : 'k'; if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; if (is('尤韻 或 侵韻 入聲')) return 'j'; return 'h'; } - if (is('合口 非 模韻')) { + if (is('合口')) { if (is('文韻 舒聲')) return 'kw'; if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('登韻 舒聲')) return 'w'; @@ -105,12 +105,12 @@ function 聲母規則() { if (is('曉母')) { if (is('模韻')) return 'f'; - if (is('開口 非 模韻')) { + if (is('開口')) { if (is('侯韻 去聲')) return 'k'; if (is('尤韻 或 鍾韻 入聲')) return 'j'; return 'h'; } - if (is('合口 非 模韻')) { + if (is('合口')) { if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 @@ -122,24 +122,24 @@ function 聲母規則() { if (is('匣母')) { if (is('模韻')) return 'w'; - if (is('開口 非 模韻')) return 'h'; - if (is('合口 非 模韻')) { - if (is('一等 或 二等')) return is('通攝') ? 'h' : 'w'; - if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; + if (is('開口')) return 'h'; + if (is('合口')) { + if (is('一二等')) return is('通攝') ? 'h' : 'w'; + if (is('三四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; } return 'h'; } if (is('影云以母')) { if (is('模韻')) return 'w'; - if (is('開口 非 模韻')) { - if (is('三等 或 四等') && !is('影母 蟹攝')) return 'j'; + if (is('開口')) { + if (is('三四等 非 (影母 蟹攝)')) return 'j'; if (is('云母 二等')) return 'w'; - if (is('一等 或 二等') && is('以母')) return 'j'; + if (is('一二等 以母')) return 'j'; return ''; } - if (is('合口 非 模韻')) { - if (is('一等 或 二等')) return is('通攝') ? '' : 'w'; - if (is('三等 或 四等')) { + if (is('合口')) { + if (is('一二等')) return is('通攝') ? '' : 'w'; + if (is('三四等')) { if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝')) return 'j'; return 'w'; } @@ -202,7 +202,7 @@ function 韻母規則() { if (is('眞臻文欣魂痕韻')) { if (is('魂韻 精組')) return 'yun'; if (is('魂韻 幫組')) return 'un'; - if (is('合口 三等') && !is('幫組') && !is('牙喉音')) { + if (is('合口 三等 舌齒音')) { if (選項.新老派 === '老派') { return 'yun'; } else { @@ -259,10 +259,10 @@ function 韻母規則() { if (is('唐韻')) return 'ong'; // 梗攝 - if (is('庚韻 二等')) return is('影見曉母 或 溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; + if (is('庚韻 二等')) return is('影見曉母 或 溪匣母 上去聲') ? 'ang' : 'aang'; if (is('庚韻 三等 莊組')) return 'aang'; if (is('庚韻 三等')) return 'ing'; - if (is('耕韻')) return is('影見曉母 或 溪匣母 上聲 或 溪匣母 去聲') ? 'ang' : 'aang'; + if (is('耕韻')) return is('影見曉母 或 溪匣母 上去聲') ? 'ang' : 'aang'; if (is('清青韻')) return 'ing'; // 曾攝 @@ -298,7 +298,7 @@ function 聲調規則() { if (is('去聲')) return '3'; // 陰去 if (is('入聲')) { if (is('咸山江宕攝 或 梗攝 二等')){ // 清紐外轉字,影母特例 - if (is('咸攝 一等 影母 或 江攝 影母 或 梗攝 影母')) return '1'; + if (is('(咸攝 一等 或 江梗攝) 影母')) return '1'; return '3'; } if (is('梗攝 三等 莊組')) return '3'; @@ -329,14 +329,16 @@ if (is('合口') && !['u', 'o', 'yu'].some((x) => 韻母.startsWith(x))) { // // 疑母拼細音時: i-類和oe-類 入聲n- 舒聲j-;yu類 舒入聲j-;u-類 ngung/k->jung/k,ngun/t->wun/t,ngu不變 -const is細音i和oe類 = ['i', 'oe'].some((x) => 韻母.startsWith(x)); -const is細音yu類 = ['yu'].some((x) => 韻母.startsWith(x)); -const is細音u類 = ['u'].some((x) => 韻母.startsWith(x)); -if (聲母 === 'ng' && is細音i和oe類 && is('入聲')) 聲母 = 'n'; -if (聲母 === 'ng' && is細音i和oe類 && is('舒聲')) 聲母 = 'j'; -if (聲母 === 'ng' && is細音yu類) 聲母 = 'j'; -if (聲母 === 'ng' && is細音u類 && 韻母 === 'ung') 聲母 = 'j'; -if (聲母 === 'ng' && is細音u類 && 韻母 === 'un') 聲母 = 'w'; +if (聲母 === 'ng') { + const is細音i和oe類 = ['i', 'oe'].some((x) => 韻母.startsWith(x)); + const is細音yu類 = ['yu'].some((x) => 韻母.startsWith(x)); + const is細音u類 = ['u'].some((x) => 韻母.startsWith(x)); + if (is細音i和oe類 && is('入聲')) 聲母 = 'n'; + if (is細音i和oe類 && is('舒聲')) 聲母 = 'j'; + if (is細音yu類) 聲母 = 'j'; + if (is細音u類 && 韻母 === 'ung') 聲母 = 'j'; + if (is細音u類 && 韻母 === 'un') 聲母 = 'w'; +} // 其他變換 if (聲母 === 'w' && 韻母 === 'yu') 聲母 = 'j'; // 保險起見再寫一遍 diff --git a/naamningdingzi.js b/naamningdingzi.js index d7d3147..4fb0831 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -30,11 +30,11 @@ function 聲母規則() { return 'b'; } if (is('明母')) { - if (選項.新老派 === '老派') { - return is('虞文韻') ? 'f' : 'm'; - } else { - return 'm'; - } + if (選項.新老派 === '老派') { + return is('虞文韻') ? 'f' : 'm'; + } else { + return 'm'; + } } if (is('端母')) return 'd'; @@ -80,13 +80,13 @@ function 聲母規則() { if (is('溪母')) { if (is('模韻')) return 'h'; - if (is('開口 非 模韻')) { + if (is('開口')) { if (is('侯韻')) return is('上聲') ? 'h' : 'k'; if (is('果假攝 或 鍾先仙陽江韻 入聲 或 佳皆齊宵支陽韻 舒聲 或 庚韻 三等 入聲 或 唐咍韻 去聲')) return 'k'; if (is('尤韻 或 侵韻 入聲')) return 'j'; return 'h'; } - if (is('合口 非 模韻')) { + if (is('合口')) { if (is('文韻 舒聲')) return 'kw'; if (is('果遇止假梗宕攝 或 先仙元韻 入聲 或 皆佳祭齊魂眞韻 舒聲')) return 'k'; if (is('登韻 舒聲')) return 'w'; @@ -100,12 +100,12 @@ function 聲母規則() { if (is('曉母')) { if (is('模韻')) return 'h'; - if (is('開口 非 模韻')) { + if (is('開口')) { if (is('侯韻 去聲')) return 'k'; if (is('尤韻 或 鍾韻 入聲')) return 'j'; return 'h'; } - if (is('合口 非 模韻')) { + if (is('合口')) { if (is('庚耕韻 二等 舒聲 或 登韻 舒聲 或 蒸青清韻 入聲')) return 'gw'; if (is('止攝 或 寒韻 去聲 或 文魂祭齊廢佳皆夬韻 舒聲')) return 'w'; if (is('陽韻 去聲 或 陽韻 入聲 或 唐韻 入聲')) return 'k'; // 宕攝 三等 去聲 或 宕攝 三等 入聲 或 宕攝 一等 入聲 @@ -116,24 +116,24 @@ function 聲母規則() { if (is('匣母')) { if (is('模韻')) return 'h'; - if (is('開口 非 模韻')) return 'h'; - if (is('合口 非 模韻')) { - if (is('一等 或 二等')) return is('通果宕攝') ? 'h' : 'w'; - if (is('三等 或 四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; + if (is('開口')) return 'h'; + if (is('合口')) { + if (is('一二等')) return is('通果宕攝') ? 'h' : 'w'; + if (is('三四等')) return is('通攝') ? 'j' : is('咸攝') ? 'h' : 'w'; } return 'h'; } if (is('影云以母')) { if (is('模韻')) return 'w'; - if (is('開口 非 模韻')) { - if (is('三等 或 四等') && !is('影母 蟹曾梗臻通攝')) return 'j'; + if (is('開口')) { + if (is('三四等 非 (影母 蟹曾梗臻通攝)')) return 'j'; if (is('云母 二等')) return 'w'; - if (is('一等 或 二等') && is('以母')) return 'j'; + if (is('一二等 以母')) return 'j'; return ''; } - if (is('合口 非 模韻')) { - if (is('一等 或 二等')) return is('通果宕攝') ? '' : 'w'; - if (is('三等 或 四等')) { + if (is('合口')) { + if (is('一二等')) return is('通果宕攝') ? '' : 'w'; + if (is('三四等')) { if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝 或 青韻')) return is('影母 通果攝') ? '' : 'j'; return 'w'; } @@ -154,7 +154,7 @@ function 韻母規則() { // 止攝 if (is('支脂之微韻 幫組')) return 'i'; if (is('支脂之微韻 開口') && !is('幫組')) { - if (is('精組 三等 或 莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'i'; + if (is('精莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'i'; return 'i'; } if (is('支脂之微韻 合口 舌齒音')) return 'ui'; @@ -279,13 +279,15 @@ if (is('合口') && !['u', 'o', 'yu'].some((x) => 韻母.startsWith(x))) { // // 疑母拼細音時: i-類和oe-類 nj-;yu類 j-;u-類 ngung/k->njung/k,ngun/t->wun/t,ngu不變 -const is細音i和oe類 = ['i', 'oe'].some((x) => 韻母.startsWith(x)); -const is細音yu類 = ['yu'].some((x) => 韻母.startsWith(x)); -const is細音u類 = ['u'].some((x) => 韻母.startsWith(x)); -if (聲母 === 'ng' && is細音i和oe類) 聲母 = 'nj'; -if (聲母 === 'ng' && is細音yu類) 聲母 = 'j'; -if (聲母 === 'ng' && is細音u類 && 韻母 === 'ung') 聲母 = 'nj'; -if (聲母 === 'ng' && is細音u類 && 韻母 === 'un') 聲母 = 'w'; +if (聲母 === 'ng') { + const is細音i和oe類 = ['i', 'oe'].some((x) => 韻母.startsWith(x)); + const is細音yu類 = ['yu'].some((x) => 韻母.startsWith(x)); + const is細音u類 = ['u'].some((x) => 韻母.startsWith(x)); + if (is細音i和oe類) 聲母 = 'nj'; + if (is細音yu類) 聲母 = 'j'; + if (is細音u類 && 韻母 === 'ung') 聲母 = 'nj'; + if (is細音u類 && 韻母 === 'un') 聲母 = 'w'; +} // 其他變換 if (聲母 === 'w' && 韻母 === 'yu') 聲母 = 'j'; // 保險起見再寫一遍 From d1f90719a13cc81be9e9db9894020be42e104b94 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Mon, 9 May 2022 01:43:16 +0800 Subject: [PATCH 22/24] fix space --- naamning.js | 4 ++-- naamningdingzi.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/naamning.js b/naamning.js index b997e4a..f8829ef 100644 --- a/naamning.js +++ b/naamning.js @@ -140,8 +140,8 @@ function 聲母規則() { if (is('合口')) { if (is('一二等')) return is('通攝') ? '' : 'w'; if (is('三四等')) { - if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝')) return 'j'; - return 'w'; + if (is('通果攝 或 以母 蟹攝 或 影云母 咸攝')) return 'j'; + return 'w'; } } return is('三四等') ? 'j' : ''; diff --git a/naamningdingzi.js b/naamningdingzi.js index 4fb0831..ecf1161 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -154,14 +154,14 @@ function 韻母規則() { // 止攝 if (is('支脂之微韻 幫組')) return 'i'; if (is('支脂之微韻 開口') && !is('幫組')) { - if (is('精莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'i'; - return 'i'; + if (is('精莊組 三等')) return is('心生母 支韻 上聲') ? 'ai' : 'i'; + return 'i'; } if (is('支脂之微韻 合口 舌齒音')) return 'ui'; if (is('支脂之微韻 合口 牙喉音')) return 'ai'; // 遇攝 - if (is('魚虞韻')) return is('幫組 或 莊組') ? 'u' : 'yu'; // 莊組部分字o + if (is('魚虞韻')) return is('幫莊組') ? 'u' : 'yu'; // 莊組部分字o if (is('模韻')) { if (選項.新老派 === '老派') { return 'u'; @@ -186,7 +186,7 @@ function 韻母規則() { if (is('廢韻')) return is('幫組') ? 'i' : 'ai'; // 臻攝 - if (is('眞臻文欣魂痕韻')) return is('魂韻 精組 或 魂韻 幫組') ? 'un' : 'an'; + if (is('眞臻文欣魂痕韻')) return is('魂韻 精幫組') ? 'un' : 'an'; if (is('元韻 幫組')) return 'aan'; if (is('元韻 開口')) return 'in'; if (is('元韻 合口')) return 'yun'; From afd0567295526fae88771c999ad98893a45fc9eb Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Tue, 28 Jun 2022 12:33:11 +0800 Subject: [PATCH 23/24] fix --- naamning.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/naamning.js b/naamning.js index f8829ef..6918e54 100644 --- a/naamning.js +++ b/naamning.js @@ -225,7 +225,7 @@ function 韻母規則() { if (選項.文白讀 === '文讀') { return 'aan'; } else { - return is('見溪疑曉匣母 或 山韻 幫母') ? 'en' : 'aan'; + return is('見溪疑曉匣母 或 山韻 幫母 入聲') ? 'en' : 'aan'; } } if (is('仙先韻 幫組')) return 'in'; From aa62a135df818e938ebdbe1bf1a8c4ae466a24d4 Mon Sep 17 00:00:00 2001 From: leimaau <229042136@qq.com> Date: Mon, 22 Aug 2022 10:38:29 +0800 Subject: [PATCH 24/24] =?UTF-8?q?fix=20=E9=99=BD=E9=9F=BB=20=E5=B9=AB?= =?UTF-8?q?=E7=B5=84=20and=20add=20=E6=A2=97=E6=94=9D=20=E6=96=B0=E8=80=81?= =?UTF-8?q?=E6=B4=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- naamning.js | 2 +- naamningdingzi.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/naamning.js b/naamning.js index 6918e54..6fdb3fc 100644 --- a/naamning.js +++ b/naamning.js @@ -346,7 +346,7 @@ if (聲母 === 'h' && (韻母 === 'ui' || 韻母 === 'un')) 聲母 = 'f'; // 保 if (聲母 === 'hw' && 韻母.startsWith('a')) 聲母 = 'f'; -// 南寧的 詠泳咏 濁去作上 +// 南寧的 詠泳咏 讀陽上 if (is('云匣母 庚韻 合口 去聲')) 聲調 = '5'; diff --git a/naamningdingzi.js b/naamningdingzi.js index ecf1161..ccaad0b 100644 --- a/naamningdingzi.js +++ b/naamningdingzi.js @@ -215,7 +215,7 @@ function 韻母規則() { if (is('麻韻 三等')) return 'e'; // 宕攝 - if (is('陽韻 幫組')) return 'aang'; + if (is('陽韻 幫組')) return 'ung'; if (is('陽韻 開口 莊組')) return 'aang'; if (is('陽韻 開口')) return 'iang'; if (is('陽韻 合口')) return 'ung'; @@ -224,10 +224,10 @@ function 韻母規則() { if (is('唐韻 合口')) return 'ung'; // 梗攝 - if (is('庚韻 二等')) return is('影見曉幫滂並母') ? 'ang' : 'iang'; + if (is('庚韻 二等')) return is('影見曉幫滂並母') ? 'ang' : (選項.新老派 === '老派') ? 'iang' : 'aang'; if (is('庚韻 三等 莊組')) return 'iang'; if (is('庚韻 三等')) return 'ing'; - if (is('耕韻')) return is('影見曉幫滂並母') ? 'ang' : 'iang'; + if (is('耕韻')) return is('影見曉幫滂並母') ? 'ang' : (選項.新老派 === '老派') ? 'iang' : 'ang'; if (is('清青韻')) return 'ing'; // 曾攝 @@ -301,7 +301,7 @@ if (聲母 === 'nj' && (韻母 === 'ing' || 韻母 === 'iang')) 聲母 = 'ng'; if (聲母 === 'nj' && 韻母.startsWith('i') && is('入聲')) 聲母 = 'n'; -// 南寧的 詠泳咏 濁去作上 +// 南寧的 詠泳咏 讀陽上 if (is('云匣母 庚韻 合口 去聲')) 聲調 = '5';