马耳他语字母式中古汉语拼音

来自个人维基
FebSnow2233留言 | 贡献2023年8月16日 (三) 05:35的版本
跳转到导航 跳转到搜索
/* 馬爾他語字母式中古漢語拼音
 *
 *基於 https://zh.wikipedia.org/wiki/User:Polyhedron/中古漢語拼音 改編。
 *
 * @author 万里风霜101
 */

if (!音韻地位) return [ // 模型可選 '早期中古漢語' 或 '晚期中古漢語',預設值為 '早期中古漢語'
  ['模型', [2, '早期中古漢語', '晚期中古漢語']]];

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

音韻地位 = Qieyun.適配分析體系('ytenx')(音韻地位);

function 聲母規則() {
  switch (音韻地位.母) {
    case '幫': return 'p';
    case '滂': return 'ph';
    case '並': return 'b';
    case '明': return 'm';
    case '端': return 't';
    case '透': return 'th';
    case '定': return 'd';
    case '泥': return 'n';
    case '知': return 'tr';
    case '徹': return 'thr';
    case '澄': return 'dr';
    case '孃': return 'nr';
    case '精': return 'c';
    case '清': return 'ch';
    case '從': return 'z';
    case '心': return 's';
    case '邪': return 'ż';
    case '莊': return 'cr';
    case '初': return 'chr';
    case '崇': return 'zr';
    case '生': return 'sr';
    case '俟': return 'żr';
    case '章': return 'ċ';
    case '昌': return 'ċh';
    case '常': return 'ġ';
    case '書': return 'x';
    case '船': return 'j';
    case '見': return 'k';
    case '溪': return 'kh';
    case '羣': return 'g';
    case '疑': return 'ng';
    case '影': return 'għ';
    case '曉': return 'h';
    case '匣': return 'ħ';
    case '云': return '';
    case '以': return 'y';
    case '來': return 'l';
    case '日': return 'ny';
    default: throw new Error('無聲母規則');
  }
}

function 韻母規則() {
  // 通攝
  if (is('東韻 一等')) return 'ung';
  if (is('東韻 三等')) return 'iung';
  if (is('冬韻')) return 'ong';
  if (is('鍾韻')) return 'iong';
  // 江攝
  if (is('江韻')) return 'rung';
  // 止攝
  if (is('支韻 合口')) return is('重紐A類') ? 'yue' : 'üe';
  if (is('支韻')) return is('重紐A類') ? 'yie' : 'ie';
  if (is('脂韻 合口')) return is('重紐A類') ? 'yui' : 'üi';
  if (is('脂韻')) return is('重紐A類') ? 'yi' : 'iy';
  if (is('之韻')) return 'i';
  if (is('微韻 開口')) return 'ioi';
  if (is('微韻')) return 'üoi';
  // 遇攝
  if (is('魚韻')) return 'io';
  if (is('虞韻')) return 'üo';
  if (is('模韻')) return 'o';
  // 蟹攝
  if (is('齊韻 合口')) return 'ue';
  if (is('齊韻')) return 'e';
  if (is('祭韻 合口')) return 'üey';
  if (is('祭韻')) return is('重紐A類') ? 'yey' : 'iey';
  if (is('泰韻 合口')) return 'uay';
  if (is('泰韻')) return 'ay';
  if (is('佳韻 合口')) return 'rue';
  if (is('佳韻')) return 're';
  if (is('皆韻 合口')) return 'ruai';
  if (is('皆韻')) return 'rai';
  if (is('夬韻 合口')) return 'ruay';
  if (is('夬韻')) return 'ray';
  if (is('咍韻')) return 'ai';
  if (is('灰韻')) return 'uai';
  if (is('廢韻 開口')) return 'iay';
  if (is('廢韻')) return 'üay';
  // 臻攝
  if (is('眞韻 合口')) return is('重紐A類') ? 'yun' : 'ün';
  if (is('眞韻')) return is('重紐A類') ? 'yin' : 'in';
  if (is('臻韻')) return 'in';
  if (is('欣韻')) return 'ion';
  if (is('文韻')) return 'üon';
  if (is('元韻 開口')) return 'ian';
  if (is('元韻')) return 'üan';
  if (is('痕韻')) return 'on';
  if (is('魂韻')) return 'uon';
  // 山攝
  if (is('寒韻 開口')) return 'an';
  if (is('寒韻')) return 'uan';
  if (is('刪韻 合口')) return 'ruan';
  if (is('刪韻')) return 'ran';
  if (is('山韻 合口')) return 'ruen';
  if (is('山韻')) return 'ren';
  if (is('仙韻 合口')) return is('重紐A類') ? 'yuen' : 'üen';
  if (is('仙韻')) return is('重紐A類') ? 'yen' : 'ien';
  if (is('先韻 合口')) return 'uen';
  if (is('先韻')) return 'en';
  // 效攝
  if (is('蕭韻')) return 'eu';
  if (is('宵韻')) return is('重紐A類') ? 'yeu' : 'ieu';
  if (is('肴韻')) return 'rau';
  if (is('豪韻')) return 'au';
  // 果攝
  if (is('歌韻 一等 開口')) return 'a';
  if (is('歌韻 一等')) return 'ua';
  if (is('歌韻 三等 開口')) return 'ia';
  if (is('歌韻 三等')) return 'üa';
  // 假攝
  if (is('麻韻 二等 合口')) return 'rua';
  if (is('麻韻 二等')) return 'ra';
  if (is('麻韻 三等')) return 'ia';
  // 宕攝
  if (is('陽韻 開口')) return 'iang';
  if (is('陽韻')) return 'üang';
  if (is('唐韻 合口')) return 'uang';
  if (is('唐韻')) return 'ang';
  // 梗攝
  if (is('庚韻 二等 合口')) return 'ruang';
  if (is('庚韻 二等')) return 'rang';
  if (is('庚韻 三等 合口')) return 'üeng';
  if (is('庚韻 三等')) return 'ieng';
  if (is('耕韻 合口')) return 'rueng';
  if (is('耕韻')) return 'reng';
  if (is('清韻 合口')) return is('重紐A類') ? 'yueng' : 'üeng';
  if (is('清韻')) return is('重紐A類') ? 'yeng' : 'ieng';
  if (is('青韻 合口')) return 'ueng';
  if (is('青韻')) return 'eng';
  // 曾攝
  if (is('蒸韻 合口')) return 'üng';
  if (is('蒸韻')) return 'ing';
  if (is('登韻 合口')) return 'uöng';
  if (is('登韻')) return 'öng';
  // 流攝
  if (is('尤韻')) return 'iu';
  if (is('侯韻')) return 'u';
  if (is('幽韻')) return 'ü';
  // 深攝
  if (is('侵韻')) return is('重紐A類') ? 'yim' : 'im';
  // 咸攝
  if (is('覃韻')) return 'om';
  if (is('談韻')) return 'am';
  if (is('鹽韻')) return is('重紐A類') ? 'yem' : 'iem';
  if (is('添韻')) return 'em';
  if (is('咸韻')) return 'rem';
  if (is('銜韻')) return 'ram';
  if (is('嚴韻')) return 'iam';
  if (is('凡韻')) return 'üam';
  throw new Error('無韻母規則');
}

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

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

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 (韻母.endsWith('y')) {
  聲調 = '';
}

if (聲母.endsWith('r') && 韻母.startsWith('r')) {
  韻母 = 韻母.slice(1);
}

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

if (is(`幫組 一二三四等 \
或 端組 一四等 \
或 知組 二三等 \
或 精組 一三四等 \
或 莊組 二三等 \
或 章組 三等 \
或 見溪疑母 一二三四等 \
或 羣母 二三等 \
或 影曉母 一二三四等 \
或 匣母 一二四等 \
或 云以母 三等 \
或 來母 一二三四等 \
或 日母 三等`)) {
  隔音符號 = '';
}

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

if (is('端組 三等') && !韻母.startsWith('r')) {
  隔音符號 = ''; // 如 2237 地小韻 diih
}

if (選項.模型 === '晚期中古漢語') {
  if (is('幫母 東鍾微虞廢文元陽尤凡韻 三等') && `三等`) return 'f' + 韻母.slice(1) + 聲調;
  if (is('滂母 東鍾微虞廢文元陽尤凡韻 三等') && `三等`) return 'fh' + 韻母.slice(1) + 聲調;
  if (is('並母 東鍾微虞廢文元陽尤凡韻 三等') && `三等`) return 'v' + 韻母.slice(1) + 聲調;
  if (is('明母 微虞文元陽凡韻 三等') && `三等`) return 'w' + 韻母.slice(1) + 聲調;
}

return 聲母 + 隔音符號 + 韻母 + 聲調;