kana 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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]
|