Skip to content

Commit b950aaf

Browse files
committed
Merge remote-tracking branch 'origin/develop'
2 parents 638ff21 + 7e63766 commit b950aaf

File tree

14 files changed

+349
-196
lines changed

14 files changed

+349
-196
lines changed

.gitmodules

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
[submodule "tools/pinyin-data"]
2-
path = tools/pinyin-data
1+
[submodule "_tools/pinyin-data"]
2+
path = _tools/pinyin-data
33
url = https://github.com/mozillazg/pinyin-data.git

.travis.yml

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
language: go
22
go:
3-
- 1.2
4-
- 1.3
5-
- 1.4
6-
- 1.5
7-
- 1.6
8-
- 1.7
9-
- tip
3+
- '1.3'
4+
- '1.4'
5+
- '1.5'
6+
- '1.6'
7+
- '1.7'
8+
- '1.8'
9+
- '1.9'
10+
- '1.10'
11+
- 'master'
1012

1113
sudo: false
1214

@@ -17,8 +19,12 @@ before_install:
1719
- go get github.com/mattn/goveralls
1820

1921
script:
20-
- go run pinyin/main.go abc
21-
- go run pinyin/main.go -s Normal abc
22-
- echo "abc" | go run pinyin/main.go
23-
- echo "abc" > abc.txt && go run pinyin/main.go < abc.txt
22+
- go run cmd/pinyin/main.go abc
23+
- go run cmd/pinyin/main.go -s zhao abc
24+
- echo "abc" | go run cmd/pinyin/main.go
25+
- echo "abc" > abc.txt && go run cmd/pinyin/main.go < abc.txt
2426
- $HOME/gopath/bin/goveralls -service=travis-ci -v -package .
27+
28+
matrix:
29+
allow_failures:
30+
- go: master

CHANGELOG.md

Lines changed: 90 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,68 @@
11
# Changelog
22

33

4-
## 0.10.0 (2016-10-18)
4+
## [0.14.0] (2018-08-05)
5+
6+
* **Changed** 使用 [pinyin-data][pinyin-data] v0.6.1 的拼音数据
7+
* **Changed** 命令行工具移到 `cmd/pinyin/` 目录下,现在需要改为使用
8+
`go get -u github.com/mozillazg/go-pinyin/cmd/pinyin` 来安装命令行工具。
9+
10+
11+
## [0.13.0] (2018-04-29)
12+
13+
* **Changed** 使用 [pinyin-data][pinyin-data] v0.5.1 的拼音数据 (via [#30])
14+
* **Changed** 修改命令行工具 `-s` 参数的值(thanks [@wdscxsj][@wdscxsj] via [#19][#19]):
15+
* `Normal` 改为 `zhao`
16+
* `Tone` 改为 `zh4ao`
17+
* `Tone2` 改为 `zha4o`
18+
* `Tone3` 改为 `zhao4`
19+
* `Initials` 改为 `zh`
20+
* `FirstLetter` 改为 `z`
21+
* `Finals` 改为 `ao`
22+
* `FinalsTone` 改为 `4ao`
23+
* `FinalsTone2` 改为 `a4o`
24+
* `FinalsTone3` 改为 `ao4`
25+
* **Changed** 严格限制命令行参数中 `-s` 选项的值(thanks [@wdscxsj][@wdscxsj] via [#20][#20]):
26+
27+
28+
## [0.12.0] (2017-04-25)
29+
30+
31+
* **NEW** 命令行程序支持通过 -s 指定新增的 `Tone3``FinalsTone3` 拼音风格
32+
33+
$ pinyin -s Tone3 请至少输入一个汉字
34+
qing3 zhi4 shao3 shu1 ru4 yi1 ge4 han4 zi4
35+
36+
$ pinyin -s FinalsTone3 请至少输入一个汉字
37+
ing3 i4 ao3 u1 u4 i1 e4 an4 i4
38+
39+
* **Changed** use [pinyin-data](https://github.com/mozillazg/pinyin-data) v0.4.1
40+
41+
42+
## [0.11.0] (2016-10-28)
43+
44+
* **Changed** 不再使用 `0` 表示轻声(因为之前并没有正确的实现这个功能, 同时也觉得这个功能没必要)。
45+
顺便修复了 Tone2 中 `ü` 标轻声的问题(像 `侵略 -> qi1n lv0e4`
46+
* **NEW** 新增 `Tone3``FinalsTone3` 拼音风格。
47+
48+
hans := "中国人"
49+
args := pinyin.NewArgs()
50+
args.Style = pinyin.Tone3
51+
fmt.Println("Tone3:", pinyin.Pinyin(hans, args))
52+
// Output: Tone3: [[zhong1] [guo2] [ren2]]
53+
54+
args.Style = pinyin.FinalsTone3
55+
fmt.Println("FinalsTone3:", pinyin.Pinyin(hans, args))
56+
// Output: FinalsTone3: [[ong1] [uo2] [en2]]
57+
58+
59+
60+
## [0.10.0] (2016-10-18)
561

662
* **Changed** use [pinyin-data](https://github.com/mozillazg/pinyin-data) v0.4.0
763

864

9-
## 0.9.0 (2016-09-04):
65+
## [0.9.0] (2016-09-04):
1066

1167
* **NEW** 新增 `func Convert(s string, a *Args) [][]string`
1268
* **NEW** 新增 `func LazyConvert(s string, a *Args) []string`
@@ -15,20 +71,20 @@
1571

1672

1773

18-
## 0.8.0 (2016-08-19)
74+
## [0.8.0] (2016-08-19)
1975

2076
* **Changed** use [pinyin-data](https://github.com/mozillazg/pinyin-data) v0.3.0
2177
* Fixed [#13](https://github.com/mozillazg/go-pinyin/issues/13) . thanks [@aisq2008](https://github.com/aisq2008)
2278
* Fixed pinyin of 罗
2379

2480

25-
## 0.7.0 (2016-08-02)
81+
## [0.7.0] (2016-08-02)
2682

2783
* **Changed** use [pinyin-data](https://github.com/mozillazg/pinyin-data) v0.2.0
2884
* **Improved** golint and gofmt
2985

3086

31-
## 0.6.0 (2016-05-14)
87+
## [0.6.0] (2016-05-14)
3288

3389
* **NEW** 命令行程序支持指定拼音风格:
3490

@@ -54,7 +110,7 @@
54110

55111

56112

57-
## 0.5.0 (2016-03-12)
113+
## [0.5.0] (2016-03-12)
58114

59115
* **CHANGE** 改为使用来自 [pinyin-data](https://github.com/mozillazg/pinyin-data) 的拼音数据。
60116
* **NEW** 命令行程序支持从标准输入读取数据(支持管道和重定向输入):
@@ -67,7 +123,7 @@
67123
```
68124

69125

70-
## 0.4.0 (2016-01-29)
126+
## [0.4.0] (2016-01-29)
71127

72128
* **NEW** `Args` 结构体新增 field: `Fallback func(r rune, a Args) []string`
73129
用于处理没有拼音的字符(默认忽略没有拼音的字符):
@@ -88,7 +144,7 @@
88144
```
89145

90146

91-
## 0.3.0 (2015-12-29)
147+
## [0.3.0] (2015-12-29)
92148

93149
* fix "当字符串中有非中文的时候,会出现下标越界的情况"(影响 `pinyin.LazyPinyin``pinyin.Slug` ([#1](https://github.com/mozillazg/go-pinyin/issues/1)))
94150
* 调整对非中文字符的处理:当遇到没有拼音的字符时,直接忽略
@@ -103,12 +159,12 @@
103159
```
104160

105161

106-
## 0.2.1 (2015-08-26)
162+
## [0.2.1] (2015-08-26)
107163

108164
* `yu`, `y`, `w` 不是声母
109165

110166

111-
## 0.2.0 (2015-01-04)
167+
## [0.2.0] (2015-01-04)
112168

113169
* 新增 `func NewArgs() Args`
114170
* 解决 `Args.Separator` 无法赋值为 `""` 的 BUG
@@ -122,9 +178,32 @@
122178
* `FINALS_TONE` -> `FinalsTone`
123179
* `FINALS_TONE2` -> `FinalsTone2`
124180

125-
## 0.1.1 (2014-12-07)
181+
## [0.1.1] (2014-12-07)
126182
* 更新拼音库
127183

128184

129185
## 0.1.0 (2014-11-23)
130186
* Initial Release
187+
188+
189+
[pinyin-data]: https://github.com/mozillazg/pinyin-data
190+
[@wdscxsj]: https://github.com/wdscxsj
191+
[#19]: https://github.com/mozillazg/go-pinyin/pull/19
192+
[#20]: https://github.com/mozillazg/go-pinyin/pull/20
193+
[#30]: https://github.com/mozillazg/go-pinyin/pull/30
194+
195+
[0.1.1]: https://github.com/mozillazg/go-pinyin/compare/v0.1.0...v0.1.1
196+
[0.2.0]: https://github.com/mozillazg/go-pinyin/compare/v0.1.1...v0.2.0
197+
[0.2.1]: https://github.com/mozillazg/go-pinyin/compare/v0.2.0...v0.2.1
198+
[0.3.0]: https://github.com/mozillazg/go-pinyin/compare/v0.2.1...v0.3.0
199+
[0.4.0]: https://github.com/mozillazg/go-pinyin/compare/v0.3.0...v0.4.0
200+
[0.5.0]: https://github.com/mozillazg/go-pinyin/compare/v0.4.0...v0.5.0
201+
[0.6.0]: https://github.com/mozillazg/go-pinyin/compare/v0.5.0...v0.6.0
202+
[0.7.0]: https://github.com/mozillazg/go-pinyin/compare/v0.6.0...v0.7.0
203+
[0.8.0]: https://github.com/mozillazg/go-pinyin/compare/v0.7.0...v0.8.0
204+
[0.9.0]: https://github.com/mozillazg/go-pinyin/compare/v0.8.0...v0.9.0
205+
[0.10.0]: https://github.com/mozillazg/go-pinyin/compare/v0.9.0...v0.10.0
206+
[0.11.0]: https://github.com/mozillazg/go-pinyin/compare/v0.10.0...v0.11.0
207+
[0.12.0]: https://github.com/mozillazg/go-pinyin/compare/v0.11.0...v0.12.0
208+
[0.13.0]: https://github.com/mozillazg/go-pinyin/compare/v0.12.0...v0.13.0
209+
[0.14.0]: https://github.com/mozillazg/go-pinyin/compare/v0.13.0...v0.14.0

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ test:
1010

1111
.PHONY: gen_pinyin_dict
1212
gen_pinyin_dict:
13-
@go run tools/gen_pinyin_dict.go tools/pinyin-data/pinyin.txt pinyin_dict.go
13+
@go run _tools/gen_pinyin_dict.go _tools/pinyin-data/pinyin.txt pinyin_dict.go
1414

1515
.PHONY: lint
1616
lint:
17-
gofmt -s -w . pinyin tools
17+
gofmt -s -w . pinyin _tools
1818
golint .
1919
golint pinyin
20-
golint tools
20+
golint _tools

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ go get -u github.com/mozillazg/go-pinyin
1919
install CLI tool:
2020

2121
```
22-
go get -u github.com/mozillazg/go-pinyin/pinyin
22+
go get -u github.com/mozillazg/go-pinyin/cmd/pinyin
2323
$ pinyin 中国人
2424
zhōng guó rén
2525
```
@@ -90,6 +90,12 @@ Related Projects
9090
* [mozillazg/rust-pinyin](https://github.com/mozillazg/rust-pinyin): 汉语拼音转换工具 Rust 版。
9191

9292

93+
pinyin data
94+
-----------------
95+
96+
* 使用 [pinyin-data](https://github.com/mozillazg/pinyin-data) 的拼音数据
97+
98+
9399
License
94100
---------
95101

File renamed without changes.

_tools/pinyin-data

Submodule pinyin-data added at 0b3d00b

cmd/pinyin/main.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"fmt"
6+
"io/ioutil"
7+
"os"
8+
"strings"
9+
10+
"github.com/mattn/go-isatty"
11+
"github.com/mozillazg/go-pinyin"
12+
)
13+
14+
func main() {
15+
heteronym := flag.Bool("e", false, "启用多音字模式")
16+
style := flag.String("s", "zh4ao", "指定拼音风格。可选值:zhao, zh4ao, zha4o, zhao4, zh, z, ao, 4ao, a4o, ao4")
17+
flag.Parse()
18+
hans := flag.Args()
19+
stdin := []byte{}
20+
if !isatty.IsTerminal(os.Stdin.Fd()) {
21+
stdin, _ = ioutil.ReadAll(os.Stdin)
22+
}
23+
if len(stdin) > 0 {
24+
hans = append(hans, string(stdin))
25+
}
26+
27+
if len(hans) == 0 {
28+
fmt.Fprintln(os.Stderr, "请至少输入一个汉字: pinyin [-e] [-s STYLE] HANS [HANS ...]")
29+
os.Exit(1)
30+
}
31+
32+
args := pinyin.NewArgs()
33+
if *heteronym {
34+
args.Heteronym = true
35+
}
36+
37+
styleValues := map[string]int{
38+
"zhao": pinyin.Normal,
39+
"zh4ao": pinyin.Tone,
40+
"zha4o": pinyin.Tone2,
41+
"zhao4": pinyin.Tone3,
42+
"zh": pinyin.Initials,
43+
"z": pinyin.FirstLetter,
44+
"ao": pinyin.Finals,
45+
"4ao": pinyin.FinalsTone,
46+
"a4o": pinyin.FinalsTone2,
47+
"ao4": pinyin.FinalsTone3,
48+
}
49+
if value, ok := styleValues[*style]; !ok {
50+
fmt.Fprintf(os.Stderr, "无效的拼音风格:%s\n", *style)
51+
os.Exit(1)
52+
} else {
53+
args.Style = value
54+
}
55+
56+
pys := pinyin.Pinyin(strings.Join(hans, ""), args)
57+
for _, s := range pys {
58+
fmt.Print(strings.Join(s, ","), " ")
59+
}
60+
if len(pys) > 0 {
61+
fmt.Println()
62+
}
63+
}

phonetic_symbol.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var phoneticSymbol = map[string]string{
2222
"ú": "u2",
2323
"ǔ": "u3",
2424
"ù": "u4",
25-
"ü": "v0",
25+
"ü": "v",
2626
"ǘ": "v2",
2727
"ǚ": "v3",
2828
"ǜ": "v4",

pinyin.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77

88
// Meta
99
const (
10-
Version = "0.10.0"
10+
Version = "0.14.0"
1111
Author = "mozillazg, 闲耘"
1212
License = "MIT"
1313
Copyright = "Copyright (c) 2016 mozillazg, 闲耘"
@@ -17,12 +17,14 @@ const (
1717
const (
1818
Normal = 0 // 普通风格,不带声调(默认风格)。如: zhong guo
1919
Tone = 1 // 声调风格1,拼音声调在韵母第一个字母上。如: zhōng guó
20-
Tone2 = 2 // 声调风格2,即拼音声调在各个拼音之后,用数字 [0-4] 进行表示。如: zho1ng guo2
20+
Tone2 = 2 // 声调风格2,即拼音声调在各个韵母之后,用数字 [1-4] 进行表示。如: zho1ng guo2
21+
Tone3 = 8 // 声调风格3,即拼音声调在各个拼音之后,用数字 [1-4] 进行表示。如: zhong1 guo2
2122
Initials = 3 // 声母风格,只返回各个拼音的声母部分。如: zh g
2223
FirstLetter = 4 // 首字母风格,只返回拼音的首字母部分。如: z g
23-
Finals = 5 // 韵母风格1,只返回各个拼音的韵母部分,不带声调。如: ong uo
24-
FinalsTone = 6 // 韵母风格2,带声调,声调在韵母第一个字母上。如: ōng uó
25-
FinalsTone2 = 7 // 韵母风格2,带声调,声调在各个拼音之后,用数字 [0-4] 进行表示。如: o1ng uo2
24+
Finals = 5 // 韵母风格,只返回各个拼音的韵母部分,不带声调。如: ong uo
25+
FinalsTone = 6 // 韵母风格1,带声调,声调在韵母第一个字母上。如: ōng uó
26+
FinalsTone2 = 7 // 韵母风格2,带声调,声调在各个韵母之后,用数字 [1-4] 进行表示。如: o1ng uo2
27+
FinalsTone3 = 9 // 韵母风格3,带声调,声调在各个拼音之后,用数字 [1-4] 进行表示。如: ong1 uo2
2628
)
2729

2830
// 拼音风格(兼容之前的版本)
@@ -56,7 +58,10 @@ var rePhoneticSymbolSource = func(m map[string]string) string {
5658
var rePhoneticSymbol = regexp.MustCompile("[" + rePhoneticSymbolSource + "]")
5759

5860
// 匹配使用数字标识声调的字符的正则表达式
59-
var reTone2 = regexp.MustCompile("([aeoiuvnm])([0-4])$")
61+
var reTone2 = regexp.MustCompile("([aeoiuvnm])([1-4])$")
62+
63+
// 匹配 Tone2 中标识韵母声调的正则表达式
64+
var reTone3 = regexp.MustCompile("^([a-z]+)([1-4])([a-z]*)$")
6065

6166
// Args 配置信息
6267
type Args struct {
@@ -159,7 +164,7 @@ func toFixed(p string, a Args) string {
159164
case Normal, FirstLetter, Finals:
160165
// 去掉声调: a1 -> a
161166
m = reTone2.ReplaceAllString(symbol, "$1")
162-
case Tone2, FinalsTone2:
167+
case Tone2, FinalsTone2, Tone3, FinalsTone3:
163168
// 返回使用数字标识声调的字符
164169
m = symbol
165170
default:
@@ -168,12 +173,17 @@ func toFixed(p string, a Args) string {
168173
return m
169174
})
170175

176+
switch a.Style {
177+
// 将声调移动到最后
178+
case Tone3, FinalsTone3:
179+
py = reTone3.ReplaceAllString(py, "$1$3$2")
180+
}
171181
switch a.Style {
172182
// 首字母
173183
case FirstLetter:
174184
py = py[:1]
175185
// 韵母
176-
case Finals, FinalsTone, FinalsTone2:
186+
case Finals, FinalsTone, FinalsTone2, FinalsTone3:
177187
// 转换为 []rune unicode 编码用于获取第一个拼音字符
178188
// 因为 string 是 utf-8 编码不方便获取第一个拼音字符
179189
rs := []rune(origP)

0 commit comments

Comments
 (0)