From 13a9e08402f03e89b3a0b3ece4e3bc6dd28f5fe2 Mon Sep 17 00:00:00 2001 From: zhoulixiang Date: Wed, 20 Mar 2024 09:21:58 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20multiple=20?= =?UTF-8?q?=E5=92=8C=20surname=20=E4=B8=80=E5=90=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E6=83=85=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/pinyin/handle.ts | 16 +++++++++++----- test/multiple.test.js | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/core/pinyin/handle.ts b/lib/core/pinyin/handle.ts index 4132618..fbb4eb9 100644 --- a/lib/core/pinyin/handle.ts +++ b/lib/core/pinyin/handle.ts @@ -134,11 +134,17 @@ type GetMultiplePinyin = ( const getMultiplePinyin: GetMultiplePinyin = (word, mode = 'normal') => { const wordCode = word.charCodeAt(0); const customMultpileDict = getCustomMultpileDict(); - const pinyin = - customMultpileDict[wordCode] || - (mode === 'surname' ? Surnames[word] : '') || - DICT1[wordCode] || - ''; + let pinyin = DICT1[wordCode] || ''; + if (customMultpileDict[wordCode]) { + pinyin = customMultpileDict[wordCode]; + } else if (mode === 'surname') { + const surnamePinyin = Surnames[word]; + pinyin = [ + surnamePinyin, + pinyin.split(' ').filter(py => py !== surnamePinyin), + ].join(' '); + } + if (pinyin) { return pinyin.split(' ').map((value) => ({ origin: word, diff --git a/test/multiple.test.js b/test/multiple.test.js index 5c39fc1..42af555 100644 --- a/test/multiple.test.js +++ b/test/multiple.test.js @@ -34,7 +34,7 @@ describe('multiple', () => { it('[multiple]multiple+surname同时使用', () => { const result = pinyin('能', { mode: 'surname', multiple: true }); - expect(result).to.be.equal('nài'); + expect(result).to.be.equal('nài néng'); }); it('[multiple]base', () => { From 62fd375528675eceb9398105be2b28aad139a234 Mon Sep 17 00:00:00 2001 From: zhoulixiang Date: Wed, 20 Mar 2024 09:26:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20multiple=20?= =?UTF-8?q?=E5=92=8C=20surname=20=E5=90=8C=E6=97=B6=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/pinyin/handle.ts | 10 ++++++---- test/multiple.test.js | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/core/pinyin/handle.ts b/lib/core/pinyin/handle.ts index fbb4eb9..f2c59e1 100644 --- a/lib/core/pinyin/handle.ts +++ b/lib/core/pinyin/handle.ts @@ -139,10 +139,12 @@ const getMultiplePinyin: GetMultiplePinyin = (word, mode = 'normal') => { pinyin = customMultpileDict[wordCode]; } else if (mode === 'surname') { const surnamePinyin = Surnames[word]; - pinyin = [ - surnamePinyin, - pinyin.split(' ').filter(py => py !== surnamePinyin), - ].join(' '); + if (surnamePinyin) { + pinyin = [ + surnamePinyin, + pinyin.split(' ').filter(py => py !== surnamePinyin), + ].join(' '); + } } if (pinyin) { diff --git a/test/multiple.test.js b/test/multiple.test.js index 42af555..f2885b8 100644 --- a/test/multiple.test.js +++ b/test/multiple.test.js @@ -37,6 +37,11 @@ describe('multiple', () => { expect(result).to.be.equal('nài néng'); }); + it('[multiple]multiple+surname同时使用,无surname', () => { + const result = pinyin('好', { mode: 'surname', multiple: true }); + expect(result).to.be.equal('hǎo hào'); + }); + it('[multiple]base', () => { const result = pinyin('好', { multiple: true }); expect(result).to.be.equal('hǎo hào'); From 57302c8754ad408ccfd11a9b29729e2b064da3a7 Mon Sep 17 00:00:00 2001 From: zhoulixiang Date: Thu, 21 Mar 2024 17:14:11 +0800 Subject: [PATCH 3/3] test: add test case for multiple with surname --- test/multiple.test.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/multiple.test.js b/test/multiple.test.js index f2885b8..bd6c955 100644 --- a/test/multiple.test.js +++ b/test/multiple.test.js @@ -46,4 +46,9 @@ describe('multiple', () => { const result = pinyin('好', { multiple: true }); expect(result).to.be.equal('hǎo hào'); }); + + it('[multiple]multiple+surname同时使用,多音字优先使用姓氏读音', () => { + const result = pinyin('数学家华罗庚', { mode: 'surname', multiple: true }); + expect(result).to.be.equal('shù xué jiā huà luó gēng'); + }); });