Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
mozillazg committed Aug 5, 2018
2 parents 638ff21 + 7e63766 commit b950aaf
Show file tree
Hide file tree
Showing 14 changed files with 349 additions and 196 deletions.
4 changes: 2 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "tools/pinyin-data"]
path = tools/pinyin-data
[submodule "_tools/pinyin-data"]
path = _tools/pinyin-data
url = https://github.com/mozillazg/pinyin-data.git
28 changes: 17 additions & 11 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
language: go
go:
- 1.2
- 1.3
- 1.4
- 1.5
- 1.6
- 1.7
- tip
- '1.3'
- '1.4'
- '1.5'
- '1.6'
- '1.7'
- '1.8'
- '1.9'
- '1.10'
- 'master'

sudo: false

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

script:
- go run pinyin/main.go abc
- go run pinyin/main.go -s Normal abc
- echo "abc" | go run pinyin/main.go
- echo "abc" > abc.txt && go run pinyin/main.go < abc.txt
- go run cmd/pinyin/main.go abc
- go run cmd/pinyin/main.go -s zhao abc
- echo "abc" | go run cmd/pinyin/main.go
- echo "abc" > abc.txt && go run cmd/pinyin/main.go < abc.txt
- $HOME/gopath/bin/goveralls -service=travis-ci -v -package .

matrix:
allow_failures:
- go: master
101 changes: 90 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,68 @@
# Changelog


## 0.10.0 (2016-10-18)
## [0.14.0] (2018-08-05)

* **Changed** 使用 [pinyin-data][pinyin-data] v0.6.1 的拼音数据
* **Changed** 命令行工具移到 `cmd/pinyin/` 目录下,现在需要改为使用
`go get -u github.com/mozillazg/go-pinyin/cmd/pinyin` 来安装命令行工具。


## [0.13.0] (2018-04-29)

* **Changed** 使用 [pinyin-data][pinyin-data] v0.5.1 的拼音数据 (via [#30])
* **Changed** 修改命令行工具 `-s` 参数的值(thanks [@wdscxsj][@wdscxsj] via [#19][#19]):
* `Normal` 改为 `zhao`
* `Tone` 改为 `zh4ao`
* `Tone2` 改为 `zha4o`
* `Tone3` 改为 `zhao4`
* `Initials` 改为 `zh`
* `FirstLetter` 改为 `z`
* `Finals` 改为 `ao`
* `FinalsTone` 改为 `4ao`
* `FinalsTone2` 改为 `a4o`
* `FinalsTone3` 改为 `ao4`
* **Changed** 严格限制命令行参数中 `-s` 选项的值(thanks [@wdscxsj][@wdscxsj] via [#20][#20]):


## [0.12.0] (2017-04-25)


* **NEW** 命令行程序支持通过 -s 指定新增的 `Tone3``FinalsTone3` 拼音风格

$ pinyin -s Tone3 请至少输入一个汉字
qing3 zhi4 shao3 shu1 ru4 yi1 ge4 han4 zi4

$ pinyin -s FinalsTone3 请至少输入一个汉字
ing3 i4 ao3 u1 u4 i1 e4 an4 i4

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


## [0.11.0] (2016-10-28)

* **Changed** 不再使用 `0` 表示轻声(因为之前并没有正确的实现这个功能, 同时也觉得这个功能没必要)。
顺便修复了 Tone2 中 `ü` 标轻声的问题(像 `侵略 -> qi1n lv0e4`
* **NEW** 新增 `Tone3``FinalsTone3` 拼音风格。

hans := "中国人"
args := pinyin.NewArgs()
args.Style = pinyin.Tone3
fmt.Println("Tone3:", pinyin.Pinyin(hans, args))
// Output: Tone3: [[zhong1] [guo2] [ren2]]

args.Style = pinyin.FinalsTone3
fmt.Println("FinalsTone3:", pinyin.Pinyin(hans, args))
// Output: FinalsTone3: [[ong1] [uo2] [en2]]



## [0.10.0] (2016-10-18)

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


## 0.9.0 (2016-09-04):
## [0.9.0] (2016-09-04):

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



## 0.8.0 (2016-08-19)
## [0.8.0] (2016-08-19)

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


## 0.7.0 (2016-08-02)
## [0.7.0] (2016-08-02)

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


## 0.6.0 (2016-05-14)
## [0.6.0] (2016-05-14)

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

Expand All @@ -54,7 +110,7 @@



## 0.5.0 (2016-03-12)
## [0.5.0] (2016-03-12)

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


## 0.4.0 (2016-01-29)
## [0.4.0] (2016-01-29)

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


## 0.3.0 (2015-12-29)
## [0.3.0] (2015-12-29)

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


## 0.2.1 (2015-08-26)
## [0.2.1] (2015-08-26)

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


## 0.2.0 (2015-01-04)
## [0.2.0] (2015-01-04)

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

## 0.1.1 (2014-12-07)
## [0.1.1] (2014-12-07)
* 更新拼音库


## 0.1.0 (2014-11-23)
* Initial Release


[pinyin-data]: https://github.com/mozillazg/pinyin-data
[@wdscxsj]: https://github.com/wdscxsj
[#19]: https://github.com/mozillazg/go-pinyin/pull/19
[#20]: https://github.com/mozillazg/go-pinyin/pull/20
[#30]: https://github.com/mozillazg/go-pinyin/pull/30

[0.1.1]: https://github.com/mozillazg/go-pinyin/compare/v0.1.0...v0.1.1
[0.2.0]: https://github.com/mozillazg/go-pinyin/compare/v0.1.1...v0.2.0
[0.2.1]: https://github.com/mozillazg/go-pinyin/compare/v0.2.0...v0.2.1
[0.3.0]: https://github.com/mozillazg/go-pinyin/compare/v0.2.1...v0.3.0
[0.4.0]: https://github.com/mozillazg/go-pinyin/compare/v0.3.0...v0.4.0
[0.5.0]: https://github.com/mozillazg/go-pinyin/compare/v0.4.0...v0.5.0
[0.6.0]: https://github.com/mozillazg/go-pinyin/compare/v0.5.0...v0.6.0
[0.7.0]: https://github.com/mozillazg/go-pinyin/compare/v0.6.0...v0.7.0
[0.8.0]: https://github.com/mozillazg/go-pinyin/compare/v0.7.0...v0.8.0
[0.9.0]: https://github.com/mozillazg/go-pinyin/compare/v0.8.0...v0.9.0
[0.10.0]: https://github.com/mozillazg/go-pinyin/compare/v0.9.0...v0.10.0
[0.11.0]: https://github.com/mozillazg/go-pinyin/compare/v0.10.0...v0.11.0
[0.12.0]: https://github.com/mozillazg/go-pinyin/compare/v0.11.0...v0.12.0
[0.13.0]: https://github.com/mozillazg/go-pinyin/compare/v0.12.0...v0.13.0
[0.14.0]: https://github.com/mozillazg/go-pinyin/compare/v0.13.0...v0.14.0
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ test:

.PHONY: gen_pinyin_dict
gen_pinyin_dict:
@go run tools/gen_pinyin_dict.go tools/pinyin-data/pinyin.txt pinyin_dict.go
@go run _tools/gen_pinyin_dict.go _tools/pinyin-data/pinyin.txt pinyin_dict.go

.PHONY: lint
lint:
gofmt -s -w . pinyin tools
gofmt -s -w . pinyin _tools
golint .
golint pinyin
golint tools
golint _tools
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ go get -u github.com/mozillazg/go-pinyin
install CLI tool:

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


pinyin data
-----------------

* 使用 [pinyin-data](https://github.com/mozillazg/pinyin-data) 的拼音数据


License
---------

Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions _tools/pinyin-data
Submodule pinyin-data added at 0b3d00
63 changes: 63 additions & 0 deletions cmd/pinyin/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package main

import (
"flag"
"fmt"
"io/ioutil"
"os"
"strings"

"github.com/mattn/go-isatty"
"github.com/mozillazg/go-pinyin"
)

func main() {
heteronym := flag.Bool("e", false, "启用多音字模式")
style := flag.String("s", "zh4ao", "指定拼音风格。可选值:zhao, zh4ao, zha4o, zhao4, zh, z, ao, 4ao, a4o, ao4")
flag.Parse()
hans := flag.Args()
stdin := []byte{}
if !isatty.IsTerminal(os.Stdin.Fd()) {
stdin, _ = ioutil.ReadAll(os.Stdin)
}
if len(stdin) > 0 {
hans = append(hans, string(stdin))
}

if len(hans) == 0 {
fmt.Fprintln(os.Stderr, "请至少输入一个汉字: pinyin [-e] [-s STYLE] HANS [HANS ...]")
os.Exit(1)
}

args := pinyin.NewArgs()
if *heteronym {
args.Heteronym = true
}

styleValues := map[string]int{
"zhao": pinyin.Normal,
"zh4ao": pinyin.Tone,
"zha4o": pinyin.Tone2,
"zhao4": pinyin.Tone3,
"zh": pinyin.Initials,
"z": pinyin.FirstLetter,
"ao": pinyin.Finals,
"4ao": pinyin.FinalsTone,
"a4o": pinyin.FinalsTone2,
"ao4": pinyin.FinalsTone3,
}
if value, ok := styleValues[*style]; !ok {
fmt.Fprintf(os.Stderr, "无效的拼音风格:%s\n", *style)
os.Exit(1)
} else {
args.Style = value
}

pys := pinyin.Pinyin(strings.Join(hans, ""), args)
for _, s := range pys {
fmt.Print(strings.Join(s, ","), " ")
}
if len(pys) > 0 {
fmt.Println()
}
}
2 changes: 1 addition & 1 deletion phonetic_symbol.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ var phoneticSymbol = map[string]string{
"ú": "u2",
"ǔ": "u3",
"ù": "u4",
"ü": "v0",
"ü": "v",
"ǘ": "v2",
"ǚ": "v3",
"ǜ": "v4",
Expand Down
26 changes: 18 additions & 8 deletions pinyin.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

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

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

// 匹配使用数字标识声调的字符的正则表达式
var reTone2 = regexp.MustCompile("([aeoiuvnm])([0-4])$")
var reTone2 = regexp.MustCompile("([aeoiuvnm])([1-4])$")

// 匹配 Tone2 中标识韵母声调的正则表达式
var reTone3 = regexp.MustCompile("^([a-z]+)([1-4])([a-z]*)$")

// Args 配置信息
type Args struct {
Expand Down Expand Up @@ -159,7 +164,7 @@ func toFixed(p string, a Args) string {
case Normal, FirstLetter, Finals:
// 去掉声调: a1 -> a
m = reTone2.ReplaceAllString(symbol, "$1")
case Tone2, FinalsTone2:
case Tone2, FinalsTone2, Tone3, FinalsTone3:
// 返回使用数字标识声调的字符
m = symbol
default:
Expand All @@ -168,12 +173,17 @@ func toFixed(p string, a Args) string {
return m
})

switch a.Style {
// 将声调移动到最后
case Tone3, FinalsTone3:
py = reTone3.ReplaceAllString(py, "$1$3$2")
}
switch a.Style {
// 首字母
case FirstLetter:
py = py[:1]
// 韵母
case Finals, FinalsTone, FinalsTone2:
case Finals, FinalsTone, FinalsTone2, FinalsTone3:
// 转换为 []rune unicode 编码用于获取第一个拼音字符
// 因为 string 是 utf-8 编码不方便获取第一个拼音字符
rs := []rune(origP)
Expand Down
Loading

0 comments on commit b950aaf

Please sign in to comment.