rkelly-remix 0.0.1 → 0.0.2

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/README.rdoc CHANGED
@@ -1,38 +1,12 @@
1
- = RKelly
2
-
3
- * http://rkelly.rubyforge.org/
1
+ = RKelly Remix
4
2
 
5
3
  == DESCRIPTION
6
4
 
7
- The RKelly library will parse JavaScript and return a parse tree.
8
-
9
- == Example
10
-
11
- ##
12
- # Iterate over and modify a JavaScript AST. Then print the modified
13
- # AST as JavaScript.
14
- require 'rkelly'
5
+ Fork of the RKelly library to make it suitable as the JavaScript parser
6
+ in JSDuck.
15
7
 
16
- parser = RKelly::Parser.new
17
- ast = parser.parse(
18
- "for(var i = 0; i < 10; i++) { var x = 5 + 5; }"
19
- )
20
-
21
- ast.each do |node|
22
- node.value = 'hello' if node.value == 'i'
23
- node.name = 'hello' if node.respond_to?(:name) && node.name == 'i'
24
- end
25
- puts ast.to_ecma # => awesome javascript
26
-
27
- == Acknowledgments
28
-
29
- The original javascript parser was was taken from rbnarcissus written by
30
- Paul Sowden. Thanks Paul!
31
-
32
- http://idontsmoke.co.uk/2005/rbnarcissus/
8
+ * http://rkelly.rubyforge.org/
33
9
 
34
- The current parser was ported from WebKit. Thank you WebKit team!
35
-
36
10
  == License
37
11
 
38
12
  The MIT License
@@ -1,3 +1,3 @@
1
1
  module RKelly
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -64,12 +64,23 @@ module RKelly
64
64
  '}' => true,
65
65
  }
66
66
 
67
+ # Determine the method to use to measure String length in bytes,
68
+ # because StringScanner#pos can obly be set in bytes.
69
+ #
70
+ # - In Ruby 1.8 String#length returns always the string length
71
+ # in bytes.
72
+ #
73
+ # - In Ruby 1.9+ String#length returns string length in
74
+ # characters and we need to use String#bytesize instead.
75
+ #
76
+ BYTESIZE_METHOD = "".respond_to?(:bytesize) ? :bytesize : :length
77
+
67
78
  def initialize(&block)
68
79
  @lexemes = Hash.new {|hash, key| hash[key] = [] }
69
80
 
70
81
  token(:COMMENT, /\/(?:\*(?:.)*?\*\/|\/[^\n]*)/m, ['/'])
71
82
  token(:STRING, /"(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'/m, ["'", '"'])
72
- token(:S, /[\s\r\n]*/m, [" ", "\t", "\r", "\n", "\f"])
83
+ token(:S, /\s*/m, [" ", "\t", "\r", "\n", "\f"])
73
84
 
74
85
  # A regexp to match floating point literals (but not integer literals).
75
86
  digits = ('0'..'9').to_a
@@ -148,7 +159,7 @@ module RKelly
148
159
  accepting_regexp = followable_by_regex(token)
149
160
  end
150
161
 
151
- scanner.pos += token.value.length
162
+ scanner.pos += token.value.send(BYTESIZE_METHOD)
152
163
  token.range = range = range.next(token.value)
153
164
  tokens << token
154
165
  end
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require File.dirname(__FILE__) + "/helper"
2
3
 
3
4
  class TokenizerTest < Test::Unit::TestCase
@@ -162,6 +163,26 @@ class TokenizerTest < Test::Unit::TestCase
162
163
  ], tokens)
163
164
  end
164
165
 
166
+ def test_unicode_string
167
+ tokens = @tokenizer.tokenize("foo = 'öäüõ';")
168
+ assert_tokens([
169
+ [:IDENT, 'foo'],
170
+ ['=', '='],
171
+ [:STRING, "'öäüõ'"],
172
+ [';', ';'],
173
+ ], tokens)
174
+ end
175
+
176
+ def test_unicode_regex
177
+ tokens = @tokenizer.tokenize("foo = /öäüõ/;")
178
+ assert_tokens([
179
+ [:IDENT, 'foo'],
180
+ ['=', '='],
181
+ [:REGEXP, "/öäüõ/"],
182
+ [';', ';'],
183
+ ], tokens)
184
+ end
185
+
165
186
  def assert_tokens(expected, actual)
166
187
  assert_equal(expected, actual.select { |x| x[0] != :S })
167
188
  end
metadata CHANGED
@@ -1,66 +1,65 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rkelly-remix
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 1
10
- version: 0.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Aaron Patterson
14
9
  - Rene Saarsoo
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2013-07-03 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2013-07-04 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: rdoc
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
19
+ requirements:
27
20
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 27
30
- segments:
31
- - 4
32
- - 0
33
- version: "4.0"
21
+ - !ruby/object:Gem::Version
22
+ version: '4.0'
34
23
  type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: hoe
38
24
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '4.0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: hoe
33
+ requirement: !ruby/object:Gem::Requirement
40
34
  none: false
41
- requirements:
35
+ requirements:
42
36
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 11
45
- segments:
46
- - 3
47
- - 6
48
- version: "3.6"
37
+ - !ruby/object:Gem::Version
38
+ version: '3.6'
49
39
  type: :development
50
- version_requirements: *id002
51
- description: The RKelly library will parse JavaScript and return a parse tree.
52
- email:
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '3.6'
47
+ description: ! 'Fork of the RKelly library to make it suitable as the JavaScript parser
48
+
49
+ in JSDuck.
50
+
51
+
52
+ * http://rkelly.rubyforge.org/'
53
+ email:
53
54
  - aaron.patterson@gmail.com
54
55
  - rene.saarsoo@sencha.com
55
56
  executables: []
56
-
57
57
  extensions: []
58
-
59
- extra_rdoc_files:
58
+ extra_rdoc_files:
60
59
  - CHANGELOG.rdoc
61
60
  - Manifest.txt
62
61
  - README.rdoc
63
- files:
62
+ files:
64
63
  - CHANGELOG.rdoc
65
64
  - Manifest.txt
66
65
  - README.rdoc
@@ -265,41 +264,34 @@ files:
265
264
  - test/test_while_node.rb
266
265
  - test/test_with_node.rb
267
266
  - .gemtest
268
- homepage: http://rkelly.rubyforge.org/
267
+ homepage:
269
268
  licenses: []
270
-
271
269
  post_install_message:
272
- rdoc_options:
270
+ rdoc_options:
273
271
  - --main
274
272
  - README.rdoc
275
- require_paths:
273
+ require_paths:
276
274
  - lib
277
- required_ruby_version: !ruby/object:Gem::Requirement
275
+ required_ruby_version: !ruby/object:Gem::Requirement
278
276
  none: false
279
- requirements:
280
- - - ">="
281
- - !ruby/object:Gem::Version
282
- hash: 3
283
- segments:
284
- - 0
285
- version: "0"
286
- required_rubygems_version: !ruby/object:Gem::Requirement
277
+ requirements:
278
+ - - ! '>='
279
+ - !ruby/object:Gem::Version
280
+ version: '0'
281
+ required_rubygems_version: !ruby/object:Gem::Requirement
287
282
  none: false
288
- requirements:
289
- - - ">="
290
- - !ruby/object:Gem::Version
291
- hash: 3
292
- segments:
293
- - 0
294
- version: "0"
283
+ requirements:
284
+ - - ! '>='
285
+ - !ruby/object:Gem::Version
286
+ version: '0'
295
287
  requirements: []
296
-
297
288
  rubyforge_project: rkelly-remix
298
289
  rubygems_version: 1.8.24
299
290
  signing_key:
300
291
  specification_version: 3
301
- summary: The RKelly library will parse JavaScript and return a parse tree.
302
- test_files:
292
+ summary: Fork of the RKelly library to make it suitable as the JavaScript parser in
293
+ JSDuck
294
+ test_files:
303
295
  - test/test_parser.rb
304
296
  - test/test_ecma_visitor.rb
305
297
  - test/test_arguments_node.rb