kana 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/lib/kana.rb +20 -0
- data/lib/kana/converter.rb +128 -0
- data/lib/kana/converter/katahira.rb +86 -0
- data/lib/kana/converter/numeric_alphabet.rb +165 -0
- data/lib/kana/converter/zenkaku.rb +312 -0
- data/lib/kana/translator.rb +15 -0
- data/lib/kana/translator/engine/encoding.rb +18 -0
- data/lib/kana/translator/engine/nkf.rb +48 -0
- data/spec/data.txt +1 -0
- data/spec/data/a.txt +1 -0
- data/spec/data/ask.txt +1 -0
- data/spec/data/c.txt +1 -0
- data/spec/data/h.txt +1 -0
- data/spec/data/k.txt +1 -0
- data/spec/data/l-a.txt +1 -0
- data/spec/data/l-ask.txt +1 -0
- data/spec/data/l-askv.txt +1 -0
- data/spec/data/l-c.txt +1 -0
- data/spec/data/l-h.txt +1 -0
- data/spec/data/l-hv.txt +1 -0
- data/spec/data/l-k.txt +1 -0
- data/spec/data/l-kv.txt +1 -0
- data/spec/data/l-rns.txt +1 -0
- data/spec/data/raw.txt +1 -0
- data/spec/data/rns.txt +1 -0
- data/spec/kana_spec.rb +182 -0
- data/spec/mk_data.php +18 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- metadata +100 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 fistfvck
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
= kana
|
2
|
+
|
3
|
+
Description goes here.
|
4
|
+
|
5
|
+
== Note on Patches/Pull Requests
|
6
|
+
|
7
|
+
* Fork the project.
|
8
|
+
* Make your feature addition or bug fix.
|
9
|
+
* Add tests for it. This is important so I don't break it in a
|
10
|
+
future version unintentionally.
|
11
|
+
* Commit, do not mess with rakefile, version, or history.
|
12
|
+
(if you want to have your own version, that is fine but
|
13
|
+
bump version in a commit by itself I can ignore when I pull)
|
14
|
+
* Send me a pull request. Bonus points for topic branches.
|
15
|
+
|
16
|
+
== Copyright
|
17
|
+
|
18
|
+
Copyright (c) 2009 fistfvck. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "kana"
|
8
|
+
gem.summary = %Q{convert hankaku <-> zenkaku}
|
9
|
+
gem.description = %Q{convert hankaku <-> zenkaku. like mb_convert_kana}
|
10
|
+
gem.email = "fistfvck@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/fistfvck/kana"
|
12
|
+
gem.authors = ["fistfvck"]
|
13
|
+
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'spec/rake/spectask'
|
22
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
23
|
+
spec.libs << 'lib' << 'spec'
|
24
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
25
|
+
end
|
26
|
+
|
27
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
28
|
+
spec.libs << 'lib' << 'spec'
|
29
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
30
|
+
spec.rcov = true
|
31
|
+
end
|
32
|
+
|
33
|
+
task :spec => :check_dependencies
|
34
|
+
|
35
|
+
task :default => :spec
|
36
|
+
|
37
|
+
require 'rake/rdoctask'
|
38
|
+
Rake::RDocTask.new do |rdoc|
|
39
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
40
|
+
|
41
|
+
rdoc.rdoc_dir = 'rdoc'
|
42
|
+
rdoc.title = "kana #{version}"
|
43
|
+
rdoc.rdoc_files.include('README*')
|
44
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
45
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/lib/kana.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
|
3
|
+
require 'kana/translator'
|
4
|
+
require 'kana/converter'
|
5
|
+
|
6
|
+
module Kana
|
7
|
+
def kana(str, opt=nil, enc=nil)
|
8
|
+
return str unless Translator.support?(str, enc)
|
9
|
+
str, orig_enc = Translator.to_utf8(str, enc)
|
10
|
+
str = Converter.convert(str, opt)
|
11
|
+
Translator.to_encode(str, orig_enc)
|
12
|
+
end
|
13
|
+
module_function :kana
|
14
|
+
end
|
15
|
+
|
16
|
+
class String
|
17
|
+
def kana(opt=nil, enc=nil)
|
18
|
+
Kana.kana self, opt, enc
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module Kana
|
3
|
+
module Converter
|
4
|
+
require 'kana/converter/numeric_alphabet'
|
5
|
+
require 'kana/converter/katahira'
|
6
|
+
require 'kana/converter/zenkaku'
|
7
|
+
|
8
|
+
def convert str, opt='KV'
|
9
|
+
opt ||= 'KV'
|
10
|
+
table = convert_tables opt
|
11
|
+
str.gsub(build_regexp(table)) do |match|
|
12
|
+
table[match]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
module_function :convert
|
16
|
+
|
17
|
+
def self.build_regexp table
|
18
|
+
Regexp.union(*table.keys.sort_by{ |k| -table[k].size }.map{ |v|
|
19
|
+
if RUBY_VERSION >= '1.9.1'
|
20
|
+
Regexp.new(Regexp.escape(v))
|
21
|
+
else
|
22
|
+
Regexp.new(Regexp.escape(v,'u'),nil,'u')
|
23
|
+
end
|
24
|
+
})
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.convert_table_katakana_hiragana opt, vsm
|
28
|
+
table = {}
|
29
|
+
opt.split(//).each do |c|
|
30
|
+
case c
|
31
|
+
when 'k'
|
32
|
+
# k 「全角カタカナ」を「半角カタカナ」に変換します。
|
33
|
+
table.update ZENKAKU_KATAKANA_HANKAKU
|
34
|
+
table.update ZENKAKU_DAKUTEN_KATAKANA_HANKAKU
|
35
|
+
table.update ZENKAKU_SYMBOL
|
36
|
+
when 'K'
|
37
|
+
# K 「半角カタカナ」を「全角カタカナ」に変換します。
|
38
|
+
table.update ZENKAKU_KATAKANA_HANKAKU.invert
|
39
|
+
table.update ZENKAKU_DAKUTEN_KATAKANA_HANKAKU.invert if vsm
|
40
|
+
table.update ZENKAKU_SYMBOL.invert
|
41
|
+
table.update ZENKAKU_KATAKANA_SYMBOL.invert
|
42
|
+
when 'h'
|
43
|
+
# h 「全角ひらがな」を「半角カタカナ」に変換します。
|
44
|
+
table.update ZENKAKU_HIRAGANA_HANKAKU
|
45
|
+
table.update ZENKAKU_DAKUTEN_HIRAGANA_HANKAKU
|
46
|
+
table.update ZENKAKU_SYMBOL
|
47
|
+
when 'H'
|
48
|
+
# H 「半角カタカナ」を「全角ひらがな」に変換します。
|
49
|
+
table.update ZENKAKU_HIRAGANA_HANKAKU.invert
|
50
|
+
table.update ZENKAKU_DAKUTEN_HIRAGANA_HANKAKU.invert if vsm
|
51
|
+
table.update ZENKAKU_SYMBOL.invert
|
52
|
+
table.update ZENKAKU_HIRAGANA_SYMBOL.invert
|
53
|
+
when 'c'
|
54
|
+
# c 「全角カタカナ」を「全角ひらがな」に変換します。
|
55
|
+
table.update KATAHIRA
|
56
|
+
when 'C'
|
57
|
+
# C 「全角ひらがな」を「全角カタカナ」に変換します。
|
58
|
+
table.update KATAHIRA.invert
|
59
|
+
end
|
60
|
+
end
|
61
|
+
table
|
62
|
+
end
|
63
|
+
|
64
|
+
ZENKATA_FLAG = 0x01 # Zenkaku Katakana
|
65
|
+
ZENHIRA_FLAG = 0x02 # Zenkaku Hiragana
|
66
|
+
HANKATA_FLAG = 0x04 # Hankaku Katakana
|
67
|
+
VSM_FLAG = 0x08 # Voiced Sound Mark
|
68
|
+
|
69
|
+
def self.convert_tables opt
|
70
|
+
table = {}
|
71
|
+
kh_option = {:flag => '', :vsm => false, :input => 0}
|
72
|
+
opt.split(//).each do |c|
|
73
|
+
case c
|
74
|
+
when 'n'
|
75
|
+
table.update NUMERIC
|
76
|
+
when 'N'
|
77
|
+
table.update NUMERIC.invert
|
78
|
+
when 'r'
|
79
|
+
table.update ALPHABET
|
80
|
+
when 'R'
|
81
|
+
table.update ALPHABET.invert
|
82
|
+
when 's'
|
83
|
+
table.update SPACE
|
84
|
+
when 'S'
|
85
|
+
table.update SPACE.invert
|
86
|
+
when 'a'
|
87
|
+
table.update convert_tables('nr')
|
88
|
+
table.update SYMBOL
|
89
|
+
when 'A'
|
90
|
+
table.update convert_tables('NR')
|
91
|
+
table.update SYMBOL.invert
|
92
|
+
table.update SYMBOL_INVERT
|
93
|
+
|
94
|
+
when 'k'
|
95
|
+
raise ArgumentError if (kh_option[:input] & ZENKATA_FLAG) != 0
|
96
|
+
kh_option[:input] |= ZENKATA_FLAG
|
97
|
+
kh_option[:flag] += 'k'
|
98
|
+
when 'c'
|
99
|
+
raise ArgumentError if (kh_option[:input] & ZENKATA_FLAG) != 0
|
100
|
+
kh_option[:input] |= ZENKATA_FLAG
|
101
|
+
kh_option[:flag] += 'c'
|
102
|
+
when 'h'
|
103
|
+
raise ArgumentError if (kh_option[:input] & ZENHIRA_FLAG) != 0
|
104
|
+
kh_option[:input] |= ZENHIRA_FLAG
|
105
|
+
kh_option[:flag] += 'h'
|
106
|
+
when 'C'
|
107
|
+
raise ArgumentError if (kh_option[:input] & ZENHIRA_FLAG) != 0
|
108
|
+
kh_option[:input] |= ZENHIRA_FLAG
|
109
|
+
kh_option[:flag] += 'C'
|
110
|
+
when 'K'
|
111
|
+
raise ArgumentError if (kh_option[:input] & HANKATA_FLAG) != 0
|
112
|
+
kh_option[:input] |= HANKATA_FLAG
|
113
|
+
kh_option[:flag] += 'K'
|
114
|
+
when 'H'
|
115
|
+
raise ArgumentError if (kh_option[:input] & HANKATA_FLAG) != 0
|
116
|
+
kh_option[:input] |= HANKATA_FLAG
|
117
|
+
kh_option[:flag] += 'H'
|
118
|
+
when 'V'
|
119
|
+
raise ArgumentError if (kh_option[:input] & HANKATA_FLAG) == 0
|
120
|
+
kh_option[:vsm] = true
|
121
|
+
else
|
122
|
+
raise ArgumentError
|
123
|
+
end
|
124
|
+
end
|
125
|
+
table.update convert_table_katakana_hiragana kh_option[:flag], kh_option[:vsm]
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# 全角カタカナ -> 全角ひらがな
|
3
|
+
Kana::Converter::KATAHIRA = Hash[*{0x30A1 => 0x3041, # KATAKANA LETTER SMALL A
|
4
|
+
0x30A2 => 0x3042, # KATAKANA LETTER A
|
5
|
+
0x30A3 => 0x3043, # KATAKANA LETTER SMALL I
|
6
|
+
0x30A4 => 0x3044, # KATAKANA LETTER I
|
7
|
+
0x30A5 => 0x3045, # KATAKANA LETTER SMALL U
|
8
|
+
0x30A6 => 0x3046, # KATAKANA LETTER U
|
9
|
+
0x30A7 => 0x3047, # KATAKANA LETTER SMALL E
|
10
|
+
0x30A8 => 0x3048, # KATAKANA LETTER E
|
11
|
+
0x30A9 => 0x3049, # KATAKANA LETTER SMALL O
|
12
|
+
0x30AA => 0x304A, # KATAKANA LETTER O
|
13
|
+
0x30AB => 0x304B, # KATAKANA LETTER KA
|
14
|
+
0x30AC => 0x304C, # KATAKANA LETTER GA
|
15
|
+
0x30AD => 0x304D, # KATAKANA LETTER KI
|
16
|
+
0x30AE => 0x304E, # KATAKANA LETTER GI
|
17
|
+
0x30AF => 0x304F, # KATAKANA LETTER KU
|
18
|
+
0x30B0 => 0x3050, # KATAKANA LETTER GU
|
19
|
+
0x30B1 => 0x3051, # KATAKANA LETTER KE
|
20
|
+
0x30B2 => 0x3052, # KATAKANA LETTER GE
|
21
|
+
0x30B3 => 0x3053, # KATAKANA LETTER KO
|
22
|
+
0x30B4 => 0x3054, # KATAKANA LETTER GO
|
23
|
+
0x30B5 => 0x3055, # KATAKANA LETTER SA
|
24
|
+
0x30B6 => 0x3056, # KATAKANA LETTER ZA
|
25
|
+
0x30B7 => 0x3057, # KATAKANA LETTER SI
|
26
|
+
0x30B8 => 0x3058, # KATAKANA LETTER ZI
|
27
|
+
0x30B9 => 0x3059, # KATAKANA LETTER SU
|
28
|
+
0x30BA => 0x305A, # KATAKANA LETTER ZU
|
29
|
+
0x30BB => 0x305B, # KATAKANA LETTER SE
|
30
|
+
0x30BC => 0x305C, # KATAKANA LETTER ZE
|
31
|
+
0x30BD => 0x305D, # KATAKANA LETTER SO
|
32
|
+
0x30BE => 0x305E, # KATAKANA LETTER ZO
|
33
|
+
0x30BF => 0x305F, # KATAKANA LETTER TA
|
34
|
+
0x30C0 => 0x3060, # KATAKANA LETTER DA
|
35
|
+
0x30C1 => 0x3061, # KATAKANA LETTER TI
|
36
|
+
0x30C2 => 0x3062, # KATAKANA LETTER DI
|
37
|
+
0x30C3 => 0x3063, # KATAKANA LETTER SMALL TU
|
38
|
+
0x30C4 => 0x3064, # KATAKANA LETTER TU
|
39
|
+
0x30C5 => 0x3065, # KATAKANA LETTER DU
|
40
|
+
0x30C6 => 0x3066, # KATAKANA LETTER TE
|
41
|
+
0x30C7 => 0x3067, # KATAKANA LETTER DE
|
42
|
+
0x30C8 => 0x3068, # KATAKANA LETTER TO
|
43
|
+
0x30C9 => 0x3069, # KATAKANA LETTER DO
|
44
|
+
0x30CA => 0x306A, # KATAKANA LETTER NA
|
45
|
+
0x30CB => 0x306B, # KATAKANA LETTER NI
|
46
|
+
0x30CC => 0x306C, # KATAKANA LETTER NU
|
47
|
+
0x30CD => 0x306D, # KATAKANA LETTER NE
|
48
|
+
0x30CE => 0x306E, # KATAKANA LETTER NO
|
49
|
+
0x30CF => 0x306F, # KATAKANA LETTER HA
|
50
|
+
0x30D0 => 0x3070, # KATAKANA LETTER BA
|
51
|
+
0x30D1 => 0x3071, # KATAKANA LETTER PA
|
52
|
+
0x30D2 => 0x3072, # KATAKANA LETTER HI
|
53
|
+
0x30D3 => 0x3073, # KATAKANA LETTER BI
|
54
|
+
0x30D4 => 0x3074, # KATAKANA LETTER PI
|
55
|
+
0x30D5 => 0x3075, # KATAKANA LETTER HU
|
56
|
+
0x30D6 => 0x3076, # KATAKANA LETTER BU
|
57
|
+
0x30D7 => 0x3077, # KATAKANA LETTER PU
|
58
|
+
0x30D8 => 0x3078, # KATAKANA LETTER HE
|
59
|
+
0x30D9 => 0x3079, # KATAKANA LETTER BE
|
60
|
+
0x30DA => 0x307A, # KATAKANA LETTER PE
|
61
|
+
0x30DB => 0x307B, # KATAKANA LETTER HO
|
62
|
+
0x30DC => 0x307C, # KATAKANA LETTER BO
|
63
|
+
0x30DD => 0x307D, # KATAKANA LETTER PO
|
64
|
+
0x30DE => 0x307E, # KATAKANA LETTER MA
|
65
|
+
0x30DF => 0x307F, # KATAKANA LETTER MI
|
66
|
+
0x30E0 => 0x3080, # KATAKANA LETTER MU
|
67
|
+
0x30E1 => 0x3081, # KATAKANA LETTER ME
|
68
|
+
0x30E2 => 0x3082, # KATAKANA LETTER MO
|
69
|
+
0x30E3 => 0x3083, # KATAKANA LETTER SMALL YA
|
70
|
+
0x30E4 => 0x3084, # KATAKANA LETTER YA
|
71
|
+
0x30E5 => 0x3085, # KATAKANA LETTER SMALL YU
|
72
|
+
0x30E6 => 0x3086, # KATAKANA LETTER YU
|
73
|
+
0x30E7 => 0x3087, # KATAKANA LETTER SMALL YO
|
74
|
+
0x30E8 => 0x3088, # KATAKANA LETTER YO
|
75
|
+
0x30E9 => 0x3089, # KATAKANA LETTER RA
|
76
|
+
0x30EA => 0x308A, # KATAKANA LETTER RI
|
77
|
+
0x30EB => 0x308B, # KATAKANA LETTER RU
|
78
|
+
0x30EC => 0x308C, # KATAKANA LETTER RE
|
79
|
+
0x30ED => 0x308D, # KATAKANA LETTER RO
|
80
|
+
0x30EE => 0x308E, # KATAKANA LETTER SMALL WA
|
81
|
+
0x30EF => 0x308F, # KATAKANA LETTER WA
|
82
|
+
0x30F0 => 0x3090, # KATAKANA LETTER WI
|
83
|
+
0x30F1 => 0x3091, # KATAKANA LETTER WE
|
84
|
+
0x30F2 => 0x3092, # KATAKANA LETTER WO
|
85
|
+
0x30F3 => 0x3093, # KATAKANA LETTER N
|
86
|
+
}.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten]
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
Kana::Converter::NUMERIC = Hash[*{0xFF10 => 0x30, # Fullwidth Digit Zero
|
3
|
+
0xFF11 => 0x31, # Fullwidth Digit One
|
4
|
+
0xFF12 => 0x32, # Fullwidth Digit Two
|
5
|
+
0xFF13 => 0x33, # Fullwidth Digit Three
|
6
|
+
0xFF14 => 0x34, # Fullwidth Digit Four
|
7
|
+
0xFF15 => 0x35, # Fullwidth Digit Five
|
8
|
+
0xFF16 => 0x36, # Fullwidth Digit Six
|
9
|
+
0xFF17 => 0x37, # Fullwidth Digit Seven
|
10
|
+
0xFF18 => 0x38, # Fullwidth Digit Eight
|
11
|
+
0xFF19 => 0x39, # Fullwidth Digit Nine
|
12
|
+
}.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten]
|
13
|
+
|
14
|
+
Kana::Converter::ALPHABET = Hash[*{0xFF21 => 0x41, # Fullwidth Latin Capital Letter A
|
15
|
+
0xFF22 => 0x42, # Fullwidth Latin Capital Letter B
|
16
|
+
0xFF23 => 0x43, # Fullwidth Latin Capital Letter C
|
17
|
+
0xFF24 => 0x44, # Fullwidth Latin Capital Letter D
|
18
|
+
0xFF25 => 0x45, # Fullwidth Latin Capital Letter E
|
19
|
+
0xFF26 => 0x46, # Fullwidth Latin Capital Letter F
|
20
|
+
0xFF27 => 0x47, # Fullwidth Latin Capital Letter G
|
21
|
+
0xFF28 => 0x48, # Fullwidth Latin Capital Letter H
|
22
|
+
0xFF29 => 0x49, # Fullwidth Latin Capital Letter I
|
23
|
+
0xFF2A => 0x4A, # Fullwidth Latin Capital Letter J
|
24
|
+
0xFF2B => 0x4B, # Fullwidth Latin Capital Letter K
|
25
|
+
0xFF2C => 0x4C, # Fullwidth Latin Capital Letter L
|
26
|
+
0xFF2D => 0x4D, # Fullwidth Latin Capital Letter M
|
27
|
+
0xFF2E => 0x4E, # Fullwidth Latin Capital Letter N
|
28
|
+
0xFF2F => 0x4F, # Fullwidth Latin Capital Letter O
|
29
|
+
0xFF30 => 0x50, # Fullwidth Latin Capital Letter P
|
30
|
+
0xFF31 => 0x51, # Fullwidth Latin Capital Letter Q
|
31
|
+
0xFF32 => 0x52, # Fullwidth Latin Capital Letter R
|
32
|
+
0xFF33 => 0x53, # Fullwidth Latin Capital Letter S
|
33
|
+
0xFF34 => 0x54, # Fullwidth Latin Capital Letter T
|
34
|
+
0xFF35 => 0x55, # Fullwidth Latin Capital Letter U
|
35
|
+
0xFF36 => 0x56, # Fullwidth Latin Capital Letter V
|
36
|
+
0xFF37 => 0x57, # Fullwidth Latin Capital Letter W
|
37
|
+
0xFF38 => 0x58, # Fullwidth Latin Capital Letter X
|
38
|
+
0xFF39 => 0x59, # Fullwidth Latin Capital Letter Y
|
39
|
+
0xFF3A => 0x5A, # Fullwidth Latin Capital Letter Z
|
40
|
+
0xFF41 => 0x61, # Fullwidth Latin Small Letter A
|
41
|
+
0xFF42 => 0x62, # Fullwidth Latin Small Letter B
|
42
|
+
0xFF43 => 0x63, # Fullwidth Latin Small Letter C
|
43
|
+
0xFF44 => 0x64, # Fullwidth Latin Small Letter D
|
44
|
+
0xFF45 => 0x65, # Fullwidth Latin Small Letter E
|
45
|
+
0xFF46 => 0x66, # Fullwidth Latin Small Letter F
|
46
|
+
0xFF47 => 0x67, # Fullwidth Latin Small Letter G
|
47
|
+
0xFF48 => 0x68, # Fullwidth Latin Small Letter H
|
48
|
+
0xFF49 => 0x69, # Fullwidth Latin Small Letter I
|
49
|
+
0xFF4A => 0x6A, # Fullwidth Latin Small Letter J
|
50
|
+
0xFF4B => 0x6B, # Fullwidth Latin Small Letter K
|
51
|
+
0xFF4C => 0x6C, # Fullwidth Latin Small Letter L
|
52
|
+
0xFF4D => 0x6D, # Fullwidth Latin Small Letter M
|
53
|
+
0xFF4E => 0x6E, # Fullwidth Latin Small Letter N
|
54
|
+
0xFF4F => 0x6F, # Fullwidth Latin Small Letter O
|
55
|
+
0xFF50 => 0x70, # Fullwidth Latin Small Letter P
|
56
|
+
0xFF51 => 0x71, # Fullwidth Latin Small Letter Q
|
57
|
+
0xFF52 => 0x72, # Fullwidth Latin Small Letter R
|
58
|
+
0xFF53 => 0x73, # Fullwidth Latin Small Letter S
|
59
|
+
0xFF54 => 0x74, # Fullwidth Latin Small Letter T
|
60
|
+
0xFF55 => 0x75, # Fullwidth Latin Small Letter U
|
61
|
+
0xFF56 => 0x76, # Fullwidth Latin Small Letter V
|
62
|
+
0xFF57 => 0x77, # Fullwidth Latin Small Letter W
|
63
|
+
0xFF58 => 0x78, # Fullwidth Latin Small Letter X
|
64
|
+
0xFF59 => 0x79, # Fullwidth Latin Small Letter Y
|
65
|
+
0xFF5A => 0x7A, # Fullwidth Latin Small Letter Z
|
66
|
+
}.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten]
|
67
|
+
|
68
|
+
Kana::Converter::SYMBOL = Hash[*{0xFF01 => 0x21, # Fullwidth Exclamation Mark
|
69
|
+
0xFF03 => 0x23, # Fullwidth Number Sign
|
70
|
+
0xFF04 => 0x24, # Fullwidth Dollar Sign
|
71
|
+
0xFF05 => 0x25, # Fullwidth Percent Sign
|
72
|
+
0xFF06 => 0x26, # Fullwidth Ampersand
|
73
|
+
0xFF08 => 0x28, # Fullwidth Left Parenthesis
|
74
|
+
0xFF09 => 0x29, # Fullwidth Right Parenthesis
|
75
|
+
0xFF0A => 0x2A, # Fullwidth Asterisk
|
76
|
+
0xFF0B => 0x2B, # Fullwidth Plus Sign
|
77
|
+
0xFF0C => 0x2C, # Fullwidth Comma
|
78
|
+
0xFF0D => 0x2D, # Fullwidth Hyphen-Minus
|
79
|
+
0x2212 => 0x2D,
|
80
|
+
0xFF0E => 0x2E, # Fullwidth Full Stop
|
81
|
+
0xFF0F => 0x2F, # Fullwidth Solidus
|
82
|
+
0xFF10 => 0x30,
|
83
|
+
0xFF11 => 0x31,
|
84
|
+
0xFF12 => 0x32,
|
85
|
+
0xFF13 => 0x33,
|
86
|
+
0xFF14 => 0x34,
|
87
|
+
0xFF15 => 0x35,
|
88
|
+
0xFF16 => 0x36,
|
89
|
+
0xFF17 => 0x37,
|
90
|
+
0xFF18 => 0x38,
|
91
|
+
0xFF19 => 0x39,
|
92
|
+
0xFF1A => 0x3A, # Fullwidth Colon
|
93
|
+
0xFF1B => 0x3B, # Fullwidth Semicolon
|
94
|
+
0xFF1C => 0x3C, # Fullwidth Less-Than Sign
|
95
|
+
0xFF1D => 0x3D, # Fullwidth Equals Sign
|
96
|
+
0xFF1E => 0x3E, # Fullwidth Greater-Than Sign
|
97
|
+
0xFF1F => 0x3F, # Fullwidth Question Mark
|
98
|
+
0xFF20 => 0x40, # Fullwidth Commercial At
|
99
|
+
0xFF21 => 0x41,
|
100
|
+
0xFF22 => 0x42,
|
101
|
+
0xFF23 => 0x43,
|
102
|
+
0xFF24 => 0x44,
|
103
|
+
0xFF25 => 0x45,
|
104
|
+
0xFF26 => 0x46,
|
105
|
+
0xFF27 => 0x47,
|
106
|
+
0xFF28 => 0x48,
|
107
|
+
0xFF29 => 0x49,
|
108
|
+
0xFF2A => 0x4A,
|
109
|
+
0xFF2B => 0x4B,
|
110
|
+
0xFF2C => 0x4C,
|
111
|
+
0xFF2D => 0x4D,
|
112
|
+
0xFF2E => 0x4E,
|
113
|
+
0xFF2F => 0x4F,
|
114
|
+
0xFF30 => 0x50,
|
115
|
+
0xFF31 => 0x51,
|
116
|
+
0xFF32 => 0x52,
|
117
|
+
0xFF33 => 0x53,
|
118
|
+
0xFF34 => 0x54,
|
119
|
+
0xFF35 => 0x55,
|
120
|
+
0xFF36 => 0x56,
|
121
|
+
0xFF37 => 0x57,
|
122
|
+
0xFF38 => 0x58,
|
123
|
+
0xFF39 => 0x59,
|
124
|
+
0xFF3A => 0x5A,
|
125
|
+
0xFF3B => 0x5B,
|
126
|
+
0xFF3D => 0x5D,
|
127
|
+
0xFF3E => 0x5E,
|
128
|
+
0xFF3F => 0x5F,
|
129
|
+
0xFF40 => 0x60,
|
130
|
+
0xFF41 => 0x61,
|
131
|
+
0xFF42 => 0x62,
|
132
|
+
0xFF43 => 0x63,
|
133
|
+
0xFF44 => 0x64,
|
134
|
+
0xFF45 => 0x65,
|
135
|
+
0xFF46 => 0x66,
|
136
|
+
0xFF47 => 0x67,
|
137
|
+
0xFF48 => 0x68,
|
138
|
+
0xFF49 => 0x69,
|
139
|
+
0xFF4A => 0x6A,
|
140
|
+
0xFF4B => 0x6B,
|
141
|
+
0xFF4C => 0x6C,
|
142
|
+
0xFF4D => 0x6D,
|
143
|
+
0xFF4E => 0x6E,
|
144
|
+
0xFF4F => 0x6F,
|
145
|
+
0xFF50 => 0x70,
|
146
|
+
0xFF51 => 0x71,
|
147
|
+
0xFF52 => 0x72,
|
148
|
+
0xFF53 => 0x73,
|
149
|
+
0xFF54 => 0x74,
|
150
|
+
0xFF55 => 0x75,
|
151
|
+
0xFF56 => 0x76,
|
152
|
+
0xFF57 => 0x77,
|
153
|
+
0xFF58 => 0x78,
|
154
|
+
0xFF59 => 0x79,
|
155
|
+
0xFF5A => 0x7A,
|
156
|
+
0xFF5B => 0x7B, # Fullwidth Left Curly Bracket
|
157
|
+
0xFF5C => 0x7C, # Fullwidth Vertical Line
|
158
|
+
0xFF5D => 0x7D, # Fullwidth Right Curly Bracket
|
159
|
+
}.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten]
|
160
|
+
|
161
|
+
Kana::Converter::SYMBOL_INVERT = Hash[*{0x2D => 0xFF0D
|
162
|
+
}.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten]
|
163
|
+
|
164
|
+
Kana::Converter::SPACE = Hash[*{0x3000 => 0x20, # IDEOGRAPHIC SPACE
|
165
|
+
}.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten]
|