-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathposition.js
219 lines (206 loc) · 7.29 KB
/
position.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
/* 音韻地位
*
* @author unt
*/
const is = (...x) => 音韻地位.屬於(...x);
const when = (...x) => 音韻地位.判斷(...x);
const sextupleKeys = ['母', '呼', '等', '類', '韻系', '聲'];
if (選項._六元組全選) sextupleKeys.forEach(k => 選項[k] = true);
if (選項._六元組全不選) sextupleKeys.forEach(k => 選項[k] = false);
const keys = Object.keys(選項).filter(k => !k.startsWith('_'));
const checkedKeys = keys.filter(k => 選項[k]);
const checkedSextupleKeys = checkedKeys.filter(k => sextupleKeys.includes(k));
if (!音韻地位) return [
'整體',
[`描述|音韻地位描述
聲母、呼、等、類、韻系、聲調
韻系用字依《切韻》,舉平以賅上去入`, true],
['簡略描述|音韻地位簡略描述\n不推薦', false],
'單項',
['母|聲母', false],
['呼', false],
['等\n切韻等\n端組拼三等韻(爹小韻、地小韻)歸四等', false],
['類', false],
['韻系', false],
['聲|聲調', false],
['_六元組全選|六項全選', false, { hidden: checkedSextupleKeys.length === 6, reset: true }],
['_六元組全不選|六項全不選', false, { hidden: checkedSextupleKeys.length === 0, reset: true }],
'更多',
['聲類|聲類\n五十一聲類 + 俟母\n來母二等歸盧類;也有人將其歸力類', false],
['組|聲母組', false],
['音|五音', false],
['清濁\n曉母歸全清;也有人將其歸次清', false],
['韻目|韻目\n爲理論韻目,非韻書中的韻目原貌', false],
['韻別|韻母陰陽入', false],
['表達式|音韻地位表達式', false],
'對應韻圖音系相關屬性',
['字母\n三十六字母', false],
['韻圖等', false],
['攝', false],
[`字彙描述|音韻地位描述(《漢語方音字彙》格式)
攝、呼、等、聲調、韻目、聲母
重紐第二類(即三等 A 類)在左上角加黑點表示
參照《字彙》1962 第一版、1989 第二版、2003 第二版重排本。呼依《字彙》。韻目用字依《廣韻》(個別字形與《字彙》不同;另《字彙》欣韻作殷韻,不取)。幫組 C 類、孃母、常母依《字彙》作非組、泥母、禅母,俟母依《方言調查字表》(第 18 頁)併入崇母`, false],
'',
[`_韻風格|韻系風格
舉平以賅上去入適合切韻音系、韻圖音系
舉平以賅上去適合宋代及之後音系`, [1, '舉平以賅上去入', '舉平以賅上去'], { hidden: !選項.韻系 }],
[`_韻用字|
《切韻》韻目 → 《廣韻》韻目
• 真軫震質 → 真軫震質(開口、脣音、B 類及莊組)、諄準稕術(A 類合口及莊組以外舌齒音合口)
• 殷 → 欣
• 佷 → 很[痕韻上聲]
• 寒旱翰末 → 寒旱翰曷(開口)、桓緩換末(其他)
• 敬 → 映[庚韻去聲]
• 歌哿箇 → 歌哿箇(一等開口)、戈果過(其他)
• [嚴韻上去聲] → 儼釅
(存在少許例外)`, [1, '依《切韻》', '依《廣韻》'], { text: ['韻系', '韻目'].filter(e => 選項[e]).join('、') + '用字', hidden: !選項.韻系 && !選項.韻目 }],
['_分隔符|多個屬性間的連接符', ',', { hidden: checkedKeys.length < 2 }],
];
const 聲母to聲類列表 = {
幫: '方博', 滂: '芳普', 並: '符蒲', 明: '武莫',
端: ' 都', 透: ' 他', 定: ' 徒', 泥: ' 奴',
來: '力盧',
見: '居古', 溪: '去苦', 羣: '渠 ', 疑: '魚五',
影: '於烏', 曉: '許呼', 匣: ' 胡', 云: '于 ',
精: '子作', 清: '七倉', 從: '疾昨', 心: '息蘇', 邪: '徐 ',
知: '陟', 徹: '丑', 澄: '直', 孃: '女',
莊: '側', 初: '初', 崇: '士', 生: '所', 俟: '俟',
章: '之', 昌: '昌', 常: '食', 書: '式', 船: '時', 日: '而', 以: '以',
};
const 韻to切韻韻目列表 = Object.fromEntries([
'東董送屋',
'冬腫宋沃',
'鍾腫用燭',
'江講絳覺',
'支紙寘 ',
'脂旨至 ',
'之止志 ',
'微尾未 ',
'魚語御 ',
'虞麌遇 ',
'模姥暮 ',
'齊薺霽 ',
' 祭 ',
' 泰 ',
'佳蟹卦 ',
'皆駭怪 ',
' 夬 ',
'灰賄隊 ',
'咍海代 ',
' 廢 ',
'真軫震質',
'臻隱震櫛',
'文吻問物',
'殷隱焮迄',
'元阮願月',
'魂混慁沒',
'痕佷恨沒',
'寒旱翰末',
'刪潸諫鎋',
'山產襇黠',
'先銑霰屑',
'仙獮線薛',
'蕭篠嘯 ',
'宵小笑 ',
'肴巧效 ',
'豪晧号 ',
'歌哿箇 ',
'麻馬禡 ',
'陽養漾藥',
'唐蕩宕鐸',
'庚梗敬陌',
'耕耿諍麥',
'清靜勁昔',
'青迥徑錫',
'蒸拯證職',
'登等嶝德',
'尤有宥 ',
'侯厚候 ',
'幽黝幼 ',
'侵寑沁緝',
'覃感勘合',
'談敢闞盍',
'鹽琰豔葉',
'添忝㮇怗',
'咸豏陷洽',
'銜檻鑑狎',
'嚴范梵業',
'凡范梵乏',
].map(切韻韻目列表 => [切韻韻目列表.trim(' ')[0], 切韻韻目列表]));
function get聲類() {
let 聲類列表 = 聲母to聲類列表[音韻地位.母].trim(' ');
return is`三等` ? 聲類列表[0] : 聲類列表.slice(-1);
}
function get韻系(is廣韻 = 選項._韻用字 === '依《廣韻》', 入聲獨立 = !選項._韻風格.includes('入')) {
return when([
[入聲獨立 && '入聲', [
[is廣韻, [
['術', '真韻 合口 非 B類 非 莊組'],
['曷', '寒韻 開口 入聲'],
].map(([a, b]) => [b, a])],
['', 韻to切韻韻目列表[音韻地位.韻][3]],
]],
['', [
[is廣韻, [
['諄', '真韻 合口 非 B類 非 莊組'],
['欣', '殷韻'],
['桓', '寒韻 非 開口'],
['戈', '歌韻 非 (一等 開口)'],
].map(([a, b]) => [b, a])],
['', 音韻地位.韻],
]]
], '', true);
}
function get韻目(is廣韻 = 選項._韻用字 === '《廣韻》') {
return when([
[is廣韻, [
['諄準稕術', '真韻 合口 非 B類 非 莊組'],
['欣 ', '殷韻 平聲'],
[' 很 ', '痕韻 上聲'],
[' 曷', '寒韻 開口 入聲'],
['桓緩換 ', '寒韻 非 開口 舒聲'],
[' 映 ', '庚韻 去聲'],
['戈果過 ', '歌韻 非 (一等 開口)'],
[' 儼釅 ', '嚴韻 上去聲'],
].map(([a, b]) => [b, a])],
['', 韻to切韻韻目列表[when([
['祭韻 非 去聲', '齊'],
['廢韻 非 去聲', [
['開口', '咍'],
['', '灰'],
]],
['', 音韻地位.韻],
])]],
], '', true)['平上去入'.indexOf(音韻地位.聲)];
}
function get字彙描述() {
let { 攝, 呼, 等, 聲, 母 } = 音韻地位;
let 韻 = get韻目(true);
let 重紐第二類標記 = is`A類` ? '˙' : '';
呼 = when([
['通遇攝', '合'],
['江流攝', '開'],
['幫組', [
// 脣音咍韻不考慮
['C類 或 一等 非 唐韻', '開'],
['', '合'],
]],
['', 呼],
]);
母 = when([
['幫組 C類', 音韻地位.字母],
['孃母', '泥'],
['俟母', '崇'],
['常母', '禅'],
['', 母],
]);
return [重紐第二類標記, 攝, 呼, 等, 聲, 韻, 母].join('');
}
const 補充屬性 = {
聲類: get聲類(),
韻系: get韻系(),
韻目: get韻目(),
字彙描述: get字彙描述(),
};
return checkedKeys.map(k => 音韻地位[k] ?? 補充屬性[k]).join(選項._分隔符);