gimchi 0.1.8 → 0.1.9

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.
@@ -71,10 +71,16 @@ kc.partial? # true
71
71
  kc = ko.korean_char "한"
72
72
 
73
73
  # Array of Gimchi::Korean::Char's
74
- arr = ko.dissect '이것은 한글입니다.'
74
+ arr = ko.convert '이것은 한글입니다.'
75
75
  # [이, 것, 은, " ", 한, 글, 입, 니, 다, "."]
76
76
 
77
77
  arr[0].class # Gimchi::Korean::Char
78
+
79
+ # Dissects given String
80
+ arr = ko.dissect '이것은 한글입니다.'
81
+ # ["ㅇ", "ㅣ", "ㄱ", "ㅓ", "ㅅ", "ㅇ", "ㅡ", "ㄴ", " ",
82
+ # "H", "a", "n", "g", "u", "l", " ", "ㅇ", "ㅣ", "ㅂ",
83
+ # "ㄴ", "ㅣ", "ㄷ", "ㅏ", "."]
78
84
  ```
79
85
 
80
86
  ### 숫자 읽기
@@ -70,10 +70,16 @@ kc.partial? # true
70
70
  kc = ko.korean_char "한"
71
71
 
72
72
  # Array of Gimchi::Korean::Char's
73
- arr = ko.dissect '이것은 한글입니다.'
73
+ arr = ko.convert '이것은 한글입니다.'
74
74
  # [이, 것, 은, " ", 한, 글, 입, 니, 다, "."]
75
75
 
76
76
  arr[0].class # Gimchi::Korean::Char
77
+
78
+ # Dissects given String
79
+ arr = ko.dissect '이것은 한글입니다.'
80
+ # ["ㅇ", "ㅣ", "ㄱ", "ㅓ", "ㅅ", "ㅇ", "ㅡ", "ㄴ", " ",
81
+ # "H", "a", "n", "g", "u", "l", " ", "ㅇ", "ㅣ", "ㅂ",
82
+ # "ㄴ", "ㅣ", "ㄷ", "ㅏ", "."]
77
83
  ```
78
84
 
79
85
  ### Reading numbers in Korean
@@ -6,4 +6,6 @@ require 'gimchi/korean'
6
6
  require 'gimchi/char'
7
7
  require 'gimchi/pronouncer'
8
8
 
9
- require 'gimchi/patch_1.8' if RUBY_VERSION =~ /^1.8/
9
+ if RUBY_VERSION =~ /^1\.8\./
10
+ require 'gimchi/patch_1.8'
11
+ end
@@ -51,7 +51,7 @@ class Korean
51
51
  # Checks if the given character is a korean character.
52
52
  # @param [String] ch A string of size 1
53
53
  def korean_char? ch
54
- raise ArgumentError.new('Lengthy input') if ch.length > 1
54
+ raise ArgumentError.new('Lengthy input') if str_length(ch) > 1
55
55
 
56
56
  complete_korean_char?(ch) ||
57
57
  (chosungs + jungsungs + jongsungs).include?(ch)
@@ -62,7 +62,7 @@ class Korean
62
62
  # "Complete" Korean character must have chosung and jungsung, with optional jongsung.
63
63
  # @param [String] ch A string of size 1
64
64
  def complete_korean_char? ch
65
- raise ArgumentError.new('Lengthy input') if ch.length > 1
65
+ raise ArgumentError.new('Lengthy input') if str_length(ch) > 1
66
66
 
67
67
  # Range of Korean chracters in Unicode 2.0: AC00(가) ~ D7A3(힣)
68
68
  ch.unpack('U').all? { | c | c >= 0xAC00 && c <= 0xD7A3 }
@@ -71,9 +71,18 @@ class Korean
71
71
  # Splits the given string into an array of Korean::Char's and Strings of length 1.
72
72
  # @param [String] str Input string.
73
73
  # @return [Array] Mixed array of Korean::Char instances and Strings of length 1 (for non-korean characters)
74
- def dissect str
74
+ def convert str
75
75
  str.each_char.map { |c|
76
- korean_char?(c) ? Korean::Char.new(self, c) : c
76
+ korean_char?(c) ? kchar(c) : c
77
+ }
78
+ end
79
+
80
+ # Splits the given string into an array of Korean character components
81
+ # @param [String] str Input string.
82
+ # @return [Array] Array of Korean character components
83
+ def dissect str
84
+ str.each_char.inject([]) { |arr, c|
85
+ arr += korean_char?(c) ? kchar(c).to_a.compact : [c]
77
86
  }
78
87
  end
79
88
 
@@ -155,7 +164,7 @@ class Korean
155
164
  romanization = ""
156
165
 
157
166
  romanize_chunk = lambda do | chunk |
158
- dissect(chunk).each do | kc |
167
+ convert(chunk).each do | kc |
159
168
  kc.to_a.each_with_index do | comp, idx |
160
169
  next if comp.nil?
161
170
  comp = rdata[idx][comp] || comp
@@ -187,6 +196,10 @@ class Korean
187
196
  end
188
197
 
189
198
  private
199
+ def str_length str
200
+ str.length
201
+ end
202
+
190
203
  def read_number_sub num, next_char
191
204
  nconfig = config['number']
192
205
 
@@ -2,25 +2,6 @@ $KCODE = 'U'
2
2
 
3
3
  module Gimchi
4
4
  class Korean
5
- # Checks if the given character is a korean character.
6
- # @param [String] ch A string of size 1
7
- def korean_char? ch
8
- raise ArgumentError.new('Lengthy input') if str_length(ch) > 1
9
-
10
- complete_korean_char?(ch) ||
11
- (chosungs + jungsungs + jongsungs).include?(ch)
12
- end
13
-
14
- # Checks if the given character is a "complete" korean character.
15
- # "Complete" Korean character must have chosung and jungsung, with optional jongsung.
16
- # @param [String] ch A string of size 1
17
- def complete_korean_char? ch
18
- raise ArgumentError.new('Lengthy input') if str_length(ch) > 1
19
-
20
- # Range of Korean chracters in Unicode 2.0: AC00(가) ~ D7A3(힣)
21
- ch.unpack('U').all? { | c | c >= 0xAC00 && c <= 0xD7A3 }
22
- end
23
-
24
5
  private
25
6
  def str_length str
26
7
  str.scan(/./mu).length
@@ -17,7 +17,7 @@ class Korean
17
17
  (options[:pronounce_each_char] ? '1' : '2')] - options[:except]
18
18
 
19
19
  # Dissecting
20
- @chars = @korean.dissect str
20
+ @chars = @korean.convert str
21
21
  @orig_chars = @chars.dup
22
22
 
23
23
  # Padding
@@ -299,7 +299,7 @@ class Korean
299
299
 
300
300
  word = @kc.to_s + @next_kc.to_s
301
301
  if map.keys.include? word
302
- new_char = @korean.dissect(map[word].scan(/./mu)[1])[0]
302
+ new_char = @korean.kchar(map[word].scan(/./mu)[1])
303
303
  @next_kc.chosung = new_char.chosung
304
304
  @next_kc.jongsung = new_char.jongsung
305
305
 
@@ -52,10 +52,19 @@ class TestGimchi < Test::Unit::TestCase
52
52
  assert_raise(ArgumentError) { ko.korean_char?('두자') }
53
53
  end
54
54
 
55
- def test_dissect
55
+ def test_dissect
56
56
  ko = Gimchi::Korean.new
57
57
 
58
- arr = ko.dissect '이것은 한글입니다.'
58
+ arr = ko.dissect '이것은 Hangul 입니다.'
59
+ assert_equal ["ㅇ", "ㅣ", "ㄱ", "ㅓ", "ㅅ", "ㅇ", "ㅡ", "ㄴ", " ",
60
+ "H", "a", "n", "g", "u", "l", " ", "ㅇ", "ㅣ", "ㅂ",
61
+ "ㄴ", "ㅣ", "ㄷ", "ㅏ", "."], arr
62
+ end
63
+
64
+ def test_convert
65
+ ko = Gimchi::Korean.new
66
+
67
+ arr = ko.convert '이것은 한글입니다.'
59
68
  # [이, 것, 은, " ", 한, 글, 입, 니, 다, "."]
60
69
 
61
70
  assert_equal 10, arr.length
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gimchi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-02 00:00:00.000000000 Z
12
+ date: 2012-02-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &2152021800 !ruby/object:Gem::Requirement
16
+ requirement: &2158357040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152021800
24
+ version_requirements: *2158357040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: jeweler
27
- requirement: &2152177100 !ruby/object:Gem::Requirement
27
+ requirement: &2158358840 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.5.2
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2152177100
35
+ version_requirements: *2158358840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rcov
38
- requirement: &2152174620 !ruby/object:Gem::Requirement
38
+ requirement: &2158315180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152174620
46
+ version_requirements: *2158315180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: ansi
49
- requirement: &2152190900 !ruby/object:Gem::Requirement
49
+ requirement: &2154666280 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.2.2
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152190900
57
+ version_requirements: *2154666280
58
58
  description: Gimchi knows how to pronounce Korean strings and how to write them in
59
59
  roman alphabet.
60
60
  email: junegunn.c@gmail.com
@@ -93,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
93
  version: '0'
94
94
  segments:
95
95
  - 0
96
- hash: -4230473525462168510
96
+ hash: -4061568131035276090
97
97
  required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements:
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  version: '0'
103
103
  requirements: []
104
104
  rubyforge_project:
105
- rubygems_version: 1.8.10
105
+ rubygems_version: 1.8.15
106
106
  signing_key:
107
107
  specification_version: 3
108
108
  summary: Gimchi reads Korean.