Skip to content

Commit

Permalink
Fix all code style problems
Browse files Browse the repository at this point in the history
  • Loading branch information
graphemecluster committed Nov 26, 2024
1 parent cba8f6f commit b40fd9c
Showing 1 changed file with 56 additions and 67 deletions.
123 changes: 56 additions & 67 deletions langjin.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@
*/

/** @type { 音韻地位['屬於'] } */
const is = (x) => 音韻地位.屬於(x);
const is = (...x) => 音韻地位.屬於(...x);
/** @type { 音韻地位['判斷'] } */
const when = (...x) => 音韻地位.判斷(...x);

if (!音韻地位) return [
//['$legacy', true],
['標調方式', [1, '數字', '附標']],
['書寫系統', [1, '拼音方案', '國際音標']],
];
Expand Down Expand Up @@ -46,40 +45,27 @@ const 附標標調 = {
};

const 調值標調 = {
'陰平':'˧˩',
'陽平':'˩˧',
'上聲':'˨˩˨',
'去聲':'˦˦',
'入聲':'˥',
'陰平': '˧˩',
'陽平': '˩˧',
'上聲': '˨˩˨',
'去聲': '˦˦',
'入聲': '˥',
};

let 真韻 = '真';
let 殷韻 = '殷';
let 重紐 = '';
let 丙類 = 'C類';

if (window.location.href.includes('qieyun'))
{//舊版
真韻 = '眞';
殷韻 = '欣';
重紐 = '重紐';
丙類 = '東韻 三等 或 鍾微虞廢文元陽尤凡韻';
}

const 不顎化 = { // 見溪羣曉匣母不顎化條件
: true,
: '合口 或 庚耕韻',
: '(合口 祭微陽支脂凡廢韻 或 通攝) 舒聲',
: '合口 齊韻',
}[音韻地位.];

const 南京型莊組變翹 = '宕假效江攝 或 止攝 合口 或 蟹咸山攝 二等'
const 南京型莊組變翹 = '宕假效江攝 或 止攝 合口 或 蟹咸山攝 二等';

const 聲母規則 = () => when([
['幫母', [[丙類, 'f'], ['', 'b']]],
['滂母', [[丙類, 'f'], ['', 'p']]],
['並母', [[丙類, 'f'], ['平聲', 'p'], ['', 'b']]],
['明母', [['東尤韻', 'm'], [丙類, ''], ['', 'm']]],
['幫母', [['C類', 'f'], ['', 'b']]],
['滂母', [['C類', 'f'], ['', 'p']]],
['並母', [['C類', 'f'], ['平聲', 'p'], ['', 'b']]],
['明母', [['東尤韻', 'm'], ['C類', ''], ['', 'm']]],
['端母', 'd'],
['透母', 't'],
['定母', [['平聲', 't'], ['', 'd']]],
Expand All @@ -104,15 +90,15 @@ const 聲母規則 = () => when([
['俟母', [['平聲', 'c'], ['', 's']]], // 平送氣仄不送氣
['章母', 'zh'],
['昌母', 'ch'],
['常母', [['曾攝 入聲', 'zh'], [真韻 + '齊侵清仙鹽陽尤魚虞蒸支鍾韻 平聲 或 一等', 'ch'], ['', 'sh']]],
['常母', [['曾攝 入聲', 'zh'], ['真齊侵清仙鹽陽尤魚虞蒸支鍾韻 平聲 或 一等', 'ch'], ['', 'sh']]],
['船書母', [['平聲 通攝 或 平聲 合口 山攝', 'ch'], ['', 'sh']]], // 章組擦音分化律
['日母', [['四等', 'l'], [真韻 + '侵韻 入聲 或 支之脂韻 開口', ''], ['', 'r']]],
['日母', [['四等', 'l'], ['真侵韻 入聲 或 支之脂韻 開口', ''], ['', 'r']]],
['見母', [[不顎化, 'g'], ['', 'j']]],
['溪母', [[不顎化, 'k'], ['', 'q']]],
['羣母', [
[重紐 + 'A類 宵韻', 'q'],
['平聲 三等 合口 山陽脂韻','k'],
['平聲','q'], [不顎化, 'g'],
['A類 宵韻', 'q'],
['平聲 三等 合口 山陽脂韻', 'k'],
['平聲', 'q'], [不顎化, 'g'],
['', 'j']
]],
['疑母', [['之韻 上聲', 'l'], ['一二等', ''], ['尤蒸齊韻 平聲 或 先仙陽庚韻 入聲', 'l'], ['', '']]],
Expand Down Expand Up @@ -142,14 +128,11 @@ const 韻母規則 = () => when([

// 止攝
['止攝', [
[重紐 + 'B類 支韻 幫母 或 ' +
重紐 + 'B類 支韻 並母 上去聲 或 ' +
重紐 + 'B類 脂韻 並滂母 或 ' +
重紐 + 'B類 脂韻 幫母 平聲',
'ei'],
['B類 支韻 (幫母 或 並母 上去聲)', 'ei'],
['B類 脂韻 (幫母 平聲 或 並滂母)', 'ei'],
['日母 開口', 'er'],
['崇初從精清生俟邪心莊母 開口', 'y'],//南京型平翹
['昌常徹澄船書章知母 開口', 'r'],//南京型平翹
['崇初從精清生俟邪心莊母 開口', 'y'], // 南京型平翹
['昌常徹澄船書章知母 開口', 'r'], // 南京型平翹
['莊組 合口', 'uä'],
['幫並滂母 非 微韻 或 開口 或 支韻 明母', 'i'],
['脂韻 明母 或 微韻 幫並滂母', 'ei'],
Expand All @@ -168,8 +151,8 @@ const 韻母規則 = () => when([
['祭韻 幫組', 'i'],
['合口', 'uei'],
['廢祭韻 開口', [
['章知組', 'r'], //南京型平翹
['莊組', 'y'], //南京型平翹
['章知組', 'r'], // 南京型平翹
['莊組', 'y'], // 南京型平翹
['', 'i']
]],
['灰泰韻 開口 以母', 'iä'],
Expand All @@ -185,16 +168,16 @@ const 韻母規則 = () => when([
['咍韻', [['合口', 'uei'], ['以母', 'iä'], ['', 'ä']]],

// 臻攝
[殷韻 + 真韻 + '臻文韻', [
['殷真臻文韻', [
['入聲', [
['幫組', [['文韻', 'u'], ['', 'i']]],
['開口', [['莊組', 'ä'], ['章組 或 知徹澄日母', 'r'], ['', 'i']]],
['合口', [['莊組', 'o'], ['知章組', 'u'], ['', 'ü']]]
]],
['舒聲', [
['幫組', [[真韻 + '韻', 'in'], ['明母', 'uen'], ['', 'en']]],
['幫組', [['真韻', 'in'], ['明母', 'uen'], ['', 'en']]],
['開口', [['莊章組 或 日知徹澄母', 'en'], ['', 'in']]],
['合口',[['明母', 'uen'], ['來日書章知昌常徹澄船母 合口', 'uen'], ['', 'üin']]]
['合口', [['明母', 'uen'], ['來日書章知昌常徹澄船母 合口', 'uen'], ['', 'üin']]]
]]
]],

Expand All @@ -218,26 +201,26 @@ const 韻母規則 = () => when([
['開口 或 幫組', [['崇母', 'uang'], ['見溪羣曉匣母', 'än'], ['', 'iän']]],
['合口', 'üän']
]],
['元仙韻 舒聲',[

['元仙韻 舒聲', [
['開口', [['日知徹澄母 或 莊章組', 'ang'], ['見溪羣曉匣母', 'än'], ['', 'iän']]],
['合口', [['日來母 或 知莊章組', 'uang'], ['', 'üän']]],
['元韻', [['明母', 'uang'], ['', 'ang']]],
['仙韻', 'iän']
]],

['刪山韻', [
['入聲', [['合口', 'ua'], ['疑影母', 'ia'], ['', 'a']]],
['舒聲', [
['幫組', 'ang'],
['開口', [['影疑母', 'iän'], ['見溪羣曉匣母', 'än'], ['', 'ang']]],
['合口','uang']
['合口', 'uang']
]]
]],

['寒韻', [
['入聲', [
['幫組','o'],
['幫組', 'o'],
['開口', [['見溪羣曉匣疑影母', 'o'], ['', 'a']]],
['合口', [['見組', 'uä'], ['', 'o']]]
]],
Expand All @@ -264,14 +247,14 @@ const 韻母規則 = () => when([
['唐韻 入聲', [['合口 見組', 'uä'], ['', 'o']]],

['宕攝 舒聲', [
['合口','uang'],
['陽韻', [['明母 或 莊組','uang'], ['來孃疑以影母 或 精組', 'iang'], ['','ang']]],
['','ang']
['合口', 'uang'],
['陽韻', [['明母 或 莊組', 'uang'], ['來孃疑以影母 或 精組', 'iang'], ['', 'ang']]],
['', 'ang']
]],

// 梗攝
['庚韻 入聲', [
['二等',[['合口', 'uä'], ['', 'ä']]],
['二等', [['合口', 'uä'], ['', 'ä']]],
['三等', [['莊組', 'ä'], ['合口', 'ü'], ['', 'i']]]
]],

Expand All @@ -283,7 +266,7 @@ const 韻母規則 = () => when([
['合口', [['心以影母', 'in'], ['云影母', 'iong'], ['', 'ong']]]
]]
]],

['清青韻 入聲', [
['幫組', 'i'],
['開口', [['莊組', 'y'], ['知章組', 'r'], ['', 'i']]],
Expand All @@ -297,7 +280,7 @@ const 韻母規則 = () => when([
]],

['耕韻', [
['入聲', [['幫組 或 開口','ä'], ['合口','uä']]],
['入聲', [['幫組 或 開口', 'ä'], ['合口', 'uä']]],
['舒聲', [
['幫組', 'en'],
['開口', [['匣影母', 'in'], ['', 'en']]],
Expand Down Expand Up @@ -375,19 +358,25 @@ const 聲母 = 聲母規則();
const 韻母 = 韻母規則();
const 聲調 = 聲調規則();

function 字母轉音標(s) {
var res = "";
for (var i = 0; i < s.length; i++) {
res += 音標表[s.charAt(i)];
}
res = res.replace('ao','ɔ').replace('ou','əɯ').replace('eʐ','ɚ').replace('en','ən')
.replace('ei','əi').replace('nk','ŋ').replace('tsx','ʈʂ').replace('tsʰx','tʂʰ').replace('sx','ʂ');
return res.endsWith('ʐ') ? res.replace('ʐ', 'ʅ'): res;
};
const 替換列表字典 = [
['ao', 'ɔ'],
['ou', 'əɯ'],
['eʐ', 'ɚ'],
['en', 'ən'],
['ei', 'əi'],
['nk', 'ŋ'],
['tsx', 'ʈʂ'],
['tsʰx', 'tʂʰ'],
['sx', 'ʂ'],
[/ʐ$/, 'ʅ'],
];

if (選項.書寫系統 !== '國際音標') {
if (選項.標調方式 === '數字') return 聲母 + 韻母 + 次序標調[聲調];
return 聲母 + (聲調 ? 韻母.replace(/.*[aä]|.*[eo]|.*[iuüyr]/, '$&' + 附標標調[聲調]) : 韻母);
} else {
return 字母轉音標(聲母 + 韻母) + 調值標調[聲調];
function 字母轉音標(s) {
let res = Array.from(s, c => 音標表[c]);
替換列表字典.forEach(pair => res = res.replace(...pair));
return res;
}

if (選項.書寫系統 === '國際音標') return 字母轉音標(聲母 + 韻母) + 調值標調[聲調];
if (選項.標調方式 === '數字') return 聲母 + 韻母 + 次序標調[聲調];
return 聲母 + (聲調 ? 韻母.replace(/.*[aä]|.*[eo]|.*[iuüyr]/, '$&' + 附標標調[聲調]) : 韻母);

0 comments on commit b40fd9c

Please sign in to comment.