Module: Kana::Converter
- Defined in:
- lib/kana/converter.rb
Constant Summary collapse
- VALID_OPTION =
['n','N','r','R','s','S','a','A','k','K','h','H','c','C','V',].freeze
- ZENKAKU_KATAKANA_HANKAKU =
全角カタカナ -> 半角カタカナ(清音のみ)
Hash[*{ 0x30A1 => 0xFF67, 0x30A2 => 0xFF71, 0x30A3 => 0xFF68, 0x30A4 => 0xFF72, 0x30A5 => 0xFF69, 0x30A6 => 0xFF73, 0x30A7 => 0xFF6A, 0x30A8 => 0xFF74, 0x30A9 => 0xFF6B, 0x30AA => 0xFF75, 0x30AB => 0xFF76, 0x30AD => 0xFF77, 0x30AF => 0xFF78, 0x30B1 => 0xFF79, 0x30B3 => 0xFF7A, 0x30B5 => 0xFF7B, 0x30B7 => 0xFF7C, 0x30B9 => 0xFF7D, 0x30BB => 0xFF7E, 0x30BD => 0xFF7F, 0x30BF => 0xFF80, 0x30C1 => 0xFF81, 0x30C3 => 0xFF6F, 0x30C4 => 0xFF82, 0x30C6 => 0xFF83, 0x30C8 => 0xFF84, 0x30CA => 0xFF85, 0x30CB => 0xFF86, 0x30CC => 0xFF87, 0x30CD => 0xFF88, 0x30CE => 0xFF89, 0x30CF => 0xFF8A, 0x30D2 => 0xFF8B, 0x30D5 => 0xFF8C, 0x30D8 => 0xFF8D, 0x30DB => 0xFF8E, 0x30DE => 0xFF8F, 0x30DF => 0xFF90, 0x30E0 => 0xFF91, 0x30E1 => 0xFF92, 0x30E2 => 0xFF93, 0x30E3 => 0xFF6C, 0x30E4 => 0xFF94, 0x30E5 => 0xFF6D, 0x30E6 => 0xFF95, 0x30E7 => 0xFF6E, 0x30E8 => 0xFF96, 0x30E9 => 0xFF97, 0x30EA => 0xFF98, 0x30EB => 0xFF99, 0x30EC => 0xFF9A, 0x30ED => 0xFF9B, 0x30EE => 0xFF9C, 0x30EF => 0xFF9C, 0x30F0 => 0xFF72, 0x30F1 => 0xFF74, 0x30F2 => 0xFF66, 0x30F3 => 0xFF9D, }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- ZENKAKU_DAKUTEN_KATAKANA_HANKAKU =
全角カタカナ -> 半角カタカナ(濁音・半濁音)
Hash[*{ 0x30AC => [0xFF76,0xFF9E], 0x30AE => [0xFF77,0xFF9E], 0x30B0 => [0xFF78,0xFF9E], 0x30B2 => [0xFF79,0xFF9E], 0x30B4 => [0xFF7A,0xFF9E], 0x30B6 => [0xFF7B,0xFF9E], 0x30B8 => [0xFF7C,0xFF9E], 0x30BA => [0xFF7D,0xFF9E], 0x30BC => [0xFF7E,0xFF9E], 0x30BE => [0xFF7F,0xFF9E], 0x30C0 => [0xFF80,0xFF9E], 0x30C2 => [0xFF81,0xFF9E], 0x30C5 => [0xFF82,0xFF9E], 0x30C7 => [0xFF83,0xFF9E], 0x30C9 => [0xFF84,0xFF9E], 0x30D0 => [0xFF8A,0xFF9E], 0x30D1 => [0xFF8A,0xFF9F], 0x30D3 => [0xFF8B,0xFF9E], 0x30D4 => [0xFF8B,0xFF9F], 0x30D6 => [0xFF8C,0xFF9E], 0x30D7 => [0xFF8C,0xFF9F], 0x30D9 => [0xFF8D,0xFF9E], 0x30DA => [0xFF8D,0xFF9F], 0x30DC => [0xFF8E,0xFF9E], 0x30DD => [0xFF8E,0xFF9F], 0x30F4 => [0xFF73,0xFF9E], }.map{ |k,v| [[k].pack('U'), v.map{ |e| [e].pack('U') }.join ] }.flatten].freeze
- ZENKAKU_HIRAGANA_HANKAKU =
全角ひらがな -> 半角カタカナ(清音のみ)
Hash[*{ 0x3041 => 0xFF67, 0x3042 => 0xFF71, 0x3043 => 0xFF68, 0x3044 => 0xFF72, 0x3045 => 0xFF69, 0x3046 => 0xFF73, 0x3047 => 0xFF6A, 0x3048 => 0xFF74, 0x3049 => 0xFF6B, 0x304A => 0xFF75, 0x304B => 0xFF76, 0x304D => 0xFF77, 0x304F => 0xFF78, 0x3051 => 0xFF79, 0x3053 => 0xFF7A, 0x3055 => 0xFF7B, 0x3057 => 0xFF7C, 0x3059 => 0xFF7D, 0x305B => 0xFF7E, 0x305D => 0xFF7F, 0x305F => 0xFF80, 0x3061 => 0xFF81, 0x3063 => 0xFF6F, 0x3064 => 0xFF82, 0x3066 => 0xFF83, 0x3068 => 0xFF84, 0x306A => 0xFF85, 0x306B => 0xFF86, 0x306C => 0xFF87, 0x306D => 0xFF88, 0x306E => 0xFF89, 0x306F => 0xFF8A, 0x3072 => 0xFF8B, 0x3075 => 0xFF8C, 0x3078 => 0xFF8D, 0x307B => 0xFF8E, 0x307E => 0xFF8F, 0x307F => 0xFF90, 0x3080 => 0xFF91, 0x3081 => 0xFF92, 0x3082 => 0xFF93, 0x3083 => 0xFF6C, 0x3084 => 0xFF94, 0x3085 => 0xFF6D, 0x3086 => 0xFF95, 0x3087 => 0xFF6E, 0x3088 => 0xFF96, 0x3089 => 0xFF97, 0x308A => 0xFF98, 0x308B => 0xFF99, 0x308C => 0xFF9A, 0x308D => 0xFF9B, 0x308E => 0xFF9C, 0x308F => 0xFF9C, 0x3090 => 0xFF72, 0x3091 => 0xFF74, 0x3092 => 0xFF66, 0x3093 => 0xFF9D, }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- ZENKAKU_DAKUTEN_HIRAGANA_HANKAKU =
全角ひらがな -> 半角カタカナ(濁音・半濁音)
Hash[*{ 0x304C => [0xFF76,0xFF9E], 0x304E => [0xFF77,0xFF9E], 0x3050 => [0xFF78,0xFF9E], 0x3052 => [0xFF79,0xFF9E], 0x3054 => [0xFF7A,0xFF9E], 0x3056 => [0xFF7B,0xFF9E], 0x3058 => [0xFF7C,0xFF9E], 0x305A => [0xFF7D,0xFF9E], 0x305C => [0xFF7E,0xFF9E], 0x305E => [0xFF7F,0xFF9E], 0x3060 => [0xFF80,0xFF9E], 0x3062 => [0xFF81,0xFF9E], 0x3065 => [0xFF82,0xFF9E], 0x3067 => [0xFF83,0xFF9E], 0x3069 => [0xFF84,0xFF9E], 0x3070 => [0xFF8A,0xFF9E], 0x3071 => [0xFF8A,0xFF9F], 0x3073 => [0xFF8B,0xFF9E], 0x3074 => [0xFF8B,0xFF9F], 0x3076 => [0xFF8C,0xFF9E], 0x3077 => [0xFF8C,0xFF9F], 0x3079 => [0xFF8D,0xFF9E], 0x307A => [0xFF8D,0xFF9F], 0x307C => [0xFF8E,0xFF9E], 0x307D => [0xFF8E,0xFF9F], }.map{ |k,v| [[k].pack('U'), v.map{ |e| [e].pack('U') }.join ] }.flatten].freeze
- ZENKAKU_SYMBOL =
全角記号 -> 半角記号
Hash[*{ 0x3001 => 0xFF64, 0x3002 => 0xFF61, 0x300C => 0xFF62, 0x300D => 0xFF63, 0x309B => 0xFF9E, 0x309C => 0xFF9F, 0x30FC => 0xFF70, 0x30FB => 0xFF65, }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- ZENKAKU_KATAKANA_SYMBOL =
全角記号 -> 半角記号
Hash[*{ 0x30F2 => 0xFF66, 0x30A1 => 0xFF67, 0x30A3 => 0xFF68, 0x30A5 => 0xFF69, 0x30A7 => 0xFF6A, 0x30A9 => 0xFF6B, 0x30E3 => 0xFF6C, 0x30E5 => 0xFF6D, 0x30E7 => 0xFF6E, 0x30C3 => 0xFF6F, 0x30A2 => 0xFF71, 0x30A4 => 0xFF72, 0x30A6 => 0xFF73, 0x30A8 => 0xFF74, 0x30AA => 0xFF75, 0x30AB => 0xFF76, 0x30AD => 0xFF77, 0x30AF => 0xFF78, 0x30B1 => 0xFF79, 0x30B3 => 0xFF7A, 0x30B5 => 0xFF7B, 0x30B7 => 0xFF7C, 0x30B9 => 0xFF7D, 0x30BB => 0xFF7E, 0x30BD => 0xFF7F, 0x30BF => 0xFF80, 0x30C1 => 0xFF81, 0x30C4 => 0xFF82, 0x30C6 => 0xFF83, 0x30C8 => 0xFF84, 0x30CA => 0xFF85, 0x30CB => 0xFF86, 0x30CC => 0xFF87, 0x30CD => 0xFF88, 0x30CE => 0xFF89, 0x30CF => 0xFF8A, 0x30D2 => 0xFF8B, 0x30D5 => 0xFF8C, 0x30D8 => 0xFF8D, 0x30DB => 0xFF8E, 0x30DE => 0xFF8F, 0x30DF => 0xFF90, 0x30E0 => 0xFF91, 0x30E1 => 0xFF92, 0x30E2 => 0xFF93, 0x30E4 => 0xFF94, 0x30E6 => 0xFF95, 0x30E8 => 0xFF96, 0x30E9 => 0xFF97, 0x30EA => 0xFF98, 0x30EB => 0xFF99, 0x30EC => 0xFF9A, 0x30ED => 0xFF9B, 0x30EF => 0xFF9C, 0x30F3 => 0xFF9D, }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- ZENKAKU_HIRAGANA_SYMBOL =
全角記号 -> 半角記号
Hash[*{ 0x3092 => 0xFF66, 0x3041 => 0xFF67, 0x3043 => 0xFF68, 0x3045 => 0xFF69, 0x3047 => 0xFF6A, 0x3049 => 0xFF6B, 0x3083 => 0xFF6C, 0x3085 => 0xFF6D, 0x3087 => 0xFF6E, 0x3063 => 0xFF6F, 0x3042 => 0xFF71, 0x3044 => 0xFF72, 0x3046 => 0xFF73, 0x3048 => 0xFF74, 0x304A => 0xFF75, 0x304B => 0xFF76, 0x304D => 0xFF77, 0x304F => 0xFF78, 0x3051 => 0xFF79, 0x3053 => 0xFF7A, 0x3055 => 0xFF7B, 0x3057 => 0xFF7C, 0x3059 => 0xFF7D, 0x305B => 0xFF7E, 0x305D => 0xFF7F, 0x305F => 0xFF80, 0x3061 => 0xFF81, 0x3064 => 0xFF82, 0x3066 => 0xFF83, 0x3068 => 0xFF84, 0x306A => 0xFF85, 0x306B => 0xFF86, 0x306C => 0xFF87, 0x306D => 0xFF88, 0x306E => 0xFF89, 0x306F => 0xFF8A, 0x3072 => 0xFF8B, 0x3075 => 0xFF8C, 0x3078 => 0xFF8D, 0x307B => 0xFF8E, 0x307E => 0xFF8F, 0x307F => 0xFF90, 0x3080 => 0xFF91, 0x3081 => 0xFF92, 0x3082 => 0xFF93, 0x3084 => 0xFF94, 0x3086 => 0xFF95, 0x3088 => 0xFF96, 0x3089 => 0xFF97, 0x308A => 0xFF98, 0x308B => 0xFF99, 0x308C => 0xFF9A, 0x308D => 0xFF9B, 0x308F => 0xFF9C, 0x3093 => 0xFF9D, }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- KATAHIRA =
全角カタカナ -> 全角ひらがな
Hash[*{0x30A1 => 0x3041, # KATAKANA LETTER SMALL A 0x30A2 => 0x3042, # KATAKANA LETTER A 0x30A3 => 0x3043, # KATAKANA LETTER SMALL I 0x30A4 => 0x3044, # KATAKANA LETTER I 0x30A5 => 0x3045, # KATAKANA LETTER SMALL U 0x30A6 => 0x3046, # KATAKANA LETTER U 0x30A7 => 0x3047, # KATAKANA LETTER SMALL E 0x30A8 => 0x3048, # KATAKANA LETTER E 0x30A9 => 0x3049, # KATAKANA LETTER SMALL O 0x30AA => 0x304A, # KATAKANA LETTER O 0x30AB => 0x304B, # KATAKANA LETTER KA 0x30AC => 0x304C, # KATAKANA LETTER GA 0x30AD => 0x304D, # KATAKANA LETTER KI 0x30AE => 0x304E, # KATAKANA LETTER GI 0x30AF => 0x304F, # KATAKANA LETTER KU 0x30B0 => 0x3050, # KATAKANA LETTER GU 0x30B1 => 0x3051, # KATAKANA LETTER KE 0x30B2 => 0x3052, # KATAKANA LETTER GE 0x30B3 => 0x3053, # KATAKANA LETTER KO 0x30B4 => 0x3054, # KATAKANA LETTER GO 0x30B5 => 0x3055, # KATAKANA LETTER SA 0x30B6 => 0x3056, # KATAKANA LETTER ZA 0x30B7 => 0x3057, # KATAKANA LETTER SI 0x30B8 => 0x3058, # KATAKANA LETTER ZI 0x30B9 => 0x3059, # KATAKANA LETTER SU 0x30BA => 0x305A, # KATAKANA LETTER ZU 0x30BB => 0x305B, # KATAKANA LETTER SE 0x30BC => 0x305C, # KATAKANA LETTER ZE 0x30BD => 0x305D, # KATAKANA LETTER SO 0x30BE => 0x305E, # KATAKANA LETTER ZO 0x30BF => 0x305F, # KATAKANA LETTER TA 0x30C0 => 0x3060, # KATAKANA LETTER DA 0x30C1 => 0x3061, # KATAKANA LETTER TI 0x30C2 => 0x3062, # KATAKANA LETTER DI 0x30C3 => 0x3063, # KATAKANA LETTER SMALL TU 0x30C4 => 0x3064, # KATAKANA LETTER TU 0x30C5 => 0x3065, # KATAKANA LETTER DU 0x30C6 => 0x3066, # KATAKANA LETTER TE 0x30C7 => 0x3067, # KATAKANA LETTER DE 0x30C8 => 0x3068, # KATAKANA LETTER TO 0x30C9 => 0x3069, # KATAKANA LETTER DO 0x30CA => 0x306A, # KATAKANA LETTER NA 0x30CB => 0x306B, # KATAKANA LETTER NI 0x30CC => 0x306C, # KATAKANA LETTER NU 0x30CD => 0x306D, # KATAKANA LETTER NE 0x30CE => 0x306E, # KATAKANA LETTER NO 0x30CF => 0x306F, # KATAKANA LETTER HA 0x30D0 => 0x3070, # KATAKANA LETTER BA 0x30D1 => 0x3071, # KATAKANA LETTER PA 0x30D2 => 0x3072, # KATAKANA LETTER HI 0x30D3 => 0x3073, # KATAKANA LETTER BI 0x30D4 => 0x3074, # KATAKANA LETTER PI 0x30D5 => 0x3075, # KATAKANA LETTER HU 0x30D6 => 0x3076, # KATAKANA LETTER BU 0x30D7 => 0x3077, # KATAKANA LETTER PU 0x30D8 => 0x3078, # KATAKANA LETTER HE 0x30D9 => 0x3079, # KATAKANA LETTER BE 0x30DA => 0x307A, # KATAKANA LETTER PE 0x30DB => 0x307B, # KATAKANA LETTER HO 0x30DC => 0x307C, # KATAKANA LETTER BO 0x30DD => 0x307D, # KATAKANA LETTER PO 0x30DE => 0x307E, # KATAKANA LETTER MA 0x30DF => 0x307F, # KATAKANA LETTER MI 0x30E0 => 0x3080, # KATAKANA LETTER MU 0x30E1 => 0x3081, # KATAKANA LETTER ME 0x30E2 => 0x3082, # KATAKANA LETTER MO 0x30E3 => 0x3083, # KATAKANA LETTER SMALL YA 0x30E4 => 0x3084, # KATAKANA LETTER YA 0x30E5 => 0x3085, # KATAKANA LETTER SMALL YU 0x30E6 => 0x3086, # KATAKANA LETTER YU 0x30E7 => 0x3087, # KATAKANA LETTER SMALL YO 0x30E8 => 0x3088, # KATAKANA LETTER YO 0x30E9 => 0x3089, # KATAKANA LETTER RA 0x30EA => 0x308A, # KATAKANA LETTER RI 0x30EB => 0x308B, # KATAKANA LETTER RU 0x30EC => 0x308C, # KATAKANA LETTER RE 0x30ED => 0x308D, # KATAKANA LETTER RO 0x30EE => 0x308E, # KATAKANA LETTER SMALL WA 0x30EF => 0x308F, # KATAKANA LETTER WA 0x30F0 => 0x3090, # KATAKANA LETTER WI 0x30F1 => 0x3091, # KATAKANA LETTER WE 0x30F2 => 0x3092, # KATAKANA LETTER WO 0x30F3 => 0x3093, # KATAKANA LETTER N }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- NUMERIC =
Fullwidth Digit Zero
Hash[*{0xFF10 => 0x30, # Fullwidth Digit Zero 0xFF11 => 0x31, # Fullwidth Digit One 0xFF12 => 0x32, # Fullwidth Digit Two 0xFF13 => 0x33, # Fullwidth Digit Three 0xFF14 => 0x34, # Fullwidth Digit Four 0xFF15 => 0x35, # Fullwidth Digit Five 0xFF16 => 0x36, # Fullwidth Digit Six 0xFF17 => 0x37, # Fullwidth Digit Seven 0xFF18 => 0x38, # Fullwidth Digit Eight 0xFF19 => 0x39, # Fullwidth Digit Nine }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- ALPHABET =
Fullwidth Latin Capital Letter A
Hash[*{0xFF21 => 0x41, # Fullwidth Latin Capital Letter A 0xFF22 => 0x42, # Fullwidth Latin Capital Letter B 0xFF23 => 0x43, # Fullwidth Latin Capital Letter C 0xFF24 => 0x44, # Fullwidth Latin Capital Letter D 0xFF25 => 0x45, # Fullwidth Latin Capital Letter E 0xFF26 => 0x46, # Fullwidth Latin Capital Letter F 0xFF27 => 0x47, # Fullwidth Latin Capital Letter G 0xFF28 => 0x48, # Fullwidth Latin Capital Letter H 0xFF29 => 0x49, # Fullwidth Latin Capital Letter I 0xFF2A => 0x4A, # Fullwidth Latin Capital Letter J 0xFF2B => 0x4B, # Fullwidth Latin Capital Letter K 0xFF2C => 0x4C, # Fullwidth Latin Capital Letter L 0xFF2D => 0x4D, # Fullwidth Latin Capital Letter M 0xFF2E => 0x4E, # Fullwidth Latin Capital Letter N 0xFF2F => 0x4F, # Fullwidth Latin Capital Letter O 0xFF30 => 0x50, # Fullwidth Latin Capital Letter P 0xFF31 => 0x51, # Fullwidth Latin Capital Letter Q 0xFF32 => 0x52, # Fullwidth Latin Capital Letter R 0xFF33 => 0x53, # Fullwidth Latin Capital Letter S 0xFF34 => 0x54, # Fullwidth Latin Capital Letter T 0xFF35 => 0x55, # Fullwidth Latin Capital Letter U 0xFF36 => 0x56, # Fullwidth Latin Capital Letter V 0xFF37 => 0x57, # Fullwidth Latin Capital Letter W 0xFF38 => 0x58, # Fullwidth Latin Capital Letter X 0xFF39 => 0x59, # Fullwidth Latin Capital Letter Y 0xFF3A => 0x5A, # Fullwidth Latin Capital Letter Z 0xFF41 => 0x61, # Fullwidth Latin Small Letter A 0xFF42 => 0x62, # Fullwidth Latin Small Letter B 0xFF43 => 0x63, # Fullwidth Latin Small Letter C 0xFF44 => 0x64, # Fullwidth Latin Small Letter D 0xFF45 => 0x65, # Fullwidth Latin Small Letter E 0xFF46 => 0x66, # Fullwidth Latin Small Letter F 0xFF47 => 0x67, # Fullwidth Latin Small Letter G 0xFF48 => 0x68, # Fullwidth Latin Small Letter H 0xFF49 => 0x69, # Fullwidth Latin Small Letter I 0xFF4A => 0x6A, # Fullwidth Latin Small Letter J 0xFF4B => 0x6B, # Fullwidth Latin Small Letter K 0xFF4C => 0x6C, # Fullwidth Latin Small Letter L 0xFF4D => 0x6D, # Fullwidth Latin Small Letter M 0xFF4E => 0x6E, # Fullwidth Latin Small Letter N 0xFF4F => 0x6F, # Fullwidth Latin Small Letter O 0xFF50 => 0x70, # Fullwidth Latin Small Letter P 0xFF51 => 0x71, # Fullwidth Latin Small Letter Q 0xFF52 => 0x72, # Fullwidth Latin Small Letter R 0xFF53 => 0x73, # Fullwidth Latin Small Letter S 0xFF54 => 0x74, # Fullwidth Latin Small Letter T 0xFF55 => 0x75, # Fullwidth Latin Small Letter U 0xFF56 => 0x76, # Fullwidth Latin Small Letter V 0xFF57 => 0x77, # Fullwidth Latin Small Letter W 0xFF58 => 0x78, # Fullwidth Latin Small Letter X 0xFF59 => 0x79, # Fullwidth Latin Small Letter Y 0xFF5A => 0x7A, # Fullwidth Latin Small Letter Z }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- SYMBOL =
Fullwidth Exclamation Mark
Hash[*{0xFF01 => 0x21, # Fullwidth Exclamation Mark 0xFF03 => 0x23, # Fullwidth Number Sign 0xFF04 => 0x24, # Fullwidth Dollar Sign 0xFF05 => 0x25, # Fullwidth Percent Sign 0xFF06 => 0x26, # Fullwidth Ampersand 0xFF08 => 0x28, # Fullwidth Left Parenthesis 0xFF09 => 0x29, # Fullwidth Right Parenthesis 0xFF0A => 0x2A, # Fullwidth Asterisk 0xFF0B => 0x2B, # Fullwidth Plus Sign 0xFF0C => 0x2C, # Fullwidth Comma 0xFF0D => 0x2D, # Fullwidth Hyphen-Minus 0x2212 => 0x2D, 0xFF0E => 0x2E, # Fullwidth Full Stop 0xFF0F => 0x2F, # Fullwidth Solidus 0xFF10 => 0x30, 0xFF11 => 0x31, 0xFF12 => 0x32, 0xFF13 => 0x33, 0xFF14 => 0x34, 0xFF15 => 0x35, 0xFF16 => 0x36, 0xFF17 => 0x37, 0xFF18 => 0x38, 0xFF19 => 0x39, 0xFF1A => 0x3A, # Fullwidth Colon 0xFF1B => 0x3B, # Fullwidth Semicolon 0xFF1C => 0x3C, # Fullwidth Less-Than Sign 0xFF1D => 0x3D, # Fullwidth Equals Sign 0xFF1E => 0x3E, # Fullwidth Greater-Than Sign 0xFF1F => 0x3F, # Fullwidth Question Mark 0xFF20 => 0x40, # Fullwidth Commercial At 0xFF21 => 0x41, 0xFF22 => 0x42, 0xFF23 => 0x43, 0xFF24 => 0x44, 0xFF25 => 0x45, 0xFF26 => 0x46, 0xFF27 => 0x47, 0xFF28 => 0x48, 0xFF29 => 0x49, 0xFF2A => 0x4A, 0xFF2B => 0x4B, 0xFF2C => 0x4C, 0xFF2D => 0x4D, 0xFF2E => 0x4E, 0xFF2F => 0x4F, 0xFF30 => 0x50, 0xFF31 => 0x51, 0xFF32 => 0x52, 0xFF33 => 0x53, 0xFF34 => 0x54, 0xFF35 => 0x55, 0xFF36 => 0x56, 0xFF37 => 0x57, 0xFF38 => 0x58, 0xFF39 => 0x59, 0xFF3A => 0x5A, 0xFF3B => 0x5B, 0xFF3D => 0x5D, 0xFF3E => 0x5E, 0xFF3F => 0x5F, 0xFF40 => 0x60, 0xFF41 => 0x61, 0xFF42 => 0x62, 0xFF43 => 0x63, 0xFF44 => 0x64, 0xFF45 => 0x65, 0xFF46 => 0x66, 0xFF47 => 0x67, 0xFF48 => 0x68, 0xFF49 => 0x69, 0xFF4A => 0x6A, 0xFF4B => 0x6B, 0xFF4C => 0x6C, 0xFF4D => 0x6D, 0xFF4E => 0x6E, 0xFF4F => 0x6F, 0xFF50 => 0x70, 0xFF51 => 0x71, 0xFF52 => 0x72, 0xFF53 => 0x73, 0xFF54 => 0x74, 0xFF55 => 0x75, 0xFF56 => 0x76, 0xFF57 => 0x77, 0xFF58 => 0x78, 0xFF59 => 0x79, 0xFF5A => 0x7A, 0xFF5B => 0x7B, # Fullwidth Left Curly Bracket 0xFF5C => 0x7C, # Fullwidth Vertical Line 0xFF5D => 0x7D, # Fullwidth Right Curly Bracket }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- SYMBOL_INVERT =
Hash[*{0x2D => 0xFF0D }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- SPACE =
IDEOGRAPHIC SPACE
Hash[*{0x3000 => 0x20, # IDEOGRAPHIC SPACE }.map{ |k,v| [[k].pack('U'), [v].pack('U')] }.flatten].freeze
- @@cached_data =
{}
Class Method Summary collapse
- .build_convert_table(opt) ⇒ Object
- .build_regexp(table) ⇒ Object
- .convert(str, opt = 'KV') ⇒ Object
- .convert_tables(opt) ⇒ Object
- .parse_option(opt) ⇒ Object
Class Method Details
.build_convert_table(opt) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/kana/converter.rb', line 19 def self.build_convert_table opt opt = parse_option opt return @@cached_data[opt] if @@cached_data[opt] table = convert_tables opt @@cached_data[opt] = [build_regexp(table), table].freeze end |
.build_regexp(table) ⇒ Object
102 103 104 105 106 107 108 109 110 |
# File 'lib/kana/converter.rb', line 102 def self.build_regexp table Regexp.union(*table.keys.sort_by{ |k| -table[k].size }.map{ |v| if RUBY_VERSION >= '1.9.1' Regexp.new(Regexp.escape(v)) else Regexp.new(Regexp.escape(v,'u'),nil,'u') end }).freeze end |
.convert(str, opt = 'KV') ⇒ Object
8 9 10 11 12 13 14 |
# File 'lib/kana/converter.rb', line 8 def convert str, opt='KV' opt ||= 'KV' regexp, table = build_convert_table opt str.gsub(regexp) do |match| table[match] end end |
.convert_tables(opt) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/kana/converter.rb', line 34 def self.convert_tables opt table = {} opt.each do |c| case c when 'n' # 全角数字 -> 半角数字 table.update NUMERIC when 'N' # 半角数字 -> 全角数字 table.update NUMERIC.invert when 'r' # 全角英字 -> 半角英字 table.update ALPHABET when 'R' # 半角英字 -> 全角英字 table.update ALPHABET.invert when 's' # 全角スペース -> 半角スペース table.update SPACE when 'S' # 半角スペース -> 全角スペース table.update SPACE.invert when 'a' # 全角英数字 -> 半角英数字 table.update convert_tables(['n','r',]) table.update SYMBOL when 'A' # 半角英数字 -> 全角英数字 table.update convert_tables(['N','R',]) table.update SYMBOL.invert table.update SYMBOL_INVERT when 'k' # 全角カタカナ -> 半角カタカナ table.update ZENKAKU_KATAKANA_HANKAKU table.update ZENKAKU_DAKUTEN_KATAKANA_HANKAKU table.update ZENKAKU_SYMBOL when 'K' # 全角カタカナ -> 半角カタカナ table.update ZENKAKU_KATAKANA_HANKAKU.invert table.update ZENKAKU_DAKUTEN_KATAKANA_HANKAKU.invert if opt.find{ |o| o == 'V' } table.update ZENKAKU_SYMBOL.invert table.update ZENKAKU_KATAKANA_SYMBOL.invert when 'h' # 全角ひらがな -> 半角カタカナ table.update ZENKAKU_HIRAGANA_HANKAKU table.update ZENKAKU_DAKUTEN_HIRAGANA_HANKAKU table.update ZENKAKU_SYMBOL when 'H' # 半角カタカナ -> 全角ひらがな table.update ZENKAKU_HIRAGANA_HANKAKU.invert table.update ZENKAKU_DAKUTEN_HIRAGANA_HANKAKU.invert if opt.find{ |o| o == 'V' } table.update ZENKAKU_SYMBOL.invert table.update ZENKAKU_HIRAGANA_SYMBOL.invert when 'c' # 全角カタカナ -> 全角ひらがな table.update KATAHIRA when 'C' # 全角ひらがな -> 全角カタカナ table.update KATAHIRA.invert when 'V' # do nothing else raise ArgumentError end end table.freeze end |
.parse_option(opt) ⇒ Object
28 29 30 31 32 |
# File 'lib/kana/converter.rb', line 28 def self.parse_option opt opt.split(//).uniq.sort.each do |c| raise ArgumentError unless VALID_OPTION.include?(c) end end |