weskit 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/.gitignore +4 -3
  2. data/.rspec +1 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +2 -2
  5. data/LICENSE +339 -0
  6. data/README.md +135 -0
  7. data/Rakefile +4 -0
  8. data/lib/weskit/mp/adapter.rb +81 -0
  9. data/lib/weskit/mp/connection.rb +74 -0
  10. data/lib/weskit/mp/errors/error.rb +3 -0
  11. data/lib/weskit/mp/errors/response_error.rb +3 -0
  12. data/lib/weskit/mp/worker.rb +35 -0
  13. data/lib/weskit/mp.rb +13 -0
  14. data/lib/weskit/version.rb +1 -1
  15. data/lib/weskit/wml/attribute.rb +65 -0
  16. data/lib/weskit/wml/attributes.rb +16 -0
  17. data/lib/weskit/wml/builder.rb +66 -0
  18. data/lib/weskit/wml/element.rb +34 -0
  19. data/lib/weskit/wml/elements.rb +27 -0
  20. data/lib/weskit/wml/errors/error.rb +3 -0
  21. data/lib/weskit/wml/errors/invalid_identifier.rb +3 -0
  22. data/lib/weskit/wml/errors/invalid_item.rb +3 -0
  23. data/lib/weskit/wml/errors/invalid_option.rb +3 -0
  24. data/lib/weskit/wml/errors/invalid_parameters.rb +3 -0
  25. data/lib/weskit/wml/errors/parse_error.rb +3 -0
  26. data/lib/weskit/wml/errors/read_error.rb +3 -0
  27. data/lib/weskit/wml/extensions/object.rb +19 -0
  28. data/lib/weskit/wml/formatter.rb +82 -0
  29. data/lib/weskit/wml/formatters/ansi_color.rb +49 -0
  30. data/lib/weskit/wml/formatters/ansi_color_attribute.rb +31 -0
  31. data/lib/weskit/wml/formatters/ansi_color_element.rb +22 -0
  32. data/lib/weskit/wml/formatters/attribute.rb +62 -0
  33. data/lib/weskit/wml/formatters/element.rb +44 -0
  34. data/lib/weskit/wml/formatters/item_formatter.rb +17 -0
  35. data/lib/weskit/wml/grammars/wml.treetop +195 -0
  36. data/lib/weskit/wml/item.rb +89 -0
  37. data/lib/weskit/wml/items.rb +29 -0
  38. data/lib/weskit/wml/mixins/container.rb +96 -0
  39. data/lib/weskit/wml/mixins/grammar.rb +17 -0
  40. data/lib/weskit/wml/mixins/searchable.rb +43 -0
  41. data/lib/weskit/wml/mixins/validator.rb +29 -0
  42. data/lib/weskit/wml/parser.rb +47 -0
  43. data/lib/weskit/wml/root.rb +17 -0
  44. data/lib/weskit/wml/wml.rb +1580 -0
  45. data/lib/weskit/wml.rb +12 -6
  46. data/lib/weskit.rb +2 -2
  47. data/spec/spec_helper.rb +1 -0
  48. data/spec/wml/attribute_spec.rb +51 -0
  49. data/spec/wml/attributes_spec.rb +19 -0
  50. data/spec/wml/builder_spec.rb +52 -0
  51. data/spec/wml/element_spec.rb +20 -0
  52. data/spec/wml/elements_spec.rb +25 -0
  53. data/spec/wml/formatter_spec.rb +42 -0
  54. data/spec/wml/item_spec.rb +25 -0
  55. data/spec/wml/items_spec.rb +15 -0
  56. data/spec/wml/parser_spec.rb +60 -0
  57. data/spec/wml/root_spec.rb +15 -0
  58. data/spec/wml_helpers.rb +40 -0
  59. data/spec/wml_matchers.rb +17 -0
  60. data/spec/wml_shared_examples.rb +68 -0
  61. data/spec/wml_spec_helper.rb +5 -0
  62. data/weskit.gemspec +8 -5
  63. metadata +192 -50
  64. data/README +0 -2
  65. data/lib/weskit/lobby/bot.rb +0 -85
  66. data/lib/weskit/lobby/bot_error.rb +0 -3
  67. data/lib/weskit/lobby.rb +0 -11
  68. data/lib/weskit/wml/node.rb +0 -76
  69. data/lib/weskit/wml/node_array.rb +0 -25
  70. data/lib/weskit/wml/node_error.rb +0 -3
  71. data/lib/weskit/wml/reader.rb +0 -67
  72. data/lib/weskit/wml/reader_error.rb +0 -3
  73. data/lib/weskit/wml/string_extensions.rb +0 -59
metadata CHANGED
@@ -1,82 +1,224 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: weskit
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 2
10
- version: 0.0.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - f6p
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-03-15 00:00:00 Z
19
- dependencies: []
20
-
21
- description: Pls do me a favor and do not look at sources if you dont have to. Thx!
22
- email:
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
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ 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'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ 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'
54
+ type: :development
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
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ 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
+ 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
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ 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'
110
+ description: Tools for interacting with Wesnoth Markup Language, MP Server and such.
111
+ email:
23
112
  - filip.pyda@gmail.com
24
113
  executables: []
25
-
26
114
  extensions: []
27
-
28
115
  extra_rdoc_files: []
29
-
30
- files:
116
+ files:
31
117
  - .gitignore
118
+ - .rspec
119
+ - .travis.yml
32
120
  - Gemfile
33
- - README
121
+ - LICENSE
122
+ - README.md
34
123
  - Rakefile
35
124
  - lib/weskit.rb
36
- - lib/weskit/lobby.rb
37
- - lib/weskit/lobby/bot.rb
38
- - lib/weskit/lobby/bot_error.rb
125
+ - lib/weskit/mp.rb
126
+ - lib/weskit/mp/adapter.rb
127
+ - lib/weskit/mp/connection.rb
128
+ - lib/weskit/mp/errors/error.rb
129
+ - lib/weskit/mp/errors/response_error.rb
130
+ - lib/weskit/mp/worker.rb
39
131
  - lib/weskit/version.rb
40
132
  - lib/weskit/wml.rb
41
- - lib/weskit/wml/node.rb
42
- - lib/weskit/wml/node_array.rb
43
- - lib/weskit/wml/node_error.rb
44
- - lib/weskit/wml/reader.rb
45
- - lib/weskit/wml/reader_error.rb
46
- - lib/weskit/wml/string_extensions.rb
133
+ - lib/weskit/wml/attribute.rb
134
+ - lib/weskit/wml/attributes.rb
135
+ - lib/weskit/wml/builder.rb
136
+ - lib/weskit/wml/element.rb
137
+ - lib/weskit/wml/elements.rb
138
+ - lib/weskit/wml/errors/error.rb
139
+ - lib/weskit/wml/errors/invalid_identifier.rb
140
+ - lib/weskit/wml/errors/invalid_item.rb
141
+ - lib/weskit/wml/errors/invalid_option.rb
142
+ - lib/weskit/wml/errors/invalid_parameters.rb
143
+ - lib/weskit/wml/errors/parse_error.rb
144
+ - lib/weskit/wml/errors/read_error.rb
145
+ - lib/weskit/wml/extensions/object.rb
146
+ - lib/weskit/wml/formatter.rb
147
+ - lib/weskit/wml/formatters/ansi_color.rb
148
+ - lib/weskit/wml/formatters/ansi_color_attribute.rb
149
+ - lib/weskit/wml/formatters/ansi_color_element.rb
150
+ - lib/weskit/wml/formatters/attribute.rb
151
+ - lib/weskit/wml/formatters/element.rb
152
+ - lib/weskit/wml/formatters/item_formatter.rb
153
+ - lib/weskit/wml/grammars/wml.treetop
154
+ - lib/weskit/wml/item.rb
155
+ - lib/weskit/wml/items.rb
156
+ - lib/weskit/wml/mixins/container.rb
157
+ - lib/weskit/wml/mixins/grammar.rb
158
+ - lib/weskit/wml/mixins/searchable.rb
159
+ - lib/weskit/wml/mixins/validator.rb
160
+ - lib/weskit/wml/parser.rb
161
+ - lib/weskit/wml/root.rb
162
+ - lib/weskit/wml/wml.rb
163
+ - spec/spec_helper.rb
164
+ - spec/wml/attribute_spec.rb
165
+ - spec/wml/attributes_spec.rb
166
+ - spec/wml/builder_spec.rb
167
+ - spec/wml/element_spec.rb
168
+ - spec/wml/elements_spec.rb
169
+ - spec/wml/formatter_spec.rb
170
+ - spec/wml/item_spec.rb
171
+ - spec/wml/items_spec.rb
172
+ - spec/wml/parser_spec.rb
173
+ - spec/wml/root_spec.rb
174
+ - spec/wml_helpers.rb
175
+ - spec/wml_matchers.rb
176
+ - spec/wml_shared_examples.rb
177
+ - spec/wml_spec_helper.rb
47
178
  - weskit.gemspec
48
179
  homepage: https://github.com/f6p/weskit
49
180
  licenses: []
50
-
51
181
  post_install_message:
52
182
  rdoc_options: []
53
-
54
- require_paths:
183
+ require_paths:
55
184
  - lib
56
- required_ruby_version: !ruby/object:Gem::Requirement
185
+ required_ruby_version: !ruby/object:Gem::Requirement
57
186
  none: false
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- hash: 3
62
- segments:
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ segments:
63
192
  - 0
64
- version: "0"
65
- required_rubygems_version: !ruby/object:Gem::Requirement
193
+ hash: -4565766782065065646
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
195
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
196
+ requirements:
197
+ - - ! '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ segments:
72
201
  - 0
73
- version: "0"
202
+ hash: -4565766782065065646
74
203
  requirements: []
75
-
76
204
  rubyforge_project:
77
- rubygems_version: 1.8.11
205
+ rubygems_version: 1.8.24
78
206
  signing_key:
79
207
  specification_version: 3
80
208
  summary: Ruby utilies for BfW
81
- test_files: []
82
-
209
+ test_files:
210
+ - spec/spec_helper.rb
211
+ - spec/wml/attribute_spec.rb
212
+ - spec/wml/attributes_spec.rb
213
+ - spec/wml/builder_spec.rb
214
+ - spec/wml/element_spec.rb
215
+ - spec/wml/elements_spec.rb
216
+ - spec/wml/formatter_spec.rb
217
+ - spec/wml/item_spec.rb
218
+ - spec/wml/items_spec.rb
219
+ - spec/wml/parser_spec.rb
220
+ - spec/wml/root_spec.rb
221
+ - spec/wml_helpers.rb
222
+ - spec/wml_matchers.rb
223
+ - spec/wml_shared_examples.rb
224
+ - spec/wml_spec_helper.rb
data/README DELETED
@@ -1,2 +0,0 @@
1
- Pls do me a favor and do not look at sources if you dont have to. Thx!
2
-
@@ -1,85 +0,0 @@
1
- require 'weskit/wml'
2
-
3
- module Weskit::Lobby
4
- require 'socket'
5
- require 'stringio'
6
- require 'zlib'
7
-
8
- class Bot
9
- def initialize nickname, options = {}
10
- defaults = {
11
- :debug => false,
12
- :port => 15000,
13
- :server => 'server.wesnoth.org',
14
- :version => '1.10.0'
15
- }
16
- options = defaults.merge options
17
-
18
- @server = options[:server]
19
- @port = options[:port]
20
- @version = options[:version]
21
-
22
- @reader = Weskit::WML::Reader.new
23
- @nickname = nickname
24
- end
25
-
26
- def connect_and &operations
27
- @socket = TCPSocket.new @server, @port
28
- basic_communication
29
- response = read_wml
30
- @socket.close
31
-
32
- @socket = TCPSocket.new response.redirect[:host], response.redirect[:port]
33
- basic_communication
34
-
35
- raise "Server send node other than 'mustlogin'" if read_wml.mustlogin.nil?
36
- send_wml 'login', :selective_ping => 1, :username => @nickname
37
- raise "Server send node other than 'join_lobby'" if read_wml.join_lobby.nil?
38
-
39
- result = yield self
40
-
41
- sleep 3
42
- @socket.close
43
- result
44
- end
45
-
46
- def read_wml
47
- wml = @reader.read_str read_str
48
- puts "\e[0;33mRecieve MWL\e[0m:\n#{wml}" if @debug
49
- wml
50
- end
51
-
52
- def send_wml node, contents = {}
53
- wml = @reader.read_hsh({node => contents}).to_s
54
- puts "\e[0;32mSend MWL\e[0m:\n#{wml}" if @debug
55
- send_str wml
56
- end
57
-
58
- private
59
-
60
- def basic_communication
61
- handshake
62
- raise "Server send node other than 'version'" if read_wml.version.empty?
63
- send_wml 'version', :version => @version
64
- end
65
-
66
- def handshake
67
- @socket.send "\x00" * 4, 0
68
- @socket.read 4
69
- end
70
-
71
- def read_str
72
- msg_size = @socket.read(4).unpack('N').first
73
- msg_data = @socket.read(msg_size)
74
- Zlib::GzipReader.new(StringIO.new(msg_data)).read
75
- end
76
-
77
- def send_str msg
78
- gzw = Zlib::GzipWriter.new StringIO.new
79
- gzw.write msg.to_s
80
- gzm = gzw.close
81
- size = [gzm.size].pack('N')
82
- @socket.send(size + gzm.string, 0)
83
- end
84
- end
85
- end
@@ -1,3 +0,0 @@
1
- module Weskit::Lobby
2
- class BotError < StandardError ; end
3
- end
data/lib/weskit/lobby.rb DELETED
@@ -1,11 +0,0 @@
1
- module Weskit
2
- module Lobby
3
- end
4
- end
5
-
6
- directory = File.dirname __FILE__
7
- files = File.join directory, 'lobby', '*.rb'
8
-
9
- Dir[files].each do |file|
10
- require file
11
- end
@@ -1,76 +0,0 @@
1
- module Weskit::WML
2
- class Node
3
- FALSE_ATTR_VALS = ["no", "false", "off", "uninitialized"]
4
- TRUE_ATTR_VALS = ["yes", "true", "on"]
5
-
6
- attr_reader :name, :parent
7
-
8
- def add element
9
- return false unless element.kind_of? Node
10
- @nodes << element ; true
11
- end
12
-
13
- def self.create name = '', parent = nil
14
- new name, parent
15
- end
16
-
17
- def initialize name = '', parent = nil
18
- name = normalize name
19
- name = (name.empty?) ? 'root' : name
20
- raise(NodeError, "Node name can consist only of '#{StringExtensions::VALID_CHARS}'") unless name =~ /^#{StringExtensions::VALID_CHARS}+$/
21
- raise(NodeError, "Attempt to set inproper parent node") unless parent.kind_of? Node or parent == nil
22
- @attributes, @name, @nodes, @parent = {}, name, [], parent
23
- end
24
-
25
- def method_missing method
26
- nodes = @nodes.select {|node| node.name == normalize(method)}
27
- NodeArray.new.replace nodes
28
- end
29
-
30
- def to_ary
31
- end
32
-
33
- def to_s indent_width = 1
34
- indent_width -= 1 if @name == 'root'
35
-
36
- base_indentation = " " * 4
37
- contents_indentation = base_indentation * indent_width
38
- closing_tag_indentation = base_indentation * (indent_width > 0 ? indent_width - 1 : 0)
39
-
40
- attr_str = @attributes.keys.sort.inject('') {|string, key| string << "#{contents_indentation}#{key}=\"#{@attributes[key]}\"\n"}
41
- node_str = @nodes.inject('') {|string, node| string << "#{contents_indentation}#{node.to_s(indent_width + 1)}\n"}
42
-
43
- (@name == 'root') ? "#{attr_str}#{node_str}" : "[#{name}]\n#{attr_str}#{node_str}#{closing_tag_indentation}[/#{name}]"
44
- end
45
-
46
- def [] key
47
- value = @attributes[normalize key]
48
-
49
- if FALSE_ATTR_VALS.include? value then false
50
- elsif TRUE_ATTR_VALS.include? value then true
51
- else value
52
- end
53
- end
54
-
55
- def []= key, value
56
- key, value = normalize(key), value.to_s
57
-
58
- # This one can cause problems as looks there is no escaping strategy on the server side
59
- #unless value == '"'
60
- # single_quotes, double_quotes = value.scan('"').size, value.scan('""').size
61
- # if (single_quotes > 0) and ((double_quotes == 0) or (single_quotes.to_f % double_quotes.to_f > 0))
62
- # raise(NodeError, "Found unescaped double quotes inside attribute value")
63
- # end
64
- # @attributes[key] = value.gsub('"', '""')
65
- #end
66
-
67
- @attributes[key] = value
68
- end
69
-
70
- private
71
-
72
- def normalize name
73
- name.to_s.strip
74
- end
75
- end
76
- end
@@ -1,25 +0,0 @@
1
- module Weskit::WML
2
- class NodeArray < Array
3
- def [] key
4
- unless key.is_a? Integer
5
- return first[key] unless empty?
6
- nil
7
- else
8
- super key
9
- end
10
- end
11
-
12
- def []= key, value
13
- (key.is_a? Integer) ? super(key, value) : (first[key] = value) unless empty?
14
- end
15
-
16
- def method_missing method
17
- nodes = inject([]) {|array, element| array + element.send(method) if element.kind_of? Node}
18
- NodeArray.new.replace nodes
19
- end
20
-
21
- def to_wml
22
- inject('') {|string, item| string << "#{item}\n" if item.kind_of? Node}
23
- end
24
- end
25
- end
@@ -1,3 +0,0 @@
1
- module Weskit::WML
2
- class NodeError < StandardError ; end
3
- end
@@ -1,67 +0,0 @@
1
- module Weskit::WML
2
- class Reader
3
- def read_hsh hash, name = '', parent = nil
4
- current_node = Node.new name, parent
5
- hash.each {|key,val| (val.kind_of? Hash) ? current_node.add(read_hsh(val, key, current_node)) : current_node[key] = val}
6
- current_node
7
- end
8
-
9
- def read_str string
10
- parse string
11
- end
12
-
13
- def read_uri uri
14
- require 'open-uri'
15
- require 'stringio'
16
- require 'zlib'
17
-
18
- begin
19
- content = open(uri) {|u| u.read}
20
- rescue
21
- raise ReaderError, "Failed to open specified uri"
22
- ensure
23
- content = Zlib::GzipReader.new(StringIO.new(content)).read rescue content
24
- end
25
-
26
- parse content
27
- end
28
-
29
- private
30
-
31
- def parse content
32
- current_node, node_stack = Node.new, []
33
- multiline_mode, multiline_name, multiline_value = false, '', []
34
-
35
- content.strip.each_line do |line|
36
- line = line.chomp.extend StringExtensions
37
-
38
- if multiline_mode
39
- if line.end_of_attr?
40
- multiline_value << line.rstrip.chomp('"')
41
- multiline_value = multiline_value.join("\n")
42
- current_node[multiline_name] = multiline_value
43
- multiline_mode, multiline_name, multiline_value = false, '', []
44
- else
45
- multiline_value << line
46
- end
47
- elsif line.attribute?
48
- if line.multiline_attr?
49
- multiline_mode, multiline_name = true, line.attribute_name
50
- multiline_value << line.attribute_value
51
- else
52
- current_node[line.attribute_name] = line.attribute_value
53
- end
54
- elsif line.opening_tag?
55
- node_stack.push current_node
56
- current_node = Node.create line.tag_name, node_stack.last
57
- elsif line.closing_tag?
58
- raise(ReaderError, "Opening tag '#{current_node.name}' does not match closing tag '#{line.tag_name}'") if current_node.name != line.tag_name
59
- node_stack.last.add current_node
60
- current_node = node_stack.pop
61
- end
62
- end
63
-
64
- current_node
65
- end
66
- end
67
- end
@@ -1,3 +0,0 @@
1
- module Weskit::WML
2
- class ReaderError < StandardError ; end
3
- end
@@ -1,59 +0,0 @@
1
- module Weskit::WML
2
- module StringExtensions
3
- VALID_CHARS = '[A-Za-z0-9_]'
4
-
5
- def attribute_name
6
- @values[0]
7
- end
8
-
9
- def attribute_value
10
- @values[1]
11
- end
12
-
13
- def multiline_attr?
14
- return true if include?('="') and (last_character != '"')
15
- false
16
- end
17
-
18
- def end_of_attr?
19
- return true if (last_character == '"')
20
- false
21
- end
22
-
23
- def last_character
24
- rstrip[-1,1]
25
- end
26
-
27
- def tag_name
28
- @values[0]
29
- end
30
-
31
- def opening_tag?
32
- wml_check(/^\[(#{VALID_CHARS}+?)\]$/)
33
- end
34
-
35
- def closing_tag?
36
- wml_check(/^\[\/(#{VALID_CHARS}+?)\]$/)
37
- end
38
-
39
- def attribute?
40
- # If there is unallowed char in fron of '=' line wont be considereda as an attribute
41
- # Multiline attributes need to have double quotes next to equal sign
42
- wml_check(/^(#{VALID_CHARS}+?)="?(.+?)"?$/)
43
- end
44
-
45
- private
46
-
47
- def wml_check expression
48
- matches = self.strip.match expression
49
-
50
- if matches
51
- @values = [matches[1], matches[2]]
52
- return true
53
- else
54
- @values = [nil, nil]
55
- return false
56
- end
57
- end
58
- end
59
- end