udon 0.0.0 → 0.0.1
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/Gemfile +2 -1
- data/Rakefile +15 -3
- data/VERSION +1 -1
- data/lib/VERSION +1 -0
- data/lib/udon/udon_parser.rb +205 -0
- data/lib/udon.rb +16 -0
- data/machines/udon.machine +42 -0
- data/test/helper.rb +76 -4
- data/test/test_udon.rb +31 -3
- data/udon.gemspec +70 -0
- metadata +30 -10
data/Gemfile
CHANGED
@@ -6,10 +6,11 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
-
gem "
|
9
|
+
gem "minitest", ">= 0"
|
10
10
|
gem "bundler", "~> 1.0.0"
|
11
11
|
gem "jeweler", "~> 1.6.4"
|
12
12
|
gem "rcov", ">= 0"
|
13
13
|
gem "reek", "~> 1.2.8"
|
14
14
|
gem "roodi", "~> 2.1.0"
|
15
|
+
gem "genmachine", "~> 0.1.6"
|
15
16
|
end
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require 'rdoc/task'
|
3
4
|
require 'rubygems'
|
4
5
|
require 'bundler'
|
5
6
|
begin
|
@@ -11,6 +12,16 @@ rescue Bundler::BundlerError => e
|
|
11
12
|
end
|
12
13
|
require 'rake'
|
13
14
|
|
15
|
+
file "lib/udon/udon_parser.rb" => ["machines/udon.machine"] do |t|
|
16
|
+
sh "genmachine -o lib/udon/ -l ruby --no-executable -c UdonParser #{t.prerequisites.join(' ')}"
|
17
|
+
end
|
18
|
+
task :install => [:build_parser]
|
19
|
+
|
20
|
+
task :build_parser do |t|
|
21
|
+
sh "rm -f lib/udon/udon_parser.rb"
|
22
|
+
Rake::Task['lib/udon/udon_parser.rb'].execute
|
23
|
+
end
|
24
|
+
|
14
25
|
require 'jeweler'
|
15
26
|
Jeweler::Tasks.new do |gem|
|
16
27
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
@@ -29,14 +40,16 @@ require 'rake/testtask'
|
|
29
40
|
Rake::TestTask.new(:test) do |test|
|
30
41
|
test.libs << 'lib' << 'test'
|
31
42
|
test.pattern = 'test/**/test_*.rb'
|
32
|
-
test.verbose =
|
43
|
+
test.verbose = false
|
33
44
|
end
|
34
45
|
|
46
|
+
task :test => ['lib/udon/udon_parser.rb']
|
47
|
+
|
35
48
|
require 'rcov/rcovtask'
|
36
49
|
Rcov::RcovTask.new do |test|
|
37
50
|
test.libs << 'test'
|
38
51
|
test.pattern = 'test/**/test_*.rb'
|
39
|
-
test.verbose =
|
52
|
+
test.verbose = false
|
40
53
|
test.rcov_opts << '--exclude "gems/*"'
|
41
54
|
end
|
42
55
|
|
@@ -55,7 +68,6 @@ end
|
|
55
68
|
|
56
69
|
task :default => :test
|
57
70
|
|
58
|
-
require 'rake/rdoctask'
|
59
71
|
Rake::RDocTask.new do |rdoc|
|
60
72
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
61
73
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/lib/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
@@ -0,0 +1,205 @@
|
|
1
|
+
require 'strscan'
|
2
|
+
$KCODE="U"
|
3
|
+
|
4
|
+
module UdonParser
|
5
|
+
def self.parse(str) Parser.new(str).parse end
|
6
|
+
def self.parse_file(fname) Parser.new(IO.read(fname)).parse end
|
7
|
+
|
8
|
+
class UHash < Hash
|
9
|
+
def <<(kv) k,v = kv; self[k] = v end
|
10
|
+
end
|
11
|
+
|
12
|
+
class UString < String
|
13
|
+
def <<(v)
|
14
|
+
begin
|
15
|
+
super([v].pack('U*'))
|
16
|
+
rescue
|
17
|
+
super(v)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class UNode
|
23
|
+
attr_accessor :name, :m,:a,:c
|
24
|
+
def initialize(params={})
|
25
|
+
@m = params.delete(:m) || UHash.new
|
26
|
+
@m[:sline] ||= params.delete(:sline)
|
27
|
+
@m[:schr] ||= params.delete(:schr)
|
28
|
+
@a= params.delete(:a) || UHash.new
|
29
|
+
@c= params.delete(:c) || []
|
30
|
+
@name = params.delete(:name)
|
31
|
+
end
|
32
|
+
def <<(val) @c<<val end
|
33
|
+
def [](key) @c[key] end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Parser < StringScanner
|
37
|
+
def init(source, opts={})
|
38
|
+
opts ||= {}
|
39
|
+
super ensure_encoding(source)
|
40
|
+
@global = {}
|
41
|
+
end
|
42
|
+
|
43
|
+
def ensure_encoding(source)
|
44
|
+
if defined?(::Encoding)
|
45
|
+
if source.encoding == ::Encoding::ASCII_8BIT
|
46
|
+
b = source[0, 4].bytes.to_a
|
47
|
+
source =
|
48
|
+
case
|
49
|
+
when b.size>=4 && b[0]==0 && b[1]==0 && b[2]==0
|
50
|
+
source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
|
51
|
+
when b.size>=4 && b[0]==0 && b[2]==0
|
52
|
+
source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
|
53
|
+
when b.size>=4 && b[1]==0 && b[2]==0 && b[3]==0
|
54
|
+
source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
|
55
|
+
when b.size>=4 && b[1]==0 && b[3]==0
|
56
|
+
source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
|
57
|
+
else source.dup end
|
58
|
+
else source = source.encode(::Encoding::UTF_8) end
|
59
|
+
source.force_encoding(::Encoding::ASCII_8BIT)
|
60
|
+
else
|
61
|
+
b = source
|
62
|
+
source =
|
63
|
+
case
|
64
|
+
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0; Iconv.iconv('utf-8', 'utf-32be', b)
|
65
|
+
when b.size >= 4 && b[0] == 0 && b[2] == 0; Iconv.iconv('utf-8', 'utf-16be', b)
|
66
|
+
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0; Iconv.iconv('utf-8', 'utf-32le', b)
|
67
|
+
when b.size >= 4 && b[1] == 0 && b[3] == 0; Iconv.iconv('utf-8', 'utf-16le', b)
|
68
|
+
else b end
|
69
|
+
end
|
70
|
+
return source
|
71
|
+
end
|
72
|
+
|
73
|
+
def parse
|
74
|
+
reset
|
75
|
+
@line = 1
|
76
|
+
@pos = 1
|
77
|
+
@leading = true
|
78
|
+
@indent = 0
|
79
|
+
@ast = document
|
80
|
+
return @ast
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def error(msg)
|
86
|
+
$stderr.puts "#{msg} | line: #{@line} | char: #{@pos}"
|
87
|
+
end
|
88
|
+
|
89
|
+
def global_state(c)
|
90
|
+
# Unicode newline characters & combinations
|
91
|
+
# Plus leading space for indents.
|
92
|
+
# Also tracks line and position for the AST
|
93
|
+
@last_is_newline = @last_is_space = false
|
94
|
+
case c
|
95
|
+
when 0x0b, 0x0c, 0x85, 0x2028, 0x2029
|
96
|
+
@last_is_newline = true; @line += 1; @pos = 1
|
97
|
+
@leading = true; @indent = 0
|
98
|
+
when 0x0a
|
99
|
+
nc = peek(4).unpack('U')[0]
|
100
|
+
if nc == 0x0d then getch; c = "\n\r" end
|
101
|
+
@last_is_newline = true; @line += 1; @pos = 1
|
102
|
+
@leading = true; @indent = 0
|
103
|
+
when 0x0d
|
104
|
+
nc = peek(4).unpack('U')[0]
|
105
|
+
if nc == 0x0a then getch; c = "\r\n" end
|
106
|
+
@last_is_newline = true; @line += 1; @pos = 1
|
107
|
+
@leading = true; @indent = 0
|
108
|
+
when 0x20
|
109
|
+
@indent += 1 if @leading
|
110
|
+
@last_is_space = true; @pos += 1
|
111
|
+
else @leading = false; @pos += 1 end
|
112
|
+
return @last_c = c
|
113
|
+
end
|
114
|
+
|
115
|
+
def nl?() return @last_is_newline end
|
116
|
+
def space?() return @last_is_space end
|
117
|
+
|
118
|
+
def nextchar
|
119
|
+
if @fwd then @fwd = false; return @last_c
|
120
|
+
else
|
121
|
+
c = getch
|
122
|
+
if c.nil?
|
123
|
+
c = :eof
|
124
|
+
@last_is_space = @last_is_newline = false
|
125
|
+
return @last_c = c
|
126
|
+
end
|
127
|
+
return global_state(c.unpack('U')[0])
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def eof?() return @last_c == :eof end
|
132
|
+
|
133
|
+
def document(p=nil,name='document')
|
134
|
+
state=':data_or_child'
|
135
|
+
s = []
|
136
|
+
a ||= UString.new
|
137
|
+
b ||= UString.new
|
138
|
+
trash ||= UString.new
|
139
|
+
loop do
|
140
|
+
c = nextchar
|
141
|
+
state = '{eof}' if c==:eof
|
142
|
+
case state
|
143
|
+
when ':data_or_child'
|
144
|
+
case
|
145
|
+
when nl?; @fwd=true; (a<<b if b.size>0); b=UString.new; state=':data'; next
|
146
|
+
when space?; b<<c; next
|
147
|
+
when c==35,c==124; @fwd=true; (trash<<b if b.size>0); b=UString.new; state=':child'; next
|
148
|
+
else @fwd=true; (a<<b if b.size>0); b=UString.new; state=':data'; next
|
149
|
+
end
|
150
|
+
when ':child'
|
151
|
+
if c==35
|
152
|
+
@fwd=true; (s<<a if a.size>0); a=UString.new; state=comment(':data_or_child',s); next
|
153
|
+
end
|
154
|
+
when '{eof}'
|
155
|
+
@fwd=true; (a<<b if b.size>0); b=UString.new; (s<<a if a.size>0); a=UString.new; return(s)
|
156
|
+
when ':data'
|
157
|
+
case
|
158
|
+
when nl?; a<<c; (s<<a if a.size>0); a=UString.new; state=':data_or_child'; next
|
159
|
+
else a<<c; next
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def comment(ns,p=nil,name='comment')
|
166
|
+
ipar=@indent
|
167
|
+
ibase=ipar+100
|
168
|
+
state=':1st:ws'
|
169
|
+
s = UNode.new(:name=>name,:sline=>@line,:schr=>@pos)
|
170
|
+
a ||= UString.new
|
171
|
+
loop do
|
172
|
+
c = nextchar
|
173
|
+
state = '{eof}' if c==:eof
|
174
|
+
case state
|
175
|
+
when ':nl'
|
176
|
+
case
|
177
|
+
when (@indent>ibase); @fwd=true; state=':child'; next
|
178
|
+
when nl?,(c>8&&c<11),space?; next
|
179
|
+
when (@indent<=ipar); @fwd=true; p<<s; return(ns)
|
180
|
+
else a<<c; ibase = @indent; state=':child'; next
|
181
|
+
end
|
182
|
+
when ':child'
|
183
|
+
case
|
184
|
+
when nl?; (s<<a if a.size>0); a=UString.new; state=':nl'; next
|
185
|
+
else a<<c; next
|
186
|
+
end
|
187
|
+
when ':1st'
|
188
|
+
case
|
189
|
+
when nl?; (s<<a if a.size>0); a=UString.new; state=':nl'; next
|
190
|
+
else a<<c; next
|
191
|
+
end
|
192
|
+
when '{eof}'
|
193
|
+
@fwd=true; (s<<a if a.size>0); a=UString.new; p<<s; return(ns)
|
194
|
+
when ':1st:ws'
|
195
|
+
case
|
196
|
+
when c==9,space?; next
|
197
|
+
when nl?; state=':nl'; next
|
198
|
+
else a<<c; state=':1st'; next
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
end
|
data/lib/udon.rb
CHANGED
@@ -1,3 +1,19 @@
|
|
1
1
|
module Udon
|
2
|
+
require 'udon/udon_parser'
|
3
|
+
VERSION = File.exist?(File.join(File.dirname(__FILE__),'VERSION')) ? File.read(File.join(File.dirname(__FILE__),'VERSION')) : ""
|
4
|
+
class << self
|
5
|
+
def version() VERSION end
|
2
6
|
|
7
|
+
def parse(source, opts={})
|
8
|
+
pp_ast = opts.delete(:pp_ast) || false
|
9
|
+
res = UdonParser::Parser.new(source, opts).parse
|
10
|
+
if pp_ast
|
11
|
+
require 'pp'
|
12
|
+
puts "\n----------------- AST ---------------------"
|
13
|
+
pp res
|
14
|
+
puts "\n-------------------------------------------"
|
15
|
+
end
|
16
|
+
return res
|
17
|
+
end
|
18
|
+
end
|
3
19
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Main entrypoint - a complete udon document
|
2
|
+
|
3
|
+
+-----------------+----------+-----+----------------+-------------------------+
|
4
|
+
| document()::[] | | | | :data_or_child |
|
5
|
+
| :data_or_child | [\n] | | a<<<b | :data |
|
6
|
+
| :data_or_child | [ ] | b<< | | :data_or_child |
|
7
|
+
| :data_or_child | [#|] | | trash<<<b | :child |
|
8
|
+
| :data_or_child | . | | a<<<b | :data |
|
9
|
+
|
10
|
+
| :data | [\n] | a<< | s<<<a | :data_or_child |
|
11
|
+
| :data | . | a<< | | :data |
|
12
|
+
| :child | [#] | | s<<<a | comment(:data_or_child) |
|
13
|
+
| {eof} | | | a<<<b; s<<<a | <done> |
|
14
|
+
# TODO: lots more children
|
15
|
+
|
16
|
+
For error recovery (go to the next line)
|
17
|
+
#+-----------------+----------+-----+----------------+--------------+
|
18
|
+
#| to_nextline(ns) | | | | :scan |
|
19
|
+
#| :scan | {eof?} | | | <ns> |
|
20
|
+
#| :scan | [\n] | | | <ns> |
|
21
|
+
#| :scan | . | << | | :scan |
|
22
|
+
#+-----------------+----------+-----+----------------+--------------+
|
23
|
+
|
24
|
+
Block comments
|
25
|
+
+-----------------+-----------------+-----+-----------------+--------------+
|
26
|
+
| comment(ns)::U | | | ipar=$indent | :1st:ws |
|
27
|
+
: : : : ibase=ipar+100 : :
|
28
|
+
| :1st:ws | [ \t] | << | | :1st:ws |
|
29
|
+
| :1st:ws | [\n] | << | | :nl |
|
30
|
+
| :1st:ws | . | a<< | | :1st |
|
31
|
+
| :1st | [\n] | << | s<<<a | :nl |
|
32
|
+
| :1st | . | a<< | | :1st |
|
33
|
+
| :nl | {$indent>ibase} | | | :child |
|
34
|
+
| :nl | [ \t\n] | << | | :nl |
|
35
|
+
| :nl | {$indent<=ipar} | | p<<s | <ns> |
|
36
|
+
| :nl | . | a<< | ibase = $indent | :child |
|
37
|
+
| :child | [\n] | << | s<<<a | :nl |
|
38
|
+
| :child | . | a<< | | :child |
|
39
|
+
| {eof} | | | s<<<a; p<<s | <ns> |
|
40
|
+
+-----------------+-----------------+-----+-----------------+--------------+
|
41
|
+
|
42
|
+
|
data/test/helper.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
$KCODE = 'U'
|
1
2
|
require 'rubygems'
|
2
3
|
require 'bundler'
|
3
4
|
begin
|
@@ -7,12 +8,83 @@ rescue Bundler::BundlerError => e
|
|
7
8
|
$stderr.puts "Run `bundle install` to install missing gems"
|
8
9
|
exit e.status_code
|
9
10
|
end
|
10
|
-
require '
|
11
|
-
require '
|
11
|
+
require 'iconv'
|
12
|
+
require 'minitest/unit'
|
13
|
+
require 'minitest/autorun'
|
14
|
+
require 'minitest/pride'
|
12
15
|
|
13
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
16
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
17
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
18
|
+
|
15
19
|
require 'udon'
|
16
20
|
|
17
|
-
class
|
21
|
+
class String
|
22
|
+
def udon; Udon.parse(self) end
|
23
|
+
def udon_pp; Udon.parse(self, :pp_ast=>true) end
|
18
24
|
end
|
25
|
+
|
26
|
+
class Array
|
27
|
+
def gcd; inject(){|n1,n2| n1.gcd(n2)} end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def gaussian(mean, stddev)
|
32
|
+
theta = 2 * Math::PI * rand
|
33
|
+
rho = Math.sqrt(-2 * Math.log(1 - rand))
|
34
|
+
scale = stddev * rho
|
35
|
+
if rand >= 0.5
|
36
|
+
return mean + scale * Math.cos(theta)
|
37
|
+
else
|
38
|
+
return mean + scale * Math.sin(theta)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def randstr(avg_length, char_dists = [[0.1,' '],[0.1,('A'..'Z')],[0.8,('a'..'z')]])
|
43
|
+
ret = ''
|
44
|
+
char_dists = char_dists.scan /./umn if char_dists.is_a?(String)
|
45
|
+
chrs = char_dists.sort_by{|n|n[0]}
|
46
|
+
chrs.map! do |k,ch|
|
47
|
+
if ch.nil?
|
48
|
+
ch = k
|
49
|
+
k = 1.0 / chrs.size.to_f
|
50
|
+
end
|
51
|
+
if ch.is_a?(Range)
|
52
|
+
if ch.max.is_a?(String)
|
53
|
+
[k, ((ch.min.unpack('U')[0])..(ch.max.unpack('U')[0]))]
|
54
|
+
else [k, ch] end
|
55
|
+
elsif ch.is_a?(Integer)
|
56
|
+
[k, (ch..ch)]
|
57
|
+
elsif ch.is_a?(String) && ch.scan(/./u).length == 1
|
58
|
+
[k, ((ch.unpack('U')[0])..(ch.unpack('U')[0]))]
|
59
|
+
elsif ch.is_a?(String)
|
60
|
+
[k, ch.unpack('U*')]
|
61
|
+
else
|
62
|
+
raise ArgumentError, 'Ranges and strings only'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
len = [gaussian(avg_length,avg_length/3.0).round, 0].max
|
66
|
+
(0..len).each do
|
67
|
+
range_sel = rand
|
68
|
+
prob_sum = 0.0
|
69
|
+
chrs.each do |prob,cr|
|
70
|
+
prob_sum += prob
|
71
|
+
if prob_sum > range_sel
|
72
|
+
if cr.is_a?(Range)
|
73
|
+
ret << [(cr.min + rand(cr.max - cr.min + 1))].pack('U')
|
74
|
+
else
|
75
|
+
ret << cr[rand(cr.length)]
|
76
|
+
end
|
77
|
+
break
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
# (To fix iconv bug: cr http://po-ru.com/diary/fixing-invalid-utf-8-in-ruby-revisited/ )
|
82
|
+
ret = ret + ' '
|
83
|
+
Iconv.iconv('UTF-8//IGNORE', 'UTF-8', ret)
|
84
|
+
return ret[0..-2]
|
85
|
+
end
|
86
|
+
|
87
|
+
class MiniTest::Unit::TestCase
|
88
|
+
end
|
89
|
+
|
90
|
+
MiniTest::Unit.autorun
|
data/test/test_udon.rb
CHANGED
@@ -1,7 +1,35 @@
|
|
1
1
|
require 'helper'
|
2
|
+
$KCODE='U'
|
2
3
|
|
3
|
-
class TestUdon <
|
4
|
-
|
5
|
-
|
4
|
+
class TestUdon < MiniTest::Unit::TestCase
|
5
|
+
def test_blank_documents
|
6
|
+
assert_equal(''.udon,[])
|
7
|
+
(0..5).each do
|
8
|
+
s = randstr(200," \t\n\r")
|
9
|
+
assert_equal(s.udon.join(''),s)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_passthrough_documents
|
14
|
+
chars = [[0.10, " \t"],
|
15
|
+
[0.05, "\n\r"],
|
16
|
+
[0.40, ('a'..'z')],
|
17
|
+
[0.15, ('A'..'Z')],
|
18
|
+
[0.15, ('0'..'9')],
|
19
|
+
[0.075, (32..126)],
|
20
|
+
[0.05, (0..255)],
|
21
|
+
[0.025, (0..0xffff)]]
|
22
|
+
(0..5).each do
|
23
|
+
s = randstr(500,chars)
|
24
|
+
s.gsub! /^\s*(<\||#|\|)/u, ''
|
25
|
+
assert_equal(s.udon.join(''),s)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_block_comments
|
30
|
+
#leading = randstr(200," \t\n\r")
|
31
|
+
#comment = "# hello\na"
|
32
|
+
#following = randstr(200," \t\n\r")
|
33
|
+
#(leading + comment + following).udon_pp
|
6
34
|
end
|
7
35
|
end
|
data/udon.gemspec
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{udon}
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Joseph Wecker"]
|
12
|
+
s.date = %q{2011-08-18}
|
13
|
+
s.description = %q{Parse and generate udon, inspired by zml, haml, json, and more.}
|
14
|
+
s.email = %q{joseph.wecker@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
"Gemfile",
|
22
|
+
"LICENSE.txt",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/VERSION",
|
27
|
+
"lib/udon.rb",
|
28
|
+
"lib/udon/udon_parser.rb",
|
29
|
+
"machines/udon.machine",
|
30
|
+
"test/helper.rb",
|
31
|
+
"test/test_udon.rb",
|
32
|
+
"udon.gemspec"
|
33
|
+
]
|
34
|
+
s.homepage = %q{http://udon.io}
|
35
|
+
s.licenses = ["MIT"]
|
36
|
+
s.require_paths = ["lib"]
|
37
|
+
s.rubygems_version = %q{1.6.2}
|
38
|
+
s.summary = %q{Universal Document and Object Notation}
|
39
|
+
|
40
|
+
if s.respond_to? :specification_version then
|
41
|
+
s.specification_version = 3
|
42
|
+
|
43
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
44
|
+
s.add_development_dependency(%q<minitest>, [">= 0"])
|
45
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
46
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
47
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
48
|
+
s.add_development_dependency(%q<reek>, ["~> 1.2.8"])
|
49
|
+
s.add_development_dependency(%q<roodi>, ["~> 2.1.0"])
|
50
|
+
s.add_development_dependency(%q<genmachine>, ["~> 0.1.6"])
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
53
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
55
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
56
|
+
s.add_dependency(%q<reek>, ["~> 1.2.8"])
|
57
|
+
s.add_dependency(%q<roodi>, ["~> 2.1.0"])
|
58
|
+
s.add_dependency(%q<genmachine>, ["~> 0.1.6"])
|
59
|
+
end
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
62
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
63
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
64
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
65
|
+
s.add_dependency(%q<reek>, ["~> 1.2.8"])
|
66
|
+
s.add_dependency(%q<roodi>, ["~> 2.1.0"])
|
67
|
+
s.add_dependency(%q<genmachine>, ["~> 0.1.6"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: udon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joseph Wecker
|
@@ -15,10 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-18 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
type: :development
|
22
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
24
|
none: false
|
24
25
|
requirements:
|
@@ -28,11 +29,11 @@ dependencies:
|
|
28
29
|
segments:
|
29
30
|
- 0
|
30
31
|
version: "0"
|
31
|
-
name:
|
32
|
+
name: minitest
|
32
33
|
version_requirements: *id001
|
33
34
|
prerelease: false
|
34
|
-
type: :development
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
+
type: :development
|
36
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
38
|
none: false
|
38
39
|
requirements:
|
@@ -47,8 +48,8 @@ dependencies:
|
|
47
48
|
name: bundler
|
48
49
|
version_requirements: *id002
|
49
50
|
prerelease: false
|
50
|
-
type: :development
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
+
type: :development
|
52
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
54
|
none: false
|
54
55
|
requirements:
|
@@ -63,8 +64,8 @@ dependencies:
|
|
63
64
|
name: jeweler
|
64
65
|
version_requirements: *id003
|
65
66
|
prerelease: false
|
66
|
-
type: :development
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
|
+
type: :development
|
68
69
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
70
|
none: false
|
70
71
|
requirements:
|
@@ -77,8 +78,8 @@ dependencies:
|
|
77
78
|
name: rcov
|
78
79
|
version_requirements: *id004
|
79
80
|
prerelease: false
|
80
|
-
type: :development
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
+
type: :development
|
82
83
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
84
|
none: false
|
84
85
|
requirements:
|
@@ -93,8 +94,8 @@ dependencies:
|
|
93
94
|
name: reek
|
94
95
|
version_requirements: *id005
|
95
96
|
prerelease: false
|
96
|
-
type: :development
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
+
type: :development
|
98
99
|
requirement: &id006 !ruby/object:Gem::Requirement
|
99
100
|
none: false
|
100
101
|
requirements:
|
@@ -109,7 +110,22 @@ dependencies:
|
|
109
110
|
name: roodi
|
110
111
|
version_requirements: *id006
|
111
112
|
prerelease: false
|
113
|
+
- !ruby/object:Gem::Dependency
|
112
114
|
type: :development
|
115
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ~>
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
hash: 23
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
- 1
|
124
|
+
- 6
|
125
|
+
version: 0.1.6
|
126
|
+
name: genmachine
|
127
|
+
version_requirements: *id007
|
128
|
+
prerelease: false
|
113
129
|
description: Parse and generate udon, inspired by zml, haml, json, and more.
|
114
130
|
email: joseph.wecker@gmail.com
|
115
131
|
executables: []
|
@@ -126,9 +142,13 @@ files:
|
|
126
142
|
- README.rdoc
|
127
143
|
- Rakefile
|
128
144
|
- VERSION
|
145
|
+
- lib/VERSION
|
129
146
|
- lib/udon.rb
|
147
|
+
- lib/udon/udon_parser.rb
|
148
|
+
- machines/udon.machine
|
130
149
|
- test/helper.rb
|
131
150
|
- test/test_udon.rb
|
151
|
+
- udon.gemspec
|
132
152
|
has_rdoc: true
|
133
153
|
homepage: http://udon.io
|
134
154
|
licenses:
|