glark 1.9.0 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/glark +2 -2
- data/lib/glark.rb +1 -1
- data/lib/glark/app/app.rb +48 -0
- data/lib/glark/app/help.rb +103 -0
- data/lib/glark/app/info/options.rb +84 -0
- data/lib/glark/app/options.rb +201 -0
- data/lib/glark/app/rcfile.rb +49 -0
- data/lib/glark/app/runner.rb +140 -0
- data/lib/glark/app/spec.rb +19 -0
- data/lib/glark/input/filter/criteria_opts.rb +41 -0
- data/lib/glark/input/filter/dir_criteria_opts.rb +37 -0
- data/lib/glark/input/filter/file_criteria_opts.rb +33 -0
- data/lib/glark/input/filter/filter.rb +59 -0
- data/lib/glark/input/filter/options.rb +171 -0
- data/lib/glark/input/options.rb +120 -0
- data/lib/glark/input/range.rb +104 -0
- data/lib/glark/input/spec.rb +39 -0
- data/lib/glark/io/file/archive_file.rb +64 -0
- data/lib/glark/io/file/binary_file.rb +19 -0
- data/lib/glark/io/file/file.rb +57 -0
- data/lib/glark/io/file/gz_file.rb +21 -0
- data/lib/glark/io/file/tar_file.rb +35 -0
- data/lib/glark/io/file/tar_gz_file.rb +52 -0
- data/lib/glark/io/file/zip_file.rb +39 -0
- data/lib/glark/match/and.rb +83 -0
- data/lib/glark/match/and_distance.rb +58 -0
- data/lib/glark/match/compound.rb +34 -0
- data/lib/glark/match/expression.rb +63 -0
- data/lib/glark/match/factory.rb +173 -0
- data/lib/glark/match/ior.rb +20 -0
- data/lib/glark/match/options.rb +74 -0
- data/lib/glark/match/or.rb +41 -0
- data/lib/glark/match/re.rb +81 -0
- data/lib/glark/match/re_factory.rb +44 -0
- data/lib/glark/match/spec.rb +59 -0
- data/lib/glark/match/xor.rb +20 -0
- data/lib/glark/output/binary_file_summary.rb +17 -0
- data/lib/glark/output/common.rb +43 -0
- data/lib/glark/output/context.rb +57 -0
- data/lib/glark/output/count.rb +26 -0
- data/lib/glark/output/file_header.rb +20 -0
- data/lib/glark/output/file_name_only.rb +35 -0
- data/lib/glark/output/formatted.rb +22 -0
- data/lib/glark/output/glark_count.rb +23 -0
- data/lib/glark/output/glark_format.rb +62 -0
- data/lib/glark/output/glark_lines.rb +36 -0
- data/lib/glark/output/grep_count.rb +18 -0
- data/lib/glark/output/grep_lines.rb +42 -0
- data/lib/glark/output/line_status.rb +46 -0
- data/lib/glark/output/lines.rb +100 -0
- data/lib/glark/output/match_list.rb +15 -0
- data/lib/glark/output/options.rb +103 -0
- data/lib/glark/output/results.rb +23 -0
- data/lib/glark/output/spec.rb +105 -0
- data/lib/glark/output/unfiltered_lines.rb +28 -0
- data/lib/glark/util/colors/options.rb +143 -0
- data/lib/glark/util/colors/spec.rb +21 -0
- data/lib/glark/util/highlight.rb +108 -0
- data/lib/glark/util/io/depth.rb +29 -0
- data/lib/glark/util/io/fileset.rb +162 -0
- data/lib/glark/util/io/filter/criteria.rb +49 -0
- data/lib/glark/util/io/filter/filter.rb +10 -0
- data/lib/glark/util/io/lines.rb +117 -0
- data/lib/glark/util/option.rb +34 -0
- data/lib/glark/util/options.rb +12 -0
- data/lib/glark/util/optutil.rb +69 -0
- data/lib/glark/util/timestamper.rb +18 -0
- data/man/glark.1 +1134 -0
- data/test/glark/app/and_test.rb +82 -0
- data/test/glark/app/compound_test.rb +33 -0
- data/test/glark/app/context_test.rb +43 -0
- data/test/glark/app/count_test.rb +89 -0
- data/test/glark/app/dump_test.rb +16 -0
- data/test/glark/app/expression_file_test.rb +22 -0
- data/test/glark/app/extended_regexp_test.rb +17 -0
- data/test/glark/app/extract_matches_test.rb +27 -0
- data/test/glark/app/files_with_match_test.rb +32 -0
- data/test/glark/app/files_without_match_test.rb +26 -0
- data/test/glark/app/filter_test.rb +118 -0
- data/test/glark/app/highlight_test.rb +78 -0
- data/test/glark/app/ignore_case_test.rb +22 -0
- data/test/glark/app/invert_test.rb +49 -0
- data/test/glark/app/ior_test.rb +21 -0
- data/test/glark/app/label_test.rb +28 -0
- data/test/glark/app/line_number_color_test.rb +42 -0
- data/test/glark/app/line_numbers_test.rb +42 -0
- data/test/glark/app/match_limit_test.rb +49 -0
- data/test/glark/app/options_test.rb +722 -0
- data/test/glark/app/range_test.rb +101 -0
- data/test/glark/app/rcfile_test.rb +113 -0
- data/test/glark/app/record_separator_test.rb +32 -0
- data/test/glark/app/regexp_test.rb +48 -0
- data/test/glark/app/tc.rb +92 -0
- data/test/glark/app/text_color_test.rb +31 -0
- data/test/glark/app/whole_lines_test.rb +17 -0
- data/test/glark/app/whole_words_test.rb +42 -0
- data/test/glark/app/xor_test.rb +19 -0
- data/test/glark/input/binary_file_test.rb +0 -0
- data/test/glark/input/directory_test.rb +202 -0
- data/test/glark/input/dirname_test.rb +69 -0
- data/test/glark/input/exclude_matching_test.rb +20 -0
- data/test/glark/input/ext_test.rb +65 -0
- data/test/glark/input/filter/criteria_test.rb +91 -0
- data/test/glark/input/filter/filter_spec_test.rb +27 -0
- data/test/glark/input/filter/filter_test.rb +21 -0
- data/test/glark/input/name_test.rb +75 -0
- data/test/glark/input/path_test.rb +72 -0
- data/test/glark/input/range_test.rb +82 -0
- data/test/glark/input/size_limit_test.rb +51 -0
- data/test/glark/input/split_as_path_test.rb +28 -0
- data/test/glark/match_test.rb +192 -0
- data/test/glark/resources.rb +21 -0
- data/test/glark/tc.rb +37 -0
- data/test/resources/add.rb +10 -0
- data/test/resources/echo.rb +2 -0
- data/test/resources/greet.rb +13 -0
- metadata +198 -28
- data/README +0 -0
- data/bin/jlark +0 -63
- data/lib/glark/expression.rb +0 -440
- data/lib/glark/exprfactory.rb +0 -248
- data/lib/glark/glark.rb +0 -297
- data/lib/glark/help.rb +0 -85
- data/lib/glark/input.rb +0 -183
- data/lib/glark/options.rb +0 -757
- data/lib/glark/output.rb +0 -266
- data/test/lib/glark/glark_test.rb +0 -317
- data/test/lib/glark/options_test.rb +0 -891
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/output/common'
|
6
|
+
|
7
|
+
class Count < Common
|
8
|
+
def display_matches?
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
def write_count ct
|
13
|
+
if @show_file_name
|
14
|
+
print_file_name
|
15
|
+
end
|
16
|
+
print_count ct
|
17
|
+
end
|
18
|
+
|
19
|
+
def process_end lnum
|
20
|
+
if @invert_match
|
21
|
+
write_count @file.get_lines.size - @count
|
22
|
+
elsif matched?
|
23
|
+
write_count @count
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/util/highlight'
|
6
|
+
|
7
|
+
class FileHeader
|
8
|
+
include Loggable, Highlight
|
9
|
+
|
10
|
+
def initialize name, highlighter
|
11
|
+
@name = name
|
12
|
+
@highlighter = highlighter
|
13
|
+
end
|
14
|
+
|
15
|
+
def print out
|
16
|
+
name = @name.to_s
|
17
|
+
fname = @highlighter ? adorn(@highlighter, name) : name
|
18
|
+
out.puts fname
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/output/common'
|
6
|
+
|
7
|
+
class FileNameOnly < Common
|
8
|
+
def initialize fname, spec
|
9
|
+
super
|
10
|
+
@write_null = spec.write_null
|
11
|
+
end
|
12
|
+
|
13
|
+
def at_match_limit?
|
14
|
+
@count > 0
|
15
|
+
end
|
16
|
+
|
17
|
+
def display_matches?
|
18
|
+
false
|
19
|
+
end
|
20
|
+
|
21
|
+
def print_file_name
|
22
|
+
if @write_null
|
23
|
+
@out.print @file.fname
|
24
|
+
@out.print "\0"
|
25
|
+
else
|
26
|
+
@out.puts @file.fname
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def process_end lnum
|
31
|
+
if matched? != @invert_match
|
32
|
+
print_file_name
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
# Output that has (possibly) been reformatted, i.e., highlighting of regular
|
6
|
+
# expressions.
|
7
|
+
|
8
|
+
require 'glark/io/file/file'
|
9
|
+
require 'glark/output/results'
|
10
|
+
|
11
|
+
class Formatted < Results
|
12
|
+
attr_reader :formatted
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
super
|
16
|
+
@formatted = []
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_line_to_print lnum
|
20
|
+
@formatted[lnum] || @file.get_line(lnum)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/output/count'
|
6
|
+
|
7
|
+
module Glark
|
8
|
+
class Count < ::Count
|
9
|
+
def initialize fname, spec
|
10
|
+
super
|
11
|
+
@fname_highlighter = spec.highlight && spec.file_highlight
|
12
|
+
end
|
13
|
+
|
14
|
+
def print_file_name
|
15
|
+
file_header = FileHeader.new displayed_name, @fname_highlighter
|
16
|
+
file_header.print @out
|
17
|
+
end
|
18
|
+
|
19
|
+
def print_count ct
|
20
|
+
@out.puts " " + ct.to_s
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/output/file_header'
|
6
|
+
require 'glark/util/highlight'
|
7
|
+
|
8
|
+
module Glark; end
|
9
|
+
|
10
|
+
module Glark
|
11
|
+
module Format
|
12
|
+
include Loggable, Highlight
|
13
|
+
|
14
|
+
def initialize file, spec
|
15
|
+
@file_header = nil # not nil after file header written
|
16
|
+
@fname_highlighter = spec.highlight && spec.file_highlight
|
17
|
+
@lnum_highlighter = spec.line_number_highlight
|
18
|
+
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def show_file_header
|
23
|
+
if @show_file_name && @file_header.nil?
|
24
|
+
@file_header = FileHeader.new displayed_name, @fname_highlighter
|
25
|
+
@file_header.print @out
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def print_line_number lnum
|
30
|
+
if @lnum_highlighter
|
31
|
+
lnumstr = (lnum + 1).to_s
|
32
|
+
pad = " " * ([4 - lnumstr.length, 0].max)
|
33
|
+
@out.print pad + " " + adorn(@lnum_highlighter, lnumstr) + " "
|
34
|
+
else
|
35
|
+
super
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def println ln, ch
|
40
|
+
if @show_line_numbers
|
41
|
+
print_line_number ln
|
42
|
+
end
|
43
|
+
|
44
|
+
if ch && @print_context
|
45
|
+
@out.printf "%s ", ch
|
46
|
+
end
|
47
|
+
|
48
|
+
line = get_line_to_print ln
|
49
|
+
@out.puts line
|
50
|
+
end
|
51
|
+
|
52
|
+
# prints the line, and adjusts for the fact that in our world, lines are
|
53
|
+
# 0-indexed, whereas they are displayed as if 1-indexed.
|
54
|
+
def print_line lnum, ch = nil
|
55
|
+
lnums = @file.get_region lnum
|
56
|
+
return unless lnums
|
57
|
+
lnums.each do |ln|
|
58
|
+
println ln, ch
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/output/lines'
|
6
|
+
require 'glark/output/glark_format'
|
7
|
+
|
8
|
+
# -------------------------------------------------------
|
9
|
+
# Glark output format
|
10
|
+
# -------------------------------------------------------
|
11
|
+
|
12
|
+
module Glark
|
13
|
+
class Lines < ::Lines
|
14
|
+
include Format
|
15
|
+
|
16
|
+
def initialize file, spec
|
17
|
+
super
|
18
|
+
@print_context = @after != 0 || @before != 0
|
19
|
+
end
|
20
|
+
|
21
|
+
def write_matching from, to
|
22
|
+
show_file_header
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def write_nonmatching from, to
|
27
|
+
show_file_header
|
28
|
+
super
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_match startline, endline
|
32
|
+
super
|
33
|
+
set_status startline, endline
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/output/count'
|
6
|
+
|
7
|
+
module Grep
|
8
|
+
class Count < ::Count
|
9
|
+
def print_file_name
|
10
|
+
fname = displayed_name
|
11
|
+
@out.print fname, ":"
|
12
|
+
end
|
13
|
+
|
14
|
+
def print_count ct
|
15
|
+
@out.puts ct
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/output/lines'
|
6
|
+
|
7
|
+
# -------------------------------------------------------
|
8
|
+
# Grep output format
|
9
|
+
# -------------------------------------------------------
|
10
|
+
|
11
|
+
module Grep
|
12
|
+
# This matches legacy grep, mostly. It is for running within emacs, thus, it
|
13
|
+
# does not support context or highlighting.
|
14
|
+
class Lines < ::Lines
|
15
|
+
# prints the line, and adjusts for the fact that in our world, lines are
|
16
|
+
# 0-indexed, whereas they are displayed as if 1-indexed.
|
17
|
+
def print_line lnum, ch = nil
|
18
|
+
ln = get_line_to_print lnum
|
19
|
+
return unless ln
|
20
|
+
|
21
|
+
print_file_name
|
22
|
+
if @show_line_numbers
|
23
|
+
@out.printf "%d: ", lnum + 1
|
24
|
+
end
|
25
|
+
|
26
|
+
@out.print ln
|
27
|
+
end
|
28
|
+
|
29
|
+
def print_file_name
|
30
|
+
if @show_file_name
|
31
|
+
@out.print displayed_name, ":"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_match startline, endline
|
36
|
+
super
|
37
|
+
# even with multi-line matches (--and expressions), we'll display
|
38
|
+
# only the first matching line, not the range between the matches.
|
39
|
+
set_status startline, startline
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
module Glark
|
5
|
+
class LineStatus
|
6
|
+
WRITTEN = Object.new
|
7
|
+
PRE_MATCH = '-'
|
8
|
+
MATCH = ':'
|
9
|
+
POST_MATCH = '+'
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@stati = Array.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def is_written? lnum
|
16
|
+
@stati[lnum] == WRITTEN
|
17
|
+
end
|
18
|
+
|
19
|
+
def set_as_written lnum
|
20
|
+
@stati[lnum] = WRITTEN
|
21
|
+
end
|
22
|
+
|
23
|
+
def char lnum
|
24
|
+
@stati[lnum]
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_status from, to, status
|
28
|
+
from.upto(to) do |lnum|
|
29
|
+
update_status lnum, status
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def update_status lnum, status
|
34
|
+
if @stati[lnum].nil? || (status == MATCH && @stati[lnum] != WRITTEN)
|
35
|
+
@stati[lnum] = status
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def set_match pre_match_start, match_start, match_end, post_match_end
|
40
|
+
start = [0, pre_match_start].max
|
41
|
+
set_status start, match_start - 1, PRE_MATCH
|
42
|
+
set_status match_start, match_end, MATCH
|
43
|
+
set_status match_end + 1, post_match_end, POST_MATCH
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
# Output for displayed lines.
|
6
|
+
|
7
|
+
require 'glark/io/file/file'
|
8
|
+
require 'glark/output/line_status'
|
9
|
+
require 'glark/output/common'
|
10
|
+
|
11
|
+
class Lines < Common
|
12
|
+
def initialize file, spec
|
13
|
+
super
|
14
|
+
|
15
|
+
@print_context = false
|
16
|
+
|
17
|
+
context = spec.context
|
18
|
+
@after = context && context.after
|
19
|
+
@before = context && context.before
|
20
|
+
|
21
|
+
@stati = Glark::LineStatus.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def display_matches?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def at_match_limit?
|
29
|
+
@match_limit && @count >= @match_limit
|
30
|
+
end
|
31
|
+
|
32
|
+
def displayed_name
|
33
|
+
@label || @file.fname
|
34
|
+
end
|
35
|
+
|
36
|
+
# Prints the line, which is assumed to be 0-indexed, and is thus adjusted by
|
37
|
+
# one.
|
38
|
+
def print_line_number lnum
|
39
|
+
@out.printf "%5d ", lnum + 1
|
40
|
+
end
|
41
|
+
|
42
|
+
# prints the line, and adjusts for the fact that in our world, lines are
|
43
|
+
# 0-indexed, whereas they are displayed as if 1-indexed.
|
44
|
+
def print_line lnum, ch = nil
|
45
|
+
raise "error: print_line must be implemented by an output subclass"
|
46
|
+
end
|
47
|
+
|
48
|
+
def write_matching from, to
|
49
|
+
(from .. to).each do |ln|
|
50
|
+
next unless @stati.char(ln) && !@stati.is_written?(ln)
|
51
|
+
|
52
|
+
# this used to be conditional on show_break, but no more
|
53
|
+
if from > 0 && !@stati.char(ln - 1) && @print_context
|
54
|
+
@out.puts " ---"
|
55
|
+
end
|
56
|
+
|
57
|
+
print_line ln, @stati.char(ln)
|
58
|
+
@stati.set_as_written ln
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def write_nonmatching from, to
|
63
|
+
(from .. to).each do |ln|
|
64
|
+
next if @stati.is_written?(ln) || @stati.char(ln) == ':'
|
65
|
+
print_line ln
|
66
|
+
@stati.set_as_written ln
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def write_matches from, to
|
71
|
+
if @invert_match
|
72
|
+
write_nonmatching from, to
|
73
|
+
else
|
74
|
+
write_matching from, to
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def process_end lnum
|
79
|
+
if @invert_match
|
80
|
+
write_nonmatching 0, lnum
|
81
|
+
elsif matched?
|
82
|
+
write_matching 0, lnum
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def process_match startline, endline, fromline, toline
|
87
|
+
add_match startline, endline
|
88
|
+
|
89
|
+
if display_matches?
|
90
|
+
write_matches fromline, toline
|
91
|
+
end
|
92
|
+
return at_match_limit?
|
93
|
+
end
|
94
|
+
|
95
|
+
def set_status startline, endline
|
96
|
+
fromline = [0, startline - @before].max
|
97
|
+
toline = endline + @after
|
98
|
+
@stati.set_match fromline, startline, endline, toline
|
99
|
+
end
|
100
|
+
end
|