gren 1.0.0 → 1.0.1

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.
@@ -1,3 +1,9 @@
1
+ # 1.0.1 2013/04/08
2
+
3
+ * 一部ファイルを検索時にエンコードエラーが出る問題を修正
4
+ * 入力文字列、標準入力もエンコード変換するように
5
+ * Windowsプラットフォームの時はpipe?を無効に(cygwin対策)
6
+
1
7
  # 1.0.0 2013/04/06
2
8
 
3
9
  * gren
data/HISTORY.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 1.0.1 2013/04/08
2
+
3
+ * Fix encoding error
4
+ * Encode input string & stdin
5
+ * Disable pipe? in Windows environment (because cygwin)
6
+
1
7
  # 1.0.0 2013/04/06
2
8
 
3
9
  * gren
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ["ongaeshi0621@gmail.com"]
11
11
  gem.description = %q{gren is a next grep tool.}
12
12
  gem.summary = %q{gren is a next grep tool. The basis is find+grep.}
13
- gem.homepage = ""
13
+ gem.homepage = "http://gren.ongaeshi.me"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  module GrenFileTest
4
- IGNORE_FILE = /(\A#.*#\Z)|(~\Z)|(\A\.#)|(\.d\Z)|(\.map\Z)|(\.MAP\Z)/
4
+ IGNORE_FILE = /(\A#.*#\Z)|(~\Z)|(\A\.#)|(\.d\Z)|(\.map\Z)|(\.MAP\Z)|(\.xbm\Z)|(\.ppm\Z)|(\.ai\Z)|(\.png\Z)|(\.webarchive\Z)/
5
5
  IGNORE_DIR = /(\A\.svn\Z)|(\A\.git\Z)|(\ACVS\Z)/
6
6
 
7
7
  def self.ignoreDir?(fpath)
@@ -93,12 +93,16 @@ module Gren
93
93
 
94
94
  # StringIO patch
95
95
  def pipe?(io)
96
- io.instance_of?(IO) && File.pipe?(io)
96
+ !Platform.windows_os? && io.instance_of?(IO) && File.pipe?(io)
97
97
  end
98
98
 
99
99
  def downcase?(str)
100
100
  str == str.downcase
101
101
  end
102
102
 
103
+ def ruby19?
104
+ RUBY_VERSION >= '1.9.0'
105
+ end
106
+
103
107
  end
104
108
  end
@@ -69,7 +69,7 @@ module FindGrep
69
69
  strs.each do |v|
70
70
  option = 0
71
71
  option |= Regexp::IGNORECASE if (@option.ignoreCase || (!@option.caseSensitive && Util::downcase?(v)))
72
- regs << Regexp.new(v, option)
72
+ regs << Regexp.new(FindGrep::convline(v, @option.kcode), option)
73
73
  end
74
74
 
75
75
  regs
@@ -79,7 +79,11 @@ module FindGrep
79
79
  unless Util.pipe?($stdin)
80
80
  searchFromDir(stdout, @option.directory, 0)
81
81
  else
82
- searchData(stdout, $stdin.read.split("\n"), nil)
82
+ begin
83
+ searchData(stdout, FindGrep::convline($stdin.read, @option.kcode).split($/), nil)
84
+ rescue ArgumentError
85
+ stdout.puts "invalid byte sequence : $stdin"
86
+ end
83
87
  end
84
88
 
85
89
  @result.time_stop
@@ -109,37 +113,7 @@ module FindGrep
109
113
  end
110
114
  end
111
115
 
112
- def and_expression(key, list)
113
- sub = nil
114
-
115
- list.each do |word|
116
- e = key =~ word
117
- if sub.nil?
118
- sub = e
119
- else
120
- sub &= e
121
- end
122
- end
123
-
124
- sub
125
- end
126
-
127
- def suffix_expression(record)
128
- sub = nil
129
-
130
- @option.suffixs.each do |word|
131
- e = record.suffix =~ word
132
- if sub.nil?
133
- sub = e
134
- else
135
- sub |= e
136
- end
137
- end
138
-
139
- sub
140
- end
141
- private :suffix_expression
142
-
116
+ private
143
117
 
144
118
  def searchFromDir(stdout, dir, depth)
145
119
  if (@option.depth != -1 && depth > @option.depth)
@@ -229,7 +203,11 @@ module FindGrep
229
203
  @result.search_files << fpath_disp if (@option.debugMode)
230
204
 
231
205
  open(fpath, "r") do |file|
232
- searchData(stdout, file2data(file), fpath_disp)
206
+ begin
207
+ searchData(stdout, file2data(file), fpath_disp)
208
+ rescue ArgumentError
209
+ stdout.puts "invalid byte sequence : #{fpath}"
210
+ end
233
211
  end
234
212
  end
235
213
  private :searchFile
@@ -264,20 +242,37 @@ module FindGrep
264
242
  private :searchData
265
243
 
266
244
  def file2data(file)
267
- data = file.read
245
+ FindGrep::file2lines(file, @option.kcode)
246
+ end
247
+
248
+ def self.file2lines(file, kcode)
249
+ convline(file.read, kcode).split($/)
250
+ end
268
251
 
269
- if (@option.kcode != Kconv::NOCONV)
270
- file_kcode = Kconv::guess(data)
252
+ def self.convline(line, kcode)
253
+ if Util::ruby19?
254
+ # @memo ファイルエンコーディングに相違が起きている可能性があるため対策
255
+ # 本当はファイルを開く時にエンコーディングを指定するのが正しい
271
256
 
272
- if (file_kcode != @option.kcode)
273
- # puts "encode!! #{fpath} : #{@option.kcode} <- #{file_kcode}"
274
- data = data.kconv(@option.kcode, file_kcode)
257
+ # 方法1 : 強制的にバイナリ化
258
+ # line.force_encoding("Binary")
259
+ # line = line.kconv(kcode)
260
+
261
+ # 方法2 : 入力エンコーディングを強制的に指定
262
+ line.kconv(kcode, Kconv::guess(line))
263
+ else
264
+ if (kcode != Kconv::NOCONV)
265
+ file_kcode = Kconv::guess(line)
266
+
267
+ if (file_kcode != kcode)
268
+ # puts "encode!! #{fpath} : #{kcode} <- #{file_kcode}"
269
+ line = line.kconv(kcode, file_kcode)
275
270
  end
276
271
  end
277
-
278
- data = data.split("\n");
272
+
273
+ line
274
+ end
279
275
  end
280
- private :file2data
281
276
 
282
277
  def match?(line)
283
278
  match_datas = []
@@ -1,3 +1,3 @@
1
1
  module Gren
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gren
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
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: 2013-04-06 00:00:00.000000000 Z
12
+ date: 2013-04-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: termcolor
16
- requirement: &2152930480 !ruby/object:Gem::Requirement
16
+ requirement: &2157299740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 1.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152930480
24
+ version_requirements: *2157299740
25
25
  description: gren is a next grep tool.
26
26
  email:
27
27
  - ongaeshi0621@gmail.com
@@ -60,7 +60,7 @@ files:
60
60
  - test/test_gren_util.rb
61
61
  - test/test_helper.rb
62
62
  - test/test_string_snip.rb
63
- homepage: ''
63
+ homepage: http://gren.ongaeshi.me
64
64
  licenses: []
65
65
  post_install_message:
66
66
  rdoc_options: []