yay 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +0 -0
- data/bin/yay +5 -0
- data/data/defaults/log.yay +5 -0
- data/data/defaults/log4x.yay +18 -0
- data/data/defaults/syslog.yay +18 -0
- data/data/examples/errors.yay +6 -0
- data/data/examples/regex.yay +24 -0
- data/data/examples/variables.yay +11 -0
- data/data/grammar.y +56 -0
- data/data/lexer_tests.rb +171 -0
- data/data/parser_tests.rb +153 -0
- data/lib/yay/application.rb +44 -0
- data/lib/yay/colour_wheel.rb +58 -0
- data/lib/yay/colourizer.rb +58 -0
- data/lib/yay/errors.rb +109 -0
- data/lib/yay/installer.rb +12 -0
- data/lib/yay/lexer.rb +60 -0
- data/lib/yay/lexer_regex.rb +38 -0
- data/lib/yay/loader.rb +57 -0
- data/lib/yay/parser.rb +89 -0
- data/lib/yay/parser_gen.rb +319 -0
- data/lib/yay/rule_set.rb +92 -0
- data/lib/yay/version.rb +19 -0
- metadata +89 -0
data/lib/yay/rule_set.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
|
2
|
+
class Yay
|
3
|
+
# manages colour rules. including variable substitutions
|
4
|
+
class RuleSet
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
# the eventual ruleset
|
8
|
+
@rules = []
|
9
|
+
|
10
|
+
# variable = colour
|
11
|
+
@var_to_colours = {}
|
12
|
+
|
13
|
+
# variable = variable
|
14
|
+
@var_to_var = {}
|
15
|
+
|
16
|
+
# string = variable
|
17
|
+
@string_to_var = []
|
18
|
+
end
|
19
|
+
|
20
|
+
# merge with another ruleset
|
21
|
+
def merge rules
|
22
|
+
@rules = @rules | rules
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_rules
|
26
|
+
# ensure we substitute all variables
|
27
|
+
substitute_variables if @string_to_var
|
28
|
+
@rules
|
29
|
+
end
|
30
|
+
|
31
|
+
# add a simple STRING = COLOUR match rule
|
32
|
+
def add_match strings, colours, is_line
|
33
|
+
strings.each { |string|
|
34
|
+
@rules.push [string, colours, is_line]
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
# add a VARIABLE = COLOUR match rule so we can substitute variables later
|
39
|
+
def add_substitution variable, colours, is_line
|
40
|
+
raise AlreadyAssignedError.new variable if @var_to_colours[variable] || @var_to_var[variable]
|
41
|
+
@var_to_colours[variable] = [colours, is_line]
|
42
|
+
end
|
43
|
+
|
44
|
+
# add a STRING = VARIABLE match rule. the variable will be substuted later
|
45
|
+
def add_assignment strings, variable
|
46
|
+
strings.each { |string|
|
47
|
+
@string_to_var.push [string, variable]
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
# add a VARIABLE = VARIABLE equivalence rule. x will be substituted later
|
52
|
+
def add_equivalence x, y
|
53
|
+
@var_to_var[x] = y
|
54
|
+
end
|
55
|
+
|
56
|
+
# try to find the value of a variable by making substitutions
|
57
|
+
def substitute_variable variable
|
58
|
+
|
59
|
+
path = []
|
60
|
+
result = nil
|
61
|
+
current = variable
|
62
|
+
|
63
|
+
while true
|
64
|
+
# detect circular references
|
65
|
+
raise CircularReferenceError.new(current, path) unless path.index(current).nil?
|
66
|
+
|
67
|
+
path.push current
|
68
|
+
|
69
|
+
# see if this variable has a value
|
70
|
+
result = @var_to_colours[current]
|
71
|
+
break if result
|
72
|
+
|
73
|
+
# see if this variable is a reference to another variable
|
74
|
+
current = @var_to_var[current]
|
75
|
+
break if current.nil?
|
76
|
+
end
|
77
|
+
|
78
|
+
raise UnresolvedSubstitutionError.new variable unless result
|
79
|
+
return result
|
80
|
+
end
|
81
|
+
|
82
|
+
def substitute_variables
|
83
|
+
@string_to_var.each { |ref|
|
84
|
+
string = ref[0]
|
85
|
+
variable = ref[1]
|
86
|
+
result = substitute_variable(variable)
|
87
|
+
add_match([string], result[0], result[1])
|
88
|
+
}
|
89
|
+
@string_to_var = []
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/yay/version.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
class Yay
|
4
|
+
|
5
|
+
VERSION = "0.0.1"
|
6
|
+
|
7
|
+
def self.version
|
8
|
+
@rev ||= begin
|
9
|
+
begin
|
10
|
+
rev = Open3.popen3("git rev-parse HEAD") {|stdin, stdout, stderr| stdout.read }.strip
|
11
|
+
rescue Errno::ENOENT
|
12
|
+
rev = ""
|
13
|
+
end
|
14
|
+
rev.empty? ? nil : " (#{rev})"
|
15
|
+
end
|
16
|
+
"#{VERSION}#@rev"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yay
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Jon Davey
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-11-14 00:00:00 +00:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: echo "i like apples" | yay apples are red
|
23
|
+
email: jond3k@gmail.com
|
24
|
+
executables:
|
25
|
+
- yay
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- LICENSE
|
32
|
+
- data/lexer_tests.rb
|
33
|
+
- data/grammar.y
|
34
|
+
- data/examples/regex.yay
|
35
|
+
- data/examples/errors.yay
|
36
|
+
- data/examples/variables.yay
|
37
|
+
- data/defaults/log4x.yay
|
38
|
+
- data/defaults/syslog.yay
|
39
|
+
- data/defaults/log.yay
|
40
|
+
- data/parser_tests.rb
|
41
|
+
- lib/yay/parser_gen.rb
|
42
|
+
- lib/yay/rule_set.rb
|
43
|
+
- lib/yay/version.rb
|
44
|
+
- lib/yay/lexer.rb
|
45
|
+
- lib/yay/loader.rb
|
46
|
+
- lib/yay/application.rb
|
47
|
+
- lib/yay/colour_wheel.rb
|
48
|
+
- lib/yay/colourizer.rb
|
49
|
+
- lib/yay/errors.rb
|
50
|
+
- lib/yay/installer.rb
|
51
|
+
- lib/yay/lexer_regex.rb
|
52
|
+
- lib/yay/parser.rb
|
53
|
+
- bin/yay
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: https://github.com/jond3k/yay
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
hash: 3
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
version: "0"
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
requirements: []
|
82
|
+
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 1.3.7
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: Makes your logs colourful!
|
88
|
+
test_files: []
|
89
|
+
|