weskit 0.1.0 → 0.2.0
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/.gitignore +1 -0
- data/README.md +25 -10
- data/Rakefile +8 -1
- data/lib/weskit/version.rb +1 -1
- data/lib/weskit/wml.rb +1 -1
- data/lib/weskit/wml/attribute.rb +0 -4
- data/lib/weskit/wml/grammars/wml.kpeg +91 -0
- data/lib/weskit/wml/kpeg_parser.rb +1521 -0
- data/lib/weskit/wml/parser.rb +6 -13
- data/spec/wml/parser_spec.rb +16 -7
- data/weskit.gemspec +4 -6
- metadata +93 -111
- data/lib/weskit/wml/grammars/wml.treetop +0 -195
- data/lib/weskit/wml/wml.rb +0 -1580
data/lib/weskit/wml/parser.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'polyglot'
|
2
|
-
require 'treetop'
|
3
|
-
|
4
1
|
require 'open-uri'
|
5
2
|
require 'stringio'
|
6
3
|
require 'zlib'
|
@@ -18,7 +15,7 @@ module Weskit::WML
|
|
18
15
|
begin
|
19
16
|
str = open(uri).read
|
20
17
|
rescue
|
21
|
-
raise Errrors::ReadError, "
|
18
|
+
raise Errrors::ReadError, "Couldn't open URI"
|
22
19
|
ensure
|
23
20
|
str = Zlib::GzipReader.new(StringIO.new str).read rescue str
|
24
21
|
end
|
@@ -29,19 +26,15 @@ module Weskit::WML
|
|
29
26
|
private
|
30
27
|
|
31
28
|
def parse data
|
32
|
-
|
29
|
+
parser = KPEGParser.new "#{data}\n"
|
33
30
|
|
34
|
-
unless
|
35
|
-
msg = parser.
|
31
|
+
unless parser.parse
|
32
|
+
msg = "#{parser.failure_character} #{parser.failure_info}"
|
36
33
|
raise Errors::ParseError, msg
|
37
34
|
end
|
38
35
|
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def parser
|
43
|
-
@parser ||= WesnothMarkupLanguageParser.new
|
36
|
+
parser.result
|
44
37
|
end
|
45
38
|
end
|
46
39
|
end
|
47
|
-
end
|
40
|
+
end
|
data/spec/wml/parser_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'wml_spec_helper'
|
2
|
-
require 'awesome_print'
|
3
2
|
|
4
3
|
describe Weskit::WML::Parser do
|
5
4
|
include WMLHelpers
|
@@ -21,12 +20,28 @@ describe Weskit::WML::Parser do
|
|
21
20
|
parsed[:a].should match_value_of(:b)
|
22
21
|
end
|
23
22
|
|
23
|
+
specify 'concated' do
|
24
|
+
parsed = Weskit::WML::Parser.string ' a= _ "a" + 1 '
|
25
|
+
parsed[:a].attribute.should be_translatable
|
26
|
+
parsed[:a].should match_value_of(:a1)
|
27
|
+
end
|
28
|
+
|
24
29
|
specify 'multiline' do
|
25
30
|
parsed = Weskit::WML::Parser.string %Q{a= "b \n c"}
|
26
31
|
parsed[:a].attribute.should be_multiline
|
27
32
|
parsed[:a].should match_value_of("b \n c")
|
28
33
|
end
|
29
34
|
|
35
|
+
specify 'multiple' do
|
36
|
+
parsed = Weskit::WML::Parser.string %Q{ a, b = _"a", <<b>> }
|
37
|
+
|
38
|
+
parsed[:a].attribute.should be_translatable
|
39
|
+
parsed[:a].should match_value_of(:a)
|
40
|
+
|
41
|
+
parsed[:b].attribute.should be_code
|
42
|
+
parsed[:b].should match_value_of(:b)
|
43
|
+
end
|
44
|
+
|
30
45
|
specify 'escape sequence' do
|
31
46
|
parsed = Weskit::WML::Parser.string %Q{ a= "b "" c" }
|
32
47
|
parsed[:a].should match_value_of('b " c')
|
@@ -40,12 +55,6 @@ describe Weskit::WML::Parser do
|
|
40
55
|
end
|
41
56
|
|
42
57
|
context 'element' do
|
43
|
-
specify 'tags' do
|
44
|
-
expect {
|
45
|
-
Weskit::WML::Parser.string "[foo]\n[/bar]"
|
46
|
-
}.to raise_error Weskit::WML::Errors::ParseError
|
47
|
-
end
|
48
|
-
|
49
58
|
specify 'default' do
|
50
59
|
parsed = Weskit::WML::Parser.string "[foo]\n[/foo]"
|
51
60
|
parsed[0].should have_identifier_of(:foo)
|
data/weskit.gemspec
CHANGED
@@ -18,10 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename f }
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
s.add_development_dependency '
|
22
|
-
s.add_development_dependency 'rake'
|
23
|
-
s.add_development_dependency 'rspec'
|
24
|
-
s.add_runtime_dependency '
|
25
|
-
s.add_runtime_dependency 'term-ansicolor'
|
26
|
-
s.add_runtime_dependency 'treetop'
|
21
|
+
s.add_development_dependency 'kpeg', '~>0.10.0'
|
22
|
+
s.add_development_dependency 'rake', '>=0.9.2.2'
|
23
|
+
s.add_development_dependency 'rspec', '~>2.11.0'
|
24
|
+
s.add_runtime_dependency 'term-ansicolor', '>=1.0.7'
|
27
25
|
end
|
metadata
CHANGED
@@ -1,119 +1,97 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: weskit
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- f6p
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :development
|
17
|
+
|
18
|
+
date: 2012-10-05 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: kpeg
|
23
22
|
prerelease: false
|
24
|
-
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 55
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 10
|
32
|
+
- 0
|
33
|
+
version: 0.10.0
|
38
34
|
type: :development
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
39
38
|
prerelease: false
|
40
|
-
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 11
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 9
|
48
|
+
- 2
|
49
|
+
- 2
|
50
|
+
version: 0.9.2.2
|
54
51
|
type: :development
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rspec
|
55
55
|
prerelease: false
|
56
|
-
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: polyglot
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
type: :runtime
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
73
57
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 35
|
62
|
+
segments:
|
63
|
+
- 2
|
64
|
+
- 11
|
65
|
+
- 0
|
66
|
+
version: 2.11.0
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
79
70
|
name: term-ansicolor
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
type: :runtime
|
87
71
|
prerelease: false
|
88
|
-
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: treetop
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
97
73
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 25
|
78
|
+
segments:
|
79
|
+
- 1
|
80
|
+
- 0
|
81
|
+
- 7
|
82
|
+
version: 1.0.7
|
102
83
|
type: :runtime
|
103
|
-
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
84
|
+
version_requirements: *id004
|
110
85
|
description: Tools for interacting with Wesnoth Markup Language, MP Server and such.
|
111
|
-
email:
|
86
|
+
email:
|
112
87
|
- filip.pyda@gmail.com
|
113
88
|
executables: []
|
89
|
+
|
114
90
|
extensions: []
|
91
|
+
|
115
92
|
extra_rdoc_files: []
|
116
|
-
|
93
|
+
|
94
|
+
files:
|
117
95
|
- .gitignore
|
118
96
|
- .rspec
|
119
97
|
- .travis.yml
|
@@ -150,16 +128,16 @@ files:
|
|
150
128
|
- lib/weskit/wml/formatters/attribute.rb
|
151
129
|
- lib/weskit/wml/formatters/element.rb
|
152
130
|
- lib/weskit/wml/formatters/item_formatter.rb
|
153
|
-
- lib/weskit/wml/grammars/wml.
|
131
|
+
- lib/weskit/wml/grammars/wml.kpeg
|
154
132
|
- lib/weskit/wml/item.rb
|
155
133
|
- lib/weskit/wml/items.rb
|
134
|
+
- lib/weskit/wml/kpeg_parser.rb
|
156
135
|
- lib/weskit/wml/mixins/container.rb
|
157
136
|
- lib/weskit/wml/mixins/grammar.rb
|
158
137
|
- lib/weskit/wml/mixins/searchable.rb
|
159
138
|
- lib/weskit/wml/mixins/validator.rb
|
160
139
|
- lib/weskit/wml/parser.rb
|
161
140
|
- lib/weskit/wml/root.rb
|
162
|
-
- lib/weskit/wml/wml.rb
|
163
141
|
- spec/spec_helper.rb
|
164
142
|
- spec/wml/attribute_spec.rb
|
165
143
|
- spec/wml/attributes_spec.rb
|
@@ -178,35 +156,38 @@ files:
|
|
178
156
|
- weskit.gemspec
|
179
157
|
homepage: https://github.com/f6p/weskit
|
180
158
|
licenses: []
|
159
|
+
|
181
160
|
post_install_message:
|
182
161
|
rdoc_options: []
|
183
|
-
|
162
|
+
|
163
|
+
require_paths:
|
184
164
|
- lib
|
185
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
166
|
none: false
|
187
|
-
requirements:
|
188
|
-
- -
|
189
|
-
- !ruby/object:Gem::Version
|
190
|
-
|
191
|
-
segments:
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
192
172
|
- 0
|
193
|
-
|
194
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
version: "0"
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
175
|
none: false
|
196
|
-
requirements:
|
197
|
-
- -
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
|
200
|
-
segments:
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
hash: 3
|
180
|
+
segments:
|
201
181
|
- 0
|
202
|
-
|
182
|
+
version: "0"
|
203
183
|
requirements: []
|
184
|
+
|
204
185
|
rubyforge_project:
|
205
|
-
rubygems_version: 1.8.
|
186
|
+
rubygems_version: 1.8.11
|
206
187
|
signing_key:
|
207
188
|
specification_version: 3
|
208
189
|
summary: Ruby utilies for BfW
|
209
|
-
test_files:
|
190
|
+
test_files:
|
210
191
|
- spec/spec_helper.rb
|
211
192
|
- spec/wml/attribute_spec.rb
|
212
193
|
- spec/wml/attributes_spec.rb
|
@@ -222,3 +203,4 @@ test_files:
|
|
222
203
|
- spec/wml_matchers.rb
|
223
204
|
- spec/wml_shared_examples.rb
|
224
205
|
- spec/wml_spec_helper.rb
|
206
|
+
has_rdoc:
|
@@ -1,195 +0,0 @@
|
|
1
|
-
require 'treetop'
|
2
|
-
require 'weskit/wml'
|
3
|
-
|
4
|
-
grammar WesnothMarkupLanguage
|
5
|
-
rule document
|
6
|
-
contents {
|
7
|
-
def wml
|
8
|
-
::Weskit::WML::Root.new.push *::Weskit::WML::Mixins::Grammar.reject_non_wml(elements)
|
9
|
-
end
|
10
|
-
}
|
11
|
-
end
|
12
|
-
|
13
|
-
# parts -------------------------------------------------------------------------------
|
14
|
-
|
15
|
-
rule identifier
|
16
|
-
[a-z] [a-z_]* {
|
17
|
-
def name
|
18
|
-
text_value
|
19
|
-
end
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
rule raw_string
|
24
|
-
(!eol .)* {
|
25
|
-
def data
|
26
|
-
text_value
|
27
|
-
end
|
28
|
-
}
|
29
|
-
end
|
30
|
-
|
31
|
-
rule code_content
|
32
|
-
(!'>>' content)* {
|
33
|
-
def contents
|
34
|
-
text_value
|
35
|
-
end
|
36
|
-
}
|
37
|
-
end
|
38
|
-
|
39
|
-
rule code_string
|
40
|
-
'<<' string:code_content '>>' {
|
41
|
-
def data
|
42
|
-
string.contents
|
43
|
-
end
|
44
|
-
}
|
45
|
-
end
|
46
|
-
|
47
|
-
rule multiline_content
|
48
|
-
(!quote content)* {
|
49
|
-
def contents
|
50
|
-
text_value
|
51
|
-
end
|
52
|
-
}
|
53
|
-
end
|
54
|
-
|
55
|
-
rule multiline_string
|
56
|
-
(quote string:multiline_content quote)* {
|
57
|
-
def data
|
58
|
-
elements.collect(&:string).collect(&:contents).join '"'
|
59
|
-
end
|
60
|
-
}
|
61
|
-
end
|
62
|
-
|
63
|
-
rule translatable_string
|
64
|
-
'_' lws string:multiline_string {
|
65
|
-
def data
|
66
|
-
string.contents
|
67
|
-
end
|
68
|
-
}
|
69
|
-
end
|
70
|
-
|
71
|
-
rule opening_tag
|
72
|
-
lws '[' tag:identifier ']' fws {
|
73
|
-
def name
|
74
|
-
tag.name
|
75
|
-
end
|
76
|
-
}
|
77
|
-
end
|
78
|
-
|
79
|
-
rule amending_tag
|
80
|
-
lws '[+' tag:identifier ']' fws {
|
81
|
-
def name
|
82
|
-
tag.name
|
83
|
-
end
|
84
|
-
}
|
85
|
-
end
|
86
|
-
|
87
|
-
rule closing_tag
|
88
|
-
lws '[/' tag:identifier ']' fws {
|
89
|
-
def name
|
90
|
-
tag.name
|
91
|
-
end
|
92
|
-
}
|
93
|
-
end
|
94
|
-
|
95
|
-
rule blank_line
|
96
|
-
ws* "\n"
|
97
|
-
end
|
98
|
-
|
99
|
-
rule item
|
100
|
-
code_attribute / multiline_attribute / translatable_attribute / attribute / amending_element / element
|
101
|
-
end
|
102
|
-
|
103
|
-
rule contents
|
104
|
-
(blank_line / item)* {
|
105
|
-
def items
|
106
|
-
::Weskit::WML::Mixins::Grammar.reject_non_wml elements
|
107
|
-
end
|
108
|
-
}
|
109
|
-
end
|
110
|
-
|
111
|
-
# items -------------------------------------------------------------------------------
|
112
|
-
|
113
|
-
rule attribute
|
114
|
-
lws id:identifier lws equals value:raw_string eol {
|
115
|
-
def item
|
116
|
-
::Weskit::WML::Attribute.new id.name, value.data
|
117
|
-
end
|
118
|
-
}
|
119
|
-
end
|
120
|
-
|
121
|
-
rule code_attribute
|
122
|
-
lws id:identifier lws equals lws value:code_string fws {
|
123
|
-
def item
|
124
|
-
::Weskit::WML::Attribute.new id.name, value.data, :code => true
|
125
|
-
end
|
126
|
-
}
|
127
|
-
end
|
128
|
-
|
129
|
-
rule multiline_attribute
|
130
|
-
lws id:identifier lws equals lws value:multiline_string fws {
|
131
|
-
def item
|
132
|
-
::Weskit::WML::Attribute.new id.name, value.data
|
133
|
-
end
|
134
|
-
}
|
135
|
-
end
|
136
|
-
|
137
|
-
rule translatable_attribute
|
138
|
-
lws id:identifier lws equals lws '_' lws value:multiline_string fws {
|
139
|
-
def item
|
140
|
-
::Weskit::WML::Attribute.new id.name, value.data, :translatable => true
|
141
|
-
end
|
142
|
-
}
|
143
|
-
end
|
144
|
-
|
145
|
-
rule element
|
146
|
-
open:opening_tag nested:contents close:closing_tag {
|
147
|
-
def item
|
148
|
-
::Weskit::WML::Mixins::Grammar.raise_on_mismatching open, close
|
149
|
-
::Weskit::WML::Element.new(open.name).push *nested.items
|
150
|
-
end
|
151
|
-
}
|
152
|
-
end
|
153
|
-
|
154
|
-
rule amending_element
|
155
|
-
open:amending_tag nested:contents close:closing_tag {
|
156
|
-
def item
|
157
|
-
::Weskit::WML::Mixins::Grammar.raise_on_mismatching open, close
|
158
|
-
::Weskit::WML::Element.new(open.name, :amendment => true).push *nested.items
|
159
|
-
end
|
160
|
-
}
|
161
|
-
end
|
162
|
-
|
163
|
-
# helpers -----------------------------------------------------------------------------
|
164
|
-
|
165
|
-
rule content
|
166
|
-
"\n" / .
|
167
|
-
end
|
168
|
-
|
169
|
-
rule eol
|
170
|
-
"\n" / !.
|
171
|
-
end
|
172
|
-
|
173
|
-
rule equals
|
174
|
-
'='
|
175
|
-
end
|
176
|
-
|
177
|
-
rule quote
|
178
|
-
'"'
|
179
|
-
end
|
180
|
-
|
181
|
-
# whitespace
|
182
|
-
rule ws
|
183
|
-
"\s" / "\t"
|
184
|
-
end
|
185
|
-
|
186
|
-
# leading whitespaces
|
187
|
-
rule lws
|
188
|
-
ws*
|
189
|
-
end
|
190
|
-
|
191
|
-
# following whitespaces
|
192
|
-
rule fws
|
193
|
-
ws* eol
|
194
|
-
end
|
195
|
-
end
|