yay 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/data/yay/dna.yay +24 -0
- data/data/yay/types.yay +23 -0
- data/lib/yay/application.rb +2 -1
- data/lib/yay/autoformatter.rb +31 -0
- data/lib/yay/colour_wheel.rb +1 -0
- data/lib/yay/colourizer.rb +40 -28
- data/lib/yay/loader.rb +1 -1
- data/lib/yay/parser.rb +36 -19
- data/lib/yay/parser_gen.rb +49 -49
- data/lib/yay/paths.rb +5 -1
- data/lib/yay/version.rb +1 -1
- metadata +7 -4
data/data/yay/dna.yay
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/yay
|
2
|
+
|
3
|
+
# Latin characters used DNA and RNA sequences have poor legibility. This script
|
4
|
+
# helps with that by giving each character a distinct colour, vaguely similar
|
5
|
+
# to the florescent dyes used during sequencing.
|
6
|
+
#
|
7
|
+
# The colours I have chosen were taken from [1] and work best on a black screen.
|
8
|
+
# This will have to do until AmbiScript [2] characters have been given Unicode
|
9
|
+
# codepoints!
|
10
|
+
#
|
11
|
+
# 1. http://biology.kenyon.edu/courses/biol114/Chap08/Chapter_08a.html
|
12
|
+
# 2. http://www.biotechniques.com/multimedia/archive/00003/BTN_A_000112727_O_3654a.pdf
|
13
|
+
|
14
|
+
"a" is @adenine
|
15
|
+
"g" is @guanine
|
16
|
+
"c" is @cytosine
|
17
|
+
"t" is @thymine
|
18
|
+
"u" is @uracil
|
19
|
+
|
20
|
+
@adenine is green
|
21
|
+
@cytosine is blue
|
22
|
+
@guanine is yellow
|
23
|
+
@thymine is red
|
24
|
+
@uracil is @thymine
|
data/data/yay/types.yay
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/yay
|
2
|
+
|
3
|
+
# Matches common filenames and extensions so that you can quickly discover
|
4
|
+
# information about a directory structure using ls or tree
|
5
|
+
|
6
|
+
/\b\w*\.(png|gif|jpg|jpeg|svg)\b/i is @image
|
7
|
+
/\b\w*\.(txt|html|md|css)\b/i is @doc
|
8
|
+
/\b\w*\.(xml|json|properties|manifest)\b/i is @config
|
9
|
+
|
10
|
+
/\b\w*\.(sh|bash|yay)\b/i is @shell
|
11
|
+
/\b\w*\.(php|py|rb|pl|r|pm|ssi|shtml)\b/i is @script
|
12
|
+
/\b\w*\.(java|scala)\b/i is @jvm
|
13
|
+
/\b\w*\.(h|c|cc|cpp|cxx)\b/i is @c
|
14
|
+
|
15
|
+
@image is @resource
|
16
|
+
@config is @resource
|
17
|
+
@doc is @resource
|
18
|
+
@resource is green
|
19
|
+
|
20
|
+
@shell is dim
|
21
|
+
@jvm is red
|
22
|
+
@c is blue
|
23
|
+
@script is magenta
|
data/lib/yay/application.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'yay/rule_set'
|
2
|
+
|
3
|
+
class Yay
|
4
|
+
class Autoformatter
|
5
|
+
|
6
|
+
# the colour wheel can be retrieved for unit testing, etc
|
7
|
+
attr_reader :wheel
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@wheel = [
|
11
|
+
[Yay::ColourWheel::FG[:red], Yay::ColourWheel::MISC[:bold]],
|
12
|
+
[Yay::ColourWheel::FG[:green], Yay::ColourWheel::MISC[:bold]],
|
13
|
+
[Yay::ColourWheel::FG[:blue], Yay::ColourWheel::MISC[:bold]],
|
14
|
+
]
|
15
|
+
@index = 0
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_rules strings
|
19
|
+
raise ArgumentError, "Cannot be an empty array" unless
|
20
|
+
strings.class == Array and strings.length > 0
|
21
|
+
ruleset = Yay::RuleSet.new
|
22
|
+
strings.each { |string|
|
23
|
+
colour = @wheel[@index % @wheel.length]
|
24
|
+
ruleset.add_match [string], colour, false
|
25
|
+
# iterate the index
|
26
|
+
@index += 1
|
27
|
+
}
|
28
|
+
return ruleset.get_rules
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/yay/colour_wheel.rb
CHANGED
data/lib/yay/colourizer.rb
CHANGED
@@ -10,6 +10,12 @@ class Yay
|
|
10
10
|
colourize_rules rules
|
11
11
|
@input = input
|
12
12
|
@output = output
|
13
|
+
|
14
|
+
# this is the colour we'll use when we haven't already applied a colour
|
15
|
+
# we remember the previous choice as we can colourize words within a line
|
16
|
+
# that's already been coloured
|
17
|
+
@default_end_colour = ColourWheel::end_colour
|
18
|
+
@end_colour = @default_end_colour
|
13
19
|
end
|
14
20
|
|
15
21
|
# get the rules that are applied to a whole line if it contains matching text
|
@@ -46,39 +52,45 @@ class Yay
|
|
46
52
|
end
|
47
53
|
}
|
48
54
|
end
|
49
|
-
|
55
|
+
|
56
|
+
# apply all rules that span the entire line
|
57
|
+
def apply_line_rules line
|
58
|
+
# track the line_rules end colour so we can return to this after each
|
59
|
+
# match
|
60
|
+
@line_rules.each { |rule|
|
61
|
+
if line.match(rule[0])
|
62
|
+
line = "#{rule[1]}#{line.rstrip}#{@default_end_colour}"
|
63
|
+
@end_colour = rule[1]
|
64
|
+
# leave loop; only allow one line match per line
|
65
|
+
break
|
66
|
+
end
|
67
|
+
}
|
68
|
+
return line
|
69
|
+
end
|
70
|
+
|
71
|
+
# apply all partial rules
|
72
|
+
def apply_word_rules line
|
73
|
+
@part_rules.each { |rule|
|
74
|
+
line = line.gsub(rule[0], "#{rule[1]}\\0#{@end_colour}")
|
75
|
+
}
|
76
|
+
return line
|
77
|
+
end
|
78
|
+
|
50
79
|
# create a pipe between the input and output streams, applying colour rules
|
51
80
|
# to every line that appears. only an interrupt, end of file or exception
|
52
81
|
# will end this process
|
53
82
|
def colourize_pipe
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
# track the line_rules end colour so we can return to this after each
|
62
|
-
# match
|
63
|
-
end_colour = default_end_colour
|
64
|
-
|
65
|
-
# apply all line rules
|
66
|
-
@line_rules.each { |rule|
|
67
|
-
if line.match(rule[0])
|
68
|
-
line = "#{rule[1]}#{line.rstrip}#{default_end_colour}"
|
69
|
-
end_colour = rule[1]
|
70
|
-
# leave loop; only allow one line match per line
|
71
|
-
break
|
72
|
-
end
|
83
|
+
@end_colour = @default_end_colour
|
84
|
+
begin
|
85
|
+
@input.each_line { |line|
|
86
|
+
line = apply_line_rules(line)
|
87
|
+
line = apply_word_rules(line)
|
88
|
+
@output.puts line
|
73
89
|
}
|
74
|
-
|
75
|
-
#
|
76
|
-
|
77
|
-
line.gsub!(rule[0], "#{rule[1]}\\0#{end_colour}")
|
78
|
-
}
|
79
|
-
|
80
|
-
@output.puts line
|
81
|
-
}
|
90
|
+
rescue Errno::EPIPE
|
91
|
+
# ignore the Broken Pipe error that is caused by tools like head
|
92
|
+
end
|
82
93
|
end
|
94
|
+
|
83
95
|
end
|
84
96
|
end
|
data/lib/yay/loader.rb
CHANGED
data/lib/yay/parser.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'yay/parser_gen'
|
2
2
|
require 'yay/lexer'
|
3
3
|
require 'yay/colour_wheel'
|
4
|
+
require 'yay/autoformatter'
|
4
5
|
require 'yay/rule_set'
|
5
6
|
require 'yay/loader'
|
6
7
|
require 'yay/installer'
|
@@ -15,20 +16,12 @@ class Yay
|
|
15
16
|
# ruby code
|
16
17
|
class Parser < Yay::ParserGen
|
17
18
|
|
18
|
-
#
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
# allow this parser to include rule files that are installed. including
|
26
|
-
# ones in the gem folders, globally and locally
|
27
|
-
attr_accessor :allow_include
|
28
|
-
|
29
|
-
# allow this parser to search for and print out all the rules that are
|
30
|
-
# installed
|
31
|
-
attr_accessor :allow_list
|
19
|
+
# restricted mode is on by default. this prevents people from doing things
|
20
|
+
# like installing new files from within files
|
21
|
+
attr_accessor :allow_restricted
|
22
|
+
|
23
|
+
# a subset of restricted mode which allows include files
|
24
|
+
attr_accessor :allow_include
|
32
25
|
|
33
26
|
# set to true to signal to the application or parent parser that it's time
|
34
27
|
# to shut down
|
@@ -39,6 +32,23 @@ class Yay
|
|
39
32
|
@lexer.context_name = context_name
|
40
33
|
end
|
41
34
|
|
35
|
+
# tries to include a file if it exists; otherwise autoformats
|
36
|
+
def include_or_autoformat strings
|
37
|
+
begin
|
38
|
+
include_file strings[0].source
|
39
|
+
rescue Yay::CouldntFindFileError
|
40
|
+
# autoformat if we're on the commandline otherwise this doesn't make
|
41
|
+
# sense
|
42
|
+
autoformat strings if @allow_restricted
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# takes strings without colours and automatically assigns one to each
|
47
|
+
def autoformat strings
|
48
|
+
autoformatter = Yay::Autoformatter.new
|
49
|
+
@ruleset.merge autoformatter.get_rules strings
|
50
|
+
end
|
51
|
+
|
42
52
|
# load a file from a url
|
43
53
|
def include_file filename
|
44
54
|
raise NotAllowedError.new "include #{filename}", current_position unless @allow_include
|
@@ -49,7 +59,7 @@ class Yay
|
|
49
59
|
|
50
60
|
# install a file from a url
|
51
61
|
def install_file file_name, url
|
52
|
-
raise NotAllowedError.new "install #{url}", current_position unless @
|
62
|
+
raise NotAllowedError.new "install #{url}", current_position unless @allow_restricted
|
53
63
|
installer = Yay::Installer.new file_name, url
|
54
64
|
installer.install
|
55
65
|
@shutdown = true
|
@@ -57,21 +67,26 @@ class Yay
|
|
57
67
|
|
58
68
|
# print the full list of yay files
|
59
69
|
def list_installed
|
60
|
-
raise NotAllowedError.new "list installed yay files", current_position unless @
|
70
|
+
raise NotAllowedError.new "list installed yay files", current_position unless @allow_restricted
|
61
71
|
lister = Yay::Lister.new
|
62
72
|
lister.print
|
63
73
|
@shutdown = true
|
64
74
|
end
|
65
75
|
|
66
76
|
# allow all parser actions
|
67
|
-
def
|
68
|
-
@
|
77
|
+
def allow_restricted= value
|
78
|
+
@allow_include = @allow_restricted = value
|
69
79
|
end
|
70
80
|
|
81
|
+
# allow the including of files
|
82
|
+
def allow_include= value
|
83
|
+
@allow_include = value
|
84
|
+
end
|
85
|
+
|
71
86
|
# load the default file. used when the commandline is empty
|
72
87
|
def use_default_file
|
73
88
|
# don't throw an error in this case. it's legitimate for a file to be empty
|
74
|
-
return unless @
|
89
|
+
return unless @allow_restricted
|
75
90
|
loader = Yay::Loader.default_file_loader
|
76
91
|
loader.load
|
77
92
|
@ruleset.merge loader.get_rules
|
@@ -108,6 +123,8 @@ class Yay
|
|
108
123
|
# for lack of a better function, this will take a string like "/abc/" and
|
109
124
|
# transform it in to a regex object
|
110
125
|
def string_to_regex string, escape=true
|
126
|
+
# extract the constituent part of the regexp. in ruby 1.8 we can't just
|
127
|
+
# create a regex from a perl-style regex literal like /abc/i
|
111
128
|
matches = /\/([^\/\\\r\n]*(?:\\.[^\/\\\r\n]*)*)\/([a-z]\b)*/.match string
|
112
129
|
return nil if matches[1].nil?
|
113
130
|
content = matches[1]
|
data/lib/yay/parser_gen.rb
CHANGED
@@ -15,76 +15,76 @@ module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 54)
|
|
15
15
|
##### State transition tables begin ###
|
16
16
|
|
17
17
|
racc_action_table = [
|
18
|
-
-7, -25,
|
19
|
-
|
20
|
-
|
21
|
-
38,
|
18
|
+
-4, -7, -25, 4, 27, 26, -25, 12, 20, 25,
|
19
|
+
20, 21, 2, 4, 8, 9, 11, 12, 4, 21,
|
20
|
+
9, 11, 12, 31, 34, 21, 32, 32, 18, 17,
|
21
|
+
38, 32, 38, 21 ]
|
22
22
|
|
23
23
|
racc_action_check = [
|
24
|
-
7, 6,
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
7, 10, 6, 19, 18, 17, 6, 19, 6, 11,
|
25
|
+
10, 7, 0, 0, 0, 0, 0, 0, 24, 21,
|
26
|
+
24, 24, 24, 22, 23, 9, 22, 23, 3, 2,
|
27
|
+
30, 32, 33, 36 ]
|
28
28
|
|
29
29
|
racc_action_pointer = [
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
10, nil, 26, 28, nil, nil, -1, 0, nil, 14,
|
31
|
+
1, 6, nil, nil, nil, nil, nil, 2, 4, 0,
|
32
|
+
nil, 8, 18, 19, 15, nil, nil, nil, nil, nil,
|
33
|
+
20, nil, 23, 22, nil, nil, 22, nil, nil, nil,
|
34
34
|
nil ]
|
35
35
|
|
36
36
|
racc_action_default = [
|
37
|
-
-5, -
|
38
|
-
-
|
39
|
-
-
|
40
|
-
|
37
|
+
-5, -12, -30, -30, -20, -1, -19, -29, -3, -29,
|
38
|
+
-25, -30, -21, -8, -9, -10, -11, -30, -30, -30,
|
39
|
+
-24, -29, -30, -30, -30, -17, -2, 41, -18, -28,
|
40
|
+
-27, -14, -23, -27, -16, -6, -29, -13, -26, -22,
|
41
41
|
-15 ]
|
42
42
|
|
43
43
|
racc_goto_table = [
|
44
|
-
5,
|
45
|
-
|
46
|
-
nil, nil, nil,
|
44
|
+
7, 5, 23, 30, 33, 19, 3, 37, nil, 24,
|
45
|
+
40, nil, nil, 39, 29, nil, nil, nil, nil, 28,
|
46
|
+
nil, nil, nil, nil, 36, 35 ]
|
47
47
|
|
48
48
|
racc_goto_check = [
|
49
|
-
2, 11, 12,
|
50
|
-
|
51
|
-
nil, nil, nil, 2 ]
|
49
|
+
3, 2, 11, 12, 12, 5, 1, 13, nil, 5,
|
50
|
+
13, nil, nil, 12, 11, nil, nil, nil, nil, 3,
|
51
|
+
nil, nil, nil, nil, 3, 2 ]
|
52
52
|
|
53
53
|
racc_goto_pointer = [
|
54
|
-
nil,
|
55
|
-
-
|
54
|
+
nil, 6, 1, 0, nil, -1, nil, nil, nil, nil,
|
55
|
+
nil, -7, -19, -23, nil ]
|
56
56
|
|
57
57
|
racc_goto_default = [
|
58
|
-
nil, nil, nil,
|
59
|
-
1,
|
58
|
+
nil, nil, nil, nil, 10, nil, 13, 14, 15, 16,
|
59
|
+
1, 22, nil, nil, 6 ]
|
60
60
|
|
61
61
|
racc_reduce_table = [
|
62
62
|
0, 0, :racc_error,
|
63
63
|
1, 13, :_reduce_1,
|
64
|
-
|
65
|
-
|
64
|
+
3, 13, :_reduce_2,
|
65
|
+
1, 13, :_reduce_3,
|
66
66
|
1, 13, :_reduce_4,
|
67
67
|
0, 13, :_reduce_5,
|
68
68
|
3, 14, :_reduce_6,
|
69
69
|
1, 14, :_reduce_7,
|
70
|
-
1,
|
71
|
-
1,
|
72
|
-
1,
|
73
|
-
1,
|
74
|
-
1,
|
75
|
-
4,
|
76
|
-
3,
|
77
|
-
4,
|
78
|
-
3,
|
79
|
-
2,
|
80
|
-
3,
|
81
|
-
1,
|
70
|
+
1, 16, :_reduce_none,
|
71
|
+
1, 16, :_reduce_none,
|
72
|
+
1, 16, :_reduce_none,
|
73
|
+
1, 16, :_reduce_none,
|
74
|
+
1, 16, :_reduce_none,
|
75
|
+
4, 18, :_reduce_13,
|
76
|
+
3, 19, :_reduce_14,
|
77
|
+
4, 20, :_reduce_15,
|
78
|
+
3, 21, :_reduce_16,
|
79
|
+
2, 22, :_reduce_17,
|
80
|
+
3, 15, :_reduce_18,
|
81
|
+
1, 15, :_reduce_19,
|
82
82
|
1, 26, :_reduce_20,
|
83
83
|
1, 26, :_reduce_21,
|
84
84
|
2, 24, :_reduce_22,
|
85
85
|
1, 24, :_reduce_23,
|
86
|
-
1,
|
87
|
-
0,
|
86
|
+
1, 17, :_reduce_24,
|
87
|
+
0, 17, :_reduce_25,
|
88
88
|
1, 25, :_reduce_26,
|
89
89
|
0, 25, :_reduce_27,
|
90
90
|
2, 23, :_reduce_28,
|
@@ -97,8 +97,8 @@ racc_shift_n = 41
|
|
97
97
|
racc_token_table = {
|
98
98
|
false => 0,
|
99
99
|
:error => 1,
|
100
|
-
:
|
101
|
-
:
|
100
|
+
:install => 2,
|
101
|
+
:literal => 3,
|
102
102
|
:list_installed => 4,
|
103
103
|
:variable => 5,
|
104
104
|
:include => 6,
|
@@ -131,8 +131,8 @@ Racc_arg = [
|
|
131
131
|
Racc_token_to_s_table = [
|
132
132
|
"$end",
|
133
133
|
"error",
|
134
|
-
"literal",
|
135
134
|
"install",
|
135
|
+
"literal",
|
136
136
|
"list_installed",
|
137
137
|
"variable",
|
138
138
|
"include",
|
@@ -144,6 +144,7 @@ Racc_token_to_s_table = [
|
|
144
144
|
"$start",
|
145
145
|
"body",
|
146
146
|
"command_list",
|
147
|
+
"string_list",
|
147
148
|
"command",
|
148
149
|
"and_opt",
|
149
150
|
"match",
|
@@ -151,7 +152,6 @@ Racc_token_to_s_table = [
|
|
151
152
|
"substitution",
|
152
153
|
"equivalence",
|
153
154
|
"include_file",
|
154
|
-
"string_list",
|
155
155
|
"verbs_opt",
|
156
156
|
"colour_list",
|
157
157
|
"line_opt",
|
@@ -172,21 +172,21 @@ module_eval(<<'.,.,', 'grammar.y', 5)
|
|
172
172
|
|
173
173
|
module_eval(<<'.,.,', 'grammar.y', 6)
|
174
174
|
def _reduce_2(val, _values, result)
|
175
|
-
|
175
|
+
install_file val[1], val[2]
|
176
176
|
result
|
177
177
|
end
|
178
178
|
.,.,
|
179
179
|
|
180
180
|
module_eval(<<'.,.,', 'grammar.y', 7)
|
181
181
|
def _reduce_3(val, _values, result)
|
182
|
-
|
182
|
+
list_installed
|
183
183
|
result
|
184
184
|
end
|
185
185
|
.,.,
|
186
186
|
|
187
187
|
module_eval(<<'.,.,', 'grammar.y', 8)
|
188
188
|
def _reduce_4(val, _values, result)
|
189
|
-
|
189
|
+
include_or_autoformat val[0]
|
190
190
|
result
|
191
191
|
end
|
192
192
|
.,.,
|
data/lib/yay/paths.rb
CHANGED
@@ -20,13 +20,17 @@ class Yay
|
|
20
20
|
|
21
21
|
# get all the paths where we might be able to find .yay files
|
22
22
|
def yay_paths
|
23
|
-
result = [local_yay_path,global_yay_path]
|
23
|
+
result = [current_path,local_yay_path,global_yay_path]
|
24
24
|
gempaths.each { |v|
|
25
25
|
result.push gempath_to_yaypath(v)
|
26
26
|
}
|
27
27
|
return result
|
28
28
|
end
|
29
29
|
|
30
|
+
def current_path
|
31
|
+
return '.'
|
32
|
+
end
|
33
|
+
|
30
34
|
def global_yay_path
|
31
35
|
return '/etc/yay'
|
32
36
|
end
|
data/lib/yay/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 8
|
10
|
+
version: 0.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- jon davey
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-01-26 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -31,12 +31,15 @@ files:
|
|
31
31
|
- LICENSE
|
32
32
|
- data/yay/log4x.yay
|
33
33
|
- data/yay/syslog.yay
|
34
|
+
- data/yay/dna.yay
|
35
|
+
- data/yay/types.yay
|
34
36
|
- data/yay/default.yay
|
35
37
|
- lib/yay/parser_gen.rb
|
36
38
|
- lib/yay/rule_set.rb
|
37
39
|
- lib/yay/version.rb
|
38
40
|
- lib/yay/lister.rb
|
39
41
|
- lib/yay/lexer.rb
|
42
|
+
- lib/yay/autoformatter.rb
|
40
43
|
- lib/yay/loader.rb
|
41
44
|
- lib/yay/application.rb
|
42
45
|
- lib/yay/colour_wheel.rb
|