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
@@ -0,0 +1,1580 @@
1
+ # :nodoc:
2
+
3
+ # Autogenerated from a Treetop grammar. Edits may be lost.
4
+
5
+ require 'treetop'
6
+ require 'weskit/wml'
7
+
8
+ module WesnothMarkupLanguage
9
+ include Treetop::Runtime
10
+
11
+ def root
12
+ @root ||= :document
13
+ end
14
+
15
+ module Document0
16
+ def wml
17
+ ::Weskit::WML::Root.new.push *::Weskit::WML::Mixins::Grammar.reject_non_wml(elements)
18
+ end
19
+ end
20
+
21
+ def _nt_document
22
+ start_index = index
23
+ if node_cache[:document].has_key?(index)
24
+ cached = node_cache[:document][index]
25
+ if cached
26
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
27
+ @index = cached.interval.end
28
+ end
29
+ return cached
30
+ end
31
+
32
+ r0 = _nt_contents
33
+ r0.extend(Document0)
34
+
35
+ node_cache[:document][start_index] = r0
36
+
37
+ r0
38
+ end
39
+
40
+ module Identifier0
41
+ end
42
+
43
+ module Identifier1
44
+ def name
45
+ text_value
46
+ end
47
+ end
48
+
49
+ def _nt_identifier
50
+ start_index = index
51
+ if node_cache[:identifier].has_key?(index)
52
+ cached = node_cache[:identifier][index]
53
+ if cached
54
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
55
+ @index = cached.interval.end
56
+ end
57
+ return cached
58
+ end
59
+
60
+ i0, s0 = index, []
61
+ if has_terminal?('\G[a-z]', true, index)
62
+ r1 = true
63
+ @index += 1
64
+ else
65
+ r1 = nil
66
+ end
67
+ s0 << r1
68
+ if r1
69
+ s2, i2 = [], index
70
+ loop do
71
+ if has_terminal?('\G[a-z_]', true, index)
72
+ r3 = true
73
+ @index += 1
74
+ else
75
+ r3 = nil
76
+ end
77
+ if r3
78
+ s2 << r3
79
+ else
80
+ break
81
+ end
82
+ end
83
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
84
+ s0 << r2
85
+ end
86
+ if s0.last
87
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
88
+ r0.extend(Identifier0)
89
+ r0.extend(Identifier1)
90
+ else
91
+ @index = i0
92
+ r0 = nil
93
+ end
94
+
95
+ node_cache[:identifier][start_index] = r0
96
+
97
+ r0
98
+ end
99
+
100
+ module RawString0
101
+ end
102
+
103
+ module RawString1
104
+ def data
105
+ text_value
106
+ end
107
+ end
108
+
109
+ def _nt_raw_string
110
+ start_index = index
111
+ if node_cache[:raw_string].has_key?(index)
112
+ cached = node_cache[:raw_string][index]
113
+ if cached
114
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
115
+ @index = cached.interval.end
116
+ end
117
+ return cached
118
+ end
119
+
120
+ s0, i0 = [], index
121
+ loop do
122
+ i1, s1 = index, []
123
+ i2 = index
124
+ r3 = _nt_eol
125
+ if r3
126
+ r2 = nil
127
+ else
128
+ @index = i2
129
+ r2 = instantiate_node(SyntaxNode,input, index...index)
130
+ end
131
+ s1 << r2
132
+ if r2
133
+ if index < input_length
134
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
135
+ @index += 1
136
+ else
137
+ terminal_parse_failure("any character")
138
+ r4 = nil
139
+ end
140
+ s1 << r4
141
+ end
142
+ if s1.last
143
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
144
+ r1.extend(RawString0)
145
+ else
146
+ @index = i1
147
+ r1 = nil
148
+ end
149
+ if r1
150
+ s0 << r1
151
+ else
152
+ break
153
+ end
154
+ end
155
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
156
+ r0.extend(RawString1)
157
+
158
+ node_cache[:raw_string][start_index] = r0
159
+
160
+ r0
161
+ end
162
+
163
+ module CodeContent0
164
+ def content
165
+ elements[1]
166
+ end
167
+ end
168
+
169
+ module CodeContent1
170
+ def contents
171
+ text_value
172
+ end
173
+ end
174
+
175
+ def _nt_code_content
176
+ start_index = index
177
+ if node_cache[:code_content].has_key?(index)
178
+ cached = node_cache[:code_content][index]
179
+ if cached
180
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
181
+ @index = cached.interval.end
182
+ end
183
+ return cached
184
+ end
185
+
186
+ s0, i0 = [], index
187
+ loop do
188
+ i1, s1 = index, []
189
+ i2 = index
190
+ if has_terminal?('>>', false, index)
191
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
192
+ @index += 2
193
+ else
194
+ terminal_parse_failure('>>')
195
+ r3 = nil
196
+ end
197
+ if r3
198
+ r2 = nil
199
+ else
200
+ @index = i2
201
+ r2 = instantiate_node(SyntaxNode,input, index...index)
202
+ end
203
+ s1 << r2
204
+ if r2
205
+ r4 = _nt_content
206
+ s1 << r4
207
+ end
208
+ if s1.last
209
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
210
+ r1.extend(CodeContent0)
211
+ else
212
+ @index = i1
213
+ r1 = nil
214
+ end
215
+ if r1
216
+ s0 << r1
217
+ else
218
+ break
219
+ end
220
+ end
221
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
222
+ r0.extend(CodeContent1)
223
+
224
+ node_cache[:code_content][start_index] = r0
225
+
226
+ r0
227
+ end
228
+
229
+ module CodeString0
230
+ def string
231
+ elements[1]
232
+ end
233
+
234
+ end
235
+
236
+ module CodeString1
237
+ def data
238
+ string.contents
239
+ end
240
+ end
241
+
242
+ def _nt_code_string
243
+ start_index = index
244
+ if node_cache[:code_string].has_key?(index)
245
+ cached = node_cache[:code_string][index]
246
+ if cached
247
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
248
+ @index = cached.interval.end
249
+ end
250
+ return cached
251
+ end
252
+
253
+ i0, s0 = index, []
254
+ if has_terminal?('<<', false, index)
255
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
256
+ @index += 2
257
+ else
258
+ terminal_parse_failure('<<')
259
+ r1 = nil
260
+ end
261
+ s0 << r1
262
+ if r1
263
+ r2 = _nt_code_content
264
+ s0 << r2
265
+ if r2
266
+ if has_terminal?('>>', false, index)
267
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
268
+ @index += 2
269
+ else
270
+ terminal_parse_failure('>>')
271
+ r3 = nil
272
+ end
273
+ s0 << r3
274
+ end
275
+ end
276
+ if s0.last
277
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
278
+ r0.extend(CodeString0)
279
+ r0.extend(CodeString1)
280
+ else
281
+ @index = i0
282
+ r0 = nil
283
+ end
284
+
285
+ node_cache[:code_string][start_index] = r0
286
+
287
+ r0
288
+ end
289
+
290
+ module MultilineContent0
291
+ def content
292
+ elements[1]
293
+ end
294
+ end
295
+
296
+ module MultilineContent1
297
+ def contents
298
+ text_value
299
+ end
300
+ end
301
+
302
+ def _nt_multiline_content
303
+ start_index = index
304
+ if node_cache[:multiline_content].has_key?(index)
305
+ cached = node_cache[:multiline_content][index]
306
+ if cached
307
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
308
+ @index = cached.interval.end
309
+ end
310
+ return cached
311
+ end
312
+
313
+ s0, i0 = [], index
314
+ loop do
315
+ i1, s1 = index, []
316
+ i2 = index
317
+ r3 = _nt_quote
318
+ if r3
319
+ r2 = nil
320
+ else
321
+ @index = i2
322
+ r2 = instantiate_node(SyntaxNode,input, index...index)
323
+ end
324
+ s1 << r2
325
+ if r2
326
+ r4 = _nt_content
327
+ s1 << r4
328
+ end
329
+ if s1.last
330
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
331
+ r1.extend(MultilineContent0)
332
+ else
333
+ @index = i1
334
+ r1 = nil
335
+ end
336
+ if r1
337
+ s0 << r1
338
+ else
339
+ break
340
+ end
341
+ end
342
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
343
+ r0.extend(MultilineContent1)
344
+
345
+ node_cache[:multiline_content][start_index] = r0
346
+
347
+ r0
348
+ end
349
+
350
+ module MultilineString0
351
+ def quote1
352
+ elements[0]
353
+ end
354
+
355
+ def string
356
+ elements[1]
357
+ end
358
+
359
+ def quote2
360
+ elements[2]
361
+ end
362
+ end
363
+
364
+ module MultilineString1
365
+ def data
366
+ elements.collect(&:string).collect(&:contents).join '"'
367
+ end
368
+ end
369
+
370
+ def _nt_multiline_string
371
+ start_index = index
372
+ if node_cache[:multiline_string].has_key?(index)
373
+ cached = node_cache[:multiline_string][index]
374
+ if cached
375
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
376
+ @index = cached.interval.end
377
+ end
378
+ return cached
379
+ end
380
+
381
+ s0, i0 = [], index
382
+ loop do
383
+ i1, s1 = index, []
384
+ r2 = _nt_quote
385
+ s1 << r2
386
+ if r2
387
+ r3 = _nt_multiline_content
388
+ s1 << r3
389
+ if r3
390
+ r4 = _nt_quote
391
+ s1 << r4
392
+ end
393
+ end
394
+ if s1.last
395
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
396
+ r1.extend(MultilineString0)
397
+ else
398
+ @index = i1
399
+ r1 = nil
400
+ end
401
+ if r1
402
+ s0 << r1
403
+ else
404
+ break
405
+ end
406
+ end
407
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
408
+ r0.extend(MultilineString1)
409
+
410
+ node_cache[:multiline_string][start_index] = r0
411
+
412
+ r0
413
+ end
414
+
415
+ module TranslatableString0
416
+ def lws
417
+ elements[1]
418
+ end
419
+
420
+ def string
421
+ elements[2]
422
+ end
423
+ end
424
+
425
+ module TranslatableString1
426
+ def data
427
+ string.contents
428
+ end
429
+ end
430
+
431
+ def _nt_translatable_string
432
+ start_index = index
433
+ if node_cache[:translatable_string].has_key?(index)
434
+ cached = node_cache[:translatable_string][index]
435
+ if cached
436
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
437
+ @index = cached.interval.end
438
+ end
439
+ return cached
440
+ end
441
+
442
+ i0, s0 = index, []
443
+ if has_terminal?('_', false, index)
444
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
445
+ @index += 1
446
+ else
447
+ terminal_parse_failure('_')
448
+ r1 = nil
449
+ end
450
+ s0 << r1
451
+ if r1
452
+ r2 = _nt_lws
453
+ s0 << r2
454
+ if r2
455
+ r3 = _nt_multiline_string
456
+ s0 << r3
457
+ end
458
+ end
459
+ if s0.last
460
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
461
+ r0.extend(TranslatableString0)
462
+ r0.extend(TranslatableString1)
463
+ else
464
+ @index = i0
465
+ r0 = nil
466
+ end
467
+
468
+ node_cache[:translatable_string][start_index] = r0
469
+
470
+ r0
471
+ end
472
+
473
+ module OpeningTag0
474
+ def lws
475
+ elements[0]
476
+ end
477
+
478
+ def tag
479
+ elements[2]
480
+ end
481
+
482
+ def fws
483
+ elements[4]
484
+ end
485
+ end
486
+
487
+ module OpeningTag1
488
+ def name
489
+ tag.name
490
+ end
491
+ end
492
+
493
+ def _nt_opening_tag
494
+ start_index = index
495
+ if node_cache[:opening_tag].has_key?(index)
496
+ cached = node_cache[:opening_tag][index]
497
+ if cached
498
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
499
+ @index = cached.interval.end
500
+ end
501
+ return cached
502
+ end
503
+
504
+ i0, s0 = index, []
505
+ r1 = _nt_lws
506
+ s0 << r1
507
+ if r1
508
+ if has_terminal?('[', false, index)
509
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
510
+ @index += 1
511
+ else
512
+ terminal_parse_failure('[')
513
+ r2 = nil
514
+ end
515
+ s0 << r2
516
+ if r2
517
+ r3 = _nt_identifier
518
+ s0 << r3
519
+ if r3
520
+ if has_terminal?(']', false, index)
521
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
522
+ @index += 1
523
+ else
524
+ terminal_parse_failure(']')
525
+ r4 = nil
526
+ end
527
+ s0 << r4
528
+ if r4
529
+ r5 = _nt_fws
530
+ s0 << r5
531
+ end
532
+ end
533
+ end
534
+ end
535
+ if s0.last
536
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
537
+ r0.extend(OpeningTag0)
538
+ r0.extend(OpeningTag1)
539
+ else
540
+ @index = i0
541
+ r0 = nil
542
+ end
543
+
544
+ node_cache[:opening_tag][start_index] = r0
545
+
546
+ r0
547
+ end
548
+
549
+ module AmendingTag0
550
+ def lws
551
+ elements[0]
552
+ end
553
+
554
+ def tag
555
+ elements[2]
556
+ end
557
+
558
+ def fws
559
+ elements[4]
560
+ end
561
+ end
562
+
563
+ module AmendingTag1
564
+ def name
565
+ tag.name
566
+ end
567
+ end
568
+
569
+ def _nt_amending_tag
570
+ start_index = index
571
+ if node_cache[:amending_tag].has_key?(index)
572
+ cached = node_cache[:amending_tag][index]
573
+ if cached
574
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
575
+ @index = cached.interval.end
576
+ end
577
+ return cached
578
+ end
579
+
580
+ i0, s0 = index, []
581
+ r1 = _nt_lws
582
+ s0 << r1
583
+ if r1
584
+ if has_terminal?('[+', false, index)
585
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
586
+ @index += 2
587
+ else
588
+ terminal_parse_failure('[+')
589
+ r2 = nil
590
+ end
591
+ s0 << r2
592
+ if r2
593
+ r3 = _nt_identifier
594
+ s0 << r3
595
+ if r3
596
+ if has_terminal?(']', false, index)
597
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
598
+ @index += 1
599
+ else
600
+ terminal_parse_failure(']')
601
+ r4 = nil
602
+ end
603
+ s0 << r4
604
+ if r4
605
+ r5 = _nt_fws
606
+ s0 << r5
607
+ end
608
+ end
609
+ end
610
+ end
611
+ if s0.last
612
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
613
+ r0.extend(AmendingTag0)
614
+ r0.extend(AmendingTag1)
615
+ else
616
+ @index = i0
617
+ r0 = nil
618
+ end
619
+
620
+ node_cache[:amending_tag][start_index] = r0
621
+
622
+ r0
623
+ end
624
+
625
+ module ClosingTag0
626
+ def lws
627
+ elements[0]
628
+ end
629
+
630
+ def tag
631
+ elements[2]
632
+ end
633
+
634
+ def fws
635
+ elements[4]
636
+ end
637
+ end
638
+
639
+ module ClosingTag1
640
+ def name
641
+ tag.name
642
+ end
643
+ end
644
+
645
+ def _nt_closing_tag
646
+ start_index = index
647
+ if node_cache[:closing_tag].has_key?(index)
648
+ cached = node_cache[:closing_tag][index]
649
+ if cached
650
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
651
+ @index = cached.interval.end
652
+ end
653
+ return cached
654
+ end
655
+
656
+ i0, s0 = index, []
657
+ r1 = _nt_lws
658
+ s0 << r1
659
+ if r1
660
+ if has_terminal?('[/', false, index)
661
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
662
+ @index += 2
663
+ else
664
+ terminal_parse_failure('[/')
665
+ r2 = nil
666
+ end
667
+ s0 << r2
668
+ if r2
669
+ r3 = _nt_identifier
670
+ s0 << r3
671
+ if r3
672
+ if has_terminal?(']', false, index)
673
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
674
+ @index += 1
675
+ else
676
+ terminal_parse_failure(']')
677
+ r4 = nil
678
+ end
679
+ s0 << r4
680
+ if r4
681
+ r5 = _nt_fws
682
+ s0 << r5
683
+ end
684
+ end
685
+ end
686
+ end
687
+ if s0.last
688
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
689
+ r0.extend(ClosingTag0)
690
+ r0.extend(ClosingTag1)
691
+ else
692
+ @index = i0
693
+ r0 = nil
694
+ end
695
+
696
+ node_cache[:closing_tag][start_index] = r0
697
+
698
+ r0
699
+ end
700
+
701
+ module BlankLine0
702
+ end
703
+
704
+ def _nt_blank_line
705
+ start_index = index
706
+ if node_cache[:blank_line].has_key?(index)
707
+ cached = node_cache[:blank_line][index]
708
+ if cached
709
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
710
+ @index = cached.interval.end
711
+ end
712
+ return cached
713
+ end
714
+
715
+ i0, s0 = index, []
716
+ s1, i1 = [], index
717
+ loop do
718
+ r2 = _nt_ws
719
+ if r2
720
+ s1 << r2
721
+ else
722
+ break
723
+ end
724
+ end
725
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
726
+ s0 << r1
727
+ if r1
728
+ if has_terminal?("\n", false, index)
729
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
730
+ @index += 1
731
+ else
732
+ terminal_parse_failure("\n")
733
+ r3 = nil
734
+ end
735
+ s0 << r3
736
+ end
737
+ if s0.last
738
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
739
+ r0.extend(BlankLine0)
740
+ else
741
+ @index = i0
742
+ r0 = nil
743
+ end
744
+
745
+ node_cache[:blank_line][start_index] = r0
746
+
747
+ r0
748
+ end
749
+
750
+ def _nt_item
751
+ start_index = index
752
+ if node_cache[:item].has_key?(index)
753
+ cached = node_cache[:item][index]
754
+ if cached
755
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
756
+ @index = cached.interval.end
757
+ end
758
+ return cached
759
+ end
760
+
761
+ i0 = index
762
+ r1 = _nt_code_attribute
763
+ if r1
764
+ r0 = r1
765
+ else
766
+ r2 = _nt_multiline_attribute
767
+ if r2
768
+ r0 = r2
769
+ else
770
+ r3 = _nt_translatable_attribute
771
+ if r3
772
+ r0 = r3
773
+ else
774
+ r4 = _nt_attribute
775
+ if r4
776
+ r0 = r4
777
+ else
778
+ r5 = _nt_amending_element
779
+ if r5
780
+ r0 = r5
781
+ else
782
+ r6 = _nt_element
783
+ if r6
784
+ r0 = r6
785
+ else
786
+ @index = i0
787
+ r0 = nil
788
+ end
789
+ end
790
+ end
791
+ end
792
+ end
793
+ end
794
+
795
+ node_cache[:item][start_index] = r0
796
+
797
+ r0
798
+ end
799
+
800
+ module Contents0
801
+ def items
802
+ ::Weskit::WML::Mixins::Grammar.reject_non_wml elements
803
+ end
804
+ end
805
+
806
+ def _nt_contents
807
+ start_index = index
808
+ if node_cache[:contents].has_key?(index)
809
+ cached = node_cache[:contents][index]
810
+ if cached
811
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
812
+ @index = cached.interval.end
813
+ end
814
+ return cached
815
+ end
816
+
817
+ s0, i0 = [], index
818
+ loop do
819
+ i1 = index
820
+ r2 = _nt_blank_line
821
+ if r2
822
+ r1 = r2
823
+ else
824
+ r3 = _nt_item
825
+ if r3
826
+ r1 = r3
827
+ else
828
+ @index = i1
829
+ r1 = nil
830
+ end
831
+ end
832
+ if r1
833
+ s0 << r1
834
+ else
835
+ break
836
+ end
837
+ end
838
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
839
+ r0.extend(Contents0)
840
+
841
+ node_cache[:contents][start_index] = r0
842
+
843
+ r0
844
+ end
845
+
846
+ module Attribute0
847
+ def lws1
848
+ elements[0]
849
+ end
850
+
851
+ def id
852
+ elements[1]
853
+ end
854
+
855
+ def lws2
856
+ elements[2]
857
+ end
858
+
859
+ def equals
860
+ elements[3]
861
+ end
862
+
863
+ def value
864
+ elements[4]
865
+ end
866
+
867
+ def eol
868
+ elements[5]
869
+ end
870
+ end
871
+
872
+ module Attribute1
873
+ def item
874
+ ::Weskit::WML::Attribute.new id.name, value.data
875
+ end
876
+ end
877
+
878
+ def _nt_attribute
879
+ start_index = index
880
+ if node_cache[:attribute].has_key?(index)
881
+ cached = node_cache[:attribute][index]
882
+ if cached
883
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
884
+ @index = cached.interval.end
885
+ end
886
+ return cached
887
+ end
888
+
889
+ i0, s0 = index, []
890
+ r1 = _nt_lws
891
+ s0 << r1
892
+ if r1
893
+ r2 = _nt_identifier
894
+ s0 << r2
895
+ if r2
896
+ r3 = _nt_lws
897
+ s0 << r3
898
+ if r3
899
+ r4 = _nt_equals
900
+ s0 << r4
901
+ if r4
902
+ r5 = _nt_raw_string
903
+ s0 << r5
904
+ if r5
905
+ r6 = _nt_eol
906
+ s0 << r6
907
+ end
908
+ end
909
+ end
910
+ end
911
+ end
912
+ if s0.last
913
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
914
+ r0.extend(Attribute0)
915
+ r0.extend(Attribute1)
916
+ else
917
+ @index = i0
918
+ r0 = nil
919
+ end
920
+
921
+ node_cache[:attribute][start_index] = r0
922
+
923
+ r0
924
+ end
925
+
926
+ module CodeAttribute0
927
+ def lws1
928
+ elements[0]
929
+ end
930
+
931
+ def id
932
+ elements[1]
933
+ end
934
+
935
+ def lws2
936
+ elements[2]
937
+ end
938
+
939
+ def equals
940
+ elements[3]
941
+ end
942
+
943
+ def lws3
944
+ elements[4]
945
+ end
946
+
947
+ def value
948
+ elements[5]
949
+ end
950
+
951
+ def fws
952
+ elements[6]
953
+ end
954
+ end
955
+
956
+ module CodeAttribute1
957
+ def item
958
+ ::Weskit::WML::Attribute.new id.name, value.data, :code => true
959
+ end
960
+ end
961
+
962
+ def _nt_code_attribute
963
+ start_index = index
964
+ if node_cache[:code_attribute].has_key?(index)
965
+ cached = node_cache[:code_attribute][index]
966
+ if cached
967
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
968
+ @index = cached.interval.end
969
+ end
970
+ return cached
971
+ end
972
+
973
+ i0, s0 = index, []
974
+ r1 = _nt_lws
975
+ s0 << r1
976
+ if r1
977
+ r2 = _nt_identifier
978
+ s0 << r2
979
+ if r2
980
+ r3 = _nt_lws
981
+ s0 << r3
982
+ if r3
983
+ r4 = _nt_equals
984
+ s0 << r4
985
+ if r4
986
+ r5 = _nt_lws
987
+ s0 << r5
988
+ if r5
989
+ r6 = _nt_code_string
990
+ s0 << r6
991
+ if r6
992
+ r7 = _nt_fws
993
+ s0 << r7
994
+ end
995
+ end
996
+ end
997
+ end
998
+ end
999
+ end
1000
+ if s0.last
1001
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1002
+ r0.extend(CodeAttribute0)
1003
+ r0.extend(CodeAttribute1)
1004
+ else
1005
+ @index = i0
1006
+ r0 = nil
1007
+ end
1008
+
1009
+ node_cache[:code_attribute][start_index] = r0
1010
+
1011
+ r0
1012
+ end
1013
+
1014
+ module MultilineAttribute0
1015
+ def lws1
1016
+ elements[0]
1017
+ end
1018
+
1019
+ def id
1020
+ elements[1]
1021
+ end
1022
+
1023
+ def lws2
1024
+ elements[2]
1025
+ end
1026
+
1027
+ def equals
1028
+ elements[3]
1029
+ end
1030
+
1031
+ def lws3
1032
+ elements[4]
1033
+ end
1034
+
1035
+ def value
1036
+ elements[5]
1037
+ end
1038
+
1039
+ def fws
1040
+ elements[6]
1041
+ end
1042
+ end
1043
+
1044
+ module MultilineAttribute1
1045
+ def item
1046
+ ::Weskit::WML::Attribute.new id.name, value.data
1047
+ end
1048
+ end
1049
+
1050
+ def _nt_multiline_attribute
1051
+ start_index = index
1052
+ if node_cache[:multiline_attribute].has_key?(index)
1053
+ cached = node_cache[:multiline_attribute][index]
1054
+ if cached
1055
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1056
+ @index = cached.interval.end
1057
+ end
1058
+ return cached
1059
+ end
1060
+
1061
+ i0, s0 = index, []
1062
+ r1 = _nt_lws
1063
+ s0 << r1
1064
+ if r1
1065
+ r2 = _nt_identifier
1066
+ s0 << r2
1067
+ if r2
1068
+ r3 = _nt_lws
1069
+ s0 << r3
1070
+ if r3
1071
+ r4 = _nt_equals
1072
+ s0 << r4
1073
+ if r4
1074
+ r5 = _nt_lws
1075
+ s0 << r5
1076
+ if r5
1077
+ r6 = _nt_multiline_string
1078
+ s0 << r6
1079
+ if r6
1080
+ r7 = _nt_fws
1081
+ s0 << r7
1082
+ end
1083
+ end
1084
+ end
1085
+ end
1086
+ end
1087
+ end
1088
+ if s0.last
1089
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1090
+ r0.extend(MultilineAttribute0)
1091
+ r0.extend(MultilineAttribute1)
1092
+ else
1093
+ @index = i0
1094
+ r0 = nil
1095
+ end
1096
+
1097
+ node_cache[:multiline_attribute][start_index] = r0
1098
+
1099
+ r0
1100
+ end
1101
+
1102
+ module TranslatableAttribute0
1103
+ def lws1
1104
+ elements[0]
1105
+ end
1106
+
1107
+ def id
1108
+ elements[1]
1109
+ end
1110
+
1111
+ def lws2
1112
+ elements[2]
1113
+ end
1114
+
1115
+ def equals
1116
+ elements[3]
1117
+ end
1118
+
1119
+ def lws3
1120
+ elements[4]
1121
+ end
1122
+
1123
+ def lws4
1124
+ elements[6]
1125
+ end
1126
+
1127
+ def value
1128
+ elements[7]
1129
+ end
1130
+
1131
+ def fws
1132
+ elements[8]
1133
+ end
1134
+ end
1135
+
1136
+ module TranslatableAttribute1
1137
+ def item
1138
+ ::Weskit::WML::Attribute.new id.name, value.data, :translatable => true
1139
+ end
1140
+ end
1141
+
1142
+ def _nt_translatable_attribute
1143
+ start_index = index
1144
+ if node_cache[:translatable_attribute].has_key?(index)
1145
+ cached = node_cache[:translatable_attribute][index]
1146
+ if cached
1147
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1148
+ @index = cached.interval.end
1149
+ end
1150
+ return cached
1151
+ end
1152
+
1153
+ i0, s0 = index, []
1154
+ r1 = _nt_lws
1155
+ s0 << r1
1156
+ if r1
1157
+ r2 = _nt_identifier
1158
+ s0 << r2
1159
+ if r2
1160
+ r3 = _nt_lws
1161
+ s0 << r3
1162
+ if r3
1163
+ r4 = _nt_equals
1164
+ s0 << r4
1165
+ if r4
1166
+ r5 = _nt_lws
1167
+ s0 << r5
1168
+ if r5
1169
+ if has_terminal?('_', false, index)
1170
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1171
+ @index += 1
1172
+ else
1173
+ terminal_parse_failure('_')
1174
+ r6 = nil
1175
+ end
1176
+ s0 << r6
1177
+ if r6
1178
+ r7 = _nt_lws
1179
+ s0 << r7
1180
+ if r7
1181
+ r8 = _nt_multiline_string
1182
+ s0 << r8
1183
+ if r8
1184
+ r9 = _nt_fws
1185
+ s0 << r9
1186
+ end
1187
+ end
1188
+ end
1189
+ end
1190
+ end
1191
+ end
1192
+ end
1193
+ end
1194
+ if s0.last
1195
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1196
+ r0.extend(TranslatableAttribute0)
1197
+ r0.extend(TranslatableAttribute1)
1198
+ else
1199
+ @index = i0
1200
+ r0 = nil
1201
+ end
1202
+
1203
+ node_cache[:translatable_attribute][start_index] = r0
1204
+
1205
+ r0
1206
+ end
1207
+
1208
+ module Element0
1209
+ def open
1210
+ elements[0]
1211
+ end
1212
+
1213
+ def nested
1214
+ elements[1]
1215
+ end
1216
+
1217
+ def close
1218
+ elements[2]
1219
+ end
1220
+ end
1221
+
1222
+ module Element1
1223
+ def item
1224
+ ::Weskit::WML::Mixins::Grammar.raise_on_mismatching open, close
1225
+ ::Weskit::WML::Element.new(open.name).push *nested.items
1226
+ end
1227
+ end
1228
+
1229
+ def _nt_element
1230
+ start_index = index
1231
+ if node_cache[:element].has_key?(index)
1232
+ cached = node_cache[:element][index]
1233
+ if cached
1234
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1235
+ @index = cached.interval.end
1236
+ end
1237
+ return cached
1238
+ end
1239
+
1240
+ i0, s0 = index, []
1241
+ r1 = _nt_opening_tag
1242
+ s0 << r1
1243
+ if r1
1244
+ r2 = _nt_contents
1245
+ s0 << r2
1246
+ if r2
1247
+ r3 = _nt_closing_tag
1248
+ s0 << r3
1249
+ end
1250
+ end
1251
+ if s0.last
1252
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1253
+ r0.extend(Element0)
1254
+ r0.extend(Element1)
1255
+ else
1256
+ @index = i0
1257
+ r0 = nil
1258
+ end
1259
+
1260
+ node_cache[:element][start_index] = r0
1261
+
1262
+ r0
1263
+ end
1264
+
1265
+ module AmendingElement0
1266
+ def open
1267
+ elements[0]
1268
+ end
1269
+
1270
+ def nested
1271
+ elements[1]
1272
+ end
1273
+
1274
+ def close
1275
+ elements[2]
1276
+ end
1277
+ end
1278
+
1279
+ module AmendingElement1
1280
+ def item
1281
+ ::Weskit::WML::Mixins::Grammar.raise_on_mismatching open, close
1282
+ ::Weskit::WML::Element.new(open.name, :amendment => true).push *nested.items
1283
+ end
1284
+ end
1285
+
1286
+ def _nt_amending_element
1287
+ start_index = index
1288
+ if node_cache[:amending_element].has_key?(index)
1289
+ cached = node_cache[:amending_element][index]
1290
+ if cached
1291
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1292
+ @index = cached.interval.end
1293
+ end
1294
+ return cached
1295
+ end
1296
+
1297
+ i0, s0 = index, []
1298
+ r1 = _nt_amending_tag
1299
+ s0 << r1
1300
+ if r1
1301
+ r2 = _nt_contents
1302
+ s0 << r2
1303
+ if r2
1304
+ r3 = _nt_closing_tag
1305
+ s0 << r3
1306
+ end
1307
+ end
1308
+ if s0.last
1309
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1310
+ r0.extend(AmendingElement0)
1311
+ r0.extend(AmendingElement1)
1312
+ else
1313
+ @index = i0
1314
+ r0 = nil
1315
+ end
1316
+
1317
+ node_cache[:amending_element][start_index] = r0
1318
+
1319
+ r0
1320
+ end
1321
+
1322
+ def _nt_content
1323
+ start_index = index
1324
+ if node_cache[:content].has_key?(index)
1325
+ cached = node_cache[:content][index]
1326
+ if cached
1327
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1328
+ @index = cached.interval.end
1329
+ end
1330
+ return cached
1331
+ end
1332
+
1333
+ i0 = index
1334
+ if has_terminal?("\n", false, index)
1335
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1336
+ @index += 1
1337
+ else
1338
+ terminal_parse_failure("\n")
1339
+ r1 = nil
1340
+ end
1341
+ if r1
1342
+ r0 = r1
1343
+ else
1344
+ if index < input_length
1345
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1346
+ @index += 1
1347
+ else
1348
+ terminal_parse_failure("any character")
1349
+ r2 = nil
1350
+ end
1351
+ if r2
1352
+ r0 = r2
1353
+ else
1354
+ @index = i0
1355
+ r0 = nil
1356
+ end
1357
+ end
1358
+
1359
+ node_cache[:content][start_index] = r0
1360
+
1361
+ r0
1362
+ end
1363
+
1364
+ def _nt_eol
1365
+ start_index = index
1366
+ if node_cache[:eol].has_key?(index)
1367
+ cached = node_cache[:eol][index]
1368
+ if cached
1369
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1370
+ @index = cached.interval.end
1371
+ end
1372
+ return cached
1373
+ end
1374
+
1375
+ i0 = index
1376
+ if has_terminal?("\n", false, index)
1377
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1378
+ @index += 1
1379
+ else
1380
+ terminal_parse_failure("\n")
1381
+ r1 = nil
1382
+ end
1383
+ if r1
1384
+ r0 = r1
1385
+ else
1386
+ i2 = index
1387
+ if index < input_length
1388
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1389
+ @index += 1
1390
+ else
1391
+ terminal_parse_failure("any character")
1392
+ r3 = nil
1393
+ end
1394
+ if r3
1395
+ r2 = nil
1396
+ else
1397
+ @index = i2
1398
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1399
+ end
1400
+ if r2
1401
+ r0 = r2
1402
+ else
1403
+ @index = i0
1404
+ r0 = nil
1405
+ end
1406
+ end
1407
+
1408
+ node_cache[:eol][start_index] = r0
1409
+
1410
+ r0
1411
+ end
1412
+
1413
+ def _nt_equals
1414
+ start_index = index
1415
+ if node_cache[:equals].has_key?(index)
1416
+ cached = node_cache[:equals][index]
1417
+ if cached
1418
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1419
+ @index = cached.interval.end
1420
+ end
1421
+ return cached
1422
+ end
1423
+
1424
+ if has_terminal?('=', false, index)
1425
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
1426
+ @index += 1
1427
+ else
1428
+ terminal_parse_failure('=')
1429
+ r0 = nil
1430
+ end
1431
+
1432
+ node_cache[:equals][start_index] = r0
1433
+
1434
+ r0
1435
+ end
1436
+
1437
+ def _nt_quote
1438
+ start_index = index
1439
+ if node_cache[:quote].has_key?(index)
1440
+ cached = node_cache[:quote][index]
1441
+ if cached
1442
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1443
+ @index = cached.interval.end
1444
+ end
1445
+ return cached
1446
+ end
1447
+
1448
+ if has_terminal?('"', false, index)
1449
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
1450
+ @index += 1
1451
+ else
1452
+ terminal_parse_failure('"')
1453
+ r0 = nil
1454
+ end
1455
+
1456
+ node_cache[:quote][start_index] = r0
1457
+
1458
+ r0
1459
+ end
1460
+
1461
+ def _nt_ws
1462
+ start_index = index
1463
+ if node_cache[:ws].has_key?(index)
1464
+ cached = node_cache[:ws][index]
1465
+ if cached
1466
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1467
+ @index = cached.interval.end
1468
+ end
1469
+ return cached
1470
+ end
1471
+
1472
+ i0 = index
1473
+ if has_terminal?("\s", false, index)
1474
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1475
+ @index += 1
1476
+ else
1477
+ terminal_parse_failure("\s")
1478
+ r1 = nil
1479
+ end
1480
+ if r1
1481
+ r0 = r1
1482
+ else
1483
+ if has_terminal?("\t", false, index)
1484
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1485
+ @index += 1
1486
+ else
1487
+ terminal_parse_failure("\t")
1488
+ r2 = nil
1489
+ end
1490
+ if r2
1491
+ r0 = r2
1492
+ else
1493
+ @index = i0
1494
+ r0 = nil
1495
+ end
1496
+ end
1497
+
1498
+ node_cache[:ws][start_index] = r0
1499
+
1500
+ r0
1501
+ end
1502
+
1503
+ def _nt_lws
1504
+ start_index = index
1505
+ if node_cache[:lws].has_key?(index)
1506
+ cached = node_cache[:lws][index]
1507
+ if cached
1508
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1509
+ @index = cached.interval.end
1510
+ end
1511
+ return cached
1512
+ end
1513
+
1514
+ s0, i0 = [], index
1515
+ loop do
1516
+ r1 = _nt_ws
1517
+ if r1
1518
+ s0 << r1
1519
+ else
1520
+ break
1521
+ end
1522
+ end
1523
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1524
+
1525
+ node_cache[:lws][start_index] = r0
1526
+
1527
+ r0
1528
+ end
1529
+
1530
+ module Fws0
1531
+ def eol
1532
+ elements[1]
1533
+ end
1534
+ end
1535
+
1536
+ def _nt_fws
1537
+ start_index = index
1538
+ if node_cache[:fws].has_key?(index)
1539
+ cached = node_cache[:fws][index]
1540
+ if cached
1541
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1542
+ @index = cached.interval.end
1543
+ end
1544
+ return cached
1545
+ end
1546
+
1547
+ i0, s0 = index, []
1548
+ s1, i1 = [], index
1549
+ loop do
1550
+ r2 = _nt_ws
1551
+ if r2
1552
+ s1 << r2
1553
+ else
1554
+ break
1555
+ end
1556
+ end
1557
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1558
+ s0 << r1
1559
+ if r1
1560
+ r3 = _nt_eol
1561
+ s0 << r3
1562
+ end
1563
+ if s0.last
1564
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1565
+ r0.extend(Fws0)
1566
+ else
1567
+ @index = i0
1568
+ r0 = nil
1569
+ end
1570
+
1571
+ node_cache[:fws][start_index] = r0
1572
+
1573
+ r0
1574
+ end
1575
+
1576
+ end
1577
+
1578
+ class WesnothMarkupLanguageParser < Treetop::Runtime::CompiledParser
1579
+ include WesnothMarkupLanguage
1580
+ end