glark 1.9.0 → 1.10.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.
- 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
data/bin/glark
CHANGED
data/lib/glark.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
# An extended grep, with extended functionality including full regular
|
6
|
+
# expressions, contextual output, highlighting, detection and exclusion of
|
7
|
+
# nontext files, and complex matching criteria.
|
8
|
+
|
9
|
+
require 'glark/app/options'
|
10
|
+
require 'glark/app/runner'
|
11
|
+
|
12
|
+
module Glark
|
13
|
+
class App
|
14
|
+
def initialize
|
15
|
+
begin
|
16
|
+
Log.set_widths(-15, -40, -40)
|
17
|
+
|
18
|
+
opts = AppOptions.new
|
19
|
+
opts.run ARGV
|
20
|
+
|
21
|
+
# To get rid of the annoying stack trace on ctrl-C:
|
22
|
+
trap("INT") { abort }
|
23
|
+
|
24
|
+
if opts.info_options.explain
|
25
|
+
puts opts.match_spec.expr.explain
|
26
|
+
end
|
27
|
+
|
28
|
+
files = ARGV.size > 0 ? ARGV : [ '-' ]
|
29
|
+
runner = Runner.new opts, files
|
30
|
+
|
31
|
+
exit runner.exit_status
|
32
|
+
rescue => e
|
33
|
+
# show the message, and the stack trace only if verbose:
|
34
|
+
$stderr.puts "error: #{e}"
|
35
|
+
if Log.verbose
|
36
|
+
$stderr.puts e.backtrace
|
37
|
+
raise
|
38
|
+
else
|
39
|
+
exit 2
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
if __FILE__ == $0
|
47
|
+
Glark::App.new
|
48
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
module Glark
|
5
|
+
class Help
|
6
|
+
def show_usage
|
7
|
+
puts "Usage: glark [options] expression file..."
|
8
|
+
puts "Search for expression in each file or standard input."
|
9
|
+
puts "Example: glark --and=3 'try' 'catch' *.java"
|
10
|
+
puts ""
|
11
|
+
|
12
|
+
puts "Input:"
|
13
|
+
puts " -0[nnn] Use \\nnn as the input record separator"
|
14
|
+
puts " --before NUM[%] Restrict the search to the top % or lines"
|
15
|
+
puts " --after NUM[%] Restrict the search to after the given location"
|
16
|
+
puts " -d, --directories=ACTION Process directories as list, skip, or find (recurse)"
|
17
|
+
puts " --binary-files=TYPE Treat binary files as TYPE"
|
18
|
+
puts " --split-as-path Treat file arguments as paths, to be split into directories and files"
|
19
|
+
puts " --match-name EXPR Search only files with names (base names) matching EXPR"
|
20
|
+
puts " --not-name EXPR Ignore files with names matching EXPR"
|
21
|
+
puts " --match-path EXPR Search only files with paths (full names) matching EXPR"
|
22
|
+
puts " --not-path EXPR Ignore files with paths matching EXPR"
|
23
|
+
puts " --match-dirname EXPR Search only directories with base names matching EXPR"
|
24
|
+
puts " --not-dirname EXPR Ignore directories with names matching EXPR"
|
25
|
+
puts " --match-dirpath EXPR Search only directories with full paths matching EXPR"
|
26
|
+
puts " --not-dirpath EXPR Ignore directories with full paths matching EXPR"
|
27
|
+
puts " -M, --exclude-matching Ignore files with names matching the expression"
|
28
|
+
puts " -R, --range NUM[%],NUM[%] Restrict the search to the given range of lines per file."
|
29
|
+
puts " -r, --recurse Recurse through directories"
|
30
|
+
puts " --size-limit=SIZE Search only files no larger than SIZE"
|
31
|
+
puts ""
|
32
|
+
|
33
|
+
puts "Matching:"
|
34
|
+
puts " -a, --and=NUM EXPR1 EXPR2 Match both expressions, within NUM lines"
|
35
|
+
puts " --extended Use the given regular expression as extended"
|
36
|
+
puts " -f, --file=FILE Use the lines in the given file as expressions"
|
37
|
+
puts " -i, --ignore-case Ignore case for matching regular expressions"
|
38
|
+
puts " -o, --or EXPR1 EXPR2 Match either of the two expressions"
|
39
|
+
puts " -w, --word Match the pattern(s) with word boundaries added"
|
40
|
+
puts " -x, --line-regexp Select entire line matching pattern"
|
41
|
+
puts " --xor EXPR1 EXPR2 Match either expression, but not both"
|
42
|
+
puts ""
|
43
|
+
|
44
|
+
puts "Output:"
|
45
|
+
puts " -A, --after-context=NUM Print NUM lines of trailing context"
|
46
|
+
puts " -B, --before-context=NUM Print NUM lines of leading context"
|
47
|
+
puts " -C, -NUM, --context[=NUM] Output NUM lines of context"
|
48
|
+
puts " -c, --count Display only the match count per file"
|
49
|
+
puts " --file-color COLOR Specify the highlight color for file names"
|
50
|
+
puts " --no-filter Display the entire file, not only the matching lines"
|
51
|
+
puts " -g, --grep Produce output like the grep default"
|
52
|
+
puts " -h, --no-filename Do not display the names of matching files"
|
53
|
+
puts " -H, --with-filename Display the names of matching files"
|
54
|
+
puts " -l, --files-with-matches Print only names of matching file"
|
55
|
+
puts " -L, --files-without-match Print only names of file not matching"
|
56
|
+
puts " --label=NAME Use NAME as output file name"
|
57
|
+
puts " -n, --line-number Display line numbers"
|
58
|
+
puts " -N, --no-line-number Do not display line numbers"
|
59
|
+
puts " --line-number-color COLOR Specify the highlight color for line numbers"
|
60
|
+
puts " -m, --match-limit=NUM Find only the first NUM matches in each file"
|
61
|
+
puts " --text-color COLOR Specify the highlight color for text"
|
62
|
+
puts " -u, --highlight[=FORMAT] Enable highlighting. Format is single or multi"
|
63
|
+
puts " -U, --no-highlight Disable highlighting"
|
64
|
+
puts " -v, --invert-match Show lines not matching the expression"
|
65
|
+
puts " -y, --extract-matches Display only the matching region, not the entire line"
|
66
|
+
puts " -Z, --null In --files-with-matches mode, write file names followed by NULL"
|
67
|
+
puts ""
|
68
|
+
|
69
|
+
puts "Debugging/Errors:"
|
70
|
+
puts " --conf Write the current options in RC file format"
|
71
|
+
puts " --dump Write all options and expressions"
|
72
|
+
puts " --explain Write the expression in a more legible format"
|
73
|
+
puts " -q, --quiet Suppress warnings"
|
74
|
+
puts " -Q, --no-quiet Enable warnings"
|
75
|
+
puts " -s, --no-messages Suppress warnings"
|
76
|
+
puts " -V, --version Display version information"
|
77
|
+
puts " --verbose Display normally suppressed output"
|
78
|
+
|
79
|
+
puts ""
|
80
|
+
puts "Run gem man glark for more information. That requires the installation of the gem-man gem."
|
81
|
+
end
|
82
|
+
|
83
|
+
def show_man
|
84
|
+
pn = Pathname.new __FILE__
|
85
|
+
|
86
|
+
dir = pn
|
87
|
+
0.upto(3) do
|
88
|
+
break unless dir
|
89
|
+
dir = dir.parent
|
90
|
+
end
|
91
|
+
|
92
|
+
if dir
|
93
|
+
manfile = dir + "man/glark.1"
|
94
|
+
cmd = "gem man glark"
|
95
|
+
::IO.popen(cmd) do |io|
|
96
|
+
puts io.readlines
|
97
|
+
end
|
98
|
+
else
|
99
|
+
puts "no doc directory"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
#!ruby -w
|
3
|
+
# vim: set filetype=ruby : set sw=2
|
4
|
+
|
5
|
+
require 'glark/app/help'
|
6
|
+
require 'glark/util/options'
|
7
|
+
|
8
|
+
module Glark
|
9
|
+
PACKAGE = 'glark'
|
10
|
+
VERSION = '1.10.0'
|
11
|
+
|
12
|
+
class InfoOptions < Options
|
13
|
+
attr_reader :colors
|
14
|
+
attr_reader :explain
|
15
|
+
|
16
|
+
def initialize colors, optdata
|
17
|
+
@colors = colors
|
18
|
+
@explain = false # display a legible version of the expression
|
19
|
+
|
20
|
+
add_as_options optdata
|
21
|
+
end
|
22
|
+
|
23
|
+
def config_fields
|
24
|
+
fields = {
|
25
|
+
"known-nontext-files" => FileType.nontext_extensions.sort.join(' '),
|
26
|
+
"known-text-files" => FileType.text_extensions.sort.join(' '),
|
27
|
+
"quiet" => Log.quiet,
|
28
|
+
"verbose" => Log.verbose,
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def dump_fields
|
33
|
+
fields = {
|
34
|
+
"explain" => @explain,
|
35
|
+
"known_nontext_files" => FileType.nontext_extensions.join(", "),
|
36
|
+
"known_text_files" => FileType.text_extensions.join(", "),
|
37
|
+
"quiet" => Log.quiet,
|
38
|
+
"ruby version" => RUBY_VERSION,
|
39
|
+
"verbose" => Log.verbose,
|
40
|
+
"version" => Glark::VERSION,
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def update_fields fields
|
45
|
+
fields.each do |name, values|
|
46
|
+
case name
|
47
|
+
when "known-nontext-files"
|
48
|
+
values.last.split.each do |ext|
|
49
|
+
FileType.set_nontext ext
|
50
|
+
end
|
51
|
+
when "known-text-files"
|
52
|
+
values.last.split.each do |ext|
|
53
|
+
FileType.set_text ext
|
54
|
+
end
|
55
|
+
when "quiet"
|
56
|
+
Log.quiet = to_boolean(values.last)
|
57
|
+
when "verbose"
|
58
|
+
Log.verbose = to_boolean(values.last) ? 1 : nil
|
59
|
+
when "verbosity"
|
60
|
+
Log.verbose = values.last.to_i
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_as_options optdata
|
66
|
+
add_opt_blk(optdata, %w{ -V --version }) { show_version }
|
67
|
+
add_opt_blk(optdata, %w{ --verbose }) { Log.verbose = true }
|
68
|
+
add_opt_blk(optdata, %w{ -? --help }) { Help.new.show_usage; exit 0 }
|
69
|
+
add_opt_blk(optdata, %w{ --man }) { Help.new.show_man; exit 0 }
|
70
|
+
|
71
|
+
add_opt_true optdata, :explain, %w{ --explain }
|
72
|
+
|
73
|
+
add_opt_blk(optdata, %w{ -q -s --quiet --messages }) { Log.quiet = true }
|
74
|
+
add_opt_blk(optdata, %w{ -Q -S --no-quiet --no-messages }) { Log.quiet = false }
|
75
|
+
end
|
76
|
+
|
77
|
+
def show_version
|
78
|
+
puts Glark::PACKAGE + ", version " + Glark::VERSION
|
79
|
+
puts "Written by Jeff Pace (jeugenepace@gmail.com)."
|
80
|
+
puts "Released under the Lesser GNU Public License."
|
81
|
+
exit 0
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'riel/dir'
|
6
|
+
require 'riel/optproc'
|
7
|
+
require 'glark/app/info/options'
|
8
|
+
require 'glark/app/rcfile'
|
9
|
+
require 'glark/app/spec'
|
10
|
+
require 'glark/input/options'
|
11
|
+
require 'glark/match/options'
|
12
|
+
require 'glark/output/options'
|
13
|
+
require 'glark/util/colors/options'
|
14
|
+
require 'glark/util/options'
|
15
|
+
require 'glark/util/optutil'
|
16
|
+
|
17
|
+
module Glark
|
18
|
+
class AppOptions < AppSpec
|
19
|
+
include OptionUtil
|
20
|
+
|
21
|
+
attr_reader :colors
|
22
|
+
attr_reader :fileset
|
23
|
+
attr_reader :info_options
|
24
|
+
attr_reader :output_options
|
25
|
+
|
26
|
+
def initialize
|
27
|
+
optdata = Array.new
|
28
|
+
|
29
|
+
@colors = ColorOptions.new
|
30
|
+
|
31
|
+
@input_options = InputOptions.new optdata
|
32
|
+
@match_options = MatchOptions.new @colors, optdata
|
33
|
+
@output_options = OutputOptions.new @colors, optdata
|
34
|
+
|
35
|
+
@info_options = InfoOptions.new @colors, optdata
|
36
|
+
|
37
|
+
add_opt_blk(optdata, %w{ --config }) { write_configuration; exit }
|
38
|
+
add_opt_blk(optdata, %w{ --dump }) { dump_all_fields; exit 0 }
|
39
|
+
|
40
|
+
super @input_options, @match_options, @output_options
|
41
|
+
|
42
|
+
@optset = OptProc::OptionSet.new optdata
|
43
|
+
end
|
44
|
+
|
45
|
+
def run args
|
46
|
+
@args = args
|
47
|
+
|
48
|
+
read_home_rcfile
|
49
|
+
|
50
|
+
if @local_config_files
|
51
|
+
read_local_rcfiles
|
52
|
+
end
|
53
|
+
|
54
|
+
read_environment_variable
|
55
|
+
|
56
|
+
# honor thy EMACS; go to grep mode
|
57
|
+
if ENV["EMACS"]
|
58
|
+
@output_options.style = "grep"
|
59
|
+
end
|
60
|
+
|
61
|
+
read_options
|
62
|
+
|
63
|
+
validate!
|
64
|
+
|
65
|
+
@fileset = @input_options.create_fileset @args
|
66
|
+
|
67
|
+
if @output_options.show_file_names.nil?
|
68
|
+
@output_options.show_file_names = @output_options.label || !one_file?
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def one_file?
|
73
|
+
return false if @fileset.size > 1
|
74
|
+
first = @fileset.files.first
|
75
|
+
first.to_s != '-' && first.file?
|
76
|
+
end
|
77
|
+
|
78
|
+
def read_home_rcfile
|
79
|
+
return unless hdir = Dir.home
|
80
|
+
hdpn = Pathname.new hdir
|
81
|
+
homerc = hdpn + '.glarkrc'
|
82
|
+
read_rcfile homerc
|
83
|
+
end
|
84
|
+
|
85
|
+
def read_local_rcfiles
|
86
|
+
hdir = Dir.home
|
87
|
+
dir = Pathname.new('.').expand_path
|
88
|
+
while !dir.root? && dir != hdir
|
89
|
+
rcfile = dir + '.glarkrc'
|
90
|
+
return if read_rcfile rcfile
|
91
|
+
dir = dir.dirname
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def all_option_sets
|
96
|
+
[ @colors, @match_options, @output_options, @info_options, @input_options ]
|
97
|
+
end
|
98
|
+
|
99
|
+
def read_rcfile rcfname
|
100
|
+
return nil unless rcfname.exist?
|
101
|
+
rcfile = RCFile.new rcfname
|
102
|
+
rcvalues = rcfile.names.collect { |name| [ name, rcfile.values(name) ] }
|
103
|
+
|
104
|
+
all_option_sets.each do |opts|
|
105
|
+
opts.update_fields rcvalues
|
106
|
+
end
|
107
|
+
update_fields rcvalues
|
108
|
+
true
|
109
|
+
end
|
110
|
+
|
111
|
+
def config_fields
|
112
|
+
fields = {
|
113
|
+
"local-config-files" => @local_config_files,
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
def dump_fields
|
118
|
+
config_fields
|
119
|
+
end
|
120
|
+
|
121
|
+
def update_fields fields
|
122
|
+
fields.each do |name, values|
|
123
|
+
case name
|
124
|
+
when "local-config-files"
|
125
|
+
@local_config_files = to_boolean values.last
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def read_environment_variable
|
131
|
+
options = Env.split "GLARKOPTS"
|
132
|
+
while options.size > 0
|
133
|
+
@optset.process_option options
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def read_expression
|
138
|
+
if @args.size > 0
|
139
|
+
known_end = false
|
140
|
+
if @args[0] == "--"
|
141
|
+
@args.shift
|
142
|
+
known_end = true
|
143
|
+
end
|
144
|
+
|
145
|
+
if @args && @args.size > 0
|
146
|
+
return @match_options.read_expression @args, !known_end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
if @args.size > 0
|
151
|
+
raise "No expression provided."
|
152
|
+
end
|
153
|
+
|
154
|
+
$stderr.puts "Usage: glark [options] expression file..."
|
155
|
+
$stderr.puts "Try `glark --help' for more information."
|
156
|
+
exit 1
|
157
|
+
end
|
158
|
+
|
159
|
+
def read_options
|
160
|
+
# solitary "-v" means "--version", not --invert-match
|
161
|
+
@info_options.show_version if @args.size == 1 && @args.first == "-v"
|
162
|
+
|
163
|
+
@match_options.expr = nil
|
164
|
+
|
165
|
+
nil while @args.size > 0 && @optset.process_option(@args)
|
166
|
+
|
167
|
+
unless @match_options.expr
|
168
|
+
read_expression
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def write_configuration
|
173
|
+
fields = config_fields
|
174
|
+
all_option_sets.each do |opts|
|
175
|
+
fields.merge! opts.config_fields
|
176
|
+
end
|
177
|
+
|
178
|
+
fields.keys.sort.each do |fname|
|
179
|
+
puts "#{fname}: #{fields[fname]}"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def dump_all_fields
|
184
|
+
fields = dump_fields
|
185
|
+
all_option_sets.each do |opts|
|
186
|
+
fields.merge! opts.dump_fields
|
187
|
+
end
|
188
|
+
|
189
|
+
len = fields.keys.collect { |f| f.length }.max
|
190
|
+
|
191
|
+
fields.keys.sort.each do |field|
|
192
|
+
printf "%*s : %s\n", len, field, fields[field]
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
# check options for collisions/data validity
|
197
|
+
def validate!
|
198
|
+
@input_options.range.validate!
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|