gren 0.1.3 → 0.1.4
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.
- data/Manifest.txt +22 -18
- data/bin/gren +1 -1
- data/lib/gren.rb +1 -1
- data/lib/gren/cli.rb +1 -0
- data/lib/gren/findgrep.rb +12 -21
- data/lib/gren/util.rb +39 -0
- data/lib/string_snip.rb +61 -0
- data/script/console +0 -0
- data/script/destroy +0 -0
- data/script/generate +0 -0
- data/test/test_gren_util.rb +32 -0
- data/test/test_helper.rb +0 -1
- data/test/test_string_snip.rb +29 -0
- metadata +11 -5
data/Manifest.txt
CHANGED
@@ -1,18 +1,22 @@
|
|
1
|
-
History.txt
|
2
|
-
Manifest.txt
|
3
|
-
PostInstall.txt
|
4
|
-
README.rdoc
|
5
|
-
Rakefile
|
6
|
-
bin/gren
|
7
|
-
lib/gren.rb
|
8
|
-
lib/gren/cli.rb
|
9
|
-
lib/gren/findgrep.rb
|
10
|
-
lib/gren/result.rb
|
11
|
-
lib/
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
script/
|
16
|
-
|
17
|
-
|
18
|
-
test/
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
PostInstall.txt
|
4
|
+
README.rdoc
|
5
|
+
Rakefile
|
6
|
+
bin/gren
|
7
|
+
lib/gren.rb
|
8
|
+
lib/gren/cli.rb
|
9
|
+
lib/gren/findgrep.rb
|
10
|
+
lib/gren/result.rb
|
11
|
+
lib/gren/util.rb
|
12
|
+
lib/platform.rb
|
13
|
+
lib/string_snip.rb
|
14
|
+
rake_rdoc_custom.rb
|
15
|
+
script/console
|
16
|
+
script/destroy
|
17
|
+
script/generate
|
18
|
+
test/test_gren.rb
|
19
|
+
test/test_gren_cli.rb
|
20
|
+
test/test_gren_util.rb
|
21
|
+
test/test_helper.rb
|
22
|
+
test/test_string_snip.rb
|
data/bin/gren
CHANGED
data/lib/gren.rb
CHANGED
data/lib/gren/cli.rb
CHANGED
@@ -23,6 +23,7 @@ module Gren
|
|
23
23
|
opt.on('--if REGEXP', '--ignore-file REGEXP', 'Ignore file pattern. (Enable multiple call)') {|v| option.ignoreFiles << v}
|
24
24
|
opt.on('--id REGEXP', '--ignore-dir REGEXP', 'Ignore dir pattern. (Enable multiple call)') {|v| option.ignoreDirs << v}
|
25
25
|
opt.on('-e ENCODE', '--encode ENCODE', 'Specify encode(none, auto, jis, sjis, euc, ascii, utf8, utf16). Default is "auto"') {|v| setupEncodeOption(option, v) }
|
26
|
+
opt.on('--no-snip', 'There being a long line, it does not snip.') {|v| option.noSnip = true }
|
26
27
|
opt.parse!(arguments)
|
27
28
|
|
28
29
|
# 検索オブジェクトの生成
|
data/lib/gren/findgrep.rb
CHANGED
@@ -5,12 +5,13 @@ require 'rubygems'
|
|
5
5
|
require 'termcolor'
|
6
6
|
require 'kconv'
|
7
7
|
require File.join(File.dirname(__FILE__), '../platform')
|
8
|
+
require File.join(File.dirname(__FILE__), 'util')
|
8
9
|
|
9
10
|
module Gren
|
10
11
|
class FindGrep
|
11
12
|
IGNORE_FILE = /(\A#.*#\Z)|(~\Z)|(\A\.#)/
|
12
13
|
IGNORE_DIR = /(\A\.svn\Z)|(\A\.git\Z)|(\ACVS\Z)/
|
13
|
-
|
14
|
+
|
14
15
|
Option = Struct.new(:keywordsSub,
|
15
16
|
:keywordsOr,
|
16
17
|
:directory,
|
@@ -22,7 +23,8 @@ module Gren
|
|
22
23
|
:filePatterns,
|
23
24
|
:ignoreFiles,
|
24
25
|
:ignoreDirs,
|
25
|
-
:kcode
|
26
|
+
:kcode,
|
27
|
+
:noSnip)
|
26
28
|
|
27
29
|
DEFAULT_OPTION = Option.new([],
|
28
30
|
[],
|
@@ -35,7 +37,8 @@ module Gren
|
|
35
37
|
[],
|
36
38
|
[],
|
37
39
|
[],
|
38
|
-
Platform.get_shell_kcode
|
40
|
+
Platform.get_shell_kcode,
|
41
|
+
false)
|
39
42
|
|
40
43
|
def initialize(patterns, option)
|
41
44
|
@option = option
|
@@ -83,7 +86,7 @@ module Gren
|
|
83
86
|
unless (@option.colorHighlight)
|
84
87
|
stdout.puts
|
85
88
|
else
|
86
|
-
stdout.puts
|
89
|
+
stdout.puts HighLine::REVERSE + "------------------------------------------------------------" + HighLine::CLEAR
|
87
90
|
end
|
88
91
|
|
89
92
|
@result.print(stdout)
|
@@ -190,16 +193,13 @@ module Gren
|
|
190
193
|
result, match_datas = match?(line)
|
191
194
|
|
192
195
|
if ( result )
|
196
|
+
header = "#{fpath_disp}:#{index + 1}:"
|
197
|
+
line = Util::snip(line, match_datas) unless (@option.noSnip)
|
198
|
+
|
193
199
|
unless (@option.colorHighlight)
|
194
|
-
stdout.puts
|
200
|
+
stdout.puts header + line
|
195
201
|
else
|
196
|
-
header
|
197
|
-
|
198
|
-
begin
|
199
|
-
stdout.puts TermColor.parse("<34>#{header}</34>:") + coloring(line, match_datas)
|
200
|
-
rescue REXML::ParseException
|
201
|
-
stdout.puts header + line
|
202
|
-
end
|
202
|
+
stdout.puts HighLine::BLUE + header + HighLine::CLEAR + Util::coloring(line, match_datas)
|
203
203
|
end
|
204
204
|
|
205
205
|
unless match_file
|
@@ -248,14 +248,5 @@ module Gren
|
|
248
248
|
return result, result_match
|
249
249
|
end
|
250
250
|
private :match?
|
251
|
-
|
252
|
-
def coloring(line, match_datas)
|
253
|
-
match_datas.each do |m|
|
254
|
-
line = line.split(m[0]).join(TermColor.parse("<42>#{m[0]}</42>"))
|
255
|
-
end
|
256
|
-
line
|
257
|
-
end
|
258
|
-
private :coloring
|
259
|
-
|
260
251
|
end
|
261
252
|
end
|
data/lib/gren/util.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '../string_snip')
|
4
|
+
|
5
|
+
module Gren
|
6
|
+
class Util
|
7
|
+
MAX_LINE_SIZE = 256
|
8
|
+
HEADER_SIZE = 32
|
9
|
+
MARGIN_SIZE = 32
|
10
|
+
DELIMITER = '<<snip>>'
|
11
|
+
|
12
|
+
def self.snip(str, match_datas)
|
13
|
+
return str if (str.size <= MAX_LINE_SIZE)
|
14
|
+
|
15
|
+
ranges = []
|
16
|
+
ranges << (0..HEADER_SIZE-1)
|
17
|
+
ranges << (-HEADER_SIZE..-1)
|
18
|
+
|
19
|
+
match_datas.each do |m|
|
20
|
+
ranges << (m.begin(0)-MARGIN_SIZE..m.end(0)+MARGIN_SIZE)
|
21
|
+
end
|
22
|
+
|
23
|
+
snipper = StringSnip.new(MAX_LINE_SIZE, DELIMITER)
|
24
|
+
return snipper.snip(str, ranges)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.coloring(line, match_datas)
|
28
|
+
match_datas.each do |m|
|
29
|
+
line = line.split(m[0]).join(HighLine::ON_GREEN + m[0] + HighLine::CLEAR)
|
30
|
+
end
|
31
|
+
|
32
|
+
line = line.split(DELIMITER).join(HighLine::ON_CYAN + DELIMITER + HighLine::CLEAR)
|
33
|
+
|
34
|
+
line
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
data/lib/string_snip.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
class StringSnip
|
4
|
+
def initialize(size = 256, delimiter = '<<snip>>', pri = nil)
|
5
|
+
@size = size
|
6
|
+
@delimiter = delimiter
|
7
|
+
@pri = pri
|
8
|
+
end
|
9
|
+
|
10
|
+
def snip(str, ranges)
|
11
|
+
@str = str
|
12
|
+
@ranges = ranges
|
13
|
+
|
14
|
+
# no snip
|
15
|
+
return @str if (@str.size <= @size)
|
16
|
+
|
17
|
+
# snip
|
18
|
+
@ranges = StringSnip::ranges_conv(@ranges, @str)
|
19
|
+
@ranges = StringSnip::ranges_sort(@ranges)
|
20
|
+
@ranges = StringSnip::ranges_compound(@ranges)
|
21
|
+
|
22
|
+
# result
|
23
|
+
results = []
|
24
|
+
@ranges.each {|r| results << @str[r] }
|
25
|
+
return results.join(@delimiter)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.ranges_conv(ranges, str)
|
29
|
+
ranges.map {|i| index_conv(str, i.begin)..index_conv(str, i.end)}
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.index_conv(str, value)
|
33
|
+
if (value < 0)
|
34
|
+
str.size + value
|
35
|
+
else
|
36
|
+
value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.ranges_sort(ranges)
|
41
|
+
ranges.sort_by{|i| i.begin}
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.ranges_compound(ranges)
|
45
|
+
result = []
|
46
|
+
|
47
|
+
index = 0
|
48
|
+
while (ranges.size > 0)
|
49
|
+
if (ranges.size > 1 && ranges[0].end + 1 >= ranges[1].begin)
|
50
|
+
v1, v2 = ranges.shift(2)
|
51
|
+
ranges.unshift v1.begin..((v1.end > v2.end) ? v1.end : v2.end)
|
52
|
+
else
|
53
|
+
result << ranges.shift
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
result
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
data/script/console
CHANGED
File without changes
|
data/script/destroy
CHANGED
File without changes
|
data/script/generate
CHANGED
File without changes
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestGrenUtil < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_snip
|
8
|
+
str = "abcdefghijkmlnopqrstuvwxyz"
|
9
|
+
assert_equal(str, Gren::Util::snip(str, nil))
|
10
|
+
|
11
|
+
str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|12345678901234567890123456789012345678901234567890123456"
|
12
|
+
assert_equal(str, Gren::Util::snip(str, nil))
|
13
|
+
|
14
|
+
str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
|
15
|
+
match_datas = []
|
16
|
+
match_datas << str.match(/123456789\|/)
|
17
|
+
assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>67890123456789012345678901234561", Gren::Util::snip(str, match_datas))
|
18
|
+
|
19
|
+
str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
|
20
|
+
match_datas = []
|
21
|
+
match_datas << str.match(/123456789\|/)
|
22
|
+
match_datas << str.match(/34567/)
|
23
|
+
assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>67890123456789012345678901234561", Gren::Util::snip(str, match_datas))
|
24
|
+
|
25
|
+
str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234561"
|
26
|
+
match_datas = []
|
27
|
+
match_datas << str.match(/123456789\|/)
|
28
|
+
match_datas << str.match(/01234561/)
|
29
|
+
assert_equal("12345678901234567890123456789012<<snip>>90123456789012345678901234567890123456789|123456789012345678901234567890123<<snip>>8901234567890123456789012345678901234561", Gren::Util::snip(str, match_datas))
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestStringSnip < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
end
|
6
|
+
|
7
|
+
def test_ranges_compound
|
8
|
+
ranges = [0..7, 8..232, 121..150, 248..255]
|
9
|
+
assert_equal(StringSnip.ranges_compound(ranges), [0..232, 248..255])
|
10
|
+
|
11
|
+
ranges = [10..20, 22..30, 33..40]
|
12
|
+
assert_equal(StringSnip.ranges_compound(ranges), [10..20, 22..30, 33..40])
|
13
|
+
|
14
|
+
ranges = [10..30, 20..30, 30..40]
|
15
|
+
assert_equal(StringSnip.ranges_compound(ranges), [10..40])
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_string_snip
|
19
|
+
str = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789|12345678901234567890123456789012345678901234567890123456"
|
20
|
+
|
21
|
+
snipper = StringSnip.new
|
22
|
+
snip_str = snipper.snip(str, [0..7, -8..-1])
|
23
|
+
assert_equal(snip_str, str)
|
24
|
+
|
25
|
+
snipper = StringSnip.new(64)
|
26
|
+
snip_str = snipper.snip(str, [-8..-1, 10..20, 0..7])
|
27
|
+
assert_equal(snip_str, "12345678<<snip>>12345678901<<snip>>90123456")
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- ongaeshi
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-08-
|
17
|
+
date: 2010-08-15 00:00:00 +09:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -55,8 +55,8 @@ dependencies:
|
|
55
55
|
segments:
|
56
56
|
- 2
|
57
57
|
- 6
|
58
|
-
-
|
59
|
-
version: 2.6.
|
58
|
+
- 1
|
59
|
+
version: 2.6.1
|
60
60
|
type: :development
|
61
61
|
version_requirements: *id003
|
62
62
|
description: gren is a next grep tool.
|
@@ -82,14 +82,18 @@ files:
|
|
82
82
|
- lib/gren/cli.rb
|
83
83
|
- lib/gren/findgrep.rb
|
84
84
|
- lib/gren/result.rb
|
85
|
+
- lib/gren/util.rb
|
85
86
|
- lib/platform.rb
|
87
|
+
- lib/string_snip.rb
|
86
88
|
- rake_rdoc_custom.rb
|
87
89
|
- script/console
|
88
90
|
- script/destroy
|
89
91
|
- script/generate
|
90
92
|
- test/test_gren.rb
|
91
93
|
- test/test_gren_cli.rb
|
94
|
+
- test/test_gren_util.rb
|
92
95
|
- test/test_helper.rb
|
96
|
+
- test/test_string_snip.rb
|
93
97
|
has_rdoc: true
|
94
98
|
homepage: http://ongaeshi.github.com/gren
|
95
99
|
licenses: []
|
@@ -124,4 +128,6 @@ summary: gren is a next grep tool.
|
|
124
128
|
test_files:
|
125
129
|
- test/test_gren.rb
|
126
130
|
- test/test_gren_cli.rb
|
131
|
+
- test/test_gren_util.rb
|
127
132
|
- test/test_helper.rb
|
133
|
+
- test/test_string_snip.rb
|