omghax-einstein 0.1.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/lib/parser.y ADDED
@@ -0,0 +1,79 @@
1
+ /* vim: set filetype=racc : */
2
+
3
+ class Einstein::GeneratedParser
4
+
5
+ /* Punctuators */
6
+ token LSHIFT /* << */
7
+ token RSHIFT /* >> */
8
+ token RAISE /* ** */
9
+
10
+ /* Terminal types */
11
+ token NUMBER
12
+ token IDENT
13
+
14
+ rule
15
+ Statement:
16
+ BitwiseOrExpr
17
+ ;
18
+
19
+ Literal:
20
+ NUMBER { result = NumberNode.new(val.first) }
21
+ ;
22
+
23
+ PrimaryExpr:
24
+ "(" Statement ")" { result = val[1] }
25
+ | IDENT { result = ResolveNode.new(val.first) }
26
+ | Literal
27
+ ;
28
+
29
+ UnaryExpr:
30
+ PrimaryExpr
31
+ | "+" UnaryExpr { result = UnaryPlusNode.new(val[1]) }
32
+ | "-" UnaryExpr { result = UnaryMinusNode.new(val[1]) }
33
+ | "~" UnaryExpr { result = BitwiseNotNode.new(val[1]) }
34
+ ;
35
+
36
+ ExponentExpr:
37
+ UnaryExpr
38
+ | ExponentExpr RAISE UnaryExpr { result = ExponentNode.new(val[0], val[2]) }
39
+ ;
40
+
41
+ MultiplicativeExpr:
42
+ ExponentExpr
43
+ | MultiplicativeExpr "*" ExponentExpr { result = MultiplyNode.new(val[0], val[2]) }
44
+ | MultiplicativeExpr "/" ExponentExpr { result = DivideNode.new(val[0], val[2]) }
45
+ | MultiplicativeExpr "%" ExponentExpr { result = ModulusNode.new(val[0], val[2]) }
46
+ ;
47
+
48
+ AdditiveExpr:
49
+ MultiplicativeExpr
50
+ | AdditiveExpr "+" MultiplicativeExpr { result = AddNode.new(val[0], val[2]) }
51
+ | AdditiveExpr "-" MultiplicativeExpr { result = SubtractNode.new(val[0], val[2]) }
52
+ ;
53
+
54
+ ShiftExpr:
55
+ AdditiveExpr
56
+ | ShiftExpr LSHIFT AdditiveExpr { result = LeftShiftNode.new(val[0], val[2]) }
57
+ | ShiftExpr RSHIFT AdditiveExpr { result = RightShiftNode.new(val[0], val[2]) }
58
+ ;
59
+
60
+ BitwiseAndExpr:
61
+ ShiftExpr
62
+ | BitwiseAndExpr "&" ShiftExpr { result = BitwiseAndNode.new(val[0], val[2]) }
63
+ ;
64
+
65
+ BitwiseXorExpr:
66
+ BitwiseAndExpr
67
+ | BitwiseXorExpr "^" BitwiseAndExpr { result = BitwiseXorNode.new(val[0], val[2]) }
68
+ ;
69
+
70
+ BitwiseOrExpr:
71
+ BitwiseXorExpr
72
+ | BitwiseOrExpr "|" BitwiseXorExpr { result = BitwiseOrNode.new(val[0], val[2]) }
73
+ ;
74
+
75
+ ---- header
76
+ require "einstein/nodes"
77
+
78
+ ---- inner
79
+ include Einstein::Nodes
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
data/script/txt2html ADDED
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ begin
5
+ require 'newgem'
6
+ rescue LoadError
7
+ puts "\n\nGenerating the website requires the newgem RubyGem"
8
+ puts "Install: gem install newgem\n\n"
9
+ exit(1)
10
+ end
11
+ require 'redcloth'
12
+ require 'syntax/convertors/html'
13
+ require 'erb'
14
+ require File.dirname(__FILE__) + '/../lib/einstein/version.rb'
15
+
16
+ version = Einstein::VERSION::STRING
17
+ download = 'http://rubyforge.org/projects/einstein'
18
+
19
+ class Fixnum
20
+ def ordinal
21
+ # teens
22
+ return 'th' if (10..19).include?(self % 100)
23
+ # others
24
+ case self % 10
25
+ when 1: return 'st'
26
+ when 2: return 'nd'
27
+ when 3: return 'rd'
28
+ else return 'th'
29
+ end
30
+ end
31
+ end
32
+
33
+ class Time
34
+ def pretty
35
+ return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
36
+ end
37
+ end
38
+
39
+ def convert_syntax(syntax, source)
40
+ return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
41
+ end
42
+
43
+ if ARGV.length >= 1
44
+ src, template = ARGV
45
+ template ||= File.join(File.dirname(__FILE__), '/../website/template.rhtml')
46
+
47
+ else
48
+ puts("Usage: #{File.split($0).last} source.txt [template.rhtml] > output.html")
49
+ exit!
50
+ end
51
+
52
+ template = ERB.new(File.open(template).read)
53
+
54
+ title = nil
55
+ body = nil
56
+ File.open(src) do |fsrc|
57
+ title_text = fsrc.readline
58
+ body_text = fsrc.read
59
+ syntax_items = []
60
+ body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
61
+ ident = syntax_items.length
62
+ element, syntax, source = $1, $2, $3
63
+ syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
64
+ "syntax-temp-#{ident}"
65
+ }
66
+ title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
67
+ body = RedCloth.new(body_text).to_html
68
+ body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
69
+ end
70
+ stat = File.stat(src)
71
+ created = stat.ctime
72
+ modified = stat.mtime
73
+
74
+ $stdout << template.result(binding)