js2 0.1.8 → 0.3.0.pre5

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.
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
-