汐川文

来自个人维基
FebSnow2233留言 | 贡献2023年10月13日 (五) 20:34的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索
/* 汐川羅馬字
 *
 */
if (!音韻地位) return [['$legacy', true]];

const is = (x) => 音韻地位.屬於(x);

function 聲母規則() {
  if (is('幫母')) return 'b';
  if (is('滂母')) return 'p';
  if (is('並母')) return is('平聲') ? 'p' : '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 'dr';
  if (is('徹母')) return 'tr';
  if (is('澄母')) return is('平聲') ? 'dr' : 'tr';
  if (is('孃母')) return 'nr';

  if (is('精母')) return 'dz';
  if (is('清母')) return 'c';
  if (is('從母')) return is('平聲') ? 'c' : 'dz';
  if (is('心母')) return 's';
  if (is('邪母')) return 'z';

  if (is('莊母')) return 'dż';
  if (is('初母')) return 'cz';
  if (is('崇母')) return is('平聲') ? 'cz' : 'dż';
  if (is('生母')) return 'sz';
  if (is('俟母')) return 'ż';

  if (is('章母')) return 'dź';
  if (is('昌母')) return 'ć';
  if (is('常母')) return is('平聲') ? 'ć' : 'dź';
  if (is('書母')) return 'ś';
  if (is('船母')) return 'ź';
  if (is('日母')) return 'ń';

  if (is('見母')) return 'g';
  if (is('溪母')) return 'k';
  if (is('羣母')) return is('平聲') ? 'k' : 'g';
  if (is('疑母')) return '';
  
  if (is('曉母')) return 'h';
  if (is('影匣云以母')) return '';
  
  throw new Error('無聲母規則');
}

function 韻母規則() {
  // 通攝
  if (is('東韻 一等')) return 'ung';
  if (is('東韻 三等')) return 'jung';
  if (is('冬韻')) return 'ung';
  if (is('鍾韻')) return 'jung';
  // 江攝
  if (is('江韻')) return 'rung';
  // 止攝
  if (is('支韻')) return 'je';
  if (is('脂韻')) return 'i';
  if (is('之韻')) return 'i';
  if (is('微韻')) return 'oi';
  // 遇攝
  if (is('魚韻')) return 'jo';
  if (is('虞韻')) return 'wo';
  if (is('模韻')) return 'o';
  // 蟹攝
  if (is('齊韻 合口')) return 'we';
  if (is('齊韻')) return 'e';
  if (is('祭韻 合口')) return 'we';
  if (is('祭韻')) return 'je';
  if (is('泰韻 合口')) return 'wa';
  if (is('泰韻')) return 'a';
  if (is('佳韻 合口')) return 'rwe';
  if (is('佳韻')) return 're';
  if (is('皆韻 合口')) return 'rwai';
  if (is('皆韻')) return 'rai';
  if (is('夬韻 合口')) return 'rwa';
  if (is('夬韻')) return 'ra';
  if (is('咍韻')) return 'ai';
  if (is('灰韻')) return 'wai';
  if (is('廢韻 開口')) return 'ja';
  if (is('廢韻')) return 'wa';
  // 臻攝
  if (is('眞韻 合口')) return 'un';
  if (is('眞韻')) return 'in';
  if (is('臻韻')) return 'in';
  if (is('欣韻')) return 'jon';
  if (is('文韻')) return 'won';
  if (is('元韻 開口')) return 'jan';
  if (is('元韻')) return 'wan';
  if (is('痕韻')) return 'on';
  if (is('魂韻')) return 'won';
  // 山攝
  if (is('寒韻 開口')) return 'an';
  if (is('寒韻')) return 'wan';
  if (is('刪韻 合口')) return 'rwan';
  if (is('刪韻')) return 'ran';
  if (is('山韻 合口')) return 'rwen';
  if (is('山韻')) return 'ren';
  if (is('仙韻 合口')) return 'wen';
  if (is('仙韻')) return 'jen';
  if (is('先韻 合口')) return 'wen';
  if (is('先韻')) return 'en';
  // 效攝
  if (is('蕭韻')) return 'ju';
  if (is('宵韻')) return 'ju';
  if (is('肴韻')) return 'rau';
  if (is('豪韻')) return 'au';
  // 果攝
  if (is('歌韻 一等 開口')) return 'a';
  if (is('歌韻 一等')) return 'wa';
  if (is('歌韻 三等 開口')) return 'ja';
  if (is('歌韻 三等')) return 'wa';
  // 假攝
  if (is('麻韻 二等 合口')) return 'rwa';
  if (is('麻韻 二等')) return 'ra';
  if (is('麻韻 三等')) return 'ja';
  // 宕攝
  if (is('陽韻 開口')) return 'jang';
  if (is('陽韻')) return 'wang';
  if (is('唐韻 合口')) return 'wang';
  if (is('唐韻')) return 'ang';
  // 梗攝
  if (is('庚韻 二等 合口')) return 'rwang';
  if (is('庚韻 二等')) return 'rang';
  if (is('庚韻 三等 合口')) return 'weng';
  if (is('庚韻 三等')) return 'jeng';
  if (is('耕韻 合口')) return 'rweng';
  if (is('耕韻')) return 'reng';
  if (is('清韻 合口')) return 'weng';
  if (is('清韻')) return 'jeng';
  if (is('青韻 合口')) return 'weng';
  if (is('青韻')) return 'eng';
  // 曾攝
  if (is('蒸韻 合口')) return 'wng';
  if (is('蒸韻')) return 'ing';
  if (is('登韻 合口')) return 'wong';
  if (is('登韻')) return 'ong';
  // 流攝
  if (is('尤韻')) return 'iu';
  if (is('侯韻')) return 'u';
  if (is('幽韻')) return 'iu';
  // 深攝
  if (is('侵韻')) return 'im';
  // 咸攝
  if (is('覃韻')) return 'om';
  if (is('談韻')) return 'am';
  if (is('鹽韻')) return 'jem';
  if (is('添韻')) return 'em';
  if (is('咸韻')) return 'rem';
  if (is('銜韻')) return 'ram';
  if (is('嚴韻')) return 'jam';
  if (is('凡韻')) return 'wam';
  throw new Error('無韻母規則');
}

function 聲調規則() {
  if (is('平入聲')) return '';
  if (is('上聲')) return 's';
  if (is('去聲')) return 'd';
  throw new Error('無聲調規則');
}

let 聲母 = 聲母規則();
let 隔音符號 = "'";
let 韻母 = 韻母規則();
let 聲調 = 聲調規則();

if (is('入聲')) {
  if (韻母.endsWith('m')) 韻母 = `${韻母.slice(0, -1)}b`;
  else if (韻母.endsWith('n')) 韻母 = `${韻母.slice(0, -1)}r`;
  else if (韻母.endsWith('ng')) 韻母 = `${韻母.slice(0, -2)}g`;
}

if (is`知組 或 莊組` && 韻母.startsWith('r')) {
  韻母 = 韻母.slice(1);
}

if (is`章組 或 莊組 或 日母` && 韻母.startsWith('j') && [...'aeou'].some((x) => 韻母.includes(x))) {
  韻母 = 韻母.slice(1);
}

if (!聲母) {
  if (韻母[0] === 'i') 聲母 = 'j';
  if (韻母[0] === 'u') 聲母 = 'w';
}

if (is('云母 一二四等')) 聲母 = 'j'; // 如 1444 倄小韻 i'uaix

return 聲母 + 韻母 + 聲調;