js2 0.1.8 → 0.3.0.pre5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/bin/js2 +9 -126
  2. data/bin/js2-ruby +13 -0
  3. data/lib/js2/command.rb +16 -0
  4. data/lib/js2/context.rb +35 -0
  5. data/lib/js2/fs.rb +56 -0
  6. data/lib/js2/js2.js +1265 -0
  7. data/lib/js2/rack.rb +35 -0
  8. data/lib/js2.rb +19 -30
  9. metadata +28 -91
  10. data/CHANGELOG +0 -17
  11. data/Manifest +0 -45
  12. data/README.md +0 -75
  13. data/Rakefile +0 -28
  14. data/config/js2.yml +0 -2
  15. data/js2.gemspec +0 -36
  16. data/lib/js2/parser/haml.rb +0 -145
  17. data/lib/js2/parser/haml_engine.rb +0 -19
  18. data/lib/js2/parser/lexer.rb +0 -37
  19. data/lib/js2/parser/tokenizer.rb +0 -3551
  20. data/lib/js2/ragel/helper.rb +0 -117
  21. data/lib/js2/ragel/tokenizer.rl +0 -561
  22. data/lib/js2/ragel/tokenizer.rl.erb +0 -347
  23. data/lib/js2/standard/class_node.rb +0 -0
  24. data/lib/js2/standard/factory.rb +0 -289
  25. data/lib/js2/standard/node.rb +0 -75
  26. data/lib/js2/util/compilation.rb +0 -77
  27. data/lib/js2/util/config.rb +0 -84
  28. data/lib/js2/util/exec.rb +0 -34
  29. data/lib/js2/util/file_handler.rb +0 -73
  30. data/lib/js2/util/haml_filter.rb +0 -13
  31. data/lib/js2/util/jamis.rb +0 -600
  32. data/lib/js2/util/js2bootstrap.js2 +0 -448
  33. data/lib/js2/util/processor.rb +0 -88
  34. data/lib/js2/util/rdoc.rb +0 -37
  35. data/lib/js2/util/sel_decorator.rb +0 -155
  36. data/test/compiled/bar.js +0 -3
  37. data/test/compiled/basic.comp.js +0 -31
  38. data/test/compiled/basic.js +0 -27
  39. data/test/compiled/foo.js +0 -3
  40. data/test/fixtures/bar.js2 +0 -3
  41. data/test/fixtures/basic.js2 +0 -27
  42. data/test/fixtures/basic.js2.haml +0 -4
  43. data/test/fixtures/basic.js2.yml +0 -5
  44. data/test/fixtures/curry.js2 +0 -5
  45. data/test/fixtures/foo.js2 +0 -3
  46. data/test/fixtures/member.js2 +0 -14
  47. data/test/fixtures/private.js2 +0 -5
  48. data/test/fixtures/property.js2 +0 -4
  49. data/test/test_helper.rb +0 -25
  50. data/test/test_js2.rb +0 -43
  51. data/wiki/features.md +0 -73
  52. data/wiki/installation.md +0 -13
data/lib/js2/rack.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'yaml'
2
+
3
+ module JS2
4
+ # this is a hack for now until I can get v8 stable
5
+ class Rack
6
+ ROOT = File.expand_path(Dir.getwd)
7
+
8
+ DEFAULT_CONFIG = {
9
+ 'in_dir' => "#{ROOT}/app/js2",
10
+ 'out_dir' => "#{ROOT}/public/javascripts",
11
+ 'bin' => (`which js2`.chomp rescue nil)
12
+ }
13
+
14
+ def initialize(app)
15
+ @app = app
16
+
17
+ @config = YAML.read_file(ROOT + '/config/js2.yml') rescue DEFAULT_CONFIG
18
+
19
+ @in_dir = @config['in_dir']
20
+ @out_dir = @config['out_dir']
21
+ @bin = @config['bin']
22
+
23
+ @valid = @in_dir && @out_dir && !@bin.blank?
24
+
25
+ unless @valid
26
+ puts "JS2 is not configured properly"
27
+ end
28
+ end
29
+
30
+ def call(env)
31
+ `#{@bin} compile -r #{@in_dir} #{@out_dir}` if @valid
32
+ @app.call(env)
33
+ end
34
+ end
35
+ end
data/lib/js2.rb CHANGED
@@ -1,36 +1,25 @@
1
- module JS2
1
+ begin
2
+ require 'v8'
3
+ JSVM = :v8
4
+ rescue
5
+ begin
6
+ require 'rhino'
7
+ JSVM = :rhino
8
+ rescue
9
+ raise "Please install a javascript engine gem: rubyracer or rubyrhino"
10
+ end
2
11
  end
3
12
 
4
- module JS2::Parser
5
- end
6
13
 
7
- module JS2::Standard
8
- end
9
-
10
- module JS2::Util
14
+ module JS2
15
+ Engine = JSVM == :v8 ? V8::Context : Rhino::Context
16
+ def self.init_rails
17
+ dirname = File.dirname(File.expand_path('', __FILE__))
18
+ require "#{dirname}/js2/rails"
19
+ end
11
20
  end
12
21
 
13
-
14
- dir = File.dirname(__FILE__)
15
-
16
- # compiling stuff
17
- require "#{dir}/js2/parser/lexer"
18
- require "#{dir}/js2/parser/tokenizer"
19
- require "#{dir}/js2/parser/haml_engine"
20
- require "#{dir}/js2/parser/haml"
21
-
22
- # standard suite
23
- require "#{dir}/js2/standard/node"
24
- require "#{dir}/js2/standard/class_node"
25
- require "#{dir}/js2/standard/factory"
26
-
27
- # util stuff
28
- require "#{dir}/js2/util/processor"
29
- require "#{dir}/js2/util/file_handler"
30
- require "#{dir}/js2/util/config"
31
- require "#{dir}/js2/util/compilation"
32
- require "#{dir}/js2/util/rdoc"
33
-
34
- if defined?(Haml)
35
- require "#{dir}/js2/util/haml_filter"
22
+ dirname = File.dirname(File.expand_path('', __FILE__))
23
+ %W{ context fs command rack }.each do |f|
24
+ require "#{dirname}/js2/#{f}"
36
25
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js2
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ prerelease: true
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 8
9
- version: 0.1.8
7
+ - 3
8
+ - 0
9
+ - pre5
10
+ version: 0.3.0.pre5
10
11
  platform: ruby
11
12
  authors:
12
13
  - Jeff Su
@@ -14,11 +15,11 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-10-21 00:00:00 -07:00
18
+ date: 2011-03-05 00:00:00 -08:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: RubyInline
22
+ name: therubyracer
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
24
25
  none: false
@@ -30,95 +31,31 @@ dependencies:
30
31
  version: "0"
31
32
  type: :runtime
32
33
  version_requirements: *id001
33
- description: Cross-Browser Object Oriented Javascript Compiler
34
+ description: A superset of the Javascript language to make development easier.
34
35
  email: me@jeffsu.com
35
36
  executables:
37
+ - js2-ruby
36
38
  - js2
37
39
  extensions: []
38
40
 
39
- extra_rdoc_files:
40
- - README.md
41
- - CHANGELOG
42
- - bin/js2
43
- - lib/js2.rb
44
- - lib/js2/parser/haml.rb
45
- - lib/js2/parser/haml_engine.rb
46
- - lib/js2/parser/lexer.rb
47
- - lib/js2/parser/tokenizer.rb
48
- - lib/js2/ragel/helper.rb
49
- - lib/js2/ragel/tokenizer.rl
50
- - lib/js2/ragel/tokenizer.rl.erb
51
- - lib/js2/standard/class_node.rb
52
- - lib/js2/standard/factory.rb
53
- - lib/js2/standard/node.rb
54
- - lib/js2/util/compilation.rb
55
- - lib/js2/util/config.rb
56
- - lib/js2/util/exec.rb
57
- - lib/js2/util/file_handler.rb
58
- - lib/js2/util/js2bootstrap.js2
59
- - lib/js2/util/processor.rb
60
- - lib/js2/util/rdoc.rb
61
- - lib/js2/util/sel_decorator.rb
62
- - lib/js2/util/haml_filter.rb
63
- - lib/js2/util/jamis.rb
41
+ extra_rdoc_files: []
42
+
64
43
  files:
65
- - Manifest
66
- - README.md
67
- - Rakefile
68
- - CHANGELOG
69
44
  - bin/js2
70
- - config/js2.yml
71
- - js2.gemspec
45
+ - bin/js2-ruby
46
+ - lib/js2/command.rb
47
+ - lib/js2/context.rb
48
+ - lib/js2/fs.rb
49
+ - lib/js2/rack.rb
72
50
  - lib/js2.rb
73
- - lib/js2/parser/haml.rb
74
- - lib/js2/parser/haml_engine.rb
75
- - lib/js2/parser/lexer.rb
76
- - lib/js2/parser/tokenizer.rb
77
- - lib/js2/ragel/helper.rb
78
- - lib/js2/ragel/tokenizer.rl
79
- - lib/js2/ragel/tokenizer.rl.erb
80
- - lib/js2/standard/class_node.rb
81
- - lib/js2/standard/factory.rb
82
- - lib/js2/standard/node.rb
83
- - lib/js2/util/compilation.rb
84
- - lib/js2/util/config.rb
85
- - lib/js2/util/exec.rb
86
- - lib/js2/util/file_handler.rb
87
- - lib/js2/util/js2bootstrap.js2
88
- - lib/js2/util/processor.rb
89
- - lib/js2/util/rdoc.rb
90
- - lib/js2/util/sel_decorator.rb
91
- - lib/js2/util/haml_filter.rb
92
- - lib/js2/util/jamis.rb
93
- - test/compiled/bar.js
94
- - test/compiled/basic.comp.js
95
- - test/compiled/basic.js
96
- - test/compiled/foo.js
97
- - test/fixtures/bar.js2
98
- - test/fixtures/basic.js2
99
- - test/fixtures/basic.js2.haml
100
- - test/fixtures/basic.js2.yml
101
- - test/fixtures/curry.js2
102
- - test/fixtures/foo.js2
103
- - test/fixtures/member.js2
104
- - test/fixtures/private.js2
105
- - test/fixtures/property.js2
106
- - test/test_helper.rb
107
- - test/test_js2.rb
108
- - wiki/features.md
109
- - wiki/installation.md
51
+ - lib/js2/js2.js
110
52
  has_rdoc: true
111
- homepage: http://github.com/jeffsu/js2
53
+ homepage: http://jeffsu.github.com
112
54
  licenses: []
113
55
 
114
56
  post_install_message:
115
- rdoc_options:
116
- - --line-numbers
117
- - --inline-source
118
- - --title
119
- - Js2
120
- - --main
121
- - README.md
57
+ rdoc_options: []
58
+
122
59
  require_paths:
123
60
  - lib
124
61
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -132,19 +69,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
132
69
  required_rubygems_version: !ruby/object:Gem::Requirement
133
70
  none: false
134
71
  requirements:
135
- - - ">="
72
+ - - ">"
136
73
  - !ruby/object:Gem::Version
137
74
  segments:
138
75
  - 1
139
- - 2
140
- version: "1.2"
76
+ - 3
77
+ - 1
78
+ version: 1.3.1
141
79
  requirements: []
142
80
 
143
- rubyforge_project: js2
81
+ rubyforge_project:
144
82
  rubygems_version: 1.3.7
145
83
  signing_key:
146
84
  specification_version: 3
147
- summary: Cross-Browser Object Oriented Javascript Compiler
148
- test_files:
149
- - test/test_js2.rb
150
- - test/test_helper.rb
85
+ summary: Javascript Syntactic Sugar
86
+ test_files: []
87
+
data/CHANGELOG DELETED
@@ -1,17 +0,0 @@
1
- ## Version 0.1.8
2
- * Adding JS2.Observable module to boostrap
3
- * Fixed "STR2CSTR" bug when used in Ruby 1.9.x
4
-
5
- ## Version 0.1.7
6
- * Support for Ruby 1.9.x
7
-
8
- ## Version 0.1.6
9
- * Fixed RubyInline dependency
10
-
11
- ## Version 0.1.4
12
- * Minor fix in doc directory
13
-
14
- ## Version 0.1.3
15
- * Fixed "js2 rdoc" command
16
- * Added jamis.rb to the Manifest
17
- * Added javascript to rewrite rdoc to look more like javascript
data/Manifest DELETED
@@ -1,45 +0,0 @@
1
- Manifest
2
- README.md
3
- Rakefile
4
- CHANGELOG
5
- bin/js2
6
- config/js2.yml
7
- js2.gemspec
8
- lib/js2.rb
9
- lib/js2/parser/haml.rb
10
- lib/js2/parser/haml_engine.rb
11
- lib/js2/parser/lexer.rb
12
- lib/js2/parser/tokenizer.rb
13
- lib/js2/ragel/helper.rb
14
- lib/js2/ragel/tokenizer.rl
15
- lib/js2/ragel/tokenizer.rl.erb
16
- lib/js2/standard/class_node.rb
17
- lib/js2/standard/factory.rb
18
- lib/js2/standard/node.rb
19
- lib/js2/util/compilation.rb
20
- lib/js2/util/config.rb
21
- lib/js2/util/exec.rb
22
- lib/js2/util/file_handler.rb
23
- lib/js2/util/js2bootstrap.js2
24
- lib/js2/util/processor.rb
25
- lib/js2/util/rdoc.rb
26
- lib/js2/util/sel_decorator.rb
27
- lib/js2/util/haml_filter.rb
28
- lib/js2/util/jamis.rb
29
- test/compiled/bar.js
30
- test/compiled/basic.comp.js
31
- test/compiled/basic.js
32
- test/compiled/foo.js
33
- test/fixtures/bar.js2
34
- test/fixtures/basic.js2
35
- test/fixtures/basic.js2.haml
36
- test/fixtures/basic.js2.yml
37
- test/fixtures/curry.js2
38
- test/fixtures/foo.js2
39
- test/fixtures/member.js2
40
- test/fixtures/private.js2
41
- test/fixtures/property.js2
42
- test/test_helper.rb
43
- test/test_js2.rb
44
- wiki/features.md
45
- wiki/installation.md
data/README.md DELETED
@@ -1,75 +0,0 @@
1
- [JS2](http://github.com/jeffsu/js2) - Friendly Cross Browser Object Oriented Javascript
2
- =======================================================================================
3
-
4
- JS2 is a way to write classes in a more familiar way for programmers who are used to syntax in languages such as: Java, Ruby, C++, etc...
5
- The main motivation is to provide a clean and a less verbose syntax for creating classes, inheritance and modules in Javascript. JS2 plays
6
- nicely with most of the popular frameworks including: jQuery and prototype. It also provides some syntactic sugar on the repetative aspects
7
- of Javascript.
8
-
9
- Sample Syntax:
10
- class Rectangle {
11
- property height;
12
- property width;
13
-
14
- function area () {
15
- return this.height * this.width;
16
- }
17
- }
18
-
19
- class Square extends Rectangle {
20
- function area () {
21
- return this.width * this.width;
22
- }
23
- }
24
-
25
- var s = new Square();
26
-
27
- * [Installation](http://github.com/jeffsu/js2/blob/master/wiki/installation.md)
28
- * [Language Features and Examples](http://github.com/jeffsu/js2/blob/master/wiki/features.md)
29
- * [Compiler Features](http://github.com/jeffsu/js2/blob/master/wiki/compiler.md)
30
- * [Source](http://github.com/jeffsu/js2)
31
-
32
- Things You need to run JS2
33
- --------------------------
34
- * Ruby - language used to parse js2 and generate javascript
35
- * Ruby Gems - ruby package manager
36
- * js2
37
- * RubyInline
38
- * haml (optional)
39
-
40
- Quick Start Guide
41
- -----------------
42
- Create a js2 file (foo.js2):
43
- class Person {
44
- function speak() {
45
- alert("Hello! I'm a person!");
46
- }
47
-
48
- function walk() {
49
- alert("Walking!");
50
- }
51
- }
52
-
53
- class Student extends Person {
54
- function speak() {
55
- alert("Hello, I'm a student!");
56
- }
57
- }
58
-
59
- var person = new Person();
60
- var student = new Student();
61
-
62
- person.speak();
63
- student.speak();
64
- person.walk();
65
- student.walk();
66
-
67
- Run js2 in the same directory
68
- js2 compile
69
-
70
- You should now see these files in that directory:
71
- * foo.js2
72
- * foo.js
73
- * js2bootstrap.js
74
-
75
- Include these js2bootstrap.js and foo.js (make sure js2bootstrap.js is included first) in your html page.
data/Rakefile DELETED
@@ -1,28 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'echoe'
4
-
5
- JS2_VERSION = '0.1.8'
6
- Echoe.new('js2', JS2_VERSION) do |p|
7
- p.summary = "Cross-Browser Object Oriented Javascript Compiler"
8
- p.description = "Cross-Browser Object Oriented Javascript Compiler"
9
- p.url = "http://github.com/jeffsu/js2"
10
- p.author = "Jeff Su"
11
- p.email = "me@jeffsu.com"
12
- p.ignore_pattern = ["tmp/*", "script/*", "test/out" ]
13
- p.development_dependencies = []
14
-
15
- p.runtime_dependencies = ["RubyInline"]
16
- end
17
-
18
- namespace :js2 do
19
- task :compile do
20
- system("cd ./lib/js2/ragel/; ruby helper.rb; ragel -C tokenizer.rl; mv tokenizer.c ../parser/tokenizer.rb")
21
- end
22
-
23
- task :install do
24
- Rake::Task['gem'].invoke
25
- system("sudo gem install ./pkg/js2-#{JS2_VERSION}.gem")
26
- end
27
- end
28
-
data/config/js2.yml DELETED
@@ -1,2 +0,0 @@
1
- js2_dir: './test/fixtures'
2
- out_dir: './test/out'
data/js2.gemspec DELETED
@@ -1,36 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{js2}
5
- s.version = "0.1.8"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Jeff Su"]
9
- s.date = %q{2010-10-21}
10
- s.default_executable = %q{js2}
11
- s.description = %q{Cross-Browser Object Oriented Javascript Compiler}
12
- s.email = %q{me@jeffsu.com}
13
- s.executables = ["js2"]
14
- s.extra_rdoc_files = ["README.md", "CHANGELOG", "bin/js2", "lib/js2.rb", "lib/js2/parser/haml.rb", "lib/js2/parser/haml_engine.rb", "lib/js2/parser/lexer.rb", "lib/js2/parser/tokenizer.rb", "lib/js2/ragel/helper.rb", "lib/js2/ragel/tokenizer.rl", "lib/js2/ragel/tokenizer.rl.erb", "lib/js2/standard/class_node.rb", "lib/js2/standard/factory.rb", "lib/js2/standard/node.rb", "lib/js2/util/compilation.rb", "lib/js2/util/config.rb", "lib/js2/util/exec.rb", "lib/js2/util/file_handler.rb", "lib/js2/util/js2bootstrap.js2", "lib/js2/util/processor.rb", "lib/js2/util/rdoc.rb", "lib/js2/util/sel_decorator.rb", "lib/js2/util/haml_filter.rb", "lib/js2/util/jamis.rb"]
15
- s.files = ["Manifest", "README.md", "Rakefile", "CHANGELOG", "bin/js2", "config/js2.yml", "js2.gemspec", "lib/js2.rb", "lib/js2/parser/haml.rb", "lib/js2/parser/haml_engine.rb", "lib/js2/parser/lexer.rb", "lib/js2/parser/tokenizer.rb", "lib/js2/ragel/helper.rb", "lib/js2/ragel/tokenizer.rl", "lib/js2/ragel/tokenizer.rl.erb", "lib/js2/standard/class_node.rb", "lib/js2/standard/factory.rb", "lib/js2/standard/node.rb", "lib/js2/util/compilation.rb", "lib/js2/util/config.rb", "lib/js2/util/exec.rb", "lib/js2/util/file_handler.rb", "lib/js2/util/js2bootstrap.js2", "lib/js2/util/processor.rb", "lib/js2/util/rdoc.rb", "lib/js2/util/sel_decorator.rb", "lib/js2/util/haml_filter.rb", "lib/js2/util/jamis.rb", "test/compiled/bar.js", "test/compiled/basic.comp.js", "test/compiled/basic.js", "test/compiled/foo.js", "test/fixtures/bar.js2", "test/fixtures/basic.js2", "test/fixtures/basic.js2.haml", "test/fixtures/basic.js2.yml", "test/fixtures/curry.js2", "test/fixtures/foo.js2", "test/fixtures/member.js2", "test/fixtures/private.js2", "test/fixtures/property.js2", "test/test_helper.rb", "test/test_js2.rb", "wiki/features.md", "wiki/installation.md"]
16
- s.homepage = %q{http://github.com/jeffsu/js2}
17
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Js2", "--main", "README.md"]
18
- s.require_paths = ["lib"]
19
- s.rubyforge_project = %q{js2}
20
- s.rubygems_version = %q{1.3.7}
21
- s.summary = %q{Cross-Browser Object Oriented Javascript Compiler}
22
- s.test_files = ["test/test_js2.rb", "test/test_helper.rb"]
23
-
24
- if s.respond_to? :specification_version then
25
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
- s.specification_version = 3
27
-
28
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
29
- s.add_runtime_dependency(%q<RubyInline>, [">= 0"])
30
- else
31
- s.add_dependency(%q<RubyInline>, [">= 0"])
32
- end
33
- else
34
- s.add_dependency(%q<RubyInline>, [">= 0"])
35
- end
36
- end
@@ -1,145 +0,0 @@
1
- begin
2
- require 'rubygems'
3
- require 'haml'
4
- require 'erb'
5
- require 'json'
6
-
7
- class JS2::Parser::Haml
8
- attr_accessor :vars
9
-
10
- def initialize (haml_engine = nil, vars = nil)
11
- @haml_engine = haml_engine || JS2::Parser::HamlEngine.new
12
- @vars = vars || Hash.new
13
- end
14
-
15
- def parse_out_js (file)
16
- padding = nil
17
- js = []
18
-
19
- File.read(file).split(/\r?\n/).each do |line|
20
- if m = line.match(/^(\s*):js2/)
21
- padding = m[1]
22
- elsif padding
23
- if m = line.match(/^#{padding}/)
24
- js << line
25
- elsif ! line.match(/^\s*$/)
26
- padding = nil
27
- end
28
- end
29
- end
30
-
31
- return js.join("\n")
32
- end
33
-
34
- def parse (file)
35
- erb = ERB.new(File.read(file))
36
- str = erb.result(binding)
37
-
38
- lines = str.split(/\r?\n/)
39
- result = Hash.new
40
-
41
- klass = Hash.new
42
- key = nil
43
-
44
- until lines.empty?
45
- line = lines.shift()
46
-
47
- if m = line.match(/^\.?([\w\.]+)/)
48
- klass = Hash.new
49
- result[m[1]] = klass
50
-
51
- elsif m = line.match(/^ sass(.*)/)
52
- key = 'sass'
53
- klass[key] = [ [ ], '', true ]
54
-
55
- elsif m = line.match(/^ \.?([\w]+)(\(([^)]+)\))?/)
56
- key = m[1]
57
- klass[key] = [ [], m[3] ]
58
- elsif key
59
- if key == 'sass' && ! klass[key][2]
60
- klass[key][0] << line.sub(/^ /, '')
61
- else
62
- klass[key][0] << line.sub(/^ /, '')
63
- end
64
- end
65
- end
66
-
67
- result.keys.each do |class_name|
68
- klass = result[class_name]
69
- klass.each_pair do |key, array|
70
- if key == 'sass'
71
- unless array[2]
72
- array[0].unshift ".#{class_name.sub(/\.\w+$/, '').sub(/\./, '')}"
73
- end
74
-
75
- klass[key] = sassify(array[0].join("\n"))
76
- else
77
- klass[key] = functionize(array[0].join("\n"), array[1])
78
- end
79
- end
80
- end
81
-
82
- return result
83
- rescue Exception => e
84
- puts file
85
- raise e
86
- end
87
-
88
- private
89
-
90
- def sassify (string)
91
- begin
92
- css = @haml_engine.sassify(string)
93
- rescue Exception => e
94
- puts "Error Processing SASS:"
95
- puts string
96
- puts e.backtrace.join("\n")
97
- raise e
98
- end
99
- return css.gsub(/\n/, '').to_json
100
- end
101
-
102
- def functionize (string, params)
103
- begin
104
- html = @haml_engine.hamlize(string)
105
- rescue Exception => e
106
- puts "Error Processing HAML:"
107
- puts string
108
- puts e.backtrace.join("\n")
109
- raise e
110
- end
111
-
112
- if params
113
- return functionize_with_params(html, params)
114
- end
115
-
116
- counter = 0
117
- segments = html.split(%r|#\w+#|).collect { |seg| seg.to_json }
118
- ret = Array.new
119
- segments.each_with_index do |seg, i|
120
- ret.push(seg)
121
- ret.push(%{arguments[#{i}]}) if (segments.length-1) > i
122
- end
123
- return %{function(){return #{ret.join('+')}}}
124
- end
125
-
126
-
127
- def functionize_with_params (string, params)
128
- args = []
129
- string.gsub!(/#([^#]+)#/) do |m|
130
- args << m.gsub(/#/, '')
131
- '###'
132
- end
133
-
134
- segments = string.split(%r|###|).collect { |seg| seg.to_json }
135
- ret = segments.zip(args).flatten.reject { |a| a.nil? }.join('+');
136
- return %{function(#{params}){return #{ret}}}
137
- end
138
-
139
-
140
- end
141
- rescue Exception
142
- puts "HAML is not supported"
143
-
144
-
145
- end
@@ -1,19 +0,0 @@
1
- begin
2
- require 'rubygems'
3
- require 'haml'
4
- require 'sass'
5
- require 'json'
6
- rescue Exception
7
- puts "HAML is not supported"
8
- end
9
-
10
-
11
- class JS2::Parser::HamlEngine
12
- def hamlize (string)
13
- return Haml::Engine.new(string, { :ugly => true }).render(self).gsub(/\n/, '')
14
- end
15
-
16
- def sassify (string)
17
- return Sass::Engine.new(string, { :ugly => true }).render
18
- end
19
- end
@@ -1,37 +0,0 @@
1
- class JS2::Parser::Lexer
2
- def initialize
3
- @tokenizer = JS2::Parser::Tokenizer.new
4
- end
5
-
6
- def start_node (type, idx, is_static = false)
7
- child = @stack.last.add_child(type, idx)
8
- @stack.push(child)
9
- end
10
-
11
- def stop_node (idx)
12
- @last_idx = idx
13
- last = @stack.pop()
14
- last.stop(idx)
15
- end
16
-
17
- def parse (string, factory, file = nil)
18
- @string = string
19
- @page = factory.page_node(string, file)
20
- @stack = [ @page ]
21
- @last_idx = 0
22
-
23
- @tokenizer.tokenize!(@string, self)
24
-
25
- @page.children.each do |c|
26
- c.stop(@last_idx) unless c.stop_idx
27
- end
28
-
29
- @page.stop(@last_idx)
30
- end
31
-
32
- def parse_file (file, factory)
33
- parse(File.read(file), factory, file)
34
- return @page
35
- end
36
- end
37
-