diff --git "a/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.spec.ts" "b/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.spec.ts" index 34efc14..f69b44c 100644 --- "a/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.spec.ts" +++ "b/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.spec.ts" @@ -260,7 +260,9 @@ test('不合法音韻地位', t => { testCase('明三陽去', /missing 類 \(should be C typically\)/, '類搭配(韻,可能有邊緣地位)'); testCase('幫三B清入', /unexpected 幫母清韻B類/, '類搭配(綜合)'); testCase('幫三C嚴入', /unexpected 嚴韻脣音/, '母搭配(凡韻)'); + testCase('幫三C之平', /unexpected 之韻脣音/, '母搭配(脣音之韻)'); testCase('初開三真去', /unexpected 真韻開口莊組/, '母搭配(臻韻)'); + testCase('知開三庚平', /unexpected 庚韻三等知母/, '母搭配(非莊組銳聲母)'); }); test('邊緣地位', t => { diff --git "a/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.ts" "b/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.ts" index 7ea7920..e04ba0d 100644 --- "a/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.ts" +++ "b/src/lib/\351\237\263\351\237\273\345\234\260\344\275\215.ts" @@ -971,12 +971,14 @@ export class 音韻地位 { } } // 等-韻 - for (const [搭配各等, 搭配各韻] of Object.entries(等韻搭配)) { - if (搭配各韻.includes(韻)) { - if ([...搭配各等].includes(等) || ([...搭配各等].includes('三') && 等 === '四' && [...'端透定泥'].includes(母))) { + if (等 === '四' && [...'端透定泥'].includes(母) && [...'脂真麻清幽侵'].includes(韻)) { + // 允許,但均為邊緣地位 + } else { + for (const [搭配各等, 搭配各韻] of Object.entries(等韻搭配)) { + if (搭配各韻.includes(韻)) { + [...搭配各等].includes(等) || reject(`unexpected ${韻}韻${等}等`); break; } - reject(`unexpected ${韻}韻${等}等`); } } // 母-呼(基本)、呼-韻 @@ -1016,14 +1018,19 @@ export class 音韻地位 { // 母-韻 if ([...'幫滂並明'].includes(母)) { - 韻 === '嚴' && reject(`unexpected 嚴韻脣音`); + [...'之魚殷痕嚴'].includes(韻) && reject(`unexpected ${韻}韻脣音`); } else { 韻 === '凡' && reject(`unexpected 凡韻非脣音`); } if ([...'莊初崇生俟'].includes(母)) { + 等 === '三' && ['麻', '清', '幽'].includes(韻) && reject(`unexpected ${韻}韻${韻 === '麻' ? '三等' : ''}莊組`); 呼 === '開' && ['真', '殷'].includes(韻) && reject(`unexpected ${韻}韻開口莊組`); } else { 韻 === '臻' && reject(`unexpected 臻韻非莊組`); + if (!鈍音母.includes(母)) { + 韻 === '庚' && 等 === '三' && reject(`unexpected 庚韻三等${母}母`); + 韻 === '蒸' && 呼 === '合' && reject(`unexpected 蒸韻合口${母}母`); + } } // 邊緣搭配