rubysl-jcode 0.0.1 → 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 50824395dbd04c5fa597f4adee3783d5b74b81cc
4
+ data.tar.gz: 6c1029e744e020cf86889a43620a58ac4fa2797f
5
+ SHA512:
6
+ metadata.gz: 8c94dcbfb1ac117af1550ce4224f4f5185054286b49de8a3914f528b770f87fc8bc2ab3dd584756d91a79b7117815cc9f20904dffbe43e6f0938dc3d77e52572
7
+ data.tar.gz: aa7bb8609c8dc1536c857c16fdf20179bd7a6356d4fd91e8a226640a8821e08fbd3f4425fcbdf1090b26ca0ee25d4935481d1472abc63a9ab4e58f5f1544cae0
data/.gitignore CHANGED
@@ -15,4 +15,3 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- .rbx
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem update --system
4
+ - gem --version
5
+ - gem install rubysl-bundler
6
+ script: bundle exec mspec spec
7
+ rvm:
8
+ - rbx-nightly-18mode
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RubySL::Jcode
1
+ # Rubysl::Jcode
2
2
 
3
3
  TODO: Write a gem description
4
4
 
@@ -24,6 +24,6 @@ TODO: Write usage instructions here
24
24
 
25
25
  1. Fork it
26
26
  2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Added some feature'`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
28
  4. Push to the branch (`git push origin my-new-feature`)
29
29
  5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,2 +1 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ require "rubysl/jcode"
@@ -0,0 +1,2 @@
1
+ require "rubysl/jcode/jcode"
2
+ require "rubysl/jcode/version"
@@ -0,0 +1,220 @@
1
+ # jcode.rb - ruby code to handle japanese (EUC/SJIS) string
2
+
3
+ if $VERBOSE && $KCODE == "NONE"
4
+ warn "Warning: $KCODE is NONE."
5
+ end
6
+
7
+ $vsave, $VERBOSE = $VERBOSE, false
8
+ class String
9
+ warn "feel free for some warnings:\n" if $VERBOSE
10
+
11
+ def _regex_quote(str)
12
+ str.gsub(/(\\[\[\]\-\\])|\\(.)|([\[\]\\])/) do
13
+ $1 || $2 || '\\' + $3
14
+ end
15
+ end
16
+ private :_regex_quote
17
+
18
+ PATTERN_SJIS = '[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]'
19
+ PATTERN_EUC = '[\xa1-\xfe][\xa1-\xfe]'
20
+ PATTERN_UTF8 = '[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf]'
21
+
22
+ RE_SJIS = Regexp.new(PATTERN_SJIS, 0, 'n')
23
+ RE_EUC = Regexp.new(PATTERN_EUC, 0, 'n')
24
+ RE_UTF8 = Regexp.new(PATTERN_UTF8, 0, 'n')
25
+
26
+ SUCC = {}
27
+ SUCC['s'] = Hash.new(1)
28
+ for i in 0 .. 0x3f
29
+ SUCC['s'][i.chr] = 0x40 - i
30
+ end
31
+ SUCC['s']["\x7e"] = 0x80 - 0x7e
32
+ SUCC['s']["\xfd"] = 0x100 - 0xfd
33
+ SUCC['s']["\xfe"] = 0x100 - 0xfe
34
+ SUCC['s']["\xff"] = 0x100 - 0xff
35
+ SUCC['e'] = Hash.new(1)
36
+ for i in 0 .. 0xa0
37
+ SUCC['e'][i.chr] = 0xa1 - i
38
+ end
39
+ SUCC['e']["\xfe"] = 2
40
+ SUCC['u'] = Hash.new(1)
41
+ for i in 0 .. 0x7f
42
+ SUCC['u'][i.chr] = 0x80 - i
43
+ end
44
+ SUCC['u']["\xbf"] = 0x100 - 0xbf
45
+
46
+ def mbchar?
47
+ case $KCODE[0]
48
+ when ?s, ?S
49
+ self =~ RE_SJIS
50
+ when ?e, ?E
51
+ self =~ RE_EUC
52
+ when ?u, ?U
53
+ self =~ RE_UTF8
54
+ else
55
+ nil
56
+ end
57
+ end
58
+
59
+ def end_regexp
60
+ case $KCODE[0]
61
+ when ?s, ?S
62
+ /#{PATTERN_SJIS}$/on
63
+ when ?e, ?E
64
+ /#{PATTERN_EUC}$/on
65
+ when ?u, ?U
66
+ /#{PATTERN_UTF8}$/on
67
+ else
68
+ /.$/on
69
+ end
70
+ end
71
+
72
+ alias original_succ! succ!
73
+ private :original_succ!
74
+
75
+ alias original_succ succ
76
+ private :original_succ
77
+
78
+ def succ!
79
+ reg = end_regexp
80
+ if $KCODE != 'NONE' && self =~ reg
81
+ succ_table = SUCC[$KCODE[0,1].downcase]
82
+ begin
83
+ self[-1] += succ_table[self[-1]]
84
+ self[-2] += 1 if self[-1] == 0
85
+ end while self !~ reg
86
+ self
87
+ else
88
+ original_succ!
89
+ end
90
+ end
91
+
92
+ def succ
93
+ str = self.dup
94
+ str.succ! or str
95
+ end
96
+
97
+ private
98
+
99
+ def _expand_ch str
100
+ a = []
101
+ str.scan(/(?:\\(.)|([^\\]))-(?:\\(.)|([^\\]))|(?:\\(.)|(.))/m) do
102
+ from = $1 || $2
103
+ to = $3 || $4
104
+ one = $5 || $6
105
+ if one
106
+ a.push one
107
+ elsif from.length != to.length
108
+ next
109
+ elsif from.length == 1
110
+ from[0].upto(to[0]) { |c| a.push c.chr }
111
+ else
112
+ from.upto(to) { |c| a.push c }
113
+ end
114
+ end
115
+ a
116
+ end
117
+
118
+ def expand_ch_hash from, to
119
+ h = {}
120
+ afrom = _expand_ch(from)
121
+ ato = _expand_ch(to)
122
+ afrom.each_with_index do |x,i| h[x] = ato[i] || ato[-1] end
123
+ h
124
+ end
125
+
126
+ HashCache = {}
127
+ TrPatternCache = {}
128
+ DeletePatternCache = {}
129
+ SqueezePatternCache = {}
130
+
131
+ public
132
+
133
+ def tr!(from, to)
134
+ return nil if from == ""
135
+ return self.delete!(from) if to == ""
136
+
137
+ pattern = TrPatternCache[from] ||= /[#{_regex_quote(from)}]/
138
+ if from[0] == ?^
139
+ last = /.$/.match(to)[0]
140
+ self.gsub!(pattern, last)
141
+ else
142
+ h = HashCache[from + "1-0" + to] ||= expand_ch_hash(from, to)
143
+ self.gsub!(pattern) do |c| h[c] end
144
+ end
145
+ end
146
+
147
+ def tr(from, to)
148
+ (str = self.dup).tr!(from, to) or str
149
+ end
150
+
151
+ def delete!(del)
152
+ return nil if del == ""
153
+ self.gsub!(DeletePatternCache[del] ||= /[#{_regex_quote(del)}]+/, '')
154
+ end
155
+
156
+ def delete(del)
157
+ (str = self.dup).delete!(del) or str
158
+ end
159
+
160
+ def squeeze!(del=nil)
161
+ return nil if del == ""
162
+ pattern =
163
+ if del
164
+ SqueezePatternCache[del] ||= /([#{_regex_quote(del)}])\1+/
165
+ else
166
+ /(.|\n)\1+/
167
+ end
168
+ self.gsub!(pattern, '\1')
169
+ end
170
+
171
+ def squeeze(del=nil)
172
+ (str = self.dup).squeeze!(del) or str
173
+ end
174
+
175
+ def tr_s!(from, to)
176
+ return self.delete!(from) if to.length == 0
177
+
178
+ pattern = SqueezePatternCache[from] ||= /([#{_regex_quote(from)}])\1*/
179
+ if from[0] == ?^
180
+ last = /.$/.match(to)[0]
181
+ self.gsub!(pattern, last)
182
+ else
183
+ h = HashCache[from + "1-0" + to] ||= expand_ch_hash(from, to)
184
+ self.gsub!(pattern) do h[$1] end
185
+ end
186
+ end
187
+
188
+ def tr_s(from, to)
189
+ (str = self.dup).tr_s!(from,to) or str
190
+ end
191
+
192
+ def chop!
193
+ self.gsub!(/(?:.|\r?\n)\z/, '')
194
+ end
195
+
196
+ def chop
197
+ (str = self.dup).chop! or str
198
+ end
199
+
200
+ def jlength
201
+ self.gsub(/[^\Wa-zA-Z_\d]/, ' ').length
202
+ end
203
+ alias jsize jlength
204
+
205
+ def jcount(str)
206
+ self.delete("^#{str}").jlength
207
+ end
208
+
209
+ def each_char
210
+ if block_given?
211
+ scan(/./m) do |x|
212
+ yield x
213
+ end
214
+ else
215
+ scan(/./m)
216
+ end
217
+ end
218
+
219
+ end
220
+ $VERBOSE = $vsave
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module Jcode
3
- VERSION = "0.0.1"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -1,22 +1,23 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/rubysl-jcode/version', __FILE__)
1
+ # coding: utf-8
2
+ require './lib/rubysl/jcode/version'
3
3
 
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Brian Shirai"]
6
- gem.email = ["brixen@gmail.com"]
7
- gem.description = %q{Ruby Standard Library - jcode}
8
- gem.summary = %q{Ruby Standard Library - jcode}
9
- gem.homepage = ""
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "rubysl-jcode"
6
+ spec.version = RubySL::Jcode::VERSION
7
+ spec.authors = ["Brian Shirai"]
8
+ spec.email = ["brixen@gmail.com"]
9
+ spec.description = %q{Ruby standard library jcode.}
10
+ spec.summary = %q{Ruby standard library jcode.}
11
+ spec.homepage = "https://github.com/rubysl/rubysl-jcode"
12
+ spec.license = "BSD"
10
13
 
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "rubysl-jcode"
15
- gem.require_paths = ["lib"]
16
- gem.version = RubySL::Jcode::VERSION
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
17
18
 
18
- gem.add_runtime_dependency "redcard", "~> 1.0"
19
-
20
- gem.add_development_dependency "rake", "~> 10.0"
21
- gem.add_development_dependency "mspec", "~> 1.5"
19
+ spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "mspec", "~> 1.5"
22
+ spec.add_development_dependency "rubysl-prettyprint", "~> 1.0"
22
23
  end
metadata CHANGED
@@ -1,118 +1,111 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rubysl-jcode
3
- version: !ruby/object:Gem::Version
4
- hash: 856480538658449761
5
- prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Brian Shirai
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-04-15 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: redcard
11
+ date: 2013-12-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
22
21
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
26
24
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 4428665182548103036
29
- segments:
30
- - 1
31
- - 0
32
- version: "1.0"
33
- type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
36
28
  name: rake
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
41
31
  - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 1510892033553700768
44
- segments:
45
- - 10
46
- - 0
47
- version: "10.0"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
48
34
  type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
51
42
  name: mspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :development
52
49
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubysl-prettyprint
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
56
59
  - - ~>
57
- - !ruby/object:Gem::Version
58
- hash: 1660815245844205030
59
- segments:
60
- - 1
61
- - 5
62
- version: "1.5"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
63
62
  type: :development
64
- version_requirements: *id003
65
- description: Ruby Standard Library - jcode
66
- email:
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ description: Ruby standard library jcode.
70
+ email:
67
71
  - brixen@gmail.com
68
72
  executables: []
69
-
70
73
  extensions: []
71
-
72
74
  extra_rdoc_files: []
73
-
74
- files:
75
+ files:
75
76
  - .gitignore
77
+ - .travis.yml
76
78
  - Gemfile
77
79
  - LICENSE
78
80
  - README.md
79
81
  - Rakefile
80
- - lib/rubysl-jcode.rb
81
- - lib/rubysl-jcode/version.rb
82
+ - lib/jcode.rb
83
+ - lib/rubysl/jcode.rb
84
+ - lib/rubysl/jcode/jcode.rb
85
+ - lib/rubysl/jcode/version.rb
82
86
  - rubysl-jcode.gemspec
83
- homepage: ""
84
- licenses: []
85
-
87
+ homepage: https://github.com/rubysl/rubysl-jcode
88
+ licenses:
89
+ - BSD
90
+ metadata: {}
86
91
  post_install_message:
87
92
  rdoc_options: []
88
-
89
- require_paths:
93
+ require_paths:
90
94
  - lib
91
- required_ruby_version: !ruby/object:Gem::Requirement
92
- none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- hash: 2002549777813010636
97
- segments:
98
- - 0
99
- version: "0"
100
- required_rubygems_version: !ruby/object:Gem::Requirement
101
- none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- hash: 2002549777813010636
106
- segments:
107
- - 0
108
- version: "0"
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
109
105
  requirements: []
110
-
111
106
  rubyforge_project:
112
- rubygems_version: 1.8.25
107
+ rubygems_version: 2.0.7
113
108
  signing_key:
114
- specification_version: 3
115
- summary: Ruby Standard Library - jcode
109
+ specification_version: 4
110
+ summary: Ruby standard library jcode.
116
111
  test_files: []
117
-
118
- has_rdoc:
@@ -1,7 +0,0 @@
1
- require "rubysl-jcode/version"
2
-
3
- module RubySL
4
- module Jcode
5
- # Your code goes here...
6
- end
7
- end