/* Kagayada Cantonese
* 架空輝田廣語
* Author: @POLARIS516
* BStation UID: 544647573
*/
if (!音韻地位) return [
['$legacy', true],
['標調法', [2, '序號', '無標']]
];
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 '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 'zh';
if (is('徹母')) return 'ch';
if (is('澄母')) return is('平聲') ? 'ch' : 'zh';
if (is('孃母')) return 'n';
if (is('精母')) return 'z';
if (is('清母')) return 'c';
if (is('從母')) return is('平聲') ? 'c' : 'z';
if (is('心母')) {
if (is('支脂之微韻 合口 上聲 或 支脂之微韻 開口 去聲 或 寒韻 開口 平聲')) return 's'; // 髓賽珊
return 'th';
}
if (is('邪母 平聲')) {
if (is('山臻攝 三等')) return 'th';
return 'r';
}
if (is('邪母 仄聲')) return 'r';
if (is('莊母')) return 'z';
if (is('初母')) return 'c';
if (is('崇母')) return is('平聲') ? 'c' : 'z';
if (is('生母')) return 's';
if (is('俟母')) return is('平聲') ? 'c' : 'z';
if (is('章母')) return 'zh';
if (is('昌母')) return 'ch';
if (is('常母')) return 'sh';
if (is('書母')) return 'sh';
if (is('船母')) return 'sh';
if (is('日母')) return 'y';
if (is('見母')) return 'g';
if (is('溪母')) return 'k';
if (is('羣母')) return is('平聲') ? 'k' : 'g';
if (is('疑母')) {
if (is('魚虞韻 或 元仙先韻 或 陽韻 開口 或 通攝 三四等')) return 'y';
if (is('模韻')) return 'ng';
return '';
}
if (is('曉母')) {
if (is('模韻')) return 'f';
return 'h';
}
if (is('匣母')) {
if (is('模韻')) return 'w';
if (is('合口')) return 'w'; // 非 yu 前為 w,詳後
return 'h';
}
if (is('影云以母')) {
if (is('模韻')) return 'w';
if (is('三四等')) return 'y'; // 非 yu 前為 w,詳後
return '';
}
throw new Error('無聲母規則');
}
function 韻母規則() {
// 通攝
if (is('東冬鍾韻')) return 'ong';
// 江攝
if (is('江韻')) return 'ang';
// 止攝
if (is('支脂之微韻 幫組')) return 'ei';
if (is('支脂之微韻 開口 舌齒音 端組')) return 'ei';
if (is('支脂之微韻 開口 舌齒音 來母')) return 'ei';
if (is('支脂之微韻 開口 舌齒音 孃母')) return 'ei';
if (is('支脂之微韻 開口 舌齒音')) return 'i';
if (is('支脂之微韻 開口 牙喉音 疑母')) return 'i';
if (is('支脂之微韻 開口 牙喉音 影母')) return 'i';
if (is('支脂之微韻 開口 牙喉音 云母')) return 'i';
if (is('支脂之微韻 開口 牙喉音 以母')) return 'i';
if (is('支脂之微韻 開口 牙喉音')) return 'ei';
if (is('支脂之微韻 合口 舌齒音')) return 'ei';
if (is('支脂之微韻 合口 牙喉音')) return 'e';
// 遇攝
if (is('魚虞韻 幫組 幫滂並母')) return 'u';
if (is('魚虞韻 幫組 明母')) return 'ou';
if (is('魚虞韻 舌齒音 端組')) return 'ui';
if (is('魚虞韻 舌齒音 來母')) return 'ui';
if (is('魚虞韻 舌齒音 孃母')) return 'ui';
if (is('魚虞韻 舌齒音 精組')) return 'ui';
if (is('魚虞韻 舌齒音 莊組')) return 'o';
if (is('魚虞韻 舌齒音')) return 'u';
if (is('魚虞韻 牙喉音 見溪羣母')) return 'ui';
if (is('魚虞韻 牙喉音 曉匣母')) return 'ui';
if (is('魚虞韻 牙喉音')) return 'i';
if (is('模韻 脣音')) return 'ou';
if (is('模韻 舌齒音')) return 'ou';
if (is('模韻 牙喉音 疑母')) return '';
if (is('模韻 牙喉音')) return 'u';
// 蟹攝
if (is('齊韻')) return 'e';
if (is('祭韻 幫組')) return 'e';
if (is('祭韻 開口')) return 'e';
if (is('祭韻 合口 舌齒音')) return 'oi';
if (is('祭韻 合口 以母')) return 'oi';
if (is('祭韻 合口 牙喉音')) return 'e';
if (is('泰韻 幫組')) return 'ui';
if (is('泰韻 開口 舌齒音 精組')) return 'oi';
if (is('泰韻 開口 舌齒音')) return 'ai';
if (is('泰韻 開口 牙喉音')) return 'oi';
if (is('泰韻 合口 舌齒音')) return 'oi';
if (is('泰韻 合口 牙喉音 疑母')) return 'oi';
if (is('泰韻 合口 牙喉音')) return 'ui';
if (is('佳皆夬韻 幫組')) return 'ai';
if (is('佳皆夬韻 開口')) return 'ai';
if (is('佳皆夬韻 合口 舌齒音')) return 'oi';
if (is('佳皆夬韻 合口')) return 'ai';
if (is('灰韻 舌齒音')) return 'oi';
if (is('灰韻 疑母')) return 'oi';
if (is('灰韻')) return 'ui';
if (is('咍韻')) return 'oi';
if (is('廢韻')) return 'e';
// 臻攝
if (is('眞韻 幫組')) return 'an';
if (is('眞韻 開口')) return 'in';
if (is('眞韻 合口 舌齒音')) return 'en';
if (is('眞韻 合口 牙喉音')) return 'an';
if (is('臻文欣韻')) return 'an';
if (is('元韻 幫組')) return 'an';
if (is('元韻 開口')) return 'in';
if (is('元韻 合口')) return 'an';
if (is('魂韻 幫組')) return 'un';
if (is('魂韻 端組')) return 'un';
if (is('魂韻 來母')) return 'un';
if (is('魂韻 精組')) return 'in';
if (is('魂韻 牙喉音')) return 'an';
if (is('痕韻')) return 'an';
// 山攝
if (is('寒韻 幫組')) return 'un';
if (is('寒韻 開口 舌齒音')) return 'an';
if (is('寒韻 開口 牙喉音')) return 'on';
if (is('寒韻 合口 舌齒音')) return 'in';
if (is('寒韻 合口 牙喉音')) return 'un';
if (is('刪山韻')) return 'an';
if (is('仙先韻 幫組')) return 'in';
if (is('仙先韻 開口')) return 'in';
if (is('仙先韻 合口')) return 'an';
// 效攝
if (is('蕭宵韻')) return 'iu';
if (is('肴韻')) return 'au';
if (is('豪韻')) return 'ou';
// 果攝
if (is('歌韻 一等')) return 'o';
if (is('歌韻 三等')) return 'e';
// 假攝
if (is('麻韻 二等')) return 'a';
if (is('麻韻 三等')) return 'e';
// 宕攝
if (is('陽韻')) return 'ong';
if (is('唐韻')) return 'ong';
// 梗攝
if (is('庚韻 二等')) return 'ang';
if (is('庚韻 三等 莊組')) return 'ang';
if (is('庚韻 三等')) return 'ing';
if (is('耕韻')) return 'ang';
if (is('清青韻')) return 'ing';
// 曾攝
if (is('蒸韻')) return 'ing';
if (is('登韻')) return 'ang';
// 流攝
if (is('尤幽韻')) return 'iu';
if (is('侯韻')) return 'ou';
// 深攝
if (is('侵韻')) return 'im'; // m 韻尾在聲母為脣音時為 n,詳後,下同
// 咸攝
if (is('覃談韻')) return 'am';
if (is('鹽添嚴韻')) return 'im';
if (is('咸銜凡韻')) return 'am';
throw new Error('無韻母規則');
}
function 聲調規則() {
if (['序號', '無標'].includes(選項.標調法)) {
const idx = ['序號', '無標'].indexOf(選項.標調法);
if (is('全清 或 次清')) {
if (is('平聲')) return ['1', ''][idx]; // 陰平
if (is('上聲')) return ['3', ''][idx]; // 陰上
if (is('去聲')) return ['4', ''][idx]; // 陰去
if (is('入聲')) return ['1', ''][idx]; // 陰入
} else {
if (is('平聲')) return ['2', ''][idx]; // 陽平
if (is('全濁 上聲')) return ['4', ''][idx]; // 陽去,全濁上變去
if (is('上聲')) return ['3', ''][idx]; // 陽上
if (is('去聲')) return ['4', ''][idx]; // 陽去
if (is('入聲')) return ['2', ''][idx]; // 陽入
}
throw new Error('無聲調規則');
}}
let 聲母 = 聲母規則();
let 韻母 = 韻母規則();
let 聲調 = 聲調規則();
if (is('合口 或 模韻') && !['ui', 'o'].some((x) => 韻母.startsWith(x))) { // 合口字
if (聲母 === 'g' && !韻母.startsWith('u')) 聲母 = 'gw';
else if (聲母 === 'k' && !韻母.startsWith('u')) 聲母 = 'kw';
else if (聲母 === 'h' && !韻母.startsWith('i')) 聲母 = 'f';
else if (聲母 === 'y') 聲母 = 'w';
else if (聲母 === '') 聲母 = 'w';
}
// 疑日母 细音
if (is('疑母') && 韻母.startsWith('i')) 聲母 = 'y';
if (is('日母') && 韻母.startsWith('i')) 聲母 = 'n';
// 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';
}
if (!聲母) {
if (韻母[0] === 'i') 聲母 = 'y';
if (韻母[0] === 'u') 聲母 = 'w';
}
return 聲母 + 韻母 + 聲調;