@@ -14,11 +14,22 @@ declare global {
14
14
* ],
15
15
* zeroMap: [ // 零声母映射
16
16
* '${双拼按键}/${对应拼音}'
17
+ * ],
18
+ * additionalMap: [ // 附加映射
19
+ * '${双拼按键}/${对应拼音}'
20
+ * ],
21
+ * excludingMap: [ // 不匹配映射
22
+ * '${双拼按键}/${对应拼音}'
17
23
* ]
18
24
* }
19
25
* ```
20
26
*/
21
- type RawShuangPinConfig = typeof configs [ "小鹤双拼" ] ;
27
+ type RawShuangPinConfig = {
28
+ keyMap : string [ ] ,
29
+ zeroMap : string [ ] ,
30
+ additionalMap ?: string [ ] ,
31
+ excludingMap ?: string [ ] ,
32
+ } ;
22
33
type ShuangpinMode = ShuangpinConfig ;
23
34
}
24
35
@@ -33,6 +44,7 @@ export class ShuangpinConfig {
33
44
zero2sp = new Map < string , string > ( ) ; // 双拼 -> 零声母
34
45
sp2py = new Map < string , string > ( ) ; // 双拼 -> 拼音
35
46
py2sp = new Map < string , string > ( ) ; // 拼音 -> 双拼
47
+ spNot2py = new Map < string , string > ( ) ; // 不匹配映射:双拼 -> 拼音
36
48
37
49
constructor (
38
50
public name : string ,
@@ -60,6 +72,22 @@ export class ShuangpinConfig {
60
72
this . py2sp . set ( zero , sp ) ;
61
73
this . sp2py . set ( sp , zero ) ;
62
74
}
75
+ const additionalMap = config [ "additionalMap" ] ;
76
+ if ( additionalMap ) {
77
+ for ( const line of additionalMap ) {
78
+ const [ sp , pinyin ] = line . split ( "/" ) ;
79
+ this . py2sp . set ( pinyin , sp ) ;
80
+ this . sp2py . set ( sp , pinyin ) ;
81
+ }
82
+ }
83
+
84
+ const excludingMap = config [ "excludingMap" ] ;
85
+ if ( excludingMap ) {
86
+ for ( const line of excludingMap ) {
87
+ const [ sp , pinyin ] = line . split ( "/" ) ;
88
+ this . spNot2py . set ( sp , pinyin ) ;
89
+ }
90
+ }
63
91
64
92
const allCombs = product (
65
93
[ ...this . groupByKey . keys ( ) ] ,
@@ -72,8 +100,11 @@ export class ShuangpinConfig {
72
100
const pinyins = product ( leads , follows ) ;
73
101
for ( const [ l , f ] of pinyins ) {
74
102
const pinyin = l + f ;
103
+ if ( pinyin == this . spNot2py . get ( sp ) ) {
104
+ continue ;
105
+ }
75
106
if ( validCombines . has ( pinyin ) ) {
76
- this . py2sp . set ( pinyin , sp ) ;
107
+ this . py2sp . set ( pinyin , sp . concat ( this . py2sp . get ( pinyin ) ?? "" ) ) ;
77
108
this . sp2py . set ( sp , pinyin ) ;
78
109
}
79
110
}
0 commit comments