weskit 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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, "Coldn't open URI"
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
- parsed = parser.parse data.strip, :consume_all_input => false
29
+ parser = KPEGParser.new "#{data}\n"
33
30
 
34
- unless parsed
35
- msg = parser.failure_reason or 'Invalid data'
31
+ unless parser.parse
32
+ msg = "#{parser.failure_character} #{parser.failure_info}"
36
33
  raise Errors::ParseError, msg
37
34
  end
38
35
 
39
- parsed.wml
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
@@ -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 'awesome_print'
22
- s.add_development_dependency 'rake'
23
- s.add_development_dependency 'rspec'
24
- s.add_runtime_dependency 'polyglot'
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
- version: 0.1.0
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
- date: 2012-09-24 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: awesome_print
16
- requirement: !ruby/object:Gem::Requirement
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
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
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
- version_requirements: !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
41
40
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
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
- version_requirements: !ruby/object:Gem::Requirement
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
- version: '0'
78
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
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
- version: '0'
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
- prerelease: false
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
- files:
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.treetop
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
- require_paths:
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
- version: '0'
191
- segments:
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ hash: 3
171
+ segments:
192
172
  - 0
193
- hash: -4565766782065065646
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
- version: '0'
200
- segments:
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ hash: 3
180
+ segments:
201
181
  - 0
202
- hash: -4565766782065065646
182
+ version: "0"
203
183
  requirements: []
184
+
204
185
  rubyforge_project:
205
- rubygems_version: 1.8.24
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