zhongwen_tools 0.2.1 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 258fc61026656be4012a91e65cb844780ca6a731
4
- data.tar.gz: f80f2bf3e866dec213434ec72462e52b098b99f5
3
+ metadata.gz: 29e64d2dfff1e46c5a818f7dc9acc2919f74c256
4
+ data.tar.gz: fefa4e4202e1c3ba71f4b5d071230d880cf2df19
5
5
  SHA512:
6
- metadata.gz: 73b990af30f1baf6aa83f16f53613374a17c932ec462953f90fea23b9b704968cab90e89ee2b28356a44b07ab4f96ff1a7d8a87185d6cbc61709cd04c1fa8834
7
- data.tar.gz: 25c76d739ce899541df58a8aef4173f035ebd51b8c5122ac9642f84ea2d1da538e4c939e5f92a2fcc286a63df849d84e3c4e7b181b69f92d1eaffd83a89a5924
6
+ metadata.gz: e3b906b9372877ba3220d29a510ad2066e351e311567017a81e200fb1a3542ff81eea1e15d932df86db5c13c00b99a8c3727fa44313c8d504f2b9420f9d95866
7
+ data.tar.gz: 3e2f5d3307e29a5abbae461ca4ec9dba550b4a35dca357b01729dee0b6dfc40bc99fbaf676bfb926f3373b123de99b5498926801f85c148d6e014d3d83a05041
data/README.md CHANGED
@@ -36,8 +36,7 @@ ZhongwenTools includes the following modules:
36
36
  1. ZhongwenTools::String => some useful string functions and functions for identifying Chinese scripts and romanizations.
37
37
  2. ZhongwenTools::Numbers => functions for identifying and converting numbers.
38
38
  3. ZhongwenTools::Integer => some useful integer functions for Chinese:
39
- e.g. 12.to_pinyin 12.to_zht
40
- 4. [TODO] ZhongwenTools::Romanization => functions for converting between Chinese romanization systems
39
+ 4. ZhongwenTools::Romanization => functions for converting between Chinese romanization systems
41
40
  5. [TODO] ZhongwenTools::Conversion => functions for converting between Chinese scripts.
42
41
  6. [TODO] ZhongwenTools::ToneSandhi => functions for identifying and dealing with tone sandhi. (Wiki URL)
43
42
  7. [TODO] ZhongwenTools::Segmentation => functions for segmenting Chinese. Can provide different methods for converting
@@ -90,8 +89,8 @@ Monkey-patch your integers for Chinese.
90
89
 
91
90
 
92
91
  ### Romanization
93
- ZhongwenTools::Chinese has tools for converting between Chinese language romanization systems and
94
- scripts.
92
+ ZhongwenTools::Romanization has tools for converting between Chinese language romanization systems and
93
+ scripts. It **does not convert Chinese characters to pinyin** (see ZhongwenTools::Conversion).
95
94
 
96
95
  class String
97
96
  include ZhongwenTools::Romanization
@@ -120,6 +119,8 @@ scripts.
120
119
  str.tone_sandhi? #=> checks if the word has tone sandhi
121
120
  #=> true
122
121
  str.romanization?
122
+ str.pyn? #=> true
123
+
123
124
 
124
125
  ### Conversion
125
126
  Functions for converting between scripts (e.g. traditional Chinese to
@@ -0,0 +1,172 @@
1
+ #encoding: utf-8
2
+ require './lib/zhongwen_tools/romanization/conversion_table'
3
+ require './lib/zhongwen_tools/romanization/detect'
4
+ require './lib/zhongwen_tools/romanization/pyn_to_py'
5
+
6
+ module ZhongwenTools
7
+ module Romanization
8
+ def to_pinyin(*args)
9
+ str, from = _romanization_options(args)
10
+
11
+ _convert_romanization str, :py, from
12
+ end
13
+
14
+ def to_bopomofo *args
15
+ str, from = _romanization_options(args)
16
+
17
+ _convert_romanization str, :zyfh, from
18
+ end
19
+
20
+ def to_yale(*args)
21
+ str, from = _romanization_options(args)
22
+ _convert_romanization str, :yale, from
23
+ end
24
+
25
+ def to_wade_giles(*args)
26
+ str, from = _romanization_options(args)
27
+ _convert_romanization str, :wg, from
28
+ end
29
+
30
+ def to_typy(*args)
31
+ str, from = _romanization_options(args)
32
+ _convert_romanization str, :typy, from
33
+ end
34
+
35
+ private
36
+
37
+ def _romanization_options(args)
38
+ if self.class.to_s != 'String'
39
+ str = args[0]
40
+ from = (args[1] || :pyn).to_sym
41
+ else
42
+ str = self
43
+ from = (args[0] || :pyn).to_sym
44
+ end
45
+
46
+ [str, from]
47
+ end
48
+
49
+ # Private: Replaces numbered pinyin with actual pinyin. Pinyin separated with hyphens are combined as one word.
50
+ #
51
+ # str - A String to replace with actual pinyin
52
+ #
53
+ # Examples
54
+ # _to_pinyin 'Ni3 hao3 ma5?'
55
+ # # => "Nǐ hǎo ma?"
56
+ # # => 'Zhong1-guo2-ren2'
57
+ #
58
+ #
59
+ # Returns a string with actual pinyin
60
+ # TODO: fix regex: false match for V
61
+ # TODO: fix regex false match for "zhongguo person"
62
+ # #this regex is a quick and dirty check, but it's not accurate.
63
+ # an accurate regex would restrict access to completely accurate
64
+ # pinyin, e.g. sounds that mandarin actually can contain.
65
+ # #this regex extracts the pinyin components, but doesn't make
66
+ # judgement on the pinyins accuracy.
67
+ def _to_pinyin str
68
+ regex = /(([BPMFDTNLGKHZCSRJQXWYbpmfdtnlgkhzcsrjqxwy]?[h]?)(A[io]?|a[io]?|i[aeu]?o?|Ei?|ei?|Ou?|ou?|u[aoe]?i?|ve?)?(n?g?)(r?)([1-5])(\-+)?)/
69
+
70
+ # doing the substitution in a block is ~8x faster than using scan and each.
71
+ # Explanation: if it's pinyin without vowels, e.g. m, ng, then convert, otherwise, check if it needs an apostrophe (http://www.pinyin.info/romanization/hanyu/apostrophes.html). If it does, add it and then convert. Otherwise, just convert. Oh, and if double hyphens are used, replace them with one hyphen. And finally, correct those apostrophes at the very end.
72
+ str.gsub(regex) do
73
+ ($3.nil? ? "#{PYN_PY[$1]}" : ($2 == '' && ['a','e','o'].include?($3[0,1]))? "'#{PYN_PY["#{$3}#{$6}"]}#{$4}#{$5}" : "#{$2}#{PYN_PY["#{$3}#{$6}"]}#{$4}#{$5}") + (($7.to_s.length > 1) ? '-' : '')
74
+ end.gsub("-'","-").sub(/^'/,'')
75
+ end
76
+
77
+ #http://en.wikipedia.org/wiki/Pinyin
78
+ #http://talkbank.org/pinyin/Trad_chart_IPA.php
79
+ #for ipa
80
+ def _to_romanization str, to, from
81
+ convert_to = _set_type to
82
+ convert_from = _set_type from
83
+ tokens = str.split(' ').uniq
84
+ replacements = tokens.collect do |t|
85
+ # non_romanization = t.match(/[1-5](.*)/)[-1]
86
+ search = t.gsub(/[1-5].*/,'')
87
+ begin
88
+ if from.nil? || convert_from.nil?
89
+ replace = ROMANANIZATIONS_TABLE.find{|x| x.values.include? t.downcase.gsub(/[1-5].*/,'')}[convert_to.to_sym]
90
+ else
91
+ replace = ROMANANIZATIONS_TABLE.find{|x| x[convert_from.to_sym] == t.downcase.gsub(/[1-5].*/,'')}[convert_to.to_sym]
92
+ end
93
+ rescue => e#rescue when the converter meets something it doesn't recognize
94
+ replace = search
95
+ end
96
+ str = str.gsub(search, replace)
97
+ end
98
+ str
99
+ end
100
+ def _convert_romanization str, to, from
101
+ return str if to == from
102
+
103
+ if to == :py
104
+ if from == :pyn
105
+ _to_pinyin str
106
+ else
107
+ raise NotImplementedError, 'method not implemented'
108
+ #convert to pyn first.
109
+ end
110
+ elsif to == :zyfh
111
+ if from == :py
112
+ #need to convert pinyin to pyn
113
+ raise NotImplementedError, 'method not implemented'
114
+ end
115
+ _to_romanization str, to, from
116
+ else
117
+ if from == :pyn
118
+ _to_romanization str, to, from
119
+ else
120
+ raise NotImplementedError, 'method not implemented'
121
+ end
122
+ end
123
+ end
124
+
125
+
126
+ def _set_type(type)
127
+ type = type.to_s.downcase.to_sym
128
+ case type
129
+ when :zhuyinfuhao
130
+ :zyfh
131
+ when :bopomofo
132
+ :zyfh
133
+ when :bpmf
134
+ type = :zyfh
135
+ when :zhyfh
136
+ type = :zyfh
137
+ when :zyfh
138
+ :zyfh
139
+ when 'wade-giles'.to_sym
140
+ type = :wg
141
+ when :yale
142
+ :yale
143
+ when :tongyong
144
+ type = :typy
145
+ when :wg
146
+ type = :wg
147
+ when :typy
148
+ :typy
149
+ when :ty
150
+ type = :typy
151
+ when :pyn
152
+ :py
153
+ when :pinyin
154
+ type = :py
155
+ when :py
156
+ type = :py
157
+ when :msp2
158
+ :msp2
159
+ else
160
+ nil
161
+ end
162
+ end
163
+
164
+ alias_method :to_py, :to_pinyin
165
+ alias_method :to_zhyfh, :to_bopomofo
166
+ alias_method :to_zhuyin, :to_bopomofo
167
+ alias_method :to_zhuyin_fuhao, :to_bopomofo
168
+ alias_method :to_bpmf, :to_bopomofo
169
+ alias_method :to_wg, :to_wade_giles
170
+ alias_method :to_tongyong, :to_typy
171
+ end
172
+ end
@@ -0,0 +1,423 @@
1
+ #encoding: utf-8
2
+ module ZhongwenTools
3
+ module Romanization
4
+
5
+ ROMANANIZATIONS_TABLE = [{:zyfh => " ㄚ", :wg => "a", :mps2 => "a", :yale => "a", :typy => "a", :py => "a"},
6
+ { :zyfh => "ㄞ", :wg => "ai", :mps2 => "ai", :yale => "ai", :typy => "ai", :py => "ai"},
7
+ { :zyfh => "ㄢ", :wg => "an", :mps2 => "an", :yale => "an", :typy => "an", :py => "an"},
8
+ { :zyfh => "ㄤ", :wg => "ang", :mps2 => "ang", :yale => "ang", :typy => "ang", :py => "ang"},
9
+ { :zyfh => "ㄠ", :wg => "ao", :mps2 => "au", :yale => "au", :typy => "ao", :py => "ao"},
10
+ { :zyfh => "ㄅㄚ", :wg => "pa", :mps2 => "ba", :yale => "ba", :typy => "ba", :py => "ba"},
11
+ { :zyfh => "ㄅㄞ", :wg => "pai", :mps2 => "bai", :yale => "bai", :typy => "bai", :py => "bai"},
12
+ { :zyfh => "ㄅㄢ", :wg => "pan", :mps2 => "ban", :yale => "ban", :typy => "ban", :py => "ban"},
13
+ { :zyfh => "ㄅㄤ", :wg => "pang", :mps2 => "bang", :yale => "bang", :typy => "bang", :py => "bang"},
14
+ { :zyfh => "ㄅㄠ", :wg => "pao", :mps2 => "bau", :yale => "bau", :typy => "bao", :py => "bao"},
15
+ { :zyfh => "ㄅㄟ", :wg => "pei", :mps2 => "bei", :yale => "bei", :typy => "bei", :py => "bei"},
16
+ { :zyfh => "ㄅㄣ", :wg => "pen", :mps2 => "ben", :yale => "ben", :typy => "ben", :py => "ben"},
17
+ { :zyfh => "ㄅㄥ", :wg => "peng", :mps2 => "beng", :yale => "beng", :typy => "beng", :py => "beng"},
18
+ { :zyfh => "ㄅㄧ", :wg => "pi", :mps2 => "bi", :yale => "bi", :typy => "bi", :py => "bi"},
19
+ { :zyfh => "ㄅㄧㄢ", :wg => "pien", :mps2 => "bian", :yale => "byan", :typy => "bian", :py => "bian"},
20
+ { :zyfh => "ㄅㄧㄠ", :wg => "piao", :mps2 => "biau", :yale => "byau", :typy => "biao", :py => "biao"},
21
+ { :zyfh => "ㄅㄧㄝ", :wg => "pieh", :mps2 => "bie", :yale => "bye", :typy => "bie", :py => "bie"},
22
+ { :zyfh => "ㄅㄧㄣ", :wg => "pin", :mps2 => "bin", :yale => "bin", :typy => "bin", :py => "bin"},
23
+ { :zyfh => "ㄅㄧㄥ", :wg => "ping", :mps2 => "bing", :yale => "bing", :typy => "bing", :py => "bing"},
24
+ { :zyfh => "ㄅㄛ", :wg => "po", :mps2 => "bo", :yale => "bwo", :typy => "bo", :py => "bo"},
25
+ { :zyfh => "ㄅㄨ", :wg => "pu", :mps2 => "bu", :yale => "bu", :typy => "bu", :py => "bu"},
26
+ { :zyfh => "ㄘㄚ", :wg => "ts`a", :mps2 => "tsa", :yale => "tsa", :typy => "ca", :py => "ca"},
27
+ { :zyfh => "ㄘㄞ", :wg => "ts`ai", :mps2 => "tsai", :yale => "tsai", :typy => "cai", :py => "cai"},
28
+ { :zyfh => "ㄘㄢ", :wg => "ts`an", :mps2 => "tsan", :yale => "tsan", :typy => "can", :py => "can"},
29
+ { :zyfh => "ㄘㄤ", :wg => "ts`ang", :mps2 => "tsang", :yale => "tsang", :typy => "cang", :py => "cang"},
30
+ { :zyfh => "ㄘㄠ", :wg => "ts`ao", :mps2 => "tsau", :yale => "tsau", :typy => "cao", :py => "cao"},
31
+ { :zyfh => "ㄘㄜ", :wg => "ts`e", :mps2 => "tse", :yale => "tse", :typy => "ce", :py => "ce"},
32
+ { :zyfh => "ㄘㄣ", :wg => "ts`en", :mps2 => "tsen", :yale => "tsen", :typy => "cen", :py => "cen"},
33
+ { :zyfh => "ㄘㄥ", :wg => "ts`eng", :mps2 => "tseng", :yale => "tseng", :typy => "ceng", :py => "ceng"},
34
+ { :zyfh => "ㄔㄚ", :wg => "ch`a", :mps2 => "cha", :yale => "cha", :typy => "cha", :py => "cha"},
35
+ { :zyfh => "ㄔㄞ", :wg => "ch`ai", :mps2 => "chai", :yale => "chai", :typy => "chai", :py => "chai"},
36
+ { :zyfh => "ㄔㄢ", :wg => "ch`an", :mps2 => "chan", :yale => "chan", :typy => "chan", :py => "chan"},
37
+ { :zyfh => "ㄔㄤ", :wg => "ch`ang", :mps2 => "chang", :yale => "chang", :typy => "chang", :py => "chang"},
38
+ { :zyfh => "ㄔㄠ", :wg => "ch`ao", :mps2 => "chau", :yale => "chau", :typy => "chao", :py => "chao"},
39
+ { :zyfh => "ㄔㄜ", :wg => "ch`e", :mps2 => "che", :yale => "che", :typy => "che", :py => "che"},
40
+ { :zyfh => "ㄔㄣ", :wg => "ch`en", :mps2 => "chen", :yale => "chen", :typy => "chen", :py => "chen"},
41
+ { :zyfh => "ㄔㄥ", :wg => "ch`eng", :mps2 => "cheng", :yale => "cheng", :typy => "cheng", :py => "cheng"},
42
+ { :zyfh => "ㄔ", :wg => "ch`ih", :mps2 => "chr", :yale => "chr", :typy => "chih", :py => "chi"},
43
+ { :zyfh => "ㄔㄨㄥ", :wg => "ch`ung", :mps2 => "chung", :yale => "chung", :typy => "chong", :py => "chong"},
44
+ { :zyfh => "ㄔㄡ", :wg => "ch`ou", :mps2 => "chou", :yale => "chou", :typy => "chou", :py => "chou"},
45
+ { :zyfh => "ㄔㄨ", :wg => "ch`u", :mps2 => "chu", :yale => "chu", :typy => "chu", :py => "chu"},
46
+ { :zyfh => "ㄔㄨㄚ", :wg => "ch`ua", :mps2 => "chua", :yale => "chwa", :typy => "chua", :py => "chua"},
47
+ { :zyfh => "ㄔㄨㄞ", :wg => "ch`uai", :mps2 => "chuai", :yale => "chwai", :typy => "chuai", :py => "chuai"},
48
+ { :zyfh => "ㄔㄨㄢ", :wg => "ch`uan", :mps2 => "chuan", :yale => "chwan", :typy => "chuan", :py => "chuan"},
49
+ { :zyfh => "ㄔㄨㄤ", :wg => "ch`uang", :mps2 => "chuang", :yale => "chwang", :typy => "chuang", :py => "chuang"},
50
+ { :zyfh => "ㄔㄨㄟ", :wg => "ch`ui", :mps2 => "chuei", :yale => "chwei", :typy => "chuei", :py => "chui"},
51
+ { :zyfh => "ㄔㄨㄣ", :wg => "ch`un", :mps2 => "chuen", :yale => "chwen", :typy => "chun", :py => "chun"},
52
+ { :zyfh => "ㄔㄨㄛ", :wg => "ch`o", :mps2 => "chuo", :yale => "chwo", :typy => "chuo", :py => "chuo"},
53
+ { :zyfh => "ㄘ", :wg => "tz`u", :mps2 => "tsz", :yale => "tsz", :typy => "cih", :py => "ci"},
54
+ { :zyfh => "ㄘㄨㄥ", :wg => "ts`ung", :mps2 => "tsung", :yale => "tsung", :typy => "cong", :py => "cong"},
55
+ { :zyfh => "ㄘㄡ", :wg => "ts`ou", :mps2 => "tsou", :yale => "tsou", :typy => "cou", :py => "cou"},
56
+ { :zyfh => "ㄘㄨ", :wg => "ts`u", :mps2 => "tsu", :yale => "tsu", :typy => "cu", :py => "cu"},
57
+ { :zyfh => "ㄘㄨㄢ", :wg => "ts`uan", :mps2 => "tsuan", :yale => "tswan", :typy => "cuan", :py => "cuan"},
58
+ { :zyfh => "ㄘㄨㄟ", :wg => "ts`ui", :mps2 => "tsuei", :yale => "tswei", :typy => "cuei", :py => "cui"},
59
+ { :zyfh => "ㄘㄨㄣ", :wg => "ts`un", :mps2 => "tsuen", :yale => "tswen", :typy => "cun", :py => "cun"},
60
+ { :zyfh => "ㄘㄨㄛ", :wg => "ts`o", :mps2 => "tsuo", :yale => "tswo", :typy => "cuo", :py => "cuo"},
61
+ { :zyfh => "ㄉㄚ", :wg => "ta", :mps2 => "da", :yale => "da", :typy => "da", :py => "da"},
62
+ { :zyfh => "ㄉㄞ", :wg => "tai", :mps2 => "dai", :yale => "dai", :typy => "dai", :py => "dai"},
63
+ { :zyfh => "ㄉㄢ", :wg => "tan", :mps2 => "dan", :yale => "dan", :typy => "dan", :py => "dan"},
64
+ { :zyfh => "ㄉㄤ", :wg => "tang", :mps2 => "dang", :yale => "dang", :typy => "dang", :py => "dang"},
65
+ { :zyfh => "ㄉㄠ", :wg => "tao", :mps2 => "dau", :yale => "dau", :typy => "dao", :py => "dao"},
66
+ { :zyfh => "ㄉㄜ", :wg => "te", :mps2 => "de", :yale => "de", :typy => "de", :py => "de"},
67
+ { :zyfh => "ㄉㄟ", :wg => "tei", :mps2 => "dei", :yale => "dei", :typy => "dei", :py => "dei"},
68
+ { :zyfh => "ㄉㄣ", :wg => "ten", :mps2 => "den", :yale => "den", :typy => "den", :py => "den"},
69
+ { :zyfh => "ㄉㄥ", :wg => "teng", :mps2 => "deng", :yale => "deng", :typy => "deng", :py => "deng"},
70
+ { :zyfh => "ㄉㄧ", :wg => "ti", :mps2 => "di", :yale => "di", :typy => "di", :py => "di"},
71
+ { :zyfh => "ㄉㄧㄢ", :wg => "tien", :mps2 => "dian", :yale => "dyan", :typy => "dian", :py => "dian"},
72
+ { :zyfh => "ㄉㄧㄤ", :wg => "tiang", :mps2 => "diang", :yale => "dyang", :typy => "diang", :py => "diang"},
73
+ { :zyfh => "ㄉㄧㄠ", :wg => "tiao", :mps2 => "diau", :yale => "dyau", :typy => "diao", :py => "diao"},
74
+ { :zyfh => "ㄉㄧㄝ", :wg => "tieh", :mps2 => "die", :yale => "dye", :typy => "die", :py => "die"},
75
+ { :zyfh => "ㄉㄧㄥ", :wg => "ting", :mps2 => "ding", :yale => "ding", :typy => "ding", :py => "ding"},
76
+ { :zyfh => "ㄉㄧㄡ", :wg => "tiu", :mps2 => "diou", :yale => "dyou", :typy => "diou", :py => "diu"},
77
+ { :zyfh => "ㄉㄨㄥ", :wg => "tung", :mps2 => "dung", :yale => "dung", :typy => "dong", :py => "dong"},
78
+ { :zyfh => "ㄉㄡ", :wg => "tou", :mps2 => "dou", :yale => "dou", :typy => "dou", :py => "dou"},
79
+ { :zyfh => "ㄉㄨ", :wg => "tu", :mps2 => "du", :yale => "du", :typy => "du", :py => "du"},
80
+ { :zyfh => "ㄉㄨㄢ", :wg => "tuan", :mps2 => "duan", :yale => "dwan", :typy => "duan", :py => "duan"},
81
+ { :zyfh => "ㄉㄨㄟ", :wg => "tui", :mps2 => "duei", :yale => "dwei", :typy => "duei", :py => "dui"},
82
+ { :zyfh => "ㄉㄨㄣ", :wg => "tun", :mps2 => "duen", :yale => "dwen", :typy => "dun", :py => "dun"},
83
+ { :zyfh => "ㄉㄨㄛ", :wg => "to", :mps2 => "duo", :yale => "dwo", :typy => "duo", :py => "duo"},
84
+ { :zyfh => "ㄜ", :wg => "e", :mps2 => "e", :yale => "e", :typy => "e", :py => "e"},
85
+ { :zyfh => "ㄟ", :wg => "ei", :mps2 => "ei", :yale => "ei", :typy => "ei", :py => "ei"},
86
+ { :zyfh => "ㄣ", :wg => "en", :mps2 => "en", :yale => "en", :typy => "en", :py => "en"},
87
+ { :zyfh => "ㄦ", :wg => "erh", :mps2 => "er", :yale => "er", :typy => "er", :py => "er"},
88
+ { :zyfh => "ㄈㄚ", :wg => "fa", :mps2 => "fa", :yale => "fa", :typy => "fa", :py => "fa"},
89
+ { :zyfh => "ㄈㄢ", :wg => "fan", :mps2 => "fan", :yale => "fan", :typy => "fan", :py => "fan"},
90
+ { :zyfh => "ㄈㄤ", :wg => "fang", :mps2 => "fang", :yale => "fang", :typy => "fang", :py => "fang"},
91
+ { :zyfh => "ㄈㄟ", :wg => "fei", :mps2 => "fei", :yale => "fei", :typy => "fei", :py => "fei"},
92
+ { :zyfh => "ㄈㄣ", :wg => "fen", :mps2 => "fen", :yale => "fen", :typy => "fen", :py => "fen"},
93
+ { :zyfh => "ㄈㄥ", :wg => "feng", :mps2 => "feng", :yale => "feng", :typy => "fong", :py => "feng"},
94
+ { :zyfh => "ㄈㄛ", :wg => "fo", :mps2 => "fo", :yale => "fwo", :typy => "fo", :py => "fo"},
95
+ { :zyfh => "ㄈㄡ", :wg => "fou", :mps2 => "fou", :yale => "fou", :typy => "fou", :py => "fou"},
96
+ { :zyfh => "ㄈㄨ", :wg => "fu", :mps2 => "fu", :yale => "fu", :typy => "fu", :py => "fu"},
97
+ { :zyfh => "ㄍㄚ", :wg => "ka", :mps2 => "ga", :yale => "ga", :typy => "ga", :py => "ga"},
98
+ { :zyfh => "ㄍㄞ", :wg => "kai", :mps2 => "gai", :yale => "gai", :typy => "gai", :py => "gai"},
99
+ { :zyfh => "ㄍㄢ", :wg => "kan", :mps2 => "gan", :yale => "gan", :typy => "gan", :py => "gan"},
100
+ { :zyfh => "ㄍㄤ", :wg => "kang", :mps2 => "gang", :yale => "gang", :typy => "gang", :py => "gang"},
101
+ { :zyfh => "ㄍㄠ", :wg => "kao", :mps2 => "gau", :yale => "gau", :typy => "gao", :py => "gao"},
102
+ { :zyfh => "ㄍㄜ", :wg => "ko", :mps2 => "ge", :yale => "ge", :typy => "ge", :py => "ge"},
103
+ { :zyfh => "ㄍㄟ", :wg => "kei", :mps2 => "gei", :yale => "gei", :typy => "gei", :py => "gei"},
104
+ { :zyfh => "ㄍㄣ", :wg => "ken", :mps2 => "gen", :yale => "gen", :typy => "gen", :py => "gen"},
105
+ { :zyfh => "ㄍㄥ", :wg => "keng", :mps2 => "geng", :yale => "geng", :typy => "geng", :py => "geng"},
106
+ { :zyfh => "ㄍㄨㄥ", :wg => "kung", :mps2 => "gung", :yale => "gung", :typy => "gong", :py => "gong"},
107
+ { :zyfh => "ㄍㄡ", :wg => "kou", :mps2 => "gou", :yale => "gou", :typy => "gou", :py => "gou"},
108
+ { :zyfh => "ㄍㄨ", :wg => "ku", :mps2 => "gu", :yale => "gu", :typy => "gu", :py => "gu"},
109
+ { :zyfh => "ㄍㄨㄚ", :wg => "kua", :mps2 => "gua", :yale => "gwa", :typy => "gua", :py => "gua"},
110
+ { :zyfh => "ㄍㄨㄞ", :wg => "kuai", :mps2 => "guai", :yale => "gwai", :typy => "guai", :py => "guai"},
111
+ { :zyfh => "ㄍㄨㄢ", :wg => "kuan", :mps2 => "guan", :yale => "gwan", :typy => "guan", :py => "guan"},
112
+ { :zyfh => "ㄍㄨㄤ", :wg => "kuang", :mps2 => "guang", :yale => "gwang", :typy => "guang", :py => "guang"},
113
+ { :zyfh => "ㄍㄨㄟ", :wg => "kuei", :mps2 => "guei", :yale => "gwei", :typy => "guei", :py => "gui"},
114
+ { :zyfh => "ㄍㄨㄣ", :wg => "kun", :mps2 => "guen", :yale => "gwun", :typy => "gun", :py => "gun"},
115
+ { :zyfh => "ㄍㄨㄛ", :wg => "kuo", :mps2 => "guo", :yale => "gwo", :typy => "guo", :py => "guo"},
116
+ { :zyfh => "ㄏㄚ", :wg => "ha", :mps2 => "ha", :yale => "ha", :typy => "ha", :py => "ha"},
117
+ { :zyfh => "ㄏㄞ", :wg => "hai", :mps2 => "hai", :yale => "hai", :typy => "hai", :py => "hai"},
118
+ { :zyfh => "ㄏㄢ", :wg => "han", :mps2 => "han", :yale => "han", :typy => "han", :py => "han"},
119
+ { :zyfh => "ㄏㄤ", :wg => "hang", :mps2 => "hang", :yale => "hang", :typy => "hang", :py => "hang"},
120
+ { :zyfh => "ㄏㄠ", :wg => "hao", :mps2 => "hau", :yale => "hau", :typy => "hao", :py => "hao"},
121
+ { :zyfh => "ㄏㄜ", :wg => "ho", :mps2 => "he", :yale => "he", :typy => "he", :py => "he"},
122
+ { :zyfh => "ㄏㄟ", :wg => "hei", :mps2 => "hei", :yale => "hei", :typy => "hei", :py => "hei"},
123
+ { :zyfh => "ㄏㄣ", :wg => "hen", :mps2 => "hen", :yale => "hen", :typy => "hen", :py => "hen"},
124
+ { :zyfh => "ㄏㄥ", :wg => "heng", :mps2 => "heng", :yale => "heng", :typy => "heng", :py => "heng"},
125
+ { :zyfh => "ㄏㄨㄥ", :wg => "hung", :mps2 => "hung", :yale => "hung", :typy => "hong", :py => "hong"},
126
+ { :zyfh => "ㄏㄡ", :wg => "hou", :mps2 => "hou", :yale => "hou", :typy => "hou", :py => "hou"},
127
+ { :zyfh => "ㄏㄨ", :wg => "hu", :mps2 => "hu", :yale => "hu", :typy => "hu", :py => "hu"},
128
+ { :zyfh => "ㄏㄨㄚ", :wg => "hua", :mps2 => "hua", :yale => "hwa", :typy => "hua", :py => "hua"},
129
+ { :zyfh => "ㄏㄨㄞ", :wg => "huai", :mps2 => "huai", :yale => "hwai", :typy => "huai", :py => "huai"},
130
+ { :zyfh => "ㄏㄨㄢ", :wg => "huan", :mps2 => "huan", :yale => "hwan", :typy => "huan", :py => "huan"},
131
+ { :zyfh => "ㄏㄨㄤ", :wg => "huang", :mps2 => "huang", :yale => "hwang", :typy => "huang", :py => "huang"},
132
+ { :zyfh => "ㄏㄨㄟ", :wg => "hui", :mps2 => "huei", :yale => "hwei", :typy => "huei", :py => "hui"},
133
+ { :zyfh => "ㄏㄨㄣ", :wg => "hun", :mps2 => "huen", :yale => "hwen", :typy => "hun", :py => "hun"},
134
+ { :zyfh => "ㄏㄨㄛ", :wg => "huo", :mps2 => "huo", :yale => "hwo", :typy => "huo", :py => "huo"},
135
+ { :zyfh => "ㄐㄧ", :wg => "chi", :mps2 => "ji", :yale => "ji", :typy => "ji", :py => "ji"},
136
+ { :zyfh => "ㄐㄧㄚ", :wg => "chia", :mps2 => "jia", :yale => "jya", :typy => "jia", :py => "jia"},
137
+ { :zyfh => "ㄐㄧㄢ", :wg => "chien", :mps2 => "jian", :yale => "jyan", :typy => "jian", :py => "jian"},
138
+ { :zyfh => "ㄐㄧㄤ", :wg => "chiang", :mps2 => "jiang", :yale => "jyang", :typy => "jiang", :py => "jiang"},
139
+ { :zyfh => "ㄐㄧㄠ", :wg => "chiao", :mps2 => "jiau", :yale => "jyau", :typy => "jiao", :py => "jiao"},
140
+ { :zyfh => "ㄐㄧㄝ", :wg => "chieh", :mps2 => "jie", :yale => "jye", :typy => "jie", :py => "jie"},
141
+ { :zyfh => "ㄐㄧㄣ", :wg => "chin", :mps2 => "jin", :yale => "jin", :typy => "jin", :py => "jin"},
142
+ { :zyfh => "ㄐㄧㄥ", :wg => "ching", :mps2 => "jing", :yale => "jing", :typy => "jing", :py => "jing"},
143
+ { :zyfh => "ㄐㄩㄥ", :wg => "chiung", :mps2 => "jiung", :yale => "jyung", :typy => "jyong", :py => "jiong"},
144
+ { :zyfh => "ㄐㄧㄡ", :wg => "chiu", :mps2 => "jiou", :yale => "jyou", :typy => "jiou", :py => "jiu"},
145
+ { :zyfh => "ㄐㄩ", :wg => "chü", :mps2 => "jiu", :yale => "jyu", :typy => "jyu", :py => "ju"},
146
+ { :zyfh => "ㄐㄩㄢ", :wg => "chüan", :mps2 => "jiuan", :yale => "jywan", :typy => "jyuan", :py => "juan"},
147
+ { :zyfh => "ㄐㄩㄝ", :wg => "chüeh", :mps2 => "jiue", :yale => "jywe", :typy => "jyue", :py => "jue"},
148
+ { :zyfh => "ㄐㄩㄣ", :wg => "chün", :mps2 => "jiun", :yale => "jyun", :typy => "jyun", :py => "jun"},
149
+ { :zyfh => "ㄎㄚ", :wg => "k`a", :mps2 => "ka", :yale => "ka", :typy => "ka", :py => "ka"},
150
+ { :zyfh => "ㄎㄞ", :wg => "k`ai", :mps2 => "kai", :yale => "kai", :typy => "kai", :py => "kai"},
151
+ { :zyfh => "ㄎㄢ", :wg => "k`an", :mps2 => "kan", :yale => "kan", :typy => "kan", :py => "kan"},
152
+ { :zyfh => "ㄎㄤ", :wg => "k`ang", :mps2 => "kang", :yale => "kang", :typy => "kang", :py => "kang"},
153
+ { :zyfh => "ㄎㄠ", :wg => "k`ao", :mps2 => "kau", :yale => "kau", :typy => "kao", :py => "kao"},
154
+ { :zyfh => "ㄎㄜ", :wg => "k`o", :mps2 => "ke", :yale => "ke", :typy => "ke", :py => "ke"},
155
+ { :zyfh => "ㄎㄣ", :wg => "k`en", :mps2 => "ken", :yale => "ken", :typy => "ken", :py => "ken"},
156
+ { :zyfh => "ㄎㄥ", :wg => "k`eng", :mps2 => "keng", :yale => "keng", :typy => "keng", :py => "keng"},
157
+ { :zyfh => "ㄎㄨㄥ", :wg => "k`ung", :mps2 => "kung", :yale => "kung", :typy => "kong", :py => "kong"},
158
+ { :zyfh => "ㄎㄡ", :wg => "k`ou", :mps2 => "kou", :yale => "kou", :typy => "kou", :py => "kou"},
159
+ { :zyfh => "ㄎㄨ", :wg => "k`u", :mps2 => "ku", :yale => "ku", :typy => "ku", :py => "ku"},
160
+ { :zyfh => "ㄎㄨㄚ", :wg => "k`ua", :mps2 => "kua", :yale => "kwa", :typy => "kua", :py => "kua"},
161
+ { :zyfh => "ㄎㄨㄞ", :wg => "k`uai", :mps2 => "kuai", :yale => "kwai", :typy => "kuai", :py => "kuai"},
162
+ { :zyfh => "ㄎㄨㄢ", :wg => "k`uan", :mps2 => "kuan", :yale => "kwan", :typy => "kuan", :py => "kuan"},
163
+ { :zyfh => "ㄎㄨㄤ", :wg => "k`uang", :mps2 => "kuang", :yale => "kwang", :typy => "kuang", :py => "kuang"},
164
+ { :zyfh => "ㄎㄨㄟ", :wg => "k`uei", :mps2 => "kuei", :yale => "kwei", :typy => "kuei", :py => "kui"},
165
+ { :zyfh => "ㄎㄨㄣ", :wg => "k`un", :mps2 => "kuen", :yale => "kwen", :typy => "kun", :py => "kun"},
166
+ { :zyfh => "ㄎㄨㄛ", :wg => "k`uo", :mps2 => "kuo", :yale => "kwo", :typy => "kuo", :py => "kuo"},
167
+ { :zyfh => "ㄌㄚ", :wg => "la", :mps2 => "la", :yale => "la", :typy => "la", :py => "la"},
168
+ { :zyfh => "ㄌㄞ", :wg => "lai", :mps2 => "lai", :yale => "lai", :typy => "lai", :py => "lai"},
169
+ { :zyfh => "ㄌㄢ", :wg => "lan", :mps2 => "lan", :yale => "lan", :typy => "lan", :py => "lan"},
170
+ { :zyfh => "ㄌㄤ", :wg => "lang", :mps2 => "lang", :yale => "lang", :typy => "lang", :py => "lang"},
171
+ { :zyfh => "ㄌㄠ", :wg => "lao", :mps2 => "lau", :yale => "lau", :typy => "lao", :py => "lao"},
172
+ { :zyfh => "ㄌㄜ", :wg => "le", :mps2 => "le", :yale => "le", :typy => "le", :py => "le"},
173
+ { :zyfh => "ㄌㄟ", :wg => "lei", :mps2 => "lei", :yale => "lei", :typy => "lei", :py => "lei"},
174
+ { :zyfh => "ㄌㄥ", :wg => "leng", :mps2 => "leng", :yale => "leng", :typy => "leng", :py => "leng"},
175
+ { :zyfh => "ㄌㄧ", :wg => "li", :mps2 => "li", :yale => "li", :typy => "li", :py => "li"},
176
+ { :zyfh => "ㄌㄧㄚ", :wg => "lia", :mps2 => "lia", :yale => "lya", :typy => "lia", :py => "lia"},
177
+ { :zyfh => "ㄌㄧㄢ", :wg => "lien", :mps2 => "lian", :yale => "lyan", :typy => "lian", :py => "lian"},
178
+ { :zyfh => "ㄌㄧㄤ", :wg => "liang", :mps2 => "liang", :yale => "lyang", :typy => "liang", :py => "liang"},
179
+ { :zyfh => "ㄌㄧㄠ", :wg => "liao", :mps2 => "liau", :yale => "lyau", :typy => "liao", :py => "liao"},
180
+ { :zyfh => "ㄌㄧㄝ", :wg => "lieh", :mps2 => "lie", :yale => "lye", :typy => "lie", :py => "lie"},
181
+ { :zyfh => "ㄌㄧㄣ", :wg => "lin", :mps2 => "lin", :yale => "lin", :typy => "lin", :py => "lin"},
182
+ { :zyfh => "ㄌㄧㄥ", :wg => "ling", :mps2 => "ling", :yale => "ling", :typy => "ling", :py => "ling"},
183
+ { :zyfh => "ㄌㄧㄡ", :wg => "liu", :mps2 => "liou", :yale => "lyou", :typy => "liou", :py => "liu"},
184
+ { :zyfh => "ㄌㄛ", :wg => "lo", :mps2 => "lo", :yale => "lo", :typy => "lo", :py => "lo"},
185
+ { :zyfh => "ㄌㄨㄥ", :wg => "lung", :mps2 => "lung", :yale => "lung", :typy => "long", :py => "long"},
186
+ { :zyfh => "ㄌㄡ", :wg => "lou", :mps2 => "lou", :yale => "lou", :typy => "lou", :py => "lou"},
187
+ { :zyfh => "ㄌㄨ", :wg => "lu", :mps2 => "lu", :yale => "lu", :typy => "lu", :py => "lu"},
188
+ { :zyfh => "ㄌㄨㄢ", :wg => "luan", :mps2 => "luan", :yale => "lwan", :typy => "luan", :py => "luan"},
189
+ { :zyfh => "ㄌㄨㄣ", :wg => "lun", :mps2 => "luen", :yale => "lwun", :typy => "lun", :py => "lun"},
190
+ { :zyfh => "ㄌㄨㄛ", :wg => "lo", :mps2 => "luo", :yale => "lwo", :typy => "luo", :py => "luo"},
191
+ { :zyfh => "ㄌㄩ", :wg => "lü", :mps2 => "liu", :yale => "lyu", :typy => "lyu", :py => "lü"},
192
+ { :zyfh => "ㄌㄩㄝ", :wg => "lüeh", :mps2 => "liue", :yale => "lywe", :typy => "lyue", :py => "lüe"},
193
+ { :zyfh => "ㄌㄩㄣ", :wg => "lün", :mps2 => "liun", :yale => "lyun", :typy => "lyun", :py => "lün"},
194
+ { :zyfh => "ㄌㄩ", :wg => "lü", :mps2 => "liu", :yale => "lyu", :typy => "lyu", :py => "lv"},
195
+ { :zyfh => "ㄌㄩㄝ", :wg => "lüeh", :mps2 => "liue", :yale => "lywe", :typy => "lyue", :py => "lve"},
196
+ { :zyfh => "ㄌㄩㄣ", :wg => "lün", :mps2 => "liun", :yale => "lyun", :typy => "lyun", :py => "lvn"},
197
+ { :zyfh => "ㄇㄚ", :wg => "ma", :mps2 => "ma", :yale => "ma", :typy => "ma", :py => "ma"},
198
+ { :zyfh => "ㄇㄞ", :wg => "mai", :mps2 => "mai", :yale => "mai", :typy => "mai", :py => "mai"},
199
+ { :zyfh => "ㄇㄢ", :wg => "man", :mps2 => "man", :yale => "man", :typy => "man", :py => "man"},
200
+ { :zyfh => "ㄇㄤ", :wg => "mang", :mps2 => "mang", :yale => "mang", :typy => "mang", :py => "mang"},
201
+ { :zyfh => "ㄇㄠ", :wg => "mao", :mps2 => "mau", :yale => "mau", :typy => "mao", :py => "mao"},
202
+ { :zyfh => "ㄇㄜ", :wg => "me", :mps2 => "me", :yale => "me", :typy => "me", :py => "me"},
203
+ { :zyfh => "ㄇㄟ", :wg => "mei", :mps2 => "mei", :yale => "mei", :typy => "mei", :py => "mei"},
204
+ { :zyfh => "ㄇㄣ", :wg => "men", :mps2 => "men", :yale => "men", :typy => "men", :py => "men"},
205
+ { :zyfh => "ㄇㄥ", :wg => "meng", :mps2 => "meng", :yale => "meng", :typy => "meng", :py => "meng"},
206
+ { :zyfh => "ㄇㄧ", :wg => "mi", :mps2 => "mi", :yale => "mi", :typy => "mi", :py => "mi"},
207
+ { :zyfh => "ㄇㄧㄢ", :wg => "mien", :mps2 => "mian", :yale => "myan", :typy => "mian", :py => "mian"},
208
+ { :zyfh => "ㄇㄧㄠ", :wg => "miao", :mps2 => "miau", :yale => "myau", :typy => "miao", :py => "miao"},
209
+ { :zyfh => "ㄇㄧㄝ", :wg => "mieh", :mps2 => "mie", :yale => "mye", :typy => "mie", :py => "mie"},
210
+ { :zyfh => "ㄇㄧㄣ", :wg => "min", :mps2 => "min", :yale => "min", :typy => "min", :py => "min"},
211
+ { :zyfh => "ㄇㄧㄥ", :wg => "ming", :mps2 => "ming", :yale => "ming", :typy => "ming", :py => "ming"},
212
+ { :zyfh => "ㄇㄧㄡ", :wg => "miu", :mps2 => "miou", :yale => "myou", :typy => "miou", :py => "miu"},
213
+ { :zyfh => "ㄇㄛ", :wg => "mo", :mps2 => "mo", :yale => "mwo", :typy => "mo", :py => "mo"},
214
+ { :zyfh => "ㄇㄡ", :wg => "mou", :mps2 => "mou", :yale => "mou", :typy => "mou", :py => "mou"},
215
+ { :zyfh => "ㄇㄨ", :wg => "mu", :mps2 => "mu", :yale => "mu", :typy => "mu", :py => "mu"},
216
+ { :zyfh => "ㄋㄚ", :wg => "na", :mps2 => "na", :yale => "na", :typy => "na", :py => "na"},
217
+ { :zyfh => "ㄋㄞ", :wg => "nai", :mps2 => "nai", :yale => "nai", :typy => "nai", :py => "nai"},
218
+ { :zyfh => "ㄋㄢ", :wg => "nan", :mps2 => "nan", :yale => "nan", :typy => "nan", :py => "nan"},
219
+ { :zyfh => "ㄋㄤ", :wg => "nang", :mps2 => "nang", :yale => "nang", :typy => "nang", :py => "nang"},
220
+ { :zyfh => "ㄋㄠ", :wg => "nao", :mps2 => "nau", :yale => "nau", :typy => "nao", :py => "nao"},
221
+ { :zyfh => "ㄋㄜ", :wg => "ne", :mps2 => "ne", :yale => "ne", :typy => "ne", :py => "ne"},
222
+ { :zyfh => "ㄋㄟ", :wg => "nei", :mps2 => "nei", :yale => "nei", :typy => "nei", :py => "nei"},
223
+ { :zyfh => "ㄋㄣ", :wg => "nen", :mps2 => "nen", :yale => "nen", :typy => "nen", :py => "nen"},
224
+ { :zyfh => "ㄋㄥ", :wg => "neng", :mps2 => "neng", :yale => "neng", :typy => "neng", :py => "neng"},
225
+ { :zyfh => "ㄋㄧ", :wg => "ni", :mps2 => "ni", :yale => "ni", :typy => "ni", :py => "ni"},
226
+ { :zyfh => "ㄋㄧㄚ", :wg => "nia", :mps2 => "nia", :yale => "nya", :typy => "nia", :py => "nia"},
227
+ { :zyfh => "ㄋㄧㄢ", :wg => "nien", :mps2 => "nian", :yale => "nyan", :typy => "nian", :py => "nian"},
228
+ { :zyfh => "ㄋㄧㄤ", :wg => "niang", :mps2 => "niang", :yale => "nyang", :typy => "niang", :py => "niang"},
229
+ { :zyfh => "ㄋㄧㄠ", :wg => "niao", :mps2 => "niau", :yale => "nyau", :typy => "niao", :py => "niao"},
230
+ { :zyfh => "ㄋㄧㄝ", :wg => "nieh", :mps2 => "nie", :yale => "nye", :typy => "nie", :py => "nie"},
231
+ { :zyfh => "ㄋㄧㄣ", :wg => "nin", :mps2 => "nin", :yale => "nin", :typy => "nin", :py => "nin"},
232
+ { :zyfh => "ㄋㄧㄥ", :wg => "ning", :mps2 => "ning", :yale => "ning", :typy => "ning", :py => "ning"},
233
+ { :zyfh => "ㄋㄧㄡ", :wg => "niu", :mps2 => "niou", :yale => "nyou", :typy => "niou", :py => "niu"},
234
+ { :zyfh => "ㄋㄨㄥ", :wg => "nung", :mps2 => "nung", :yale => "nung", :typy => "nong", :py => "nong"},
235
+ { :zyfh => "ㄋㄡ", :wg => "nou", :mps2 => "nou", :yale => "nou", :typy => "nou", :py => "nou"},
236
+ { :zyfh => "ㄋㄨ", :wg => "nu", :mps2 => "nu", :yale => "nu", :typy => "nu", :py => "nu"},
237
+ { :zyfh => "ㄋㄨㄢ", :wg => "nuan", :mps2 => "nuan", :yale => "nwan", :typy => "nuan", :py => "nuan"},
238
+ { :zyfh => "ㄋㄨㄣ", :wg => "nun", :mps2 => "nuen", :yale => "nwen", :typy => "nun", :py => "nun"},
239
+ { :zyfh => "ㄋㄨㄛ", :wg => "no", :mps2 => "nuo", :yale => "nwo", :typy => "nuo", :py => "nuo"},
240
+ { :zyfh => "ㄋㄩ", :wg => "nü", :mps2 => "niu", :yale => "nyu", :typy => "nyu", :py => "nv"},
241
+ { :zyfh => "ㄋㄩ", :wg => "nü", :mps2 => "niu", :yale => "nyu", :typy => "nyu", :py => "nü"},
242
+ { :zyfh => "ㄋㄩㄝ", :wg => "nüeh", :mps2 => "niue", :yale => "nywe", :typy => "nyue", :py => "nüe"},
243
+ { :zyfh => "ㄋㄩㄝ", :wg => "nüeh", :mps2 => "niue", :yale => "nywe", :typy => "nyue", :py => "nve"},
244
+ { :zyfh => "ㄡ", :wg => "ou", :mps2 => "ou", :yale => "ou", :typy => "ou", :py => "ou"},
245
+ { :zyfh => "ㄆㄚ", :wg => "p`a", :mps2 => "pa", :yale => "pa", :typy => "pa", :py => "pa"},
246
+ { :zyfh => "ㄆㄞ", :wg => "p`ai", :mps2 => "pai", :yale => "pai", :typy => "pai", :py => "pai"},
247
+ { :zyfh => "ㄆㄢ", :wg => "p`an", :mps2 => "pan", :yale => "pan", :typy => "pan", :py => "pan"},
248
+ { :zyfh => "ㄆㄤ", :wg => "p`ang", :mps2 => "pang", :yale => "pang", :typy => "pang", :py => "pang"},
249
+ { :zyfh => "ㄆㄠ", :wg => "p`ao", :mps2 => "pau", :yale => "pau", :typy => "pao", :py => "pao"},
250
+ { :zyfh => "ㄆㄟ", :wg => "p`ei", :mps2 => "pei", :yale => "pei", :typy => "pei", :py => "pei"},
251
+ { :zyfh => "ㄆㄣ", :wg => "p`en", :mps2 => "pen", :yale => "pen", :typy => "pen", :py => "pen"},
252
+ { :zyfh => "ㄆㄥ", :wg => "p`eng", :mps2 => "peng", :yale => "peng", :typy => "peng", :py => "peng"},
253
+ { :zyfh => "ㄆㄧ", :wg => "p`i", :mps2 => "pi", :yale => "pi", :typy => "pi", :py => "pi"},
254
+ { :zyfh => "ㄆㄧㄢ", :wg => "p`ien", :mps2 => "pian", :yale => "pyan", :typy => "pian", :py => "pian"},
255
+ { :zyfh => "ㄆㄧㄠ", :wg => "p`iao", :mps2 => "piau", :yale => "pyau", :typy => "piao", :py => "piao"},
256
+ { :zyfh => "ㄆㄧㄝ", :wg => "p`ieh", :mps2 => "pie", :yale => "pye", :typy => "pie", :py => "pie"},
257
+ { :zyfh => "ㄆㄧㄣ", :wg => "p`in", :mps2 => "pin", :yale => "pin", :typy => "pin", :py => "pin"},
258
+ { :zyfh => "ㄆㄧㄥ", :wg => "p`ing", :mps2 => "ping", :yale => "ping", :typy => "ping", :py => "ping"},
259
+ { :zyfh => "ㄆㄛ", :wg => "p`o", :mps2 => "po", :yale => "pwo", :typy => "po", :py => "po"},
260
+ { :zyfh => "ㄆㄡ", :wg => "p`ou", :mps2 => "pou", :yale => "pou", :typy => "pou", :py => "pou"},
261
+ { :zyfh => "ㄆㄨ", :wg => "p`u", :mps2 => "pu", :yale => "pu", :typy => "pu", :py => "pu"},
262
+ { :zyfh => "ㄑㄧ", :wg => "ch`i", :mps2 => "chi", :yale => "chi", :typy => "ci", :py => "qi"},
263
+ { :zyfh => "ㄑㄧㄚ", :wg => "ch`ia", :mps2 => "chia", :yale => "chya", :typy => "cia", :py => "qia"},
264
+ { :zyfh => "ㄑㄧㄢ", :wg => "ch`ien", :mps2 => "chian", :yale => "chyan", :typy => "cian", :py => "qian"},
265
+ { :zyfh => "ㄑㄧㄤ", :wg => "ch`iang", :mps2 => "chiang", :yale => "chyang", :typy => "ciang", :py => "qiang"},
266
+ { :zyfh => "ㄑㄧㄠ", :wg => "ch`iao", :mps2 => "chiau", :yale => "chyau", :typy => "ciao", :py => "qiao"},
267
+ { :zyfh => "ㄑㄧㄝ", :wg => "ch`ieh", :mps2 => "chie", :yale => "chye", :typy => "cie", :py => "qie"},
268
+ { :zyfh => "ㄑㄧㄣ", :wg => "ch`in", :mps2 => "chin", :yale => "chin", :typy => "cin", :py => "qin"},
269
+ { :zyfh => "ㄑㄧㄥ", :wg => "ch`ing", :mps2 => "ching", :yale => "ching", :typy => "cing", :py => "qing"},
270
+ { :zyfh => "ㄑㄩㄥ", :wg => "ch`iung", :mps2 => "chiung", :yale => "chyung", :typy => "cyong", :py => "qiong"},
271
+ { :zyfh => "ㄑㄧㄡ", :wg => "ch`iu", :mps2 => "chiou", :yale => "chyou", :typy => "ciou", :py => "qiu"},
272
+ { :zyfh => "ㄑㄩ", :wg => "ch`ü", :mps2 => "chiu", :yale => "chyu", :typy => "cyu", :py => "qu"},
273
+ { :zyfh => "ㄑㄩㄢ", :wg => "ch`üan", :mps2 => "chiuan", :yale => "chywan", :typy => "cyuan", :py => "quan"},
274
+ { :zyfh => "ㄑㄩㄝ", :wg => "ch`üeh", :mps2 => "chiue", :yale => "chywe", :typy => "cyue", :py => "que"},
275
+ { :zyfh => "ㄑㄩㄣ", :wg => "ch`ün", :mps2 => "chiun", :yale => "chyun", :typy => "cyun", :py => "qun"},
276
+ { :zyfh => "ㄖㄢ", :wg => "jan", :mps2 => "ran", :yale => "ran", :typy => "ran", :py => "ran"},
277
+ { :zyfh => "ㄖㄤ", :wg => "jang", :mps2 => "rang", :yale => "rang", :typy => "rang", :py => "rang"},
278
+ { :zyfh => "ㄖㄠ", :wg => "jao", :mps2 => "rau", :yale => "rau", :typy => "rao", :py => "rao"},
279
+ { :zyfh => "ㄖㄜ", :wg => "je", :mps2 => "re", :yale => "re", :typy => "re", :py => "re"},
280
+ { :zyfh => "ㄖㄣ", :wg => "jen", :mps2 => "ren", :yale => "ren", :typy => "ren", :py => "ren"},
281
+ { :zyfh => "ㄖㄥ", :wg => "jeng", :mps2 => "reng", :yale => "reng", :typy => "reng", :py => "reng"},
282
+ { :zyfh => "ㄖ", :wg => "jih", :mps2 => "r", :yale => "r", :typy => "rih", :py => "ri"},
283
+ { :zyfh => "ㄖㄨㄥ", :wg => "jung", :mps2 => "rung", :yale => "rung", :typy => "rong", :py => "rong"},
284
+ { :zyfh => "ㄖㄡ", :wg => "jou", :mps2 => "rou", :yale => "rou", :typy => "rou", :py => "rou"},
285
+ { :zyfh => "ㄖㄨ", :wg => "ju", :mps2 => "ru", :yale => "ru", :typy => "ru", :py => "ru"},
286
+ { :zyfh => "ㄖㄨㄢ", :wg => "juan", :mps2 => "ruan", :yale => "rwan", :typy => "ruan", :py => "ruan"},
287
+ { :zyfh => "ㄖㄨㄟ", :wg => "jui", :mps2 => "ruei", :yale => "rwei", :typy => "ruei", :py => "rui"},
288
+ { :zyfh => "ㄖㄨㄣ", :wg => "jun", :mps2 => "ruen", :yale => "rwun", :typy => "run", :py => "run"},
289
+ { :zyfh => "ㄖㄨㄛ", :wg => "jo", :mps2 => "ruo", :yale => "rwo", :typy => "ruo", :py => "ruo"},
290
+ { :zyfh => "ㄙㄚ", :wg => "sa", :mps2 => "sa", :yale => "sa", :typy => "sa", :py => "sa"},
291
+ { :zyfh => "ㄙㄞ", :wg => "sai", :mps2 => "sai", :yale => "sai", :typy => "sai", :py => "sai"},
292
+ { :zyfh => "ㄙㄢ", :wg => "san", :mps2 => "san", :yale => "san", :typy => "san", :py => "san"},
293
+ { :zyfh => "ㄙㄤ", :wg => "sang", :mps2 => "sang", :yale => "sang", :typy => "sang", :py => "sang"},
294
+ { :zyfh => "ㄙㄠ", :wg => "sao", :mps2 => "sau", :yale => "sau", :typy => "sao", :py => "sao"},
295
+ { :zyfh => "ㄙㄜ", :wg => "se", :mps2 => "se", :yale => "se", :typy => "se", :py => "se"},
296
+ { :zyfh => "ㄙㄟ", :wg => "sei", :mps2 => "sei", :yale => "sei", :typy => "sei", :py => "sei"},
297
+ { :zyfh => "ㄙㄣ", :wg => "sen", :mps2 => "sen", :yale => "sen", :typy => "sen", :py => "sen"},
298
+ { :zyfh => "ㄙㄥ", :wg => "seng", :mps2 => "seng", :yale => "seng", :typy => "seng", :py => "seng"},
299
+ { :zyfh => "ㄕㄚ", :wg => "sha", :mps2 => "sha", :yale => "sha", :typy => "sha", :py => "sha"},
300
+ { :zyfh => "ㄕㄞ", :wg => "shai", :mps2 => "shai", :yale => "shai", :typy => "shai", :py => "shai"},
301
+ { :zyfh => "ㄕㄢ", :wg => "shan", :mps2 => "shan", :yale => "shan", :typy => "shan", :py => "shan"},
302
+ { :zyfh => "ㄕㄤ", :wg => "shang", :mps2 => "shang", :yale => "shang", :typy => "shang", :py => "shang"},
303
+ { :zyfh => "ㄕㄠ", :wg => "shao", :mps2 => "shau", :yale => "shau", :typy => "shao", :py => "shao"},
304
+ { :zyfh => "ㄕㄜ", :wg => "she", :mps2 => "she", :yale => "she", :typy => "she", :py => "she"},
305
+ { :zyfh => "ㄕㄟ", :wg => "shei", :mps2 => "shei", :yale => "shei", :typy => "shei", :py => "shei"},
306
+ { :zyfh => "ㄕㄣ", :wg => "shen", :mps2 => "shen", :yale => "shen", :typy => "shen", :py => "shen"},
307
+ { :zyfh => "ㄕㄥ", :wg => "sheng", :mps2 => "sheng", :yale => "sheng", :typy => "sheng", :py => "sheng"},
308
+ { :zyfh => "ㄕ", :wg => "shih", :mps2 => "shr", :yale => "shr", :typy => "shih", :py => "shi"},
309
+ { :zyfh => "ㄕㄨㄥ", :wg => "shung", :mps2 => "shung", :yale => "shung", :typy => "shong", :py => "shong"},
310
+ { :zyfh => "ㄕㄡ", :wg => "shou", :mps2 => "shou", :yale => "shou", :typy => "shou", :py => "shou"},
311
+ { :zyfh => "ㄕㄨ", :wg => "shu", :mps2 => "shu", :yale => "shu", :typy => "shu", :py => "shu"},
312
+ { :zyfh => "ㄕㄨㄚ", :wg => "shua", :mps2 => "shua", :yale => "shwa", :typy => "shua", :py => "shua"},
313
+ { :zyfh => "ㄕㄨㄞ", :wg => "shuai", :mps2 => "shuai", :yale => "shwai", :typy => "shuai", :py => "shuai"},
314
+ { :zyfh => "ㄕㄨㄢ", :wg => "shuan", :mps2 => "shuan", :yale => "shwan", :typy => "shuan", :py => "shuan"},
315
+ { :zyfh => "ㄕㄨㄤ", :wg => "shuang", :mps2 => "shuang", :yale => "shwang", :typy => "shuang", :py => "shuang"},
316
+ { :zyfh => "ㄕㄨㄟ", :wg => "shui", :mps2 => "shuei", :yale => "shwei", :typy => "shuei", :py => "shui"},
317
+ { :zyfh => "ㄕㄨㄣ", :wg => "shun", :mps2 => "shuen", :yale => "shwun", :typy => "shun", :py => "shun"},
318
+ { :zyfh => "ㄕㄨㄛ", :wg => "shuo", :mps2 => "shuo", :yale => "shwo", :typy => "shuo", :py => "shuo"},
319
+ { :zyfh => "ㄙ", :wg => "ssu", :mps2 => "sz", :yale => "sz", :typy => "sih", :py => "si"},
320
+ { :zyfh => "ㄙㄨㄥ", :wg => "sung", :mps2 => "sung", :yale => "sung", :typy => "song", :py => "song"},
321
+ { :zyfh => "ㄙㄡ", :wg => "sou", :mps2 => "sou", :yale => "sou", :typy => "sou", :py => "sou"},
322
+ { :zyfh => "ㄙㄨ", :wg => "su", :mps2 => "su", :yale => "su", :typy => "su", :py => "su"},
323
+ { :zyfh => "ㄙㄨㄢ", :wg => "suan", :mps2 => "suan", :yale => "swan", :typy => "suan", :py => "suan"},
324
+ { :zyfh => "ㄙㄨㄟ", :wg => "sui", :mps2 => "suei", :yale => "swei", :typy => "suei", :py => "sui"},
325
+ { :zyfh => "ㄙㄨㄣ", :wg => "sun", :mps2 => "suen", :yale => "swen", :typy => "sun", :py => "sun"},
326
+ { :zyfh => "ㄙㄨㄛ", :wg => "so", :mps2 => "suo", :yale => "swo", :typy => "suo", :py => "suo"},
327
+ { :zyfh => "ㄊㄚ", :wg => "t`a", :mps2 => "ta", :yale => "ta", :typy => "ta", :py => "ta"},
328
+ { :zyfh => "ㄊㄞ", :wg => "t`ai", :mps2 => "tai", :yale => "tai", :typy => "tai", :py => "tai"},
329
+ { :zyfh => "ㄊㄢ", :wg => "t`an", :mps2 => "tan", :yale => "tan", :typy => "tan", :py => "tan"},
330
+ { :zyfh => "ㄊㄤ", :wg => "t`ang", :mps2 => "tang", :yale => "tang", :typy => "tang", :py => "tang"},
331
+ { :zyfh => "ㄊㄠ", :wg => "t`ao", :mps2 => "tau", :yale => "tau", :typy => "tao", :py => "tao"},
332
+ { :zyfh => "ㄊㄜ", :wg => "t`e", :mps2 => "te", :yale => "te", :typy => "te", :py => "te"},
333
+ { :zyfh => "ㄊㄥ", :wg => "t`eng", :mps2 => "teng", :yale => "teng", :typy => "teng", :py => "teng"},
334
+ { :zyfh => "ㄊㄧ", :wg => "t`i", :mps2 => "ti", :yale => "ti", :typy => "ti", :py => "ti"},
335
+ { :zyfh => "ㄊㄧㄢ", :wg => "t`ien", :mps2 => "tian", :yale => "tyan", :typy => "tian", :py => "tian"},
336
+ { :zyfh => "ㄊㄧㄠ", :wg => "t`iao", :mps2 => "tiau", :yale => "tyau", :typy => "tiao", :py => "tiao"},
337
+ { :zyfh => "ㄊㄧㄝ", :wg => "t`ieh", :mps2 => "tie", :yale => "tye", :typy => "tie", :py => "tie"},
338
+ { :zyfh => "ㄊㄧㄥ", :wg => "t`ing", :mps2 => "ting", :yale => "ting", :typy => "ting", :py => "ting"},
339
+ { :zyfh => "ㄊㄨㄥ", :wg => "t`ung", :mps2 => "tung", :yale => "tung", :typy => "tong", :py => "tong"},
340
+ { :zyfh => "ㄊㄡ", :wg => "t`ou", :mps2 => "tou", :yale => "tou", :typy => "tou", :py => "tou"},
341
+ { :zyfh => "ㄊㄨ", :wg => "t`u", :mps2 => "tu", :yale => "tu", :typy => "tu", :py => "tu"},
342
+ { :zyfh => "ㄊㄨㄢ", :wg => "t`uan", :mps2 => "tuan", :yale => "twan", :typy => "tuan", :py => "tuan"},
343
+ { :zyfh => "ㄊㄨㄟ", :wg => "t`ui", :mps2 => "tuei", :yale => "twei", :typy => "tuei", :py => "tui"},
344
+ { :zyfh => "ㄊㄨㄣ", :wg => "t`un", :mps2 => "tuen", :yale => "twen", :typy => "tun", :py => "tun"},
345
+ { :zyfh => "ㄊㄨㄛ", :wg => "t`o", :mps2 => "tuo", :yale => "two", :typy => "tuo", :py => "tuo"},
346
+ { :zyfh => "ㄨㄚ", :wg => "wa", :mps2 => "wa", :yale => "wa", :typy => "wa", :py => "wa"},
347
+ { :zyfh => "ㄨㄞ", :wg => "wai", :mps2 => "wai", :yale => "wai", :typy => "wai", :py => "wai"},
348
+ { :zyfh => "ㄨㄢ", :wg => "wan", :mps2 => "wan", :yale => "wan", :typy => "wan", :py => "wan"},
349
+ { :zyfh => "ㄨㄤ", :wg => "wang", :mps2 => "wang", :yale => "wang", :typy => "wang", :py => "wang"},
350
+ { :zyfh => "ㄨㄟ", :wg => "wei", :mps2 => "wei", :yale => "wei", :typy => "wei", :py => "wei"},
351
+ { :zyfh => "ㄨㄣ", :wg => "wen", :mps2 => "wen", :yale => "wen", :typy => "wun", :py => "wen"},
352
+ { :zyfh => "ㄨㄥ", :wg => "weng", :mps2 => "weng", :yale => "weng", :typy => "wong", :py => "weng"},
353
+ { :zyfh => "ㄨㄛ", :wg => "wo", :mps2 => "wo", :yale => "wo", :typy => "wo", :py => "wo"},
354
+ { :zyfh => "ㄨ", :wg => "wu", :mps2 => "wu", :yale => "wu", :typy => "wu", :py => "wu"},
355
+ { :zyfh => "ㄒㄧ", :wg => "hsi", :mps2 => "shi", :yale => "syi", :typy => "si", :py => "xi"},
356
+ { :zyfh => "ㄒㄧㄚ", :wg => "hsia", :mps2 => "shia", :yale => "sya", :typy => "sia", :py => "xia"},
357
+ { :zyfh => "ㄒㄧㄢ", :wg => "hsien", :mps2 => "shian", :yale => "syan", :typy => "sian", :py => "xian"},
358
+ { :zyfh => "ㄒㄧㄤ", :wg => "hsiang", :mps2 => "shiang", :yale => "syang", :typy => "siang", :py => "xiang"},
359
+ { :zyfh => "ㄒㄧㄠ", :wg => "hsiao", :mps2 => "shiau", :yale => "syau", :typy => "siao", :py => "xiao"},
360
+ { :zyfh => "ㄒㄧㄝ", :wg => "hsieh", :mps2 => "shie", :yale => "sye", :typy => "sie", :py => "xie"},
361
+ { :zyfh => "ㄒㄧㄣ", :wg => "hsin", :mps2 => "shin", :yale => "syin", :typy => "sin", :py => "xin"},
362
+ { :zyfh => "ㄒㄧㄥ", :wg => "hsing", :mps2 => "shing", :yale => "sying", :typy => "sing", :py => "xing"},
363
+ { :zyfh => "ㄒㄩㄥ", :wg => "hsiung", :mps2 => "shiung", :yale => "syung", :typy => "syong", :py => "xiong"},
364
+ { :zyfh => "ㄒㄧㄡ", :wg => "hsiu", :mps2 => "shiou", :yale => "syou", :typy => "siou", :py => "xiu"},
365
+ { :zyfh => "ㄒㄩ", :wg => "hsü", :mps2 => "shiu", :yale => "syu", :typy => "syu", :py => "xu"},
366
+ { :zyfh => "ㄒㄩㄢ", :wg => "hsüan", :mps2 => "shiuan", :yale => "sywan", :typy => "syuan", :py => "xuan"},
367
+ { :zyfh => "ㄒㄩㄝ", :wg => "hsüeh", :mps2 => "shiue", :yale => "sywe", :typy => "syue", :py => "xue"},
368
+ { :zyfh => "ㄒㄩㄣ", :wg => "hsün", :mps2 => "shiun", :yale => "syun", :typy => "syun", :py => "xun"},
369
+ { :zyfh => "ㄧㄚ", :wg => "ya", :mps2 => "ya", :yale => "ya", :typy => "ya", :py => "ya"},
370
+ { :zyfh => "ㄧㄢ", :wg => "yan", :mps2 => "yan", :yale => "yan", :typy => "yan", :py => "yan"},
371
+ { :zyfh => "ㄧㄤ", :wg => "yang", :mps2 => "yang", :yale => "yang", :typy => "yang", :py => "yang"},
372
+ { :zyfh => "ㄧㄠ", :wg => "yao", :mps2 => "yau", :yale => "yau", :typy => "yao", :py => "yao"},
373
+ { :zyfh => "ㄧㄝ", :wg => "yeh", :mps2 => "ye", :yale => "ye", :typy => "ye", :py => "ye"},
374
+ { :zyfh => "ㄧ", :wg => "i", :mps2 => "yi", :yale => "yi", :typy => "yi", :py => "yi"},
375
+ { :zyfh => "ㄧㄣ", :wg => "yin", :mps2 => "yin", :yale => "yin", :typy => "yin", :py => "yin"},
376
+ { :zyfh => "ㄧㄥ", :wg => "ying", :mps2 => "ying", :yale => "ying", :typy => "ying", :py => "ying"},
377
+ { :zyfh => "ㄩㄥ", :wg => "yung", :mps2 => "yung", :yale => "yung", :typy => "yong", :py => "yong"},
378
+ { :zyfh => "ㄧㄡ", :wg => "yu", :mps2 => "you", :yale => "you", :typy => "you", :py => "you"},
379
+ { :zyfh => "ㄩ", :wg => "yü", :mps2 => "yu", :yale => "yu", :typy => "yu", :py => "yu"},
380
+ { :zyfh => "ㄩㄢ", :wg => "yüan", :mps2 => "yuan", :yale => "ywan", :typy => "yuan", :py => "yuan"},
381
+ { :zyfh => "ㄩㄝ", :wg => "yüeh", :mps2 => "yue", :yale => "ywe", :typy => "yue", :py => "yue"},
382
+ { :zyfh => "ㄩㄣ", :wg => "yün", :mps2 => "yun", :yale => "yun", :typy => "yun", :py => "yun"},
383
+ { :zyfh => "ㄗㄚ", :wg => "tsa", :mps2 => "tza", :yale => "dza", :typy => "za", :py => "za"},
384
+ { :zyfh => "ㄗㄞ", :wg => "tsai", :mps2 => "tzai", :yale => "dzai", :typy => "zai", :py => "zai"},
385
+ { :zyfh => "ㄗㄢ", :wg => "tsan", :mps2 => "tzan", :yale => "dzan", :typy => "zan", :py => "zan"},
386
+ { :zyfh => "ㄗㄤ", :wg => "tsang", :mps2 => "tzang", :yale => "dzang", :typy => "zang", :py => "zang"},
387
+ { :zyfh => "ㄗㄠ", :wg => "tsao", :mps2 => "tzau", :yale => "dzau", :typy => "zao", :py => "zao"},
388
+ { :zyfh => "ㄗㄜ", :wg => "tse", :mps2 => "tze", :yale => "dze", :typy => "ze", :py => "ze"},
389
+ { :zyfh => "ㄗㄟ", :wg => "tsei", :mps2 => "tzei", :yale => "dzei", :typy => "zei", :py => "zei"},
390
+ { :zyfh => "ㄗㄣ", :wg => "tsen", :mps2 => "tzen", :yale => "dzen", :typy => "zen", :py => "zen"},
391
+ { :zyfh => "ㄗㄥ", :wg => "tseng", :mps2 => "tzeng", :yale => "dzeng", :typy => "zeng", :py => "zeng"},
392
+ { :zyfh => "ㄓㄚ", :wg => "cha", :mps2 => "ja", :yale => "ja", :typy => "jha", :py => "zha"},
393
+ { :zyfh => "ㄓㄞ", :wg => "chai", :mps2 => "jai", :yale => "jai", :typy => "jhai", :py => "zhai"},
394
+ { :zyfh => "ㄓㄢ", :wg => "chan", :mps2 => "jan", :yale => "jan", :typy => "jhan", :py => "zhan"},
395
+ { :zyfh => "ㄓㄤ", :wg => "chang", :mps2 => "jang", :yale => "jang", :typy => "jhang", :py => "zhang"},
396
+ { :zyfh => "ㄓㄠ", :wg => "chao", :mps2 => "jau", :yale => "jau", :typy => "jhao", :py => "zhao"},
397
+ { :zyfh => "ㄓㄜ", :wg => "che", :mps2 => "je", :yale => "je", :typy => "jhe", :py => "zhe"},
398
+ { :zyfh => "ㄓㄟ", :wg => "chei", :mps2 => "jei", :yale => "jei", :typy => "jhei", :py => "zhei"},
399
+ { :zyfh => "ㄓㄣ", :wg => "chen", :mps2 => "jen", :yale => "jen", :typy => "jhen", :py => "zhen"},
400
+ { :zyfh => "ㄓㄥ", :wg => "cheng", :mps2 => "jeng", :yale => "jeng", :typy => "jheng", :py => "zheng"},
401
+ { :zyfh => "ㄓ", :wg => "chih", :mps2 => "jr", :yale => "jr", :typy => "jhih", :py => "zhi"},
402
+ { :zyfh => "ㄓㄨㄥ", :wg => "chung", :mps2 => "jung", :yale => "jung", :typy => "jhong", :py => "zhong"},
403
+ { :zyfh => "ㄓㄡ", :wg => "chou", :mps2 => "jou", :yale => "jou", :typy => "jhou", :py => "zhou"},
404
+ { :zyfh => "ㄓㄨ", :wg => "chu", :mps2 => "ju", :yale => "ju", :typy => "jhu", :py => "zhu"},
405
+ { :zyfh => "ㄓㄨㄚ", :wg => "chua", :mps2 => "jua", :yale => "jwa", :typy => "jhua", :py => "zhua"},
406
+ { :zyfh => "ㄓㄨㄞ", :wg => "chuai", :mps2 => "juai", :yale => "jwai", :typy => "jhuai", :py => "zhuai"},
407
+ { :zyfh => "ㄓㄨㄢ", :wg => "chuan", :mps2 => "juan", :yale => "jwan", :typy => "jhuan", :py => "zhuan"},
408
+ { :zyfh => "ㄓㄨㄤ", :wg => "chuang", :mps2 => "juang", :yale => "jwang", :typy => "jhuang", :py => "zhuang"},
409
+ { :zyfh => "ㄓㄨㄟ", :wg => "chui", :mps2 => "juei", :yale => "jwei", :typy => "jhuei", :py => "zhui"},
410
+ { :zyfh => "ㄓㄨㄣ", :wg => "chun", :mps2 => "juen", :yale => "jwen", :typy => "jhun", :py => "zhun"},
411
+ { :zyfh => "ㄓㄨㄛ", :wg => "cho", :mps2 => "juo", :yale => "jwo", :typy => "jhuo", :py => "zhuo"},
412
+ { :zyfh => "ㄗ", :wg => "tzu", :mps2 => "tz", :yale => "dz", :typy => "zih", :py => "zi"},
413
+ { :zyfh => "ㄗㄨㄥ", :wg => "tsung", :mps2 => "tzung", :yale => "dzung", :typy => "zong", :py => "zong"},
414
+ { :zyfh => "ㄗㄡ", :wg => "tsou", :mps2 => "tzou", :yale => "dzou", :typy => "zou", :py => "zou"},
415
+ { :zyfh => "ㄗㄨ", :wg => "tsu", :mps2 => "tzu", :yale => "dzu", :typy => "zu", :py => "zu"},
416
+ { :zyfh => "ㄗㄨㄢ", :wg => "tsuan", :mps2 => "tzuan", :yale => "dzwan", :typy => "zuan", :py => "zuan"},
417
+ { :zyfh => "ㄗㄨㄟ", :wg => "tsui", :mps2 => "tzuei", :yale => "dzwei", :typy => "zuei", :py => "zui"},
418
+ { :zyfh => "ㄗㄨㄣ", :wg => "tsun", :mps2 => "tzuen", :yale => "dzwen", :typy => "zun", :py => "zun"},
419
+ { :zyfh => "ㄗㄨㄛ", :wg => "tso", :mps2 => "tzuo", :yale => "dzwo", :typy => "zuo", :py => "zuo"},
420
+ { :zyfh => "ㄦ", :wg => 'rh', :mps2 => "r", :yale => "r", :typy => "r", :py => "r"}
421
+ ]
422
+ end
423
+ end
@@ -0,0 +1,50 @@
1
+ module ZhongwenTools
2
+ module Romanization
3
+
4
+ pyn_regexes = {
5
+ :bpm_regex => /(miu|[pm]ou|[bpm](o|e(i|ng?)?|a(ng?|i|o)?|i(e|ng?|a[no])?|u))/,
6
+ :f_regex => /(f(ou?|[ae](ng?|i)?|u))/,
7
+ :dt_regex => /(d(e(i|ng?)|i(a[on]?|u))|[dt](a(i|ng?|o)?|e(i|ng)?|i(a[on]?|e|ng|u)?|o(ng?|u)|u(o|i|an?|n)?))/,
8
+ :nl_regex => /(neng?|[ln](a(i|ng?|o)?|e(i|ng)?|i(ang|a[on]?|e|ng?|u)?|o(ng?|u)|u(o|i|an?|n)?|ve?))/,
9
+ :gkh_regex => /([ghk](a(i|ng?|o)?|e(i|ng?)?|o(u|ng)|u(a(i|ng?)?|i|n|o)?))/,
10
+ :zczhch_regex => /(z[h]?ei|[cz]hua(i|ng?)?|[cz][h]?(a(i|ng?|o)?|en?g?|o(u|ng)?|u(a?n|o|i)?))/,
11
+ :ssh_regex => /(song|shua(i|ng?)?|shei|s[h]?(a(i|ng?|o)?|en?g?|ou|u(a?n|o|i)?))/,
12
+ :r_regex => /(r([ae]ng?|i|e|ao|ou|ong|u[oin]|ua?n?))/,
13
+ :jqx_regex => /([jqx](i(a(o|ng?)?|[eu]|ong|ng?)?|u(e|a?n)?))/,
14
+ :aw_regex => /(wu|w?(a(i|o|ng?)?|ou?|e(i|ng?)?))/,
15
+ :y_regex => /y(a(o|ng?)?|e|in?g?|o(u|ng)?|u(e|a?n)?)/
16
+ }
17
+
18
+ PINYIN_REGEX = /(#{pyn_regexes.values.join('|')})([1-5])?([\s\-]+)?/
19
+ #bpm_regex}|#{f_regex}|#{dt_regex}|#{nl_regex}|#{gkh_regex}|#{zczhch_regex}|#{ssh_regex}|#{r_regex}|#{jqx_regex}|#{aw_regex}|#{y_regex})([1-5])?([\s\-]+)?/
20
+
21
+ # Public: checks if a string is pinyin.
22
+ #
23
+ # Examples
24
+ # pyn?('pin1-yin1')
25
+ # # => true
26
+ #
27
+ # Returns Boolean.
28
+ def pyn?(str = nil)
29
+ str ||= self
30
+
31
+ str.gsub(PINYIN_REGEX,'') == ''
32
+ end
33
+
34
+ # Public: checks if a string is wade-giles.
35
+ #
36
+ # Examples
37
+ # wg?('pin1-yin1')
38
+ # # => false
39
+ # There are some situations where wg == pyn, but there's no way to differentiate the two.
40
+ def wg?(str = nil)
41
+ #it shouldn't be pyn, but it should be able to conver to pyn
42
+ str ||= self
43
+ #easy ones.. is it py? pyn? zyfh? gyrm?
44
+ #harder ones: is it typy, msp2, yale, wg
45
+ wg = str._convert_romanization(str, :wg, :pyn)
46
+
47
+ wg != pyn && wg.gsub(/[1-5]/,'')
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,165 @@
1
+ #encoding: utf-8
2
+ #This table works for pyn -> pinyin conversion, but it introduces
3
+ #mistakes when converting pinyin to pyn. In practice, pinyin can't be
4
+ #converted to pyn properly unless it's properly formatted.
5
+ module ZhongwenTools
6
+ module Romanization
7
+ PYN_PY = {
8
+ "A1" => "Ā",
9
+ "A2" => "Á",
10
+ "A3" => "Ǎ",
11
+ "A4" => "À",
12
+ "A5" => "A",
13
+ "Ai1" => "Āi",
14
+ "Ai2" => "Ái",
15
+ "Ai3" => "Ǎi",
16
+ "Ai4" => "Ài",
17
+ "Ai5" => "Ai",
18
+ "Ao1" => "Ā",
19
+ "Ao2" => "Áo",
20
+ "Ao3" => "Ǎo",
21
+ "Ao4" => "Ào",
22
+ "Ao5" => "Ao",
23
+ "a1" => "ā",
24
+ "a2" => "á",
25
+ "a3" => "ǎ",
26
+ "a4" => "à",
27
+ "a5" => "a",
28
+ "e1" => "ē",
29
+ "e2" => "é",
30
+ "e3" => "ě",
31
+ "e4" => "è",
32
+ "e5" => "e",
33
+ "i1" => "ī",
34
+ "i2" => "í",
35
+ "i3" => "ǐ",
36
+ "i4" => "ì",
37
+ "i5" => "i",
38
+ "O1" => "Ō",
39
+ "O2" => "Ó",
40
+ "O3" => "Ǒ",
41
+ "O4" => "Ò",
42
+ "O5" => "O",
43
+ "o1" => "ō",
44
+ "o2" => "ó",
45
+ "o3" => "ǒ",
46
+ "o4" => "ò",
47
+ "o5" => "o",
48
+ "u1" => "ū",
49
+ "u2" => "ú",
50
+ "u3" => "ǔ",
51
+ "u4" => "ù",
52
+ "u5" => "u",
53
+ "ai1" => "āi",
54
+ "ai2" => "ái",
55
+ "ai3" => "ǎi",
56
+ "ai4" => "ài",
57
+ "ai5" => "ai",
58
+ "ao1" => "āo",
59
+ "ao2" => "áo",
60
+ "ao3" => "ǎo",
61
+ "ao4" => "ào",
62
+ "ao5" => "ao",
63
+ "E1" => "Ē",
64
+ "E2" => "É",
65
+ "E3" => "Ě",
66
+ "E4" => "È",
67
+ "E5" => "E",
68
+ "Ei1" => "Ēi",
69
+ "Ei2" => "Éi",
70
+ "Ei3" => "Ěi",
71
+ "Ei4" => "Èi",
72
+ "Ei5" => "Ei",
73
+ "ei1" => "ēi",
74
+ "ei2" => "éi",
75
+ "ei3" => "ěi",
76
+ "ei4" => "èi",
77
+ "ei5" => "ei",
78
+ "ia1" => "iā",
79
+ "ia2" => "iá",
80
+ "ia3" => "iǎ",
81
+ "ia4" => "ià",
82
+ "ia5" => "ia",
83
+ "iao1" => "iāo",
84
+ "iao2" => "iáo",
85
+ "iao3" => "iǎo",
86
+ "iao4" => "iào",
87
+ "iao5" => "iao",
88
+ "ie1" => "iē",
89
+ "ie2" => "ié",
90
+ "ie3" => "iě",
91
+ "ie4" => "iè",
92
+ "ie5" => "ie",
93
+ "io1" => "iō",
94
+ "io2" => "ió",
95
+ "io3" => "iǒ",
96
+ "io4" => "iò",
97
+ "io5" => "io",
98
+ "iu1" => "iū",
99
+ "iu2" => "iú",
100
+ "iu3" => "iǔ",
101
+ "iu4" => "iù",
102
+ "iu5" => "iu",
103
+ "Ou1" => "Ōu",
104
+ "Ou2" => "Óu",
105
+ "Ou3" => "Ǒu",
106
+ "Ou4" => "Òu",
107
+ "Ou5" => "Ou",
108
+ "ou1" => "ōu",
109
+ "ou2" => "óu",
110
+ "ou3" => "ǒu",
111
+ "ou4" => "òu",
112
+ "ou5" => "ou",
113
+ "ua1" => "uā",
114
+ "ua2" => "uá",
115
+ "ua3" => "uǎ",
116
+ "ua4" => "uà",
117
+ "ua5" => "ua",
118
+ "uai1" => "uāi",
119
+ "uai2" => "uái",
120
+ "uai3" => "uǎi",
121
+ "uai4" => "uài",
122
+ "uai5" => "uai",
123
+ "ue1" => "uē",
124
+ "ue2" => "ué",
125
+ "ue3" => "uě",
126
+ "ue4" => "uè",
127
+ "ue5" => "ue",
128
+ "ui1" => "uī",
129
+ "ui2" => "uí",
130
+ "ui3" => "uǐ",
131
+ "ui4" => "uì",
132
+ "ui5" => "ui",
133
+ "uo1" => "uō",
134
+ "uo2" => "uó",
135
+ "uo3" => "uǒ",
136
+ "uo4" => "uò",
137
+ "uo5" => "uo",
138
+ "v1" => "ǖ",
139
+ "v2" => "ǘ",
140
+ "v3" => "ǚ",
141
+ "v4" => "ǜ",
142
+ "v5" => "ü",
143
+ "ve1" => "üē",
144
+ "ve2" => "üé",
145
+ "ve3" => "üě",
146
+ "ve4" => "üè",
147
+ "ve5" => "üe",
148
+ 'm1' => 'm̄',#using combining diacritical marks
149
+ 'm2' => "ḿ",
150
+ 'm3' => 'm̌',#using combining diacritical marks
151
+ 'm4' => "m̀",
152
+ 'm5' => 'm',
153
+ 'n1' => 'ēn',
154
+ 'n2' => "én",
155
+ 'n3' => "ěn",
156
+ 'n4' => "èn",
157
+ 'n5' => 'en',
158
+ 'ng1' => 'ēng',
159
+ 'ng2' => "éng",
160
+ 'ng3' => "ěng",
161
+ 'ng4' => "èng",
162
+ 'ng5' => 'eng'
163
+ }
164
+ end
165
+ end
@@ -1,3 +1,3 @@
1
1
  module ZhongwenTools
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.1"
3
3
  end
data/test/test_helper.rb CHANGED
@@ -18,5 +18,9 @@ if RUBY_VERSION < '1.9'
18
18
  def refute(statement, message = '')
19
19
  assert !statement, message
20
20
  end
21
+
22
+ def skip
23
+ return
24
+ end
21
25
  end
22
26
  end
@@ -0,0 +1,75 @@
1
+ #encoding: utf-8
2
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
3
+ require './test/test_helper'
4
+ require 'zhongwen_tools/string'
5
+ require 'zhongwen_tools/romanization'
6
+
7
+ class String
8
+ include ZhongwenTools::Romanization
9
+ end
10
+
11
+ class TestRomanization < Test::Unit::TestCase
12
+
13
+ def test_pinyin
14
+ assert_equal 'Zhōng wén','Zhong1 wen2'.to_pinyin
15
+ assert_equal 'Zhōngwén', 'Zhong1-wen2'.to_pinyin
16
+ #binding.pry
17
+ assert_equal "Tiān'ānmén",'Tian1an1men2'.to_pinyin
18
+
19
+ #skip
20
+ #mzd = "Mao Tse-tung"
21
+ #assert_equal "Mao Zedong", mzd.to_pinyin(:wg)
22
+ end
23
+
24
+ #def test_pyn
25
+ #skip
26
+ #assert_equal 'ni3 hao3', @py.to_pyn
27
+ #end
28
+
29
+ def test_zhuyin_fuhao
30
+ assert_equal 'ㄋㄧ3 ㄏㄠ3', @str.to_bpmf
31
+ assert_equal 'ㄋㄧ3 ㄏㄠ3', @str.to_bopomofo
32
+ assert_equal 'ㄋㄧ3 ㄏㄠ3', @str.to_zhuyin
33
+ assert_equal 'ㄇㄠ2 ㄗㄜ2 ㄉㄨㄥ1', @mzd.to_zhuyin_fuhao
34
+ #skip
35
+ #assert_equal 'ㄇㄠ2 ㄗㄜ2ㄉㄨㄥ1', @mzd2.to_zhuyin_fuhao
36
+ end
37
+
38
+ def test_wade_giles
39
+ assert_equal 'kuo1', 'guo1'.to_wg
40
+ assert_equal 'chung1 kuo2', 'zhong1 guo2'.to_wg
41
+ #assert_equal 'Mao2 Tse2 tung1', @mzd.to_wg
42
+ #assert_equal 'Mao2 Tse2 tung1', @mzd.to_wade_giles
43
+ end
44
+
45
+ #def test_mspy2
46
+ #skip
47
+ #assert_equal '', @str.to_mspy2
48
+ #end
49
+
50
+ #def test_typy
51
+ #skip
52
+ #assert_equal '', @str.to_typy
53
+ #assert_equal '', @str.to_tongyong
54
+ #end
55
+
56
+ def test_yale
57
+ assert_equal 'ni3 hau3', @str.to_yale
58
+ end
59
+
60
+ def test_romanization?
61
+ skip
62
+ end
63
+
64
+ def test_detect
65
+ assert @str.pyn?
66
+ refute @py.pyn?
67
+ end
68
+
69
+ def setup
70
+ @str = 'ni3 hao3'
71
+ @mzd = 'Mao2 Ze2 dong1'
72
+ @mzd2 = 'Mao2 Ze2-dong1'
73
+ @py = 'nǐ hǎo'
74
+ end
75
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zhongwen_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Daniels
@@ -82,6 +82,10 @@ files:
82
82
  - lib/zhongwen_tools.rb
83
83
  - lib/zhongwen_tools/integer.rb
84
84
  - lib/zhongwen_tools/numbers.rb
85
+ - lib/zhongwen_tools/romanization.rb
86
+ - lib/zhongwen_tools/romanization/conversion_table.rb
87
+ - lib/zhongwen_tools/romanization/detect.rb
88
+ - lib/zhongwen_tools/romanization/pyn_to_py.rb
85
89
  - lib/zhongwen_tools/string.rb
86
90
  - lib/zhongwen_tools/string/fullwidth.rb
87
91
  - lib/zhongwen_tools/string/ruby18.rb