yay 0.0.7 → 0.0.8
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/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
|