@@ -7,10 +7,10 @@ import (
7
7
8
8
// Meta
9
9
const (
10
- Version = "0.3 .0"
10
+ Version = "0.4 .0"
11
11
Author = "mozillazg, 闲耘"
12
12
License = "MIT"
13
- Copyright = "Copyright (c) 2014 mozillazg, 闲耘"
13
+ Copyright = "Copyright (c) 2016 mozillazg, 闲耘"
14
14
)
15
15
16
16
// 拼音风格(推荐)
@@ -63,6 +63,10 @@ type Args struct {
63
63
Style int // 拼音风格(默认: Normal)
64
64
Heteronym bool // 是否启用多音字模式(默认:禁用)
65
65
Separator string // Slug 中使用的分隔符(默认:-)
66
+
67
+ // 处理没有拼音的字符(默认忽略没有拼音的字符)
68
+ // 函数返回的 slice 的长度为0 则表示忽略这个字符
69
+ Fallback func (r rune , a Args ) []string
66
70
}
67
71
68
72
// 默认配置:风格
@@ -74,9 +78,14 @@ var Heteronym = false
74
78
// 默认配置: `Slug` 中 Join 所用的分隔符
75
79
var Separator = "-"
76
80
81
+ // 默认配置: 如何处理没有拼音的字符(忽略这个字符)
82
+ var Fallback = func (r rune , a Args ) []string {
83
+ return []string {}
84
+ }
85
+
77
86
// NewArgs 返回包含默认配置的 `Args`
78
87
func NewArgs () Args {
79
- return Args {Style , Heteronym , Separator }
88
+ return Args {Style , Heteronym , Separator , Fallback }
80
89
}
81
90
82
91
// 获取单个拼音中的声母
@@ -117,7 +126,7 @@ func toFixed(p string, a Args) string {
117
126
// 返回使用数字标识声调的字符
118
127
m = symbol
119
128
default :
120
- // // 声调在头上
129
+ // 声调在头上
121
130
}
122
131
return m
123
132
})
@@ -143,15 +152,24 @@ func applyStyle(p []string, a Args) []string {
143
152
144
153
// SinglePinyin 把单个 `rune` 类型的汉字转换为拼音.
145
154
func SinglePinyin (r rune , a Args ) []string {
155
+ if a .Fallback == nil {
156
+ a .Fallback = Fallback
157
+ }
146
158
value , ok := PinyinDict [int (r )]
147
159
pys := []string {}
148
160
if ok {
149
161
pys = strings .Split (value , "," )
162
+ } else {
163
+ pys = a .Fallback (r , a )
164
+ }
165
+ if len (pys ) > 0 {
150
166
if ! a .Heteronym {
151
- pys = strings . Split ( value , "," ) [:1 ]
167
+ pys = pys [:1 ]
152
168
}
169
+ return applyStyle (pys , a )
170
+ } else {
171
+ return pys
153
172
}
154
- return applyStyle (pys , a )
155
173
}
156
174
157
175
// Pinyin 汉字转拼音,支持多音字模式.
0 commit comments