elparser 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/lib/elparser/version.rb +1 -1
- data/lib/elparser.rb +23 -1
- data/test/test-elparser.rb +6 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30bbdd9381123f9b97cd34fb183649564cff8c8e
|
4
|
+
data.tar.gz: cf641c72ac99855080bbee44a894408837264206
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d758c5348e3ce6678a3478a864db0a824aee0cbef2399b312ff0a8b8ac8578439bc8b27e1c22123add876653b2fe561310b44ca4df11e910a11971a383fe5c72
|
7
|
+
data.tar.gz: 67babf2246de9b98c0d9f9649e000a459d436f0c66d5ed520e08a7b54821c99459f00f99609921bced884677ed1e9ab4071461ec74048d22e7635dd305f6e9de
|
data/lib/elparser/version.rb
CHANGED
data/lib/elparser.rb
CHANGED
@@ -248,7 +248,7 @@ module Elparser
|
|
248
248
|
s.scan(/\A[-+]?(0|[1-9]\d*)/) ? (@tokens << [:INTEGER, s.matched]) :
|
249
249
|
s.scan(/\A\.(?=\s)/) ? (@tokens << ['.', '.']) :
|
250
250
|
s.scan(/\A[a-z\-.\/_:*<>+=$#][a-z\-.\/_:$*<>+=0-9]*/i) ? (@tokens << [:SYMBOL, s.matched]) :
|
251
|
-
s.scan(/\A"(([^\\"]|\\.)*)"/) ? (@tokens << [:STRING, s.matched.slice(1...-1)]) :
|
251
|
+
s.scan(/\A"(([^\\"]|\\.)*)"/) ? (@tokens << [:STRING, _unescape_string(s.matched.slice(1...-1))]) :
|
252
252
|
s.scan(/\A./) ? (a = s.matched; @tokens << [a, a]) :
|
253
253
|
(raise ParserError.new("Scanner error",s.pos,s.peek(5)))
|
254
254
|
end
|
@@ -259,6 +259,28 @@ module Elparser
|
|
259
259
|
end
|
260
260
|
end
|
261
261
|
|
262
|
+
UNESCAPES = {
|
263
|
+
'a' => "\x07", 'b' => "\x08", 't' => "\x09",
|
264
|
+
'n' => "\x0a", 'v' => "\x0b", 'f' => "\x0c",
|
265
|
+
'r' => "\x0d", 'e' => "\x1b", "\\\\" => "\x5c",
|
266
|
+
"\"" => "\x22", "'" => "\x27"
|
267
|
+
}
|
268
|
+
UNESCAPES_REGEX = /\\(?:([#{UNESCAPES.keys.join}])|u([\da-fA-F]{4})|u\{([\da-fA-F]{1,6})\})|\\0?x([\da-fA-F]{2})/
|
269
|
+
|
270
|
+
def _unescape_string(str)
|
271
|
+
return str.gsub(UNESCAPES_REGEX) do
|
272
|
+
if $1
|
273
|
+
if $1 == '\\' then '\\' else UNESCAPES[$1] end
|
274
|
+
elsif $2 # escape \u0000 unicode
|
275
|
+
["#$2".hex].pack('U*')
|
276
|
+
elsif $3 # escape \u{0000} unicode
|
277
|
+
["#$3".hex].pack('U*')
|
278
|
+
elsif $4 # escape \0xff or \xff
|
279
|
+
[$4].pack('H2')
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
262
284
|
def next_token
|
263
285
|
@tokens.shift
|
264
286
|
end
|
data/test/test-elparser.rb
CHANGED
@@ -63,12 +63,17 @@ class TestElparser < Test::Unit::TestCase
|
|
63
63
|
'symbol2' => ['$sf-/p.post', _symbol('$sf-/p.post')],
|
64
64
|
'symbol3' => ['#<buffer*GNUEmacs*>', _symbol('#<buffer*GNUEmacs*>')],
|
65
65
|
'string' => ['"qwert"', _string("qwert")],
|
66
|
-
'
|
66
|
+
'string-quote' => ["\"\\\"\"", _string("\"")],
|
67
|
+
'string-quote2'=> ["\"abc\\\"dds\\\"dfff\'123\' \\\\n\\nok?\"", _string("abc\"dds\"dfff\'123\' \\n\nok?")],
|
68
|
+
'string-unicode1' => ["\"\\u{2026}\"", _string("\u{2026}")],
|
69
|
+
'string-unicode2' => ["\"\\\\u{2026}\"", _string("\\u{2026}")],
|
70
|
+
'string-unicode3' => ["\"\\u2026\"", _string("\u2026")],
|
67
71
|
'quote' => ['\'symbol', _q(_symbol('symbol'))],
|
68
72
|
'nil' => ['nil', _nil],
|
69
73
|
})
|
70
74
|
def test_primitive(data)
|
71
75
|
src, expected = data
|
76
|
+
#puts src,expected
|
72
77
|
assert_equal expected, @parser.parse1(src)
|
73
78
|
end
|
74
79
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SAKURAI Masashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: racc
|
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
106
|
version: '0'
|
107
107
|
requirements: []
|
108
108
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.4.
|
109
|
+
rubygems_version: 2.4.5.1
|
110
110
|
signing_key:
|
111
111
|
specification_version: 4
|
112
112
|
summary: A parser for S-expression of emacs lisp
|