kpeg 1.0.0 → 1.1.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.
@@ -0,0 +1,3892 @@
1
+ class TinyMarkdown::Parser
2
+ # :stopdoc:
3
+
4
+ # This is distinct from setup_parser so that a standalone parser
5
+ # can redefine #initialize and still have access to the proper
6
+ # parser setup code.
7
+ def initialize(str, debug=false)
8
+ setup_parser(str, debug)
9
+ end
10
+
11
+
12
+
13
+ # Prepares for parsing +str+. If you define a custom initialize you must
14
+ # call this method before #parse
15
+ def setup_parser(str, debug=false)
16
+ set_string str, 0
17
+ @memoizations = Hash.new { |h,k| h[k] = {} }
18
+ @result = nil
19
+ @failed_rule = nil
20
+ @failing_rule_offset = -1
21
+
22
+ setup_foreign_grammar
23
+ end
24
+
25
+ attr_reader :string
26
+ attr_reader :failing_rule_offset
27
+ attr_accessor :result, :pos
28
+
29
+ def current_column(target=pos)
30
+ if c = string.rindex("\n", target-1)
31
+ return target - c - 1
32
+ end
33
+
34
+ target + 1
35
+ end
36
+
37
+ def current_line(target=pos)
38
+ cur_offset = 0
39
+ cur_line = 0
40
+
41
+ string.each_line do |line|
42
+ cur_line += 1
43
+ cur_offset += line.size
44
+ return cur_line if cur_offset >= target
45
+ end
46
+
47
+ -1
48
+ end
49
+
50
+ def lines
51
+ lines = []
52
+ string.each_line { |l| lines << l }
53
+ lines
54
+ end
55
+
56
+
57
+
58
+ def get_text(start)
59
+ @string[start..@pos-1]
60
+ end
61
+
62
+ # Sets the string and current parsing position for the parser.
63
+ def set_string string, pos
64
+ @string = string
65
+ @string_size = string ? string.size : 0
66
+ @pos = pos
67
+ end
68
+
69
+ def show_pos
70
+ width = 10
71
+ if @pos < width
72
+ "#{@pos} (\"#{@string[0,@pos]}\" @ \"#{@string[@pos,width]}\")"
73
+ else
74
+ "#{@pos} (\"... #{@string[@pos - width, width]}\" @ \"#{@string[@pos,width]}\")"
75
+ end
76
+ end
77
+
78
+ def failure_info
79
+ l = current_line @failing_rule_offset
80
+ c = current_column @failing_rule_offset
81
+
82
+ if @failed_rule.kind_of? Symbol
83
+ info = self.class::Rules[@failed_rule]
84
+ "line #{l}, column #{c}: failed rule '#{info.name}' = '#{info.rendered}'"
85
+ else
86
+ "line #{l}, column #{c}: failed rule '#{@failed_rule}'"
87
+ end
88
+ end
89
+
90
+ def failure_caret
91
+ l = current_line @failing_rule_offset
92
+ c = current_column @failing_rule_offset
93
+
94
+ line = lines[l-1]
95
+ "#{line}\n#{' ' * (c - 1)}^"
96
+ end
97
+
98
+ def failure_character
99
+ l = current_line @failing_rule_offset
100
+ c = current_column @failing_rule_offset
101
+ lines[l-1][c-1, 1]
102
+ end
103
+
104
+ def failure_oneline
105
+ l = current_line @failing_rule_offset
106
+ c = current_column @failing_rule_offset
107
+
108
+ char = lines[l-1][c-1, 1]
109
+
110
+ if @failed_rule.kind_of? Symbol
111
+ info = self.class::Rules[@failed_rule]
112
+ "@#{l}:#{c} failed rule '#{info.name}', got '#{char}'"
113
+ else
114
+ "@#{l}:#{c} failed rule '#{@failed_rule}', got '#{char}'"
115
+ end
116
+ end
117
+
118
+ class ParseError < RuntimeError
119
+ end
120
+
121
+ def raise_error
122
+ raise ParseError, failure_oneline
123
+ end
124
+
125
+ def show_error(io=STDOUT)
126
+ error_pos = @failing_rule_offset
127
+ line_no = current_line(error_pos)
128
+ col_no = current_column(error_pos)
129
+
130
+ io.puts "On line #{line_no}, column #{col_no}:"
131
+
132
+ if @failed_rule.kind_of? Symbol
133
+ info = self.class::Rules[@failed_rule]
134
+ io.puts "Failed to match '#{info.rendered}' (rule '#{info.name}')"
135
+ else
136
+ io.puts "Failed to match rule '#{@failed_rule}'"
137
+ end
138
+
139
+ io.puts "Got: #{string[error_pos,1].inspect}"
140
+ line = lines[line_no-1]
141
+ io.puts "=> #{line}"
142
+ io.print(" " * (col_no + 3))
143
+ io.puts "^"
144
+ end
145
+
146
+ def set_failed_rule(name)
147
+ if @pos > @failing_rule_offset
148
+ @failed_rule = name
149
+ @failing_rule_offset = @pos
150
+ end
151
+ end
152
+
153
+ attr_reader :failed_rule
154
+
155
+ def match_string(str)
156
+ len = str.size
157
+ if @string[pos,len] == str
158
+ @pos += len
159
+ return str
160
+ end
161
+
162
+ return nil
163
+ end
164
+
165
+ def scan(reg)
166
+ if m = reg.match(@string[@pos..-1])
167
+ width = m.end(0)
168
+ @pos += width
169
+ return true
170
+ end
171
+
172
+ return nil
173
+ end
174
+
175
+ if "".respond_to? :ord
176
+ def get_byte
177
+ if @pos >= @string_size
178
+ return nil
179
+ end
180
+
181
+ s = @string[@pos].ord
182
+ @pos += 1
183
+ s
184
+ end
185
+ else
186
+ def get_byte
187
+ if @pos >= @string_size
188
+ return nil
189
+ end
190
+
191
+ s = @string[@pos]
192
+ @pos += 1
193
+ s
194
+ end
195
+ end
196
+
197
+ def parse(rule=nil)
198
+ # We invoke the rules indirectly via apply
199
+ # instead of by just calling them as methods because
200
+ # if the rules use left recursion, apply needs to
201
+ # manage that.
202
+
203
+ if !rule
204
+ apply(:_root)
205
+ else
206
+ method = rule.gsub("-","_hyphen_")
207
+ apply :"_#{method}"
208
+ end
209
+ end
210
+
211
+ class MemoEntry
212
+ def initialize(ans, pos)
213
+ @ans = ans
214
+ @pos = pos
215
+ @result = nil
216
+ @set = false
217
+ @left_rec = false
218
+ end
219
+
220
+ attr_reader :ans, :pos, :result, :set
221
+ attr_accessor :left_rec
222
+
223
+ def move!(ans, pos, result)
224
+ @ans = ans
225
+ @pos = pos
226
+ @result = result
227
+ @set = true
228
+ @left_rec = false
229
+ end
230
+ end
231
+
232
+ def external_invoke(other, rule, *args)
233
+ old_pos = @pos
234
+ old_string = @string
235
+
236
+ set_string other.string, other.pos
237
+
238
+ begin
239
+ if val = __send__(rule, *args)
240
+ other.pos = @pos
241
+ other.result = @result
242
+ else
243
+ other.set_failed_rule "#{self.class}##{rule}"
244
+ end
245
+ val
246
+ ensure
247
+ set_string old_string, old_pos
248
+ end
249
+ end
250
+
251
+ def apply_with_args(rule, *args)
252
+ memo_key = [rule, args]
253
+ if m = @memoizations[memo_key][@pos]
254
+ @pos = m.pos
255
+ if !m.set
256
+ m.left_rec = true
257
+ return nil
258
+ end
259
+
260
+ @result = m.result
261
+
262
+ return m.ans
263
+ else
264
+ m = MemoEntry.new(nil, @pos)
265
+ @memoizations[memo_key][@pos] = m
266
+ start_pos = @pos
267
+
268
+ ans = __send__ rule, *args
269
+
270
+ lr = m.left_rec
271
+
272
+ m.move! ans, @pos, @result
273
+
274
+ # Don't bother trying to grow the left recursion
275
+ # if it's failing straight away (thus there is no seed)
276
+ if ans and lr
277
+ return grow_lr(rule, args, start_pos, m)
278
+ else
279
+ return ans
280
+ end
281
+
282
+ return ans
283
+ end
284
+ end
285
+
286
+ def apply(rule)
287
+ if m = @memoizations[rule][@pos]
288
+ @pos = m.pos
289
+ if !m.set
290
+ m.left_rec = true
291
+ return nil
292
+ end
293
+
294
+ @result = m.result
295
+
296
+ return m.ans
297
+ else
298
+ m = MemoEntry.new(nil, @pos)
299
+ @memoizations[rule][@pos] = m
300
+ start_pos = @pos
301
+
302
+ ans = __send__ rule
303
+
304
+ lr = m.left_rec
305
+
306
+ m.move! ans, @pos, @result
307
+
308
+ # Don't bother trying to grow the left recursion
309
+ # if it's failing straight away (thus there is no seed)
310
+ if ans and lr
311
+ return grow_lr(rule, nil, start_pos, m)
312
+ else
313
+ return ans
314
+ end
315
+
316
+ return ans
317
+ end
318
+ end
319
+
320
+ def grow_lr(rule, args, start_pos, m)
321
+ while true
322
+ @pos = start_pos
323
+ @result = m.result
324
+
325
+ if args
326
+ ans = __send__ rule, *args
327
+ else
328
+ ans = __send__ rule
329
+ end
330
+ return nil unless ans
331
+
332
+ break if @pos <= m.pos
333
+
334
+ m.move! ans, @pos, @result
335
+ end
336
+
337
+ @result = m.result
338
+ @pos = m.pos
339
+ return m.ans
340
+ end
341
+
342
+ class RuleInfo
343
+ def initialize(name, rendered)
344
+ @name = name
345
+ @rendered = rendered
346
+ end
347
+
348
+ attr_reader :name, :rendered
349
+ end
350
+
351
+ def self.rule_info(name, rendered)
352
+ RuleInfo.new(name, rendered)
353
+ end
354
+
355
+
356
+ # :startdoc:
357
+
358
+
359
+ attr_reader :ast
360
+
361
+ class Position
362
+ attr_accessor :pos, :line, :col
363
+ def initialize(compiler)
364
+ @pos = compiler.pos
365
+ @line = compiler.current_line
366
+ @col = compiler.current_column
367
+ end
368
+ end
369
+
370
+ def position
371
+ Position.new(self)
372
+ end
373
+
374
+
375
+ # :stopdoc:
376
+
377
+ module ::TinyMarkdown
378
+ class Node; end
379
+ class BlockQuoteNode < Node
380
+ def initialize(compiler, position, content)
381
+ @compiler = compiler
382
+ @position = position
383
+ @content = content
384
+ end
385
+ attr_reader :compiler
386
+ attr_reader :position
387
+ attr_reader :content
388
+ end
389
+ class BulletListNode < Node
390
+ def initialize(compiler, position, content)
391
+ @compiler = compiler
392
+ @position = position
393
+ @content = content
394
+ end
395
+ attr_reader :compiler
396
+ attr_reader :position
397
+ attr_reader :content
398
+ end
399
+ class BulletListItemNode < Node
400
+ def initialize(compiler, position, content)
401
+ @compiler = compiler
402
+ @position = position
403
+ @content = content
404
+ end
405
+ attr_reader :compiler
406
+ attr_reader :position
407
+ attr_reader :content
408
+ end
409
+ class DocumentNode < Node
410
+ def initialize(compiler, position, content)
411
+ @compiler = compiler
412
+ @position = position
413
+ @content = content
414
+ end
415
+ attr_reader :compiler
416
+ attr_reader :position
417
+ attr_reader :content
418
+ end
419
+ class HeadlineNode < Node
420
+ def initialize(compiler, position, level, content)
421
+ @compiler = compiler
422
+ @position = position
423
+ @level = level
424
+ @content = content
425
+ end
426
+ attr_reader :compiler
427
+ attr_reader :position
428
+ attr_reader :level
429
+ attr_reader :content
430
+ end
431
+ class HorizontalRuleNode < Node
432
+ def initialize(compiler, position)
433
+ @compiler = compiler
434
+ @position = position
435
+ end
436
+ attr_reader :compiler
437
+ attr_reader :position
438
+ end
439
+ class InlineElementNode < Node
440
+ def initialize(compiler, position, name, content)
441
+ @compiler = compiler
442
+ @position = position
443
+ @name = name
444
+ @content = content
445
+ end
446
+ attr_reader :compiler
447
+ attr_reader :position
448
+ attr_reader :name
449
+ attr_reader :content
450
+ end
451
+ class LineBreakNode < Node
452
+ def initialize(compiler, position)
453
+ @compiler = compiler
454
+ @position = position
455
+ end
456
+ attr_reader :compiler
457
+ attr_reader :position
458
+ end
459
+ class ListNode < Node
460
+ def initialize(compiler, position, content)
461
+ @compiler = compiler
462
+ @position = position
463
+ @content = content
464
+ end
465
+ attr_reader :compiler
466
+ attr_reader :position
467
+ attr_reader :content
468
+ end
469
+ class ParaNode < Node
470
+ def initialize(compiler, position, content)
471
+ @compiler = compiler
472
+ @position = position
473
+ @content = content
474
+ end
475
+ attr_reader :compiler
476
+ attr_reader :position
477
+ attr_reader :content
478
+ end
479
+ class PlainNode < Node
480
+ def initialize(compiler, position, content)
481
+ @compiler = compiler
482
+ @position = position
483
+ @content = content
484
+ end
485
+ attr_reader :compiler
486
+ attr_reader :position
487
+ attr_reader :content
488
+ end
489
+ class TextNode < Node
490
+ def initialize(compiler, position, content)
491
+ @compiler = compiler
492
+ @position = position
493
+ @content = content
494
+ end
495
+ attr_reader :compiler
496
+ attr_reader :position
497
+ attr_reader :content
498
+ end
499
+ class VerbatimNode < Node
500
+ def initialize(compiler, position, content)
501
+ @compiler = compiler
502
+ @position = position
503
+ @content = content
504
+ end
505
+ attr_reader :compiler
506
+ attr_reader :position
507
+ attr_reader :content
508
+ end
509
+ end
510
+ module ::TinyMarkdownConstruction
511
+ def block_quote(compiler, position, content)
512
+ ::TinyMarkdown::BlockQuoteNode.new(compiler, position, content)
513
+ end
514
+ def bullet_list(compiler, position, content)
515
+ ::TinyMarkdown::BulletListNode.new(compiler, position, content)
516
+ end
517
+ def bullet_list_item(compiler, position, content)
518
+ ::TinyMarkdown::BulletListItemNode.new(compiler, position, content)
519
+ end
520
+ def document(compiler, position, content)
521
+ ::TinyMarkdown::DocumentNode.new(compiler, position, content)
522
+ end
523
+ def headline(compiler, position, level, content)
524
+ ::TinyMarkdown::HeadlineNode.new(compiler, position, level, content)
525
+ end
526
+ def horizontal_rule(compiler, position)
527
+ ::TinyMarkdown::HorizontalRuleNode.new(compiler, position)
528
+ end
529
+ def inline_element(compiler, position, name, content)
530
+ ::TinyMarkdown::InlineElementNode.new(compiler, position, name, content)
531
+ end
532
+ def linebreak(compiler, position)
533
+ ::TinyMarkdown::LineBreakNode.new(compiler, position)
534
+ end
535
+ def list(compiler, position, content)
536
+ ::TinyMarkdown::ListNode.new(compiler, position, content)
537
+ end
538
+ def para(compiler, position, content)
539
+ ::TinyMarkdown::ParaNode.new(compiler, position, content)
540
+ end
541
+ def plain(compiler, position, content)
542
+ ::TinyMarkdown::PlainNode.new(compiler, position, content)
543
+ end
544
+ def text(compiler, position, content)
545
+ ::TinyMarkdown::TextNode.new(compiler, position, content)
546
+ end
547
+ def verbatim(compiler, position, content)
548
+ ::TinyMarkdown::VerbatimNode.new(compiler, position, content)
549
+ end
550
+ end
551
+ include ::TinyMarkdownConstruction
552
+ def setup_foreign_grammar; end
553
+
554
+ # root = Start
555
+ def _root
556
+ _tmp = apply(:_Start)
557
+ set_failed_rule :_root unless _tmp
558
+ return _tmp
559
+ end
560
+
561
+ # Start = &. Doc:c { @ast = c }
562
+ def _Start
563
+
564
+ _save = self.pos
565
+ while true # sequence
566
+ _save1 = self.pos
567
+ _tmp = get_byte
568
+ self.pos = _save1
569
+ unless _tmp
570
+ self.pos = _save
571
+ break
572
+ end
573
+ _tmp = apply(:_Doc)
574
+ c = @result
575
+ unless _tmp
576
+ self.pos = _save
577
+ break
578
+ end
579
+ @result = begin; @ast = c ; end
580
+ _tmp = true
581
+ unless _tmp
582
+ self.pos = _save
583
+ end
584
+ break
585
+ end # end sequence
586
+
587
+ set_failed_rule :_Start unless _tmp
588
+ return _tmp
589
+ end
590
+
591
+ # Doc = Block*:c {document(self, position, c)}
592
+ def _Doc
593
+
594
+ _save = self.pos
595
+ while true # sequence
596
+ _ary = []
597
+ while true
598
+ _tmp = apply(:_Block)
599
+ _ary << @result if _tmp
600
+ break unless _tmp
601
+ end
602
+ _tmp = true
603
+ @result = _ary
604
+ c = @result
605
+ unless _tmp
606
+ self.pos = _save
607
+ break
608
+ end
609
+ @result = begin; document(self, position, c); end
610
+ _tmp = true
611
+ unless _tmp
612
+ self.pos = _save
613
+ end
614
+ break
615
+ end # end sequence
616
+
617
+ set_failed_rule :_Doc unless _tmp
618
+ return _tmp
619
+ end
620
+
621
+ # Block = BlankLine* (BlockQuote | Verbatim | HorizontalRule | Heading | BulletList | Para | Plain)
622
+ def _Block
623
+
624
+ _save = self.pos
625
+ while true # sequence
626
+ while true
627
+ _tmp = apply(:_BlankLine)
628
+ break unless _tmp
629
+ end
630
+ _tmp = true
631
+ unless _tmp
632
+ self.pos = _save
633
+ break
634
+ end
635
+
636
+ _save2 = self.pos
637
+ while true # choice
638
+ _tmp = apply(:_BlockQuote)
639
+ break if _tmp
640
+ self.pos = _save2
641
+ _tmp = apply(:_Verbatim)
642
+ break if _tmp
643
+ self.pos = _save2
644
+ _tmp = apply(:_HorizontalRule)
645
+ break if _tmp
646
+ self.pos = _save2
647
+ _tmp = apply(:_Heading)
648
+ break if _tmp
649
+ self.pos = _save2
650
+ _tmp = apply(:_BulletList)
651
+ break if _tmp
652
+ self.pos = _save2
653
+ _tmp = apply(:_Para)
654
+ break if _tmp
655
+ self.pos = _save2
656
+ _tmp = apply(:_Plain)
657
+ break if _tmp
658
+ self.pos = _save2
659
+ break
660
+ end # end choice
661
+
662
+ unless _tmp
663
+ self.pos = _save
664
+ end
665
+ break
666
+ end # end sequence
667
+
668
+ set_failed_rule :_Block unless _tmp
669
+ return _tmp
670
+ end
671
+
672
+ # Para = NonindentSpace Inlines:a BlankLine+ {para(self, position, a)}
673
+ def _Para
674
+
675
+ _save = self.pos
676
+ while true # sequence
677
+ _tmp = apply(:_NonindentSpace)
678
+ unless _tmp
679
+ self.pos = _save
680
+ break
681
+ end
682
+ _tmp = apply(:_Inlines)
683
+ a = @result
684
+ unless _tmp
685
+ self.pos = _save
686
+ break
687
+ end
688
+ _save1 = self.pos
689
+ _tmp = apply(:_BlankLine)
690
+ if _tmp
691
+ while true
692
+ _tmp = apply(:_BlankLine)
693
+ break unless _tmp
694
+ end
695
+ _tmp = true
696
+ else
697
+ self.pos = _save1
698
+ end
699
+ unless _tmp
700
+ self.pos = _save
701
+ break
702
+ end
703
+ @result = begin; para(self, position, a); end
704
+ _tmp = true
705
+ unless _tmp
706
+ self.pos = _save
707
+ end
708
+ break
709
+ end # end sequence
710
+
711
+ set_failed_rule :_Para unless _tmp
712
+ return _tmp
713
+ end
714
+
715
+ # Plain = Inlines:a {plain(self, position, a)}
716
+ def _Plain
717
+
718
+ _save = self.pos
719
+ while true # sequence
720
+ _tmp = apply(:_Inlines)
721
+ a = @result
722
+ unless _tmp
723
+ self.pos = _save
724
+ break
725
+ end
726
+ @result = begin; plain(self, position, a); end
727
+ _tmp = true
728
+ unless _tmp
729
+ self.pos = _save
730
+ end
731
+ break
732
+ end # end sequence
733
+
734
+ set_failed_rule :_Plain unless _tmp
735
+ return _tmp
736
+ end
737
+
738
+ # AtxInline = !Newline !(Sp "#"* Sp Newline) Inline:c { c }
739
+ def _AtxInline
740
+
741
+ _save = self.pos
742
+ while true # sequence
743
+ _save1 = self.pos
744
+ _tmp = apply(:_Newline)
745
+ _tmp = _tmp ? nil : true
746
+ self.pos = _save1
747
+ unless _tmp
748
+ self.pos = _save
749
+ break
750
+ end
751
+ _save2 = self.pos
752
+
753
+ _save3 = self.pos
754
+ while true # sequence
755
+ _tmp = apply(:_Sp)
756
+ unless _tmp
757
+ self.pos = _save3
758
+ break
759
+ end
760
+ while true
761
+ _tmp = match_string("#")
762
+ break unless _tmp
763
+ end
764
+ _tmp = true
765
+ unless _tmp
766
+ self.pos = _save3
767
+ break
768
+ end
769
+ _tmp = apply(:_Sp)
770
+ unless _tmp
771
+ self.pos = _save3
772
+ break
773
+ end
774
+ _tmp = apply(:_Newline)
775
+ unless _tmp
776
+ self.pos = _save3
777
+ end
778
+ break
779
+ end # end sequence
780
+
781
+ _tmp = _tmp ? nil : true
782
+ self.pos = _save2
783
+ unless _tmp
784
+ self.pos = _save
785
+ break
786
+ end
787
+ _tmp = apply(:_Inline)
788
+ c = @result
789
+ unless _tmp
790
+ self.pos = _save
791
+ break
792
+ end
793
+ @result = begin; c ; end
794
+ _tmp = true
795
+ unless _tmp
796
+ self.pos = _save
797
+ end
798
+ break
799
+ end # end sequence
800
+
801
+ set_failed_rule :_AtxInline unless _tmp
802
+ return _tmp
803
+ end
804
+
805
+ # AtxStart = < /######|#####|####|###|##|#/ > { text.length }
806
+ def _AtxStart
807
+
808
+ _save = self.pos
809
+ while true # sequence
810
+ _text_start = self.pos
811
+ _tmp = scan(/\A(?-mix:######|#####|####|###|##|#)/)
812
+ if _tmp
813
+ text = get_text(_text_start)
814
+ end
815
+ unless _tmp
816
+ self.pos = _save
817
+ break
818
+ end
819
+ @result = begin; text.length ; end
820
+ _tmp = true
821
+ unless _tmp
822
+ self.pos = _save
823
+ end
824
+ break
825
+ end # end sequence
826
+
827
+ set_failed_rule :_AtxStart unless _tmp
828
+ return _tmp
829
+ end
830
+
831
+ # AtxHeading = AtxStart:level Sp AtxInline+:c (Sp "#"* Sp)? Newline {headline(self, position, level, c)}
832
+ def _AtxHeading
833
+
834
+ _save = self.pos
835
+ while true # sequence
836
+ _tmp = apply(:_AtxStart)
837
+ level = @result
838
+ unless _tmp
839
+ self.pos = _save
840
+ break
841
+ end
842
+ _tmp = apply(:_Sp)
843
+ unless _tmp
844
+ self.pos = _save
845
+ break
846
+ end
847
+ _save1 = self.pos
848
+ _ary = []
849
+ _tmp = apply(:_AtxInline)
850
+ if _tmp
851
+ _ary << @result
852
+ while true
853
+ _tmp = apply(:_AtxInline)
854
+ _ary << @result if _tmp
855
+ break unless _tmp
856
+ end
857
+ _tmp = true
858
+ @result = _ary
859
+ else
860
+ self.pos = _save1
861
+ end
862
+ c = @result
863
+ unless _tmp
864
+ self.pos = _save
865
+ break
866
+ end
867
+ _save2 = self.pos
868
+
869
+ _save3 = self.pos
870
+ while true # sequence
871
+ _tmp = apply(:_Sp)
872
+ unless _tmp
873
+ self.pos = _save3
874
+ break
875
+ end
876
+ while true
877
+ _tmp = match_string("#")
878
+ break unless _tmp
879
+ end
880
+ _tmp = true
881
+ unless _tmp
882
+ self.pos = _save3
883
+ break
884
+ end
885
+ _tmp = apply(:_Sp)
886
+ unless _tmp
887
+ self.pos = _save3
888
+ end
889
+ break
890
+ end # end sequence
891
+
892
+ unless _tmp
893
+ _tmp = true
894
+ self.pos = _save2
895
+ end
896
+ unless _tmp
897
+ self.pos = _save
898
+ break
899
+ end
900
+ _tmp = apply(:_Newline)
901
+ unless _tmp
902
+ self.pos = _save
903
+ break
904
+ end
905
+ @result = begin; headline(self, position, level, c); end
906
+ _tmp = true
907
+ unless _tmp
908
+ self.pos = _save
909
+ end
910
+ break
911
+ end # end sequence
912
+
913
+ set_failed_rule :_AtxHeading unless _tmp
914
+ return _tmp
915
+ end
916
+
917
+ # Heading = AtxHeading
918
+ def _Heading
919
+ _tmp = apply(:_AtxHeading)
920
+ set_failed_rule :_Heading unless _tmp
921
+ return _tmp
922
+ end
923
+
924
+ # BlockQuote = BlockQuoteRaw:c {block_quote(self, position, c)}
925
+ def _BlockQuote
926
+
927
+ _save = self.pos
928
+ while true # sequence
929
+ _tmp = apply(:_BlockQuoteRaw)
930
+ c = @result
931
+ unless _tmp
932
+ self.pos = _save
933
+ break
934
+ end
935
+ @result = begin; block_quote(self, position, c); end
936
+ _tmp = true
937
+ unless _tmp
938
+ self.pos = _save
939
+ end
940
+ break
941
+ end # end sequence
942
+
943
+ set_failed_rule :_BlockQuote unless _tmp
944
+ return _tmp
945
+ end
946
+
947
+ # BlockQuoteRaw = (">" " "? Line:c { c })+:cc { cc }
948
+ def _BlockQuoteRaw
949
+
950
+ _save = self.pos
951
+ while true # sequence
952
+ _save1 = self.pos
953
+ _ary = []
954
+
955
+ _save2 = self.pos
956
+ while true # sequence
957
+ _tmp = match_string(">")
958
+ unless _tmp
959
+ self.pos = _save2
960
+ break
961
+ end
962
+ _save3 = self.pos
963
+ _tmp = match_string(" ")
964
+ unless _tmp
965
+ _tmp = true
966
+ self.pos = _save3
967
+ end
968
+ unless _tmp
969
+ self.pos = _save2
970
+ break
971
+ end
972
+ _tmp = apply(:_Line)
973
+ c = @result
974
+ unless _tmp
975
+ self.pos = _save2
976
+ break
977
+ end
978
+ @result = begin; c ; end
979
+ _tmp = true
980
+ unless _tmp
981
+ self.pos = _save2
982
+ end
983
+ break
984
+ end # end sequence
985
+
986
+ if _tmp
987
+ _ary << @result
988
+ while true
989
+
990
+ _save4 = self.pos
991
+ while true # sequence
992
+ _tmp = match_string(">")
993
+ unless _tmp
994
+ self.pos = _save4
995
+ break
996
+ end
997
+ _save5 = self.pos
998
+ _tmp = match_string(" ")
999
+ unless _tmp
1000
+ _tmp = true
1001
+ self.pos = _save5
1002
+ end
1003
+ unless _tmp
1004
+ self.pos = _save4
1005
+ break
1006
+ end
1007
+ _tmp = apply(:_Line)
1008
+ c = @result
1009
+ unless _tmp
1010
+ self.pos = _save4
1011
+ break
1012
+ end
1013
+ @result = begin; c ; end
1014
+ _tmp = true
1015
+ unless _tmp
1016
+ self.pos = _save4
1017
+ end
1018
+ break
1019
+ end # end sequence
1020
+
1021
+ _ary << @result if _tmp
1022
+ break unless _tmp
1023
+ end
1024
+ _tmp = true
1025
+ @result = _ary
1026
+ else
1027
+ self.pos = _save1
1028
+ end
1029
+ cc = @result
1030
+ unless _tmp
1031
+ self.pos = _save
1032
+ break
1033
+ end
1034
+ @result = begin; cc ; end
1035
+ _tmp = true
1036
+ unless _tmp
1037
+ self.pos = _save
1038
+ end
1039
+ break
1040
+ end # end sequence
1041
+
1042
+ set_failed_rule :_BlockQuoteRaw unless _tmp
1043
+ return _tmp
1044
+ end
1045
+
1046
+ # NonblankIndentedLine = !BlankLine IndentedLine:c { c }
1047
+ def _NonblankIndentedLine
1048
+
1049
+ _save = self.pos
1050
+ while true # sequence
1051
+ _save1 = self.pos
1052
+ _tmp = apply(:_BlankLine)
1053
+ _tmp = _tmp ? nil : true
1054
+ self.pos = _save1
1055
+ unless _tmp
1056
+ self.pos = _save
1057
+ break
1058
+ end
1059
+ _tmp = apply(:_IndentedLine)
1060
+ c = @result
1061
+ unless _tmp
1062
+ self.pos = _save
1063
+ break
1064
+ end
1065
+ @result = begin; c ; end
1066
+ _tmp = true
1067
+ unless _tmp
1068
+ self.pos = _save
1069
+ end
1070
+ break
1071
+ end # end sequence
1072
+
1073
+ set_failed_rule :_NonblankIndentedLine unless _tmp
1074
+ return _tmp
1075
+ end
1076
+
1077
+ # VerbatimChunk = (BlankLine { text(self,position,"\n") })*:c1 (NonblankIndentedLine:c { [c, text(self,position,"\n")] })+:c2 { c1 + c2.flatten }
1078
+ def _VerbatimChunk
1079
+
1080
+ _save = self.pos
1081
+ while true # sequence
1082
+ _ary = []
1083
+ while true
1084
+
1085
+ _save2 = self.pos
1086
+ while true # sequence
1087
+ _tmp = apply(:_BlankLine)
1088
+ unless _tmp
1089
+ self.pos = _save2
1090
+ break
1091
+ end
1092
+ @result = begin; text(self,position,"\n") ; end
1093
+ _tmp = true
1094
+ unless _tmp
1095
+ self.pos = _save2
1096
+ end
1097
+ break
1098
+ end # end sequence
1099
+
1100
+ _ary << @result if _tmp
1101
+ break unless _tmp
1102
+ end
1103
+ _tmp = true
1104
+ @result = _ary
1105
+ c1 = @result
1106
+ unless _tmp
1107
+ self.pos = _save
1108
+ break
1109
+ end
1110
+ _save3 = self.pos
1111
+ _ary = []
1112
+
1113
+ _save4 = self.pos
1114
+ while true # sequence
1115
+ _tmp = apply(:_NonblankIndentedLine)
1116
+ c = @result
1117
+ unless _tmp
1118
+ self.pos = _save4
1119
+ break
1120
+ end
1121
+ @result = begin; [c, text(self,position,"\n")] ; end
1122
+ _tmp = true
1123
+ unless _tmp
1124
+ self.pos = _save4
1125
+ end
1126
+ break
1127
+ end # end sequence
1128
+
1129
+ if _tmp
1130
+ _ary << @result
1131
+ while true
1132
+
1133
+ _save5 = self.pos
1134
+ while true # sequence
1135
+ _tmp = apply(:_NonblankIndentedLine)
1136
+ c = @result
1137
+ unless _tmp
1138
+ self.pos = _save5
1139
+ break
1140
+ end
1141
+ @result = begin; [c, text(self,position,"\n")] ; end
1142
+ _tmp = true
1143
+ unless _tmp
1144
+ self.pos = _save5
1145
+ end
1146
+ break
1147
+ end # end sequence
1148
+
1149
+ _ary << @result if _tmp
1150
+ break unless _tmp
1151
+ end
1152
+ _tmp = true
1153
+ @result = _ary
1154
+ else
1155
+ self.pos = _save3
1156
+ end
1157
+ c2 = @result
1158
+ unless _tmp
1159
+ self.pos = _save
1160
+ break
1161
+ end
1162
+ @result = begin; c1 + c2.flatten ; end
1163
+ _tmp = true
1164
+ unless _tmp
1165
+ self.pos = _save
1166
+ end
1167
+ break
1168
+ end # end sequence
1169
+
1170
+ set_failed_rule :_VerbatimChunk unless _tmp
1171
+ return _tmp
1172
+ end
1173
+
1174
+ # Verbatim = VerbatimChunk+:cc {verbatim(self, position, cc.flatten)}
1175
+ def _Verbatim
1176
+
1177
+ _save = self.pos
1178
+ while true # sequence
1179
+ _save1 = self.pos
1180
+ _ary = []
1181
+ _tmp = apply(:_VerbatimChunk)
1182
+ if _tmp
1183
+ _ary << @result
1184
+ while true
1185
+ _tmp = apply(:_VerbatimChunk)
1186
+ _ary << @result if _tmp
1187
+ break unless _tmp
1188
+ end
1189
+ _tmp = true
1190
+ @result = _ary
1191
+ else
1192
+ self.pos = _save1
1193
+ end
1194
+ cc = @result
1195
+ unless _tmp
1196
+ self.pos = _save
1197
+ break
1198
+ end
1199
+ @result = begin; verbatim(self, position, cc.flatten); end
1200
+ _tmp = true
1201
+ unless _tmp
1202
+ self.pos = _save
1203
+ end
1204
+ break
1205
+ end # end sequence
1206
+
1207
+ set_failed_rule :_Verbatim unless _tmp
1208
+ return _tmp
1209
+ end
1210
+
1211
+ # HorizontalRule = NonindentSpace ("*" Sp "*" Sp "*" (Sp "*")* | "-" Sp "-" Sp "-" (Sp "-")* | "_" Sp "_" Sp "_" (Sp "_")*) Sp Newline BlankLine+ {horizontal_rule(self, position)}
1212
+ def _HorizontalRule
1213
+
1214
+ _save = self.pos
1215
+ while true # sequence
1216
+ _tmp = apply(:_NonindentSpace)
1217
+ unless _tmp
1218
+ self.pos = _save
1219
+ break
1220
+ end
1221
+
1222
+ _save1 = self.pos
1223
+ while true # choice
1224
+
1225
+ _save2 = self.pos
1226
+ while true # sequence
1227
+ _tmp = match_string("*")
1228
+ unless _tmp
1229
+ self.pos = _save2
1230
+ break
1231
+ end
1232
+ _tmp = apply(:_Sp)
1233
+ unless _tmp
1234
+ self.pos = _save2
1235
+ break
1236
+ end
1237
+ _tmp = match_string("*")
1238
+ unless _tmp
1239
+ self.pos = _save2
1240
+ break
1241
+ end
1242
+ _tmp = apply(:_Sp)
1243
+ unless _tmp
1244
+ self.pos = _save2
1245
+ break
1246
+ end
1247
+ _tmp = match_string("*")
1248
+ unless _tmp
1249
+ self.pos = _save2
1250
+ break
1251
+ end
1252
+ while true
1253
+
1254
+ _save4 = self.pos
1255
+ while true # sequence
1256
+ _tmp = apply(:_Sp)
1257
+ unless _tmp
1258
+ self.pos = _save4
1259
+ break
1260
+ end
1261
+ _tmp = match_string("*")
1262
+ unless _tmp
1263
+ self.pos = _save4
1264
+ end
1265
+ break
1266
+ end # end sequence
1267
+
1268
+ break unless _tmp
1269
+ end
1270
+ _tmp = true
1271
+ unless _tmp
1272
+ self.pos = _save2
1273
+ end
1274
+ break
1275
+ end # end sequence
1276
+
1277
+ break if _tmp
1278
+ self.pos = _save1
1279
+
1280
+ _save5 = self.pos
1281
+ while true # sequence
1282
+ _tmp = match_string("-")
1283
+ unless _tmp
1284
+ self.pos = _save5
1285
+ break
1286
+ end
1287
+ _tmp = apply(:_Sp)
1288
+ unless _tmp
1289
+ self.pos = _save5
1290
+ break
1291
+ end
1292
+ _tmp = match_string("-")
1293
+ unless _tmp
1294
+ self.pos = _save5
1295
+ break
1296
+ end
1297
+ _tmp = apply(:_Sp)
1298
+ unless _tmp
1299
+ self.pos = _save5
1300
+ break
1301
+ end
1302
+ _tmp = match_string("-")
1303
+ unless _tmp
1304
+ self.pos = _save5
1305
+ break
1306
+ end
1307
+ while true
1308
+
1309
+ _save7 = self.pos
1310
+ while true # sequence
1311
+ _tmp = apply(:_Sp)
1312
+ unless _tmp
1313
+ self.pos = _save7
1314
+ break
1315
+ end
1316
+ _tmp = match_string("-")
1317
+ unless _tmp
1318
+ self.pos = _save7
1319
+ end
1320
+ break
1321
+ end # end sequence
1322
+
1323
+ break unless _tmp
1324
+ end
1325
+ _tmp = true
1326
+ unless _tmp
1327
+ self.pos = _save5
1328
+ end
1329
+ break
1330
+ end # end sequence
1331
+
1332
+ break if _tmp
1333
+ self.pos = _save1
1334
+
1335
+ _save8 = self.pos
1336
+ while true # sequence
1337
+ _tmp = match_string("_")
1338
+ unless _tmp
1339
+ self.pos = _save8
1340
+ break
1341
+ end
1342
+ _tmp = apply(:_Sp)
1343
+ unless _tmp
1344
+ self.pos = _save8
1345
+ break
1346
+ end
1347
+ _tmp = match_string("_")
1348
+ unless _tmp
1349
+ self.pos = _save8
1350
+ break
1351
+ end
1352
+ _tmp = apply(:_Sp)
1353
+ unless _tmp
1354
+ self.pos = _save8
1355
+ break
1356
+ end
1357
+ _tmp = match_string("_")
1358
+ unless _tmp
1359
+ self.pos = _save8
1360
+ break
1361
+ end
1362
+ while true
1363
+
1364
+ _save10 = self.pos
1365
+ while true # sequence
1366
+ _tmp = apply(:_Sp)
1367
+ unless _tmp
1368
+ self.pos = _save10
1369
+ break
1370
+ end
1371
+ _tmp = match_string("_")
1372
+ unless _tmp
1373
+ self.pos = _save10
1374
+ end
1375
+ break
1376
+ end # end sequence
1377
+
1378
+ break unless _tmp
1379
+ end
1380
+ _tmp = true
1381
+ unless _tmp
1382
+ self.pos = _save8
1383
+ end
1384
+ break
1385
+ end # end sequence
1386
+
1387
+ break if _tmp
1388
+ self.pos = _save1
1389
+ break
1390
+ end # end choice
1391
+
1392
+ unless _tmp
1393
+ self.pos = _save
1394
+ break
1395
+ end
1396
+ _tmp = apply(:_Sp)
1397
+ unless _tmp
1398
+ self.pos = _save
1399
+ break
1400
+ end
1401
+ _tmp = apply(:_Newline)
1402
+ unless _tmp
1403
+ self.pos = _save
1404
+ break
1405
+ end
1406
+ _save11 = self.pos
1407
+ _tmp = apply(:_BlankLine)
1408
+ if _tmp
1409
+ while true
1410
+ _tmp = apply(:_BlankLine)
1411
+ break unless _tmp
1412
+ end
1413
+ _tmp = true
1414
+ else
1415
+ self.pos = _save11
1416
+ end
1417
+ unless _tmp
1418
+ self.pos = _save
1419
+ break
1420
+ end
1421
+ @result = begin; horizontal_rule(self, position); end
1422
+ _tmp = true
1423
+ unless _tmp
1424
+ self.pos = _save
1425
+ end
1426
+ break
1427
+ end # end sequence
1428
+
1429
+ set_failed_rule :_HorizontalRule unless _tmp
1430
+ return _tmp
1431
+ end
1432
+
1433
+ # Bullet = !HorizontalRule NonindentSpace ("+" | "*" | "-") Spacechar+
1434
+ def _Bullet
1435
+
1436
+ _save = self.pos
1437
+ while true # sequence
1438
+ _save1 = self.pos
1439
+ _tmp = apply(:_HorizontalRule)
1440
+ _tmp = _tmp ? nil : true
1441
+ self.pos = _save1
1442
+ unless _tmp
1443
+ self.pos = _save
1444
+ break
1445
+ end
1446
+ _tmp = apply(:_NonindentSpace)
1447
+ unless _tmp
1448
+ self.pos = _save
1449
+ break
1450
+ end
1451
+
1452
+ _save2 = self.pos
1453
+ while true # choice
1454
+ _tmp = match_string("+")
1455
+ break if _tmp
1456
+ self.pos = _save2
1457
+ _tmp = match_string("*")
1458
+ break if _tmp
1459
+ self.pos = _save2
1460
+ _tmp = match_string("-")
1461
+ break if _tmp
1462
+ self.pos = _save2
1463
+ break
1464
+ end # end choice
1465
+
1466
+ unless _tmp
1467
+ self.pos = _save
1468
+ break
1469
+ end
1470
+ _save3 = self.pos
1471
+ _tmp = apply(:_Spacechar)
1472
+ if _tmp
1473
+ while true
1474
+ _tmp = apply(:_Spacechar)
1475
+ break unless _tmp
1476
+ end
1477
+ _tmp = true
1478
+ else
1479
+ self.pos = _save3
1480
+ end
1481
+ unless _tmp
1482
+ self.pos = _save
1483
+ end
1484
+ break
1485
+ end # end sequence
1486
+
1487
+ set_failed_rule :_Bullet unless _tmp
1488
+ return _tmp
1489
+ end
1490
+
1491
+ # BulletList = &Bullet ListTight:c {bullet_list(self, position, c)}
1492
+ def _BulletList
1493
+
1494
+ _save = self.pos
1495
+ while true # sequence
1496
+ _save1 = self.pos
1497
+ _tmp = apply(:_Bullet)
1498
+ self.pos = _save1
1499
+ unless _tmp
1500
+ self.pos = _save
1501
+ break
1502
+ end
1503
+ _tmp = apply(:_ListTight)
1504
+ c = @result
1505
+ unless _tmp
1506
+ self.pos = _save
1507
+ break
1508
+ end
1509
+ @result = begin; bullet_list(self, position, c); end
1510
+ _tmp = true
1511
+ unless _tmp
1512
+ self.pos = _save
1513
+ end
1514
+ break
1515
+ end # end sequence
1516
+
1517
+ set_failed_rule :_BulletList unless _tmp
1518
+ return _tmp
1519
+ end
1520
+
1521
+ # ListTight = ListItemTight+:cc BlankLine* !Bullet { cc }
1522
+ def _ListTight
1523
+
1524
+ _save = self.pos
1525
+ while true # sequence
1526
+ _save1 = self.pos
1527
+ _ary = []
1528
+ _tmp = apply(:_ListItemTight)
1529
+ if _tmp
1530
+ _ary << @result
1531
+ while true
1532
+ _tmp = apply(:_ListItemTight)
1533
+ _ary << @result if _tmp
1534
+ break unless _tmp
1535
+ end
1536
+ _tmp = true
1537
+ @result = _ary
1538
+ else
1539
+ self.pos = _save1
1540
+ end
1541
+ cc = @result
1542
+ unless _tmp
1543
+ self.pos = _save
1544
+ break
1545
+ end
1546
+ while true
1547
+ _tmp = apply(:_BlankLine)
1548
+ break unless _tmp
1549
+ end
1550
+ _tmp = true
1551
+ unless _tmp
1552
+ self.pos = _save
1553
+ break
1554
+ end
1555
+ _save3 = self.pos
1556
+ _tmp = apply(:_Bullet)
1557
+ _tmp = _tmp ? nil : true
1558
+ self.pos = _save3
1559
+ unless _tmp
1560
+ self.pos = _save
1561
+ break
1562
+ end
1563
+ @result = begin; cc ; end
1564
+ _tmp = true
1565
+ unless _tmp
1566
+ self.pos = _save
1567
+ end
1568
+ break
1569
+ end # end sequence
1570
+
1571
+ set_failed_rule :_ListTight unless _tmp
1572
+ return _tmp
1573
+ end
1574
+
1575
+ # ListItemTight = Bullet ListBlock:c {bullet_list_item(self, position, c)}
1576
+ def _ListItemTight
1577
+
1578
+ _save = self.pos
1579
+ while true # sequence
1580
+ _tmp = apply(:_Bullet)
1581
+ unless _tmp
1582
+ self.pos = _save
1583
+ break
1584
+ end
1585
+ _tmp = apply(:_ListBlock)
1586
+ c = @result
1587
+ unless _tmp
1588
+ self.pos = _save
1589
+ break
1590
+ end
1591
+ @result = begin; bullet_list_item(self, position, c); end
1592
+ _tmp = true
1593
+ unless _tmp
1594
+ self.pos = _save
1595
+ end
1596
+ break
1597
+ end # end sequence
1598
+
1599
+ set_failed_rule :_ListItemTight unless _tmp
1600
+ return _tmp
1601
+ end
1602
+
1603
+ # ListBlock = !BlankLine Line:c ListBlockLine*:cc { cc.unshift(c) }
1604
+ def _ListBlock
1605
+
1606
+ _save = self.pos
1607
+ while true # sequence
1608
+ _save1 = self.pos
1609
+ _tmp = apply(:_BlankLine)
1610
+ _tmp = _tmp ? nil : true
1611
+ self.pos = _save1
1612
+ unless _tmp
1613
+ self.pos = _save
1614
+ break
1615
+ end
1616
+ _tmp = apply(:_Line)
1617
+ c = @result
1618
+ unless _tmp
1619
+ self.pos = _save
1620
+ break
1621
+ end
1622
+ _ary = []
1623
+ while true
1624
+ _tmp = apply(:_ListBlockLine)
1625
+ _ary << @result if _tmp
1626
+ break unless _tmp
1627
+ end
1628
+ _tmp = true
1629
+ @result = _ary
1630
+ cc = @result
1631
+ unless _tmp
1632
+ self.pos = _save
1633
+ break
1634
+ end
1635
+ @result = begin; cc.unshift(c) ; end
1636
+ _tmp = true
1637
+ unless _tmp
1638
+ self.pos = _save
1639
+ end
1640
+ break
1641
+ end # end sequence
1642
+
1643
+ set_failed_rule :_ListBlock unless _tmp
1644
+ return _tmp
1645
+ end
1646
+
1647
+ # ListBlockLine = !BlankLine !(Indent? Bullet) !HorizontalRule OptionallyIndentedLine
1648
+ def _ListBlockLine
1649
+
1650
+ _save = self.pos
1651
+ while true # sequence
1652
+ _save1 = self.pos
1653
+ _tmp = apply(:_BlankLine)
1654
+ _tmp = _tmp ? nil : true
1655
+ self.pos = _save1
1656
+ unless _tmp
1657
+ self.pos = _save
1658
+ break
1659
+ end
1660
+ _save2 = self.pos
1661
+
1662
+ _save3 = self.pos
1663
+ while true # sequence
1664
+ _save4 = self.pos
1665
+ _tmp = apply(:_Indent)
1666
+ unless _tmp
1667
+ _tmp = true
1668
+ self.pos = _save4
1669
+ end
1670
+ unless _tmp
1671
+ self.pos = _save3
1672
+ break
1673
+ end
1674
+ _tmp = apply(:_Bullet)
1675
+ unless _tmp
1676
+ self.pos = _save3
1677
+ end
1678
+ break
1679
+ end # end sequence
1680
+
1681
+ _tmp = _tmp ? nil : true
1682
+ self.pos = _save2
1683
+ unless _tmp
1684
+ self.pos = _save
1685
+ break
1686
+ end
1687
+ _save5 = self.pos
1688
+ _tmp = apply(:_HorizontalRule)
1689
+ _tmp = _tmp ? nil : true
1690
+ self.pos = _save5
1691
+ unless _tmp
1692
+ self.pos = _save
1693
+ break
1694
+ end
1695
+ _tmp = apply(:_OptionallyIndentedLine)
1696
+ unless _tmp
1697
+ self.pos = _save
1698
+ end
1699
+ break
1700
+ end # end sequence
1701
+
1702
+ set_failed_rule :_ListBlockLine unless _tmp
1703
+ return _tmp
1704
+ end
1705
+
1706
+ # Inlines = (!Endline Inline:c { c } | Endline:c &Inline { c })+:cc Endline? { cc }
1707
+ def _Inlines
1708
+
1709
+ _save = self.pos
1710
+ while true # sequence
1711
+ _save1 = self.pos
1712
+ _ary = []
1713
+
1714
+ _save2 = self.pos
1715
+ while true # choice
1716
+
1717
+ _save3 = self.pos
1718
+ while true # sequence
1719
+ _save4 = self.pos
1720
+ _tmp = apply(:_Endline)
1721
+ _tmp = _tmp ? nil : true
1722
+ self.pos = _save4
1723
+ unless _tmp
1724
+ self.pos = _save3
1725
+ break
1726
+ end
1727
+ _tmp = apply(:_Inline)
1728
+ c = @result
1729
+ unless _tmp
1730
+ self.pos = _save3
1731
+ break
1732
+ end
1733
+ @result = begin; c ; end
1734
+ _tmp = true
1735
+ unless _tmp
1736
+ self.pos = _save3
1737
+ end
1738
+ break
1739
+ end # end sequence
1740
+
1741
+ break if _tmp
1742
+ self.pos = _save2
1743
+
1744
+ _save5 = self.pos
1745
+ while true # sequence
1746
+ _tmp = apply(:_Endline)
1747
+ c = @result
1748
+ unless _tmp
1749
+ self.pos = _save5
1750
+ break
1751
+ end
1752
+ _save6 = self.pos
1753
+ _tmp = apply(:_Inline)
1754
+ self.pos = _save6
1755
+ unless _tmp
1756
+ self.pos = _save5
1757
+ break
1758
+ end
1759
+ @result = begin; c ; end
1760
+ _tmp = true
1761
+ unless _tmp
1762
+ self.pos = _save5
1763
+ end
1764
+ break
1765
+ end # end sequence
1766
+
1767
+ break if _tmp
1768
+ self.pos = _save2
1769
+ break
1770
+ end # end choice
1771
+
1772
+ if _tmp
1773
+ _ary << @result
1774
+ while true
1775
+
1776
+ _save7 = self.pos
1777
+ while true # choice
1778
+
1779
+ _save8 = self.pos
1780
+ while true # sequence
1781
+ _save9 = self.pos
1782
+ _tmp = apply(:_Endline)
1783
+ _tmp = _tmp ? nil : true
1784
+ self.pos = _save9
1785
+ unless _tmp
1786
+ self.pos = _save8
1787
+ break
1788
+ end
1789
+ _tmp = apply(:_Inline)
1790
+ c = @result
1791
+ unless _tmp
1792
+ self.pos = _save8
1793
+ break
1794
+ end
1795
+ @result = begin; c ; end
1796
+ _tmp = true
1797
+ unless _tmp
1798
+ self.pos = _save8
1799
+ end
1800
+ break
1801
+ end # end sequence
1802
+
1803
+ break if _tmp
1804
+ self.pos = _save7
1805
+
1806
+ _save10 = self.pos
1807
+ while true # sequence
1808
+ _tmp = apply(:_Endline)
1809
+ c = @result
1810
+ unless _tmp
1811
+ self.pos = _save10
1812
+ break
1813
+ end
1814
+ _save11 = self.pos
1815
+ _tmp = apply(:_Inline)
1816
+ self.pos = _save11
1817
+ unless _tmp
1818
+ self.pos = _save10
1819
+ break
1820
+ end
1821
+ @result = begin; c ; end
1822
+ _tmp = true
1823
+ unless _tmp
1824
+ self.pos = _save10
1825
+ end
1826
+ break
1827
+ end # end sequence
1828
+
1829
+ break if _tmp
1830
+ self.pos = _save7
1831
+ break
1832
+ end # end choice
1833
+
1834
+ _ary << @result if _tmp
1835
+ break unless _tmp
1836
+ end
1837
+ _tmp = true
1838
+ @result = _ary
1839
+ else
1840
+ self.pos = _save1
1841
+ end
1842
+ cc = @result
1843
+ unless _tmp
1844
+ self.pos = _save
1845
+ break
1846
+ end
1847
+ _save12 = self.pos
1848
+ _tmp = apply(:_Endline)
1849
+ unless _tmp
1850
+ _tmp = true
1851
+ self.pos = _save12
1852
+ end
1853
+ unless _tmp
1854
+ self.pos = _save
1855
+ break
1856
+ end
1857
+ @result = begin; cc ; end
1858
+ _tmp = true
1859
+ unless _tmp
1860
+ self.pos = _save
1861
+ end
1862
+ break
1863
+ end # end sequence
1864
+
1865
+ set_failed_rule :_Inlines unless _tmp
1866
+ return _tmp
1867
+ end
1868
+
1869
+ # Inline = (Str | Endline | Space | Strong | Emph | Code | Symbol)
1870
+ def _Inline
1871
+
1872
+ _save = self.pos
1873
+ while true # choice
1874
+ _tmp = apply(:_Str)
1875
+ break if _tmp
1876
+ self.pos = _save
1877
+ _tmp = apply(:_Endline)
1878
+ break if _tmp
1879
+ self.pos = _save
1880
+ _tmp = apply(:_Space)
1881
+ break if _tmp
1882
+ self.pos = _save
1883
+ _tmp = apply(:_Strong)
1884
+ break if _tmp
1885
+ self.pos = _save
1886
+ _tmp = apply(:_Emph)
1887
+ break if _tmp
1888
+ self.pos = _save
1889
+ _tmp = apply(:_Code)
1890
+ break if _tmp
1891
+ self.pos = _save
1892
+ _tmp = apply(:_Symbol)
1893
+ break if _tmp
1894
+ self.pos = _save
1895
+ break
1896
+ end # end choice
1897
+
1898
+ set_failed_rule :_Inline unless _tmp
1899
+ return _tmp
1900
+ end
1901
+
1902
+ # Space = Spacechar+:c {text(self, position, c.join(""))}
1903
+ def _Space
1904
+
1905
+ _save = self.pos
1906
+ while true # sequence
1907
+ _save1 = self.pos
1908
+ _ary = []
1909
+ _tmp = apply(:_Spacechar)
1910
+ if _tmp
1911
+ _ary << @result
1912
+ while true
1913
+ _tmp = apply(:_Spacechar)
1914
+ _ary << @result if _tmp
1915
+ break unless _tmp
1916
+ end
1917
+ _tmp = true
1918
+ @result = _ary
1919
+ else
1920
+ self.pos = _save1
1921
+ end
1922
+ c = @result
1923
+ unless _tmp
1924
+ self.pos = _save
1925
+ break
1926
+ end
1927
+ @result = begin; text(self, position, c.join("")); end
1928
+ _tmp = true
1929
+ unless _tmp
1930
+ self.pos = _save
1931
+ end
1932
+ break
1933
+ end # end sequence
1934
+
1935
+ set_failed_rule :_Space unless _tmp
1936
+ return _tmp
1937
+ end
1938
+
1939
+ # Str = NormalChar+:c1 StrChunk*:c2 {text(self, position, (c1+c2).join(""))}
1940
+ def _Str
1941
+
1942
+ _save = self.pos
1943
+ while true # sequence
1944
+ _save1 = self.pos
1945
+ _ary = []
1946
+ _tmp = apply(:_NormalChar)
1947
+ if _tmp
1948
+ _ary << @result
1949
+ while true
1950
+ _tmp = apply(:_NormalChar)
1951
+ _ary << @result if _tmp
1952
+ break unless _tmp
1953
+ end
1954
+ _tmp = true
1955
+ @result = _ary
1956
+ else
1957
+ self.pos = _save1
1958
+ end
1959
+ c1 = @result
1960
+ unless _tmp
1961
+ self.pos = _save
1962
+ break
1963
+ end
1964
+ _ary = []
1965
+ while true
1966
+ _tmp = apply(:_StrChunk)
1967
+ _ary << @result if _tmp
1968
+ break unless _tmp
1969
+ end
1970
+ _tmp = true
1971
+ @result = _ary
1972
+ c2 = @result
1973
+ unless _tmp
1974
+ self.pos = _save
1975
+ break
1976
+ end
1977
+ @result = begin; text(self, position, (c1+c2).join("")); end
1978
+ _tmp = true
1979
+ unless _tmp
1980
+ self.pos = _save
1981
+ end
1982
+ break
1983
+ end # end sequence
1984
+
1985
+ set_failed_rule :_Str unless _tmp
1986
+ return _tmp
1987
+ end
1988
+
1989
+ # StrChunk = (NormalChar:c { [c] } | "_"+:c1 NormalChar:c2 { c1.push(c2) })+:cc { cc.flatten }
1990
+ def _StrChunk
1991
+
1992
+ _save = self.pos
1993
+ while true # sequence
1994
+ _save1 = self.pos
1995
+ _ary = []
1996
+
1997
+ _save2 = self.pos
1998
+ while true # choice
1999
+
2000
+ _save3 = self.pos
2001
+ while true # sequence
2002
+ _tmp = apply(:_NormalChar)
2003
+ c = @result
2004
+ unless _tmp
2005
+ self.pos = _save3
2006
+ break
2007
+ end
2008
+ @result = begin; [c] ; end
2009
+ _tmp = true
2010
+ unless _tmp
2011
+ self.pos = _save3
2012
+ end
2013
+ break
2014
+ end # end sequence
2015
+
2016
+ break if _tmp
2017
+ self.pos = _save2
2018
+
2019
+ _save4 = self.pos
2020
+ while true # sequence
2021
+ _save5 = self.pos
2022
+ _ary = []
2023
+ _tmp = match_string("_")
2024
+ if _tmp
2025
+ _ary << @result
2026
+ while true
2027
+ _tmp = match_string("_")
2028
+ _ary << @result if _tmp
2029
+ break unless _tmp
2030
+ end
2031
+ _tmp = true
2032
+ @result = _ary
2033
+ else
2034
+ self.pos = _save5
2035
+ end
2036
+ c1 = @result
2037
+ unless _tmp
2038
+ self.pos = _save4
2039
+ break
2040
+ end
2041
+ _tmp = apply(:_NormalChar)
2042
+ c2 = @result
2043
+ unless _tmp
2044
+ self.pos = _save4
2045
+ break
2046
+ end
2047
+ @result = begin; c1.push(c2) ; end
2048
+ _tmp = true
2049
+ unless _tmp
2050
+ self.pos = _save4
2051
+ end
2052
+ break
2053
+ end # end sequence
2054
+
2055
+ break if _tmp
2056
+ self.pos = _save2
2057
+ break
2058
+ end # end choice
2059
+
2060
+ if _tmp
2061
+ _ary << @result
2062
+ while true
2063
+
2064
+ _save6 = self.pos
2065
+ while true # choice
2066
+
2067
+ _save7 = self.pos
2068
+ while true # sequence
2069
+ _tmp = apply(:_NormalChar)
2070
+ c = @result
2071
+ unless _tmp
2072
+ self.pos = _save7
2073
+ break
2074
+ end
2075
+ @result = begin; [c] ; end
2076
+ _tmp = true
2077
+ unless _tmp
2078
+ self.pos = _save7
2079
+ end
2080
+ break
2081
+ end # end sequence
2082
+
2083
+ break if _tmp
2084
+ self.pos = _save6
2085
+
2086
+ _save8 = self.pos
2087
+ while true # sequence
2088
+ _save9 = self.pos
2089
+ _ary = []
2090
+ _tmp = match_string("_")
2091
+ if _tmp
2092
+ _ary << @result
2093
+ while true
2094
+ _tmp = match_string("_")
2095
+ _ary << @result if _tmp
2096
+ break unless _tmp
2097
+ end
2098
+ _tmp = true
2099
+ @result = _ary
2100
+ else
2101
+ self.pos = _save9
2102
+ end
2103
+ c1 = @result
2104
+ unless _tmp
2105
+ self.pos = _save8
2106
+ break
2107
+ end
2108
+ _tmp = apply(:_NormalChar)
2109
+ c2 = @result
2110
+ unless _tmp
2111
+ self.pos = _save8
2112
+ break
2113
+ end
2114
+ @result = begin; c1.push(c2) ; end
2115
+ _tmp = true
2116
+ unless _tmp
2117
+ self.pos = _save8
2118
+ end
2119
+ break
2120
+ end # end sequence
2121
+
2122
+ break if _tmp
2123
+ self.pos = _save6
2124
+ break
2125
+ end # end choice
2126
+
2127
+ _ary << @result if _tmp
2128
+ break unless _tmp
2129
+ end
2130
+ _tmp = true
2131
+ @result = _ary
2132
+ else
2133
+ self.pos = _save1
2134
+ end
2135
+ cc = @result
2136
+ unless _tmp
2137
+ self.pos = _save
2138
+ break
2139
+ end
2140
+ @result = begin; cc.flatten ; end
2141
+ _tmp = true
2142
+ unless _tmp
2143
+ self.pos = _save
2144
+ end
2145
+ break
2146
+ end # end sequence
2147
+
2148
+ set_failed_rule :_StrChunk unless _tmp
2149
+ return _tmp
2150
+ end
2151
+
2152
+ # Endline = (LineBreak | TerminalEndline | NormalEndline)
2153
+ def _Endline
2154
+
2155
+ _save = self.pos
2156
+ while true # choice
2157
+ _tmp = apply(:_LineBreak)
2158
+ break if _tmp
2159
+ self.pos = _save
2160
+ _tmp = apply(:_TerminalEndline)
2161
+ break if _tmp
2162
+ self.pos = _save
2163
+ _tmp = apply(:_NormalEndline)
2164
+ break if _tmp
2165
+ self.pos = _save
2166
+ break
2167
+ end # end choice
2168
+
2169
+ set_failed_rule :_Endline unless _tmp
2170
+ return _tmp
2171
+ end
2172
+
2173
+ # NormalEndline = Sp Newline !BlankLine !">" !AtxStart !(Line ("="+ | "-"+) Newline) {text(self, position, "\n")}
2174
+ def _NormalEndline
2175
+
2176
+ _save = self.pos
2177
+ while true # sequence
2178
+ _tmp = apply(:_Sp)
2179
+ unless _tmp
2180
+ self.pos = _save
2181
+ break
2182
+ end
2183
+ _tmp = apply(:_Newline)
2184
+ unless _tmp
2185
+ self.pos = _save
2186
+ break
2187
+ end
2188
+ _save1 = self.pos
2189
+ _tmp = apply(:_BlankLine)
2190
+ _tmp = _tmp ? nil : true
2191
+ self.pos = _save1
2192
+ unless _tmp
2193
+ self.pos = _save
2194
+ break
2195
+ end
2196
+ _save2 = self.pos
2197
+ _tmp = match_string(">")
2198
+ _tmp = _tmp ? nil : true
2199
+ self.pos = _save2
2200
+ unless _tmp
2201
+ self.pos = _save
2202
+ break
2203
+ end
2204
+ _save3 = self.pos
2205
+ _tmp = apply(:_AtxStart)
2206
+ _tmp = _tmp ? nil : true
2207
+ self.pos = _save3
2208
+ unless _tmp
2209
+ self.pos = _save
2210
+ break
2211
+ end
2212
+ _save4 = self.pos
2213
+
2214
+ _save5 = self.pos
2215
+ while true # sequence
2216
+ _tmp = apply(:_Line)
2217
+ unless _tmp
2218
+ self.pos = _save5
2219
+ break
2220
+ end
2221
+
2222
+ _save6 = self.pos
2223
+ while true # choice
2224
+ _save7 = self.pos
2225
+ _tmp = match_string("=")
2226
+ if _tmp
2227
+ while true
2228
+ _tmp = match_string("=")
2229
+ break unless _tmp
2230
+ end
2231
+ _tmp = true
2232
+ else
2233
+ self.pos = _save7
2234
+ end
2235
+ break if _tmp
2236
+ self.pos = _save6
2237
+ _save8 = self.pos
2238
+ _tmp = match_string("-")
2239
+ if _tmp
2240
+ while true
2241
+ _tmp = match_string("-")
2242
+ break unless _tmp
2243
+ end
2244
+ _tmp = true
2245
+ else
2246
+ self.pos = _save8
2247
+ end
2248
+ break if _tmp
2249
+ self.pos = _save6
2250
+ break
2251
+ end # end choice
2252
+
2253
+ unless _tmp
2254
+ self.pos = _save5
2255
+ break
2256
+ end
2257
+ _tmp = apply(:_Newline)
2258
+ unless _tmp
2259
+ self.pos = _save5
2260
+ end
2261
+ break
2262
+ end # end sequence
2263
+
2264
+ _tmp = _tmp ? nil : true
2265
+ self.pos = _save4
2266
+ unless _tmp
2267
+ self.pos = _save
2268
+ break
2269
+ end
2270
+ @result = begin; text(self, position, "\n"); end
2271
+ _tmp = true
2272
+ unless _tmp
2273
+ self.pos = _save
2274
+ end
2275
+ break
2276
+ end # end sequence
2277
+
2278
+ set_failed_rule :_NormalEndline unless _tmp
2279
+ return _tmp
2280
+ end
2281
+
2282
+ # TerminalEndline = Sp Newline Eof {text(self, position, "\n")}
2283
+ def _TerminalEndline
2284
+
2285
+ _save = self.pos
2286
+ while true # sequence
2287
+ _tmp = apply(:_Sp)
2288
+ unless _tmp
2289
+ self.pos = _save
2290
+ break
2291
+ end
2292
+ _tmp = apply(:_Newline)
2293
+ unless _tmp
2294
+ self.pos = _save
2295
+ break
2296
+ end
2297
+ _tmp = apply(:_Eof)
2298
+ unless _tmp
2299
+ self.pos = _save
2300
+ break
2301
+ end
2302
+ @result = begin; text(self, position, "\n"); end
2303
+ _tmp = true
2304
+ unless _tmp
2305
+ self.pos = _save
2306
+ end
2307
+ break
2308
+ end # end sequence
2309
+
2310
+ set_failed_rule :_TerminalEndline unless _tmp
2311
+ return _tmp
2312
+ end
2313
+
2314
+ # LineBreak = " " NormalEndline {linebreak(self, position)}
2315
+ def _LineBreak
2316
+
2317
+ _save = self.pos
2318
+ while true # sequence
2319
+ _tmp = match_string(" ")
2320
+ unless _tmp
2321
+ self.pos = _save
2322
+ break
2323
+ end
2324
+ _tmp = apply(:_NormalEndline)
2325
+ unless _tmp
2326
+ self.pos = _save
2327
+ break
2328
+ end
2329
+ @result = begin; linebreak(self, position); end
2330
+ _tmp = true
2331
+ unless _tmp
2332
+ self.pos = _save
2333
+ end
2334
+ break
2335
+ end # end sequence
2336
+
2337
+ set_failed_rule :_LineBreak unless _tmp
2338
+ return _tmp
2339
+ end
2340
+
2341
+ # Symbol = SpecialChar:c {text(self, position, c)}
2342
+ def _Symbol
2343
+
2344
+ _save = self.pos
2345
+ while true # sequence
2346
+ _tmp = apply(:_SpecialChar)
2347
+ c = @result
2348
+ unless _tmp
2349
+ self.pos = _save
2350
+ break
2351
+ end
2352
+ @result = begin; text(self, position, c); end
2353
+ _tmp = true
2354
+ unless _tmp
2355
+ self.pos = _save
2356
+ end
2357
+ break
2358
+ end # end sequence
2359
+
2360
+ set_failed_rule :_Symbol unless _tmp
2361
+ return _tmp
2362
+ end
2363
+
2364
+ # Emph = (EmphStar | EmphUl)
2365
+ def _Emph
2366
+
2367
+ _save = self.pos
2368
+ while true # choice
2369
+ _tmp = apply(:_EmphStar)
2370
+ break if _tmp
2371
+ self.pos = _save
2372
+ _tmp = apply(:_EmphUl)
2373
+ break if _tmp
2374
+ self.pos = _save
2375
+ break
2376
+ end # end choice
2377
+
2378
+ set_failed_rule :_Emph unless _tmp
2379
+ return _tmp
2380
+ end
2381
+
2382
+ # Whitespace = (Spacechar | Newline)
2383
+ def _Whitespace
2384
+
2385
+ _save = self.pos
2386
+ while true # choice
2387
+ _tmp = apply(:_Spacechar)
2388
+ break if _tmp
2389
+ self.pos = _save
2390
+ _tmp = apply(:_Newline)
2391
+ break if _tmp
2392
+ self.pos = _save
2393
+ break
2394
+ end # end choice
2395
+
2396
+ set_failed_rule :_Whitespace unless _tmp
2397
+ return _tmp
2398
+ end
2399
+
2400
+ # EmphStar = "*" !Whitespace (!"*" Inline:b { b } | StrongStar:b { b })+:c "*" {inline_element(self, position, :em, c)}
2401
+ def _EmphStar
2402
+
2403
+ _save = self.pos
2404
+ while true # sequence
2405
+ _tmp = match_string("*")
2406
+ unless _tmp
2407
+ self.pos = _save
2408
+ break
2409
+ end
2410
+ _save1 = self.pos
2411
+ _tmp = apply(:_Whitespace)
2412
+ _tmp = _tmp ? nil : true
2413
+ self.pos = _save1
2414
+ unless _tmp
2415
+ self.pos = _save
2416
+ break
2417
+ end
2418
+ _save2 = self.pos
2419
+ _ary = []
2420
+
2421
+ _save3 = self.pos
2422
+ while true # choice
2423
+
2424
+ _save4 = self.pos
2425
+ while true # sequence
2426
+ _save5 = self.pos
2427
+ _tmp = match_string("*")
2428
+ _tmp = _tmp ? nil : true
2429
+ self.pos = _save5
2430
+ unless _tmp
2431
+ self.pos = _save4
2432
+ break
2433
+ end
2434
+ _tmp = apply(:_Inline)
2435
+ b = @result
2436
+ unless _tmp
2437
+ self.pos = _save4
2438
+ break
2439
+ end
2440
+ @result = begin; b ; end
2441
+ _tmp = true
2442
+ unless _tmp
2443
+ self.pos = _save4
2444
+ end
2445
+ break
2446
+ end # end sequence
2447
+
2448
+ break if _tmp
2449
+ self.pos = _save3
2450
+
2451
+ _save6 = self.pos
2452
+ while true # sequence
2453
+ _tmp = apply(:_StrongStar)
2454
+ b = @result
2455
+ unless _tmp
2456
+ self.pos = _save6
2457
+ break
2458
+ end
2459
+ @result = begin; b ; end
2460
+ _tmp = true
2461
+ unless _tmp
2462
+ self.pos = _save6
2463
+ end
2464
+ break
2465
+ end # end sequence
2466
+
2467
+ break if _tmp
2468
+ self.pos = _save3
2469
+ break
2470
+ end # end choice
2471
+
2472
+ if _tmp
2473
+ _ary << @result
2474
+ while true
2475
+
2476
+ _save7 = self.pos
2477
+ while true # choice
2478
+
2479
+ _save8 = self.pos
2480
+ while true # sequence
2481
+ _save9 = self.pos
2482
+ _tmp = match_string("*")
2483
+ _tmp = _tmp ? nil : true
2484
+ self.pos = _save9
2485
+ unless _tmp
2486
+ self.pos = _save8
2487
+ break
2488
+ end
2489
+ _tmp = apply(:_Inline)
2490
+ b = @result
2491
+ unless _tmp
2492
+ self.pos = _save8
2493
+ break
2494
+ end
2495
+ @result = begin; b ; end
2496
+ _tmp = true
2497
+ unless _tmp
2498
+ self.pos = _save8
2499
+ end
2500
+ break
2501
+ end # end sequence
2502
+
2503
+ break if _tmp
2504
+ self.pos = _save7
2505
+
2506
+ _save10 = self.pos
2507
+ while true # sequence
2508
+ _tmp = apply(:_StrongStar)
2509
+ b = @result
2510
+ unless _tmp
2511
+ self.pos = _save10
2512
+ break
2513
+ end
2514
+ @result = begin; b ; end
2515
+ _tmp = true
2516
+ unless _tmp
2517
+ self.pos = _save10
2518
+ end
2519
+ break
2520
+ end # end sequence
2521
+
2522
+ break if _tmp
2523
+ self.pos = _save7
2524
+ break
2525
+ end # end choice
2526
+
2527
+ _ary << @result if _tmp
2528
+ break unless _tmp
2529
+ end
2530
+ _tmp = true
2531
+ @result = _ary
2532
+ else
2533
+ self.pos = _save2
2534
+ end
2535
+ c = @result
2536
+ unless _tmp
2537
+ self.pos = _save
2538
+ break
2539
+ end
2540
+ _tmp = match_string("*")
2541
+ unless _tmp
2542
+ self.pos = _save
2543
+ break
2544
+ end
2545
+ @result = begin; inline_element(self, position, :em, c); end
2546
+ _tmp = true
2547
+ unless _tmp
2548
+ self.pos = _save
2549
+ end
2550
+ break
2551
+ end # end sequence
2552
+
2553
+ set_failed_rule :_EmphStar unless _tmp
2554
+ return _tmp
2555
+ end
2556
+
2557
+ # EmphUl = "_" !Whitespace (!"_" Inline:b { b } | StrongUl:b { b })+:c "_" {inline_element(self, position, :em, c)}
2558
+ def _EmphUl
2559
+
2560
+ _save = self.pos
2561
+ while true # sequence
2562
+ _tmp = match_string("_")
2563
+ unless _tmp
2564
+ self.pos = _save
2565
+ break
2566
+ end
2567
+ _save1 = self.pos
2568
+ _tmp = apply(:_Whitespace)
2569
+ _tmp = _tmp ? nil : true
2570
+ self.pos = _save1
2571
+ unless _tmp
2572
+ self.pos = _save
2573
+ break
2574
+ end
2575
+ _save2 = self.pos
2576
+ _ary = []
2577
+
2578
+ _save3 = self.pos
2579
+ while true # choice
2580
+
2581
+ _save4 = self.pos
2582
+ while true # sequence
2583
+ _save5 = self.pos
2584
+ _tmp = match_string("_")
2585
+ _tmp = _tmp ? nil : true
2586
+ self.pos = _save5
2587
+ unless _tmp
2588
+ self.pos = _save4
2589
+ break
2590
+ end
2591
+ _tmp = apply(:_Inline)
2592
+ b = @result
2593
+ unless _tmp
2594
+ self.pos = _save4
2595
+ break
2596
+ end
2597
+ @result = begin; b ; end
2598
+ _tmp = true
2599
+ unless _tmp
2600
+ self.pos = _save4
2601
+ end
2602
+ break
2603
+ end # end sequence
2604
+
2605
+ break if _tmp
2606
+ self.pos = _save3
2607
+
2608
+ _save6 = self.pos
2609
+ while true # sequence
2610
+ _tmp = apply(:_StrongUl)
2611
+ b = @result
2612
+ unless _tmp
2613
+ self.pos = _save6
2614
+ break
2615
+ end
2616
+ @result = begin; b ; end
2617
+ _tmp = true
2618
+ unless _tmp
2619
+ self.pos = _save6
2620
+ end
2621
+ break
2622
+ end # end sequence
2623
+
2624
+ break if _tmp
2625
+ self.pos = _save3
2626
+ break
2627
+ end # end choice
2628
+
2629
+ if _tmp
2630
+ _ary << @result
2631
+ while true
2632
+
2633
+ _save7 = self.pos
2634
+ while true # choice
2635
+
2636
+ _save8 = self.pos
2637
+ while true # sequence
2638
+ _save9 = self.pos
2639
+ _tmp = match_string("_")
2640
+ _tmp = _tmp ? nil : true
2641
+ self.pos = _save9
2642
+ unless _tmp
2643
+ self.pos = _save8
2644
+ break
2645
+ end
2646
+ _tmp = apply(:_Inline)
2647
+ b = @result
2648
+ unless _tmp
2649
+ self.pos = _save8
2650
+ break
2651
+ end
2652
+ @result = begin; b ; end
2653
+ _tmp = true
2654
+ unless _tmp
2655
+ self.pos = _save8
2656
+ end
2657
+ break
2658
+ end # end sequence
2659
+
2660
+ break if _tmp
2661
+ self.pos = _save7
2662
+
2663
+ _save10 = self.pos
2664
+ while true # sequence
2665
+ _tmp = apply(:_StrongUl)
2666
+ b = @result
2667
+ unless _tmp
2668
+ self.pos = _save10
2669
+ break
2670
+ end
2671
+ @result = begin; b ; end
2672
+ _tmp = true
2673
+ unless _tmp
2674
+ self.pos = _save10
2675
+ end
2676
+ break
2677
+ end # end sequence
2678
+
2679
+ break if _tmp
2680
+ self.pos = _save7
2681
+ break
2682
+ end # end choice
2683
+
2684
+ _ary << @result if _tmp
2685
+ break unless _tmp
2686
+ end
2687
+ _tmp = true
2688
+ @result = _ary
2689
+ else
2690
+ self.pos = _save2
2691
+ end
2692
+ c = @result
2693
+ unless _tmp
2694
+ self.pos = _save
2695
+ break
2696
+ end
2697
+ _tmp = match_string("_")
2698
+ unless _tmp
2699
+ self.pos = _save
2700
+ break
2701
+ end
2702
+ @result = begin; inline_element(self, position, :em, c); end
2703
+ _tmp = true
2704
+ unless _tmp
2705
+ self.pos = _save
2706
+ end
2707
+ break
2708
+ end # end sequence
2709
+
2710
+ set_failed_rule :_EmphUl unless _tmp
2711
+ return _tmp
2712
+ end
2713
+
2714
+ # Strong = (StrongStar | StrongUl)
2715
+ def _Strong
2716
+
2717
+ _save = self.pos
2718
+ while true # choice
2719
+ _tmp = apply(:_StrongStar)
2720
+ break if _tmp
2721
+ self.pos = _save
2722
+ _tmp = apply(:_StrongUl)
2723
+ break if _tmp
2724
+ self.pos = _save
2725
+ break
2726
+ end # end choice
2727
+
2728
+ set_failed_rule :_Strong unless _tmp
2729
+ return _tmp
2730
+ end
2731
+
2732
+ # StrongStar = "**" !Whitespace (!"**" Inline:b { b })+:c "**" {inline_element(self, position, :strong, c)}
2733
+ def _StrongStar
2734
+
2735
+ _save = self.pos
2736
+ while true # sequence
2737
+ _tmp = match_string("**")
2738
+ unless _tmp
2739
+ self.pos = _save
2740
+ break
2741
+ end
2742
+ _save1 = self.pos
2743
+ _tmp = apply(:_Whitespace)
2744
+ _tmp = _tmp ? nil : true
2745
+ self.pos = _save1
2746
+ unless _tmp
2747
+ self.pos = _save
2748
+ break
2749
+ end
2750
+ _save2 = self.pos
2751
+ _ary = []
2752
+
2753
+ _save3 = self.pos
2754
+ while true # sequence
2755
+ _save4 = self.pos
2756
+ _tmp = match_string("**")
2757
+ _tmp = _tmp ? nil : true
2758
+ self.pos = _save4
2759
+ unless _tmp
2760
+ self.pos = _save3
2761
+ break
2762
+ end
2763
+ _tmp = apply(:_Inline)
2764
+ b = @result
2765
+ unless _tmp
2766
+ self.pos = _save3
2767
+ break
2768
+ end
2769
+ @result = begin; b ; end
2770
+ _tmp = true
2771
+ unless _tmp
2772
+ self.pos = _save3
2773
+ end
2774
+ break
2775
+ end # end sequence
2776
+
2777
+ if _tmp
2778
+ _ary << @result
2779
+ while true
2780
+
2781
+ _save5 = self.pos
2782
+ while true # sequence
2783
+ _save6 = self.pos
2784
+ _tmp = match_string("**")
2785
+ _tmp = _tmp ? nil : true
2786
+ self.pos = _save6
2787
+ unless _tmp
2788
+ self.pos = _save5
2789
+ break
2790
+ end
2791
+ _tmp = apply(:_Inline)
2792
+ b = @result
2793
+ unless _tmp
2794
+ self.pos = _save5
2795
+ break
2796
+ end
2797
+ @result = begin; b ; end
2798
+ _tmp = true
2799
+ unless _tmp
2800
+ self.pos = _save5
2801
+ end
2802
+ break
2803
+ end # end sequence
2804
+
2805
+ _ary << @result if _tmp
2806
+ break unless _tmp
2807
+ end
2808
+ _tmp = true
2809
+ @result = _ary
2810
+ else
2811
+ self.pos = _save2
2812
+ end
2813
+ c = @result
2814
+ unless _tmp
2815
+ self.pos = _save
2816
+ break
2817
+ end
2818
+ _tmp = match_string("**")
2819
+ unless _tmp
2820
+ self.pos = _save
2821
+ break
2822
+ end
2823
+ @result = begin; inline_element(self, position, :strong, c); end
2824
+ _tmp = true
2825
+ unless _tmp
2826
+ self.pos = _save
2827
+ end
2828
+ break
2829
+ end # end sequence
2830
+
2831
+ set_failed_rule :_StrongStar unless _tmp
2832
+ return _tmp
2833
+ end
2834
+
2835
+ # StrongUl = "__" !Whitespace (!"__" Inline:b { b })+:c "__" {inline_element(self, position, :strong, c)}
2836
+ def _StrongUl
2837
+
2838
+ _save = self.pos
2839
+ while true # sequence
2840
+ _tmp = match_string("__")
2841
+ unless _tmp
2842
+ self.pos = _save
2843
+ break
2844
+ end
2845
+ _save1 = self.pos
2846
+ _tmp = apply(:_Whitespace)
2847
+ _tmp = _tmp ? nil : true
2848
+ self.pos = _save1
2849
+ unless _tmp
2850
+ self.pos = _save
2851
+ break
2852
+ end
2853
+ _save2 = self.pos
2854
+ _ary = []
2855
+
2856
+ _save3 = self.pos
2857
+ while true # sequence
2858
+ _save4 = self.pos
2859
+ _tmp = match_string("__")
2860
+ _tmp = _tmp ? nil : true
2861
+ self.pos = _save4
2862
+ unless _tmp
2863
+ self.pos = _save3
2864
+ break
2865
+ end
2866
+ _tmp = apply(:_Inline)
2867
+ b = @result
2868
+ unless _tmp
2869
+ self.pos = _save3
2870
+ break
2871
+ end
2872
+ @result = begin; b ; end
2873
+ _tmp = true
2874
+ unless _tmp
2875
+ self.pos = _save3
2876
+ end
2877
+ break
2878
+ end # end sequence
2879
+
2880
+ if _tmp
2881
+ _ary << @result
2882
+ while true
2883
+
2884
+ _save5 = self.pos
2885
+ while true # sequence
2886
+ _save6 = self.pos
2887
+ _tmp = match_string("__")
2888
+ _tmp = _tmp ? nil : true
2889
+ self.pos = _save6
2890
+ unless _tmp
2891
+ self.pos = _save5
2892
+ break
2893
+ end
2894
+ _tmp = apply(:_Inline)
2895
+ b = @result
2896
+ unless _tmp
2897
+ self.pos = _save5
2898
+ break
2899
+ end
2900
+ @result = begin; b ; end
2901
+ _tmp = true
2902
+ unless _tmp
2903
+ self.pos = _save5
2904
+ end
2905
+ break
2906
+ end # end sequence
2907
+
2908
+ _ary << @result if _tmp
2909
+ break unless _tmp
2910
+ end
2911
+ _tmp = true
2912
+ @result = _ary
2913
+ else
2914
+ self.pos = _save2
2915
+ end
2916
+ c = @result
2917
+ unless _tmp
2918
+ self.pos = _save
2919
+ break
2920
+ end
2921
+ _tmp = match_string("__")
2922
+ unless _tmp
2923
+ self.pos = _save
2924
+ break
2925
+ end
2926
+ @result = begin; inline_element(self, position, :strong, c); end
2927
+ _tmp = true
2928
+ unless _tmp
2929
+ self.pos = _save
2930
+ end
2931
+ break
2932
+ end # end sequence
2933
+
2934
+ set_failed_rule :_StrongUl unless _tmp
2935
+ return _tmp
2936
+ end
2937
+
2938
+ # Ticks1 = < /`/ > !"`" { text }
2939
+ def _Ticks1
2940
+
2941
+ _save = self.pos
2942
+ while true # sequence
2943
+ _text_start = self.pos
2944
+ _tmp = scan(/\A(?-mix:`)/)
2945
+ if _tmp
2946
+ text = get_text(_text_start)
2947
+ end
2948
+ unless _tmp
2949
+ self.pos = _save
2950
+ break
2951
+ end
2952
+ _save1 = self.pos
2953
+ _tmp = match_string("`")
2954
+ _tmp = _tmp ? nil : true
2955
+ self.pos = _save1
2956
+ unless _tmp
2957
+ self.pos = _save
2958
+ break
2959
+ end
2960
+ @result = begin; text ; end
2961
+ _tmp = true
2962
+ unless _tmp
2963
+ self.pos = _save
2964
+ end
2965
+ break
2966
+ end # end sequence
2967
+
2968
+ set_failed_rule :_Ticks1 unless _tmp
2969
+ return _tmp
2970
+ end
2971
+
2972
+ # Ticks2 = < /``/ > !"`" { text }
2973
+ def _Ticks2
2974
+
2975
+ _save = self.pos
2976
+ while true # sequence
2977
+ _text_start = self.pos
2978
+ _tmp = scan(/\A(?-mix:``)/)
2979
+ if _tmp
2980
+ text = get_text(_text_start)
2981
+ end
2982
+ unless _tmp
2983
+ self.pos = _save
2984
+ break
2985
+ end
2986
+ _save1 = self.pos
2987
+ _tmp = match_string("`")
2988
+ _tmp = _tmp ? nil : true
2989
+ self.pos = _save1
2990
+ unless _tmp
2991
+ self.pos = _save
2992
+ break
2993
+ end
2994
+ @result = begin; text ; end
2995
+ _tmp = true
2996
+ unless _tmp
2997
+ self.pos = _save
2998
+ end
2999
+ break
3000
+ end # end sequence
3001
+
3002
+ set_failed_rule :_Ticks2 unless _tmp
3003
+ return _tmp
3004
+ end
3005
+
3006
+ # Code = (Ticks1 Sp (!"`" Nonspacechar)+:c Sp Ticks1 {text(self, position, c.join(""))} | Ticks2 Sp (!"``" Nonspacechar)+:c Sp Ticks2 {text(self, position, c.join(""))}):cc {inline_element(self, position, :code, [cc])}
3007
+ def _Code
3008
+
3009
+ _save = self.pos
3010
+ while true # sequence
3011
+
3012
+ _save1 = self.pos
3013
+ while true # choice
3014
+
3015
+ _save2 = self.pos
3016
+ while true # sequence
3017
+ _tmp = apply(:_Ticks1)
3018
+ unless _tmp
3019
+ self.pos = _save2
3020
+ break
3021
+ end
3022
+ _tmp = apply(:_Sp)
3023
+ unless _tmp
3024
+ self.pos = _save2
3025
+ break
3026
+ end
3027
+ _save3 = self.pos
3028
+ _ary = []
3029
+
3030
+ _save4 = self.pos
3031
+ while true # sequence
3032
+ _save5 = self.pos
3033
+ _tmp = match_string("`")
3034
+ _tmp = _tmp ? nil : true
3035
+ self.pos = _save5
3036
+ unless _tmp
3037
+ self.pos = _save4
3038
+ break
3039
+ end
3040
+ _tmp = apply(:_Nonspacechar)
3041
+ unless _tmp
3042
+ self.pos = _save4
3043
+ end
3044
+ break
3045
+ end # end sequence
3046
+
3047
+ if _tmp
3048
+ _ary << @result
3049
+ while true
3050
+
3051
+ _save6 = self.pos
3052
+ while true # sequence
3053
+ _save7 = self.pos
3054
+ _tmp = match_string("`")
3055
+ _tmp = _tmp ? nil : true
3056
+ self.pos = _save7
3057
+ unless _tmp
3058
+ self.pos = _save6
3059
+ break
3060
+ end
3061
+ _tmp = apply(:_Nonspacechar)
3062
+ unless _tmp
3063
+ self.pos = _save6
3064
+ end
3065
+ break
3066
+ end # end sequence
3067
+
3068
+ _ary << @result if _tmp
3069
+ break unless _tmp
3070
+ end
3071
+ _tmp = true
3072
+ @result = _ary
3073
+ else
3074
+ self.pos = _save3
3075
+ end
3076
+ c = @result
3077
+ unless _tmp
3078
+ self.pos = _save2
3079
+ break
3080
+ end
3081
+ _tmp = apply(:_Sp)
3082
+ unless _tmp
3083
+ self.pos = _save2
3084
+ break
3085
+ end
3086
+ _tmp = apply(:_Ticks1)
3087
+ unless _tmp
3088
+ self.pos = _save2
3089
+ break
3090
+ end
3091
+ @result = begin; text(self, position, c.join("")); end
3092
+ _tmp = true
3093
+ unless _tmp
3094
+ self.pos = _save2
3095
+ end
3096
+ break
3097
+ end # end sequence
3098
+
3099
+ break if _tmp
3100
+ self.pos = _save1
3101
+
3102
+ _save8 = self.pos
3103
+ while true # sequence
3104
+ _tmp = apply(:_Ticks2)
3105
+ unless _tmp
3106
+ self.pos = _save8
3107
+ break
3108
+ end
3109
+ _tmp = apply(:_Sp)
3110
+ unless _tmp
3111
+ self.pos = _save8
3112
+ break
3113
+ end
3114
+ _save9 = self.pos
3115
+ _ary = []
3116
+
3117
+ _save10 = self.pos
3118
+ while true # sequence
3119
+ _save11 = self.pos
3120
+ _tmp = match_string("``")
3121
+ _tmp = _tmp ? nil : true
3122
+ self.pos = _save11
3123
+ unless _tmp
3124
+ self.pos = _save10
3125
+ break
3126
+ end
3127
+ _tmp = apply(:_Nonspacechar)
3128
+ unless _tmp
3129
+ self.pos = _save10
3130
+ end
3131
+ break
3132
+ end # end sequence
3133
+
3134
+ if _tmp
3135
+ _ary << @result
3136
+ while true
3137
+
3138
+ _save12 = self.pos
3139
+ while true # sequence
3140
+ _save13 = self.pos
3141
+ _tmp = match_string("``")
3142
+ _tmp = _tmp ? nil : true
3143
+ self.pos = _save13
3144
+ unless _tmp
3145
+ self.pos = _save12
3146
+ break
3147
+ end
3148
+ _tmp = apply(:_Nonspacechar)
3149
+ unless _tmp
3150
+ self.pos = _save12
3151
+ end
3152
+ break
3153
+ end # end sequence
3154
+
3155
+ _ary << @result if _tmp
3156
+ break unless _tmp
3157
+ end
3158
+ _tmp = true
3159
+ @result = _ary
3160
+ else
3161
+ self.pos = _save9
3162
+ end
3163
+ c = @result
3164
+ unless _tmp
3165
+ self.pos = _save8
3166
+ break
3167
+ end
3168
+ _tmp = apply(:_Sp)
3169
+ unless _tmp
3170
+ self.pos = _save8
3171
+ break
3172
+ end
3173
+ _tmp = apply(:_Ticks2)
3174
+ unless _tmp
3175
+ self.pos = _save8
3176
+ break
3177
+ end
3178
+ @result = begin; text(self, position, c.join("")); end
3179
+ _tmp = true
3180
+ unless _tmp
3181
+ self.pos = _save8
3182
+ end
3183
+ break
3184
+ end # end sequence
3185
+
3186
+ break if _tmp
3187
+ self.pos = _save1
3188
+ break
3189
+ end # end choice
3190
+
3191
+ cc = @result
3192
+ unless _tmp
3193
+ self.pos = _save
3194
+ break
3195
+ end
3196
+ @result = begin; inline_element(self, position, :code, [cc]); end
3197
+ _tmp = true
3198
+ unless _tmp
3199
+ self.pos = _save
3200
+ end
3201
+ break
3202
+ end # end sequence
3203
+
3204
+ set_failed_rule :_Code unless _tmp
3205
+ return _tmp
3206
+ end
3207
+
3208
+ # BlankLine = Sp Newline
3209
+ def _BlankLine
3210
+
3211
+ _save = self.pos
3212
+ while true # sequence
3213
+ _tmp = apply(:_Sp)
3214
+ unless _tmp
3215
+ self.pos = _save
3216
+ break
3217
+ end
3218
+ _tmp = apply(:_Newline)
3219
+ unless _tmp
3220
+ self.pos = _save
3221
+ end
3222
+ break
3223
+ end # end sequence
3224
+
3225
+ set_failed_rule :_BlankLine unless _tmp
3226
+ return _tmp
3227
+ end
3228
+
3229
+ # Quoted = ("\"" (!"\"" .)* "\"" | "'" (!"'" .)* "'")
3230
+ def _Quoted
3231
+
3232
+ _save = self.pos
3233
+ while true # choice
3234
+
3235
+ _save1 = self.pos
3236
+ while true # sequence
3237
+ _tmp = match_string("\"")
3238
+ unless _tmp
3239
+ self.pos = _save1
3240
+ break
3241
+ end
3242
+ while true
3243
+
3244
+ _save3 = self.pos
3245
+ while true # sequence
3246
+ _save4 = self.pos
3247
+ _tmp = match_string("\"")
3248
+ _tmp = _tmp ? nil : true
3249
+ self.pos = _save4
3250
+ unless _tmp
3251
+ self.pos = _save3
3252
+ break
3253
+ end
3254
+ _tmp = get_byte
3255
+ unless _tmp
3256
+ self.pos = _save3
3257
+ end
3258
+ break
3259
+ end # end sequence
3260
+
3261
+ break unless _tmp
3262
+ end
3263
+ _tmp = true
3264
+ unless _tmp
3265
+ self.pos = _save1
3266
+ break
3267
+ end
3268
+ _tmp = match_string("\"")
3269
+ unless _tmp
3270
+ self.pos = _save1
3271
+ end
3272
+ break
3273
+ end # end sequence
3274
+
3275
+ break if _tmp
3276
+ self.pos = _save
3277
+
3278
+ _save5 = self.pos
3279
+ while true # sequence
3280
+ _tmp = match_string("'")
3281
+ unless _tmp
3282
+ self.pos = _save5
3283
+ break
3284
+ end
3285
+ while true
3286
+
3287
+ _save7 = self.pos
3288
+ while true # sequence
3289
+ _save8 = self.pos
3290
+ _tmp = match_string("'")
3291
+ _tmp = _tmp ? nil : true
3292
+ self.pos = _save8
3293
+ unless _tmp
3294
+ self.pos = _save7
3295
+ break
3296
+ end
3297
+ _tmp = get_byte
3298
+ unless _tmp
3299
+ self.pos = _save7
3300
+ end
3301
+ break
3302
+ end # end sequence
3303
+
3304
+ break unless _tmp
3305
+ end
3306
+ _tmp = true
3307
+ unless _tmp
3308
+ self.pos = _save5
3309
+ break
3310
+ end
3311
+ _tmp = match_string("'")
3312
+ unless _tmp
3313
+ self.pos = _save5
3314
+ end
3315
+ break
3316
+ end # end sequence
3317
+
3318
+ break if _tmp
3319
+ self.pos = _save
3320
+ break
3321
+ end # end choice
3322
+
3323
+ set_failed_rule :_Quoted unless _tmp
3324
+ return _tmp
3325
+ end
3326
+
3327
+ # Eof = !.
3328
+ def _Eof
3329
+ _save = self.pos
3330
+ _tmp = get_byte
3331
+ _tmp = _tmp ? nil : true
3332
+ self.pos = _save
3333
+ set_failed_rule :_Eof unless _tmp
3334
+ return _tmp
3335
+ end
3336
+
3337
+ # Spacechar = < / |\t/ > { text }
3338
+ def _Spacechar
3339
+
3340
+ _save = self.pos
3341
+ while true # sequence
3342
+ _text_start = self.pos
3343
+ _tmp = scan(/\A(?-mix: |\t)/)
3344
+ if _tmp
3345
+ text = get_text(_text_start)
3346
+ end
3347
+ unless _tmp
3348
+ self.pos = _save
3349
+ break
3350
+ end
3351
+ @result = begin; text ; end
3352
+ _tmp = true
3353
+ unless _tmp
3354
+ self.pos = _save
3355
+ end
3356
+ break
3357
+ end # end sequence
3358
+
3359
+ set_failed_rule :_Spacechar unless _tmp
3360
+ return _tmp
3361
+ end
3362
+
3363
+ # Nonspacechar = !Spacechar !Newline < . > { text }
3364
+ def _Nonspacechar
3365
+
3366
+ _save = self.pos
3367
+ while true # sequence
3368
+ _save1 = self.pos
3369
+ _tmp = apply(:_Spacechar)
3370
+ _tmp = _tmp ? nil : true
3371
+ self.pos = _save1
3372
+ unless _tmp
3373
+ self.pos = _save
3374
+ break
3375
+ end
3376
+ _save2 = self.pos
3377
+ _tmp = apply(:_Newline)
3378
+ _tmp = _tmp ? nil : true
3379
+ self.pos = _save2
3380
+ unless _tmp
3381
+ self.pos = _save
3382
+ break
3383
+ end
3384
+ _text_start = self.pos
3385
+ _tmp = get_byte
3386
+ if _tmp
3387
+ text = get_text(_text_start)
3388
+ end
3389
+ unless _tmp
3390
+ self.pos = _save
3391
+ break
3392
+ end
3393
+ @result = begin; text ; end
3394
+ _tmp = true
3395
+ unless _tmp
3396
+ self.pos = _save
3397
+ end
3398
+ break
3399
+ end # end sequence
3400
+
3401
+ set_failed_rule :_Nonspacechar unless _tmp
3402
+ return _tmp
3403
+ end
3404
+
3405
+ # Newline = ("\n" | "\r" "\n"?)
3406
+ def _Newline
3407
+
3408
+ _save = self.pos
3409
+ while true # choice
3410
+ _tmp = match_string("\n")
3411
+ break if _tmp
3412
+ self.pos = _save
3413
+
3414
+ _save1 = self.pos
3415
+ while true # sequence
3416
+ _tmp = match_string("\r")
3417
+ unless _tmp
3418
+ self.pos = _save1
3419
+ break
3420
+ end
3421
+ _save2 = self.pos
3422
+ _tmp = match_string("\n")
3423
+ unless _tmp
3424
+ _tmp = true
3425
+ self.pos = _save2
3426
+ end
3427
+ unless _tmp
3428
+ self.pos = _save1
3429
+ end
3430
+ break
3431
+ end # end sequence
3432
+
3433
+ break if _tmp
3434
+ self.pos = _save
3435
+ break
3436
+ end # end choice
3437
+
3438
+ set_failed_rule :_Newline unless _tmp
3439
+ return _tmp
3440
+ end
3441
+
3442
+ # Sp = Spacechar*
3443
+ def _Sp
3444
+ while true
3445
+ _tmp = apply(:_Spacechar)
3446
+ break unless _tmp
3447
+ end
3448
+ _tmp = true
3449
+ set_failed_rule :_Sp unless _tmp
3450
+ return _tmp
3451
+ end
3452
+
3453
+ # Spnl = Sp (Newline Sp)?
3454
+ def _Spnl
3455
+
3456
+ _save = self.pos
3457
+ while true # sequence
3458
+ _tmp = apply(:_Sp)
3459
+ unless _tmp
3460
+ self.pos = _save
3461
+ break
3462
+ end
3463
+ _save1 = self.pos
3464
+
3465
+ _save2 = self.pos
3466
+ while true # sequence
3467
+ _tmp = apply(:_Newline)
3468
+ unless _tmp
3469
+ self.pos = _save2
3470
+ break
3471
+ end
3472
+ _tmp = apply(:_Sp)
3473
+ unless _tmp
3474
+ self.pos = _save2
3475
+ end
3476
+ break
3477
+ end # end sequence
3478
+
3479
+ unless _tmp
3480
+ _tmp = true
3481
+ self.pos = _save1
3482
+ end
3483
+ unless _tmp
3484
+ self.pos = _save
3485
+ end
3486
+ break
3487
+ end # end sequence
3488
+
3489
+ set_failed_rule :_Spnl unless _tmp
3490
+ return _tmp
3491
+ end
3492
+
3493
+ # SpecialChar = < /[~*_`&\[\]()<!#\\'"]/ > { text }
3494
+ def _SpecialChar
3495
+
3496
+ _save = self.pos
3497
+ while true # sequence
3498
+ _text_start = self.pos
3499
+ _tmp = scan(/\A(?-mix:[~*_`&\[\]()<!#\\'"])/)
3500
+ if _tmp
3501
+ text = get_text(_text_start)
3502
+ end
3503
+ unless _tmp
3504
+ self.pos = _save
3505
+ break
3506
+ end
3507
+ @result = begin; text ; end
3508
+ _tmp = true
3509
+ unless _tmp
3510
+ self.pos = _save
3511
+ end
3512
+ break
3513
+ end # end sequence
3514
+
3515
+ set_failed_rule :_SpecialChar unless _tmp
3516
+ return _tmp
3517
+ end
3518
+
3519
+ # NormalChar = !(SpecialChar | Spacechar | Newline) < . > { text }
3520
+ def _NormalChar
3521
+
3522
+ _save = self.pos
3523
+ while true # sequence
3524
+ _save1 = self.pos
3525
+
3526
+ _save2 = self.pos
3527
+ while true # choice
3528
+ _tmp = apply(:_SpecialChar)
3529
+ break if _tmp
3530
+ self.pos = _save2
3531
+ _tmp = apply(:_Spacechar)
3532
+ break if _tmp
3533
+ self.pos = _save2
3534
+ _tmp = apply(:_Newline)
3535
+ break if _tmp
3536
+ self.pos = _save2
3537
+ break
3538
+ end # end choice
3539
+
3540
+ _tmp = _tmp ? nil : true
3541
+ self.pos = _save1
3542
+ unless _tmp
3543
+ self.pos = _save
3544
+ break
3545
+ end
3546
+ _text_start = self.pos
3547
+ _tmp = get_byte
3548
+ if _tmp
3549
+ text = get_text(_text_start)
3550
+ end
3551
+ unless _tmp
3552
+ self.pos = _save
3553
+ break
3554
+ end
3555
+ @result = begin; text ; end
3556
+ _tmp = true
3557
+ unless _tmp
3558
+ self.pos = _save
3559
+ end
3560
+ break
3561
+ end # end sequence
3562
+
3563
+ set_failed_rule :_NormalChar unless _tmp
3564
+ return _tmp
3565
+ end
3566
+
3567
+ # AlphanumericAscii = < /[A-Za-z0-9]/ > { text }
3568
+ def _AlphanumericAscii
3569
+
3570
+ _save = self.pos
3571
+ while true # sequence
3572
+ _text_start = self.pos
3573
+ _tmp = scan(/\A(?-mix:[A-Za-z0-9])/)
3574
+ if _tmp
3575
+ text = get_text(_text_start)
3576
+ end
3577
+ unless _tmp
3578
+ self.pos = _save
3579
+ break
3580
+ end
3581
+ @result = begin; text ; end
3582
+ _tmp = true
3583
+ unless _tmp
3584
+ self.pos = _save
3585
+ end
3586
+ break
3587
+ end # end sequence
3588
+
3589
+ set_failed_rule :_AlphanumericAscii unless _tmp
3590
+ return _tmp
3591
+ end
3592
+
3593
+ # Digit = < /[0-9]/ > { text }
3594
+ def _Digit
3595
+
3596
+ _save = self.pos
3597
+ while true # sequence
3598
+ _text_start = self.pos
3599
+ _tmp = scan(/\A(?-mix:[0-9])/)
3600
+ if _tmp
3601
+ text = get_text(_text_start)
3602
+ end
3603
+ unless _tmp
3604
+ self.pos = _save
3605
+ break
3606
+ end
3607
+ @result = begin; text ; end
3608
+ _tmp = true
3609
+ unless _tmp
3610
+ self.pos = _save
3611
+ end
3612
+ break
3613
+ end # end sequence
3614
+
3615
+ set_failed_rule :_Digit unless _tmp
3616
+ return _tmp
3617
+ end
3618
+
3619
+ # NonindentSpace = < / | | |/ > { text }
3620
+ def _NonindentSpace
3621
+
3622
+ _save = self.pos
3623
+ while true # sequence
3624
+ _text_start = self.pos
3625
+ _tmp = scan(/\A(?-mix: | | |)/)
3626
+ if _tmp
3627
+ text = get_text(_text_start)
3628
+ end
3629
+ unless _tmp
3630
+ self.pos = _save
3631
+ break
3632
+ end
3633
+ @result = begin; text ; end
3634
+ _tmp = true
3635
+ unless _tmp
3636
+ self.pos = _save
3637
+ end
3638
+ break
3639
+ end # end sequence
3640
+
3641
+ set_failed_rule :_NonindentSpace unless _tmp
3642
+ return _tmp
3643
+ end
3644
+
3645
+ # Indent = < /\t| / > { text }
3646
+ def _Indent
3647
+
3648
+ _save = self.pos
3649
+ while true # sequence
3650
+ _text_start = self.pos
3651
+ _tmp = scan(/\A(?-mix:\t| )/)
3652
+ if _tmp
3653
+ text = get_text(_text_start)
3654
+ end
3655
+ unless _tmp
3656
+ self.pos = _save
3657
+ break
3658
+ end
3659
+ @result = begin; text ; end
3660
+ _tmp = true
3661
+ unless _tmp
3662
+ self.pos = _save
3663
+ end
3664
+ break
3665
+ end # end sequence
3666
+
3667
+ set_failed_rule :_Indent unless _tmp
3668
+ return _tmp
3669
+ end
3670
+
3671
+ # IndentedLine = Indent Line:c { c }
3672
+ def _IndentedLine
3673
+
3674
+ _save = self.pos
3675
+ while true # sequence
3676
+ _tmp = apply(:_Indent)
3677
+ unless _tmp
3678
+ self.pos = _save
3679
+ break
3680
+ end
3681
+ _tmp = apply(:_Line)
3682
+ c = @result
3683
+ unless _tmp
3684
+ self.pos = _save
3685
+ break
3686
+ end
3687
+ @result = begin; c ; end
3688
+ _tmp = true
3689
+ unless _tmp
3690
+ self.pos = _save
3691
+ end
3692
+ break
3693
+ end # end sequence
3694
+
3695
+ set_failed_rule :_IndentedLine unless _tmp
3696
+ return _tmp
3697
+ end
3698
+
3699
+ # OptionallyIndentedLine = Indent? Line
3700
+ def _OptionallyIndentedLine
3701
+
3702
+ _save = self.pos
3703
+ while true # sequence
3704
+ _save1 = self.pos
3705
+ _tmp = apply(:_Indent)
3706
+ unless _tmp
3707
+ _tmp = true
3708
+ self.pos = _save1
3709
+ end
3710
+ unless _tmp
3711
+ self.pos = _save
3712
+ break
3713
+ end
3714
+ _tmp = apply(:_Line)
3715
+ unless _tmp
3716
+ self.pos = _save
3717
+ end
3718
+ break
3719
+ end # end sequence
3720
+
3721
+ set_failed_rule :_OptionallyIndentedLine unless _tmp
3722
+ return _tmp
3723
+ end
3724
+
3725
+ # Line = RawLine:c { c }
3726
+ def _Line
3727
+
3728
+ _save = self.pos
3729
+ while true # sequence
3730
+ _tmp = apply(:_RawLine)
3731
+ c = @result
3732
+ unless _tmp
3733
+ self.pos = _save
3734
+ break
3735
+ end
3736
+ @result = begin; c ; end
3737
+ _tmp = true
3738
+ unless _tmp
3739
+ self.pos = _save
3740
+ end
3741
+ break
3742
+ end # end sequence
3743
+
3744
+ set_failed_rule :_Line unless _tmp
3745
+ return _tmp
3746
+ end
3747
+
3748
+ # RawLine = (< /[^\r\n]*/ > Newline { text } | < /.+/ > Eof { text }):c {text(self, position, c)}
3749
+ def _RawLine
3750
+
3751
+ _save = self.pos
3752
+ while true # sequence
3753
+
3754
+ _save1 = self.pos
3755
+ while true # choice
3756
+
3757
+ _save2 = self.pos
3758
+ while true # sequence
3759
+ _text_start = self.pos
3760
+ _tmp = scan(/\A(?-mix:[^\r\n]*)/)
3761
+ if _tmp
3762
+ text = get_text(_text_start)
3763
+ end
3764
+ unless _tmp
3765
+ self.pos = _save2
3766
+ break
3767
+ end
3768
+ _tmp = apply(:_Newline)
3769
+ unless _tmp
3770
+ self.pos = _save2
3771
+ break
3772
+ end
3773
+ @result = begin; text ; end
3774
+ _tmp = true
3775
+ unless _tmp
3776
+ self.pos = _save2
3777
+ end
3778
+ break
3779
+ end # end sequence
3780
+
3781
+ break if _tmp
3782
+ self.pos = _save1
3783
+
3784
+ _save3 = self.pos
3785
+ while true # sequence
3786
+ _text_start = self.pos
3787
+ _tmp = scan(/\A(?-mix:.+)/)
3788
+ if _tmp
3789
+ text = get_text(_text_start)
3790
+ end
3791
+ unless _tmp
3792
+ self.pos = _save3
3793
+ break
3794
+ end
3795
+ _tmp = apply(:_Eof)
3796
+ unless _tmp
3797
+ self.pos = _save3
3798
+ break
3799
+ end
3800
+ @result = begin; text ; end
3801
+ _tmp = true
3802
+ unless _tmp
3803
+ self.pos = _save3
3804
+ end
3805
+ break
3806
+ end # end sequence
3807
+
3808
+ break if _tmp
3809
+ self.pos = _save1
3810
+ break
3811
+ end # end choice
3812
+
3813
+ c = @result
3814
+ unless _tmp
3815
+ self.pos = _save
3816
+ break
3817
+ end
3818
+ @result = begin; text(self, position, c); end
3819
+ _tmp = true
3820
+ unless _tmp
3821
+ self.pos = _save
3822
+ end
3823
+ break
3824
+ end # end sequence
3825
+
3826
+ set_failed_rule :_RawLine unless _tmp
3827
+ return _tmp
3828
+ end
3829
+
3830
+ Rules = {}
3831
+ Rules[:_root] = rule_info("root", "Start")
3832
+ Rules[:_Start] = rule_info("Start", "&. Doc:c { @ast = c }")
3833
+ Rules[:_Doc] = rule_info("Doc", "Block*:c {document(self, position, c)}")
3834
+ Rules[:_Block] = rule_info("Block", "BlankLine* (BlockQuote | Verbatim | HorizontalRule | Heading | BulletList | Para | Plain)")
3835
+ Rules[:_Para] = rule_info("Para", "NonindentSpace Inlines:a BlankLine+ {para(self, position, a)}")
3836
+ Rules[:_Plain] = rule_info("Plain", "Inlines:a {plain(self, position, a)}")
3837
+ Rules[:_AtxInline] = rule_info("AtxInline", "!Newline !(Sp \"\#\"* Sp Newline) Inline:c { c }")
3838
+ Rules[:_AtxStart] = rule_info("AtxStart", "< /\#\#\#\#\#\#|\#\#\#\#\#|\#\#\#\#|\#\#\#|\#\#|\#/ > { text.length }")
3839
+ Rules[:_AtxHeading] = rule_info("AtxHeading", "AtxStart:level Sp AtxInline+:c (Sp \"\#\"* Sp)? Newline {headline(self, position, level, c)}")
3840
+ Rules[:_Heading] = rule_info("Heading", "AtxHeading")
3841
+ Rules[:_BlockQuote] = rule_info("BlockQuote", "BlockQuoteRaw:c {block_quote(self, position, c)}")
3842
+ Rules[:_BlockQuoteRaw] = rule_info("BlockQuoteRaw", "(\">\" \" \"? Line:c { c })+:cc { cc }")
3843
+ Rules[:_NonblankIndentedLine] = rule_info("NonblankIndentedLine", "!BlankLine IndentedLine:c { c }")
3844
+ Rules[:_VerbatimChunk] = rule_info("VerbatimChunk", "(BlankLine { text(self,position,\"\\n\") })*:c1 (NonblankIndentedLine:c { [c, text(self,position,\"\\n\")] })+:c2 { c1 + c2.flatten }")
3845
+ Rules[:_Verbatim] = rule_info("Verbatim", "VerbatimChunk+:cc {verbatim(self, position, cc.flatten)}")
3846
+ Rules[:_HorizontalRule] = rule_info("HorizontalRule", "NonindentSpace (\"*\" Sp \"*\" Sp \"*\" (Sp \"*\")* | \"-\" Sp \"-\" Sp \"-\" (Sp \"-\")* | \"_\" Sp \"_\" Sp \"_\" (Sp \"_\")*) Sp Newline BlankLine+ {horizontal_rule(self, position)}")
3847
+ Rules[:_Bullet] = rule_info("Bullet", "!HorizontalRule NonindentSpace (\"+\" | \"*\" | \"-\") Spacechar+")
3848
+ Rules[:_BulletList] = rule_info("BulletList", "&Bullet ListTight:c {bullet_list(self, position, c)}")
3849
+ Rules[:_ListTight] = rule_info("ListTight", "ListItemTight+:cc BlankLine* !Bullet { cc }")
3850
+ Rules[:_ListItemTight] = rule_info("ListItemTight", "Bullet ListBlock:c {bullet_list_item(self, position, c)}")
3851
+ Rules[:_ListBlock] = rule_info("ListBlock", "!BlankLine Line:c ListBlockLine*:cc { cc.unshift(c) }")
3852
+ Rules[:_ListBlockLine] = rule_info("ListBlockLine", "!BlankLine !(Indent? Bullet) !HorizontalRule OptionallyIndentedLine")
3853
+ Rules[:_Inlines] = rule_info("Inlines", "(!Endline Inline:c { c } | Endline:c &Inline { c })+:cc Endline? { cc }")
3854
+ Rules[:_Inline] = rule_info("Inline", "(Str | Endline | Space | Strong | Emph | Code | Symbol)")
3855
+ Rules[:_Space] = rule_info("Space", "Spacechar+:c {text(self, position, c.join(\"\"))}")
3856
+ Rules[:_Str] = rule_info("Str", "NormalChar+:c1 StrChunk*:c2 {text(self, position, (c1+c2).join(\"\"))}")
3857
+ Rules[:_StrChunk] = rule_info("StrChunk", "(NormalChar:c { [c] } | \"_\"+:c1 NormalChar:c2 { c1.push(c2) })+:cc { cc.flatten }")
3858
+ Rules[:_Endline] = rule_info("Endline", "(LineBreak | TerminalEndline | NormalEndline)")
3859
+ Rules[:_NormalEndline] = rule_info("NormalEndline", "Sp Newline !BlankLine !\">\" !AtxStart !(Line (\"=\"+ | \"-\"+) Newline) {text(self, position, \"\\n\")}")
3860
+ Rules[:_TerminalEndline] = rule_info("TerminalEndline", "Sp Newline Eof {text(self, position, \"\\n\")}")
3861
+ Rules[:_LineBreak] = rule_info("LineBreak", "\" \" NormalEndline {linebreak(self, position)}")
3862
+ Rules[:_Symbol] = rule_info("Symbol", "SpecialChar:c {text(self, position, c)}")
3863
+ Rules[:_Emph] = rule_info("Emph", "(EmphStar | EmphUl)")
3864
+ Rules[:_Whitespace] = rule_info("Whitespace", "(Spacechar | Newline)")
3865
+ Rules[:_EmphStar] = rule_info("EmphStar", "\"*\" !Whitespace (!\"*\" Inline:b { b } | StrongStar:b { b })+:c \"*\" {inline_element(self, position, :em, c)}")
3866
+ Rules[:_EmphUl] = rule_info("EmphUl", "\"_\" !Whitespace (!\"_\" Inline:b { b } | StrongUl:b { b })+:c \"_\" {inline_element(self, position, :em, c)}")
3867
+ Rules[:_Strong] = rule_info("Strong", "(StrongStar | StrongUl)")
3868
+ Rules[:_StrongStar] = rule_info("StrongStar", "\"**\" !Whitespace (!\"**\" Inline:b { b })+:c \"**\" {inline_element(self, position, :strong, c)}")
3869
+ Rules[:_StrongUl] = rule_info("StrongUl", "\"__\" !Whitespace (!\"__\" Inline:b { b })+:c \"__\" {inline_element(self, position, :strong, c)}")
3870
+ Rules[:_Ticks1] = rule_info("Ticks1", "< /`/ > !\"`\" { text }")
3871
+ Rules[:_Ticks2] = rule_info("Ticks2", "< /``/ > !\"`\" { text }")
3872
+ Rules[:_Code] = rule_info("Code", "(Ticks1 Sp (!\"`\" Nonspacechar)+:c Sp Ticks1 {text(self, position, c.join(\"\"))} | Ticks2 Sp (!\"``\" Nonspacechar)+:c Sp Ticks2 {text(self, position, c.join(\"\"))}):cc {inline_element(self, position, :code, [cc])}")
3873
+ Rules[:_BlankLine] = rule_info("BlankLine", "Sp Newline")
3874
+ Rules[:_Quoted] = rule_info("Quoted", "(\"\\\"\" (!\"\\\"\" .)* \"\\\"\" | \"'\" (!\"'\" .)* \"'\")")
3875
+ Rules[:_Eof] = rule_info("Eof", "!.")
3876
+ Rules[:_Spacechar] = rule_info("Spacechar", "< / |\\t/ > { text }")
3877
+ Rules[:_Nonspacechar] = rule_info("Nonspacechar", "!Spacechar !Newline < . > { text }")
3878
+ Rules[:_Newline] = rule_info("Newline", "(\"\\n\" | \"\\r\" \"\\n\"?)")
3879
+ Rules[:_Sp] = rule_info("Sp", "Spacechar*")
3880
+ Rules[:_Spnl] = rule_info("Spnl", "Sp (Newline Sp)?")
3881
+ Rules[:_SpecialChar] = rule_info("SpecialChar", "< /[~*_`&\\[\\]()<!\#\\\\'\"]/ > { text }")
3882
+ Rules[:_NormalChar] = rule_info("NormalChar", "!(SpecialChar | Spacechar | Newline) < . > { text }")
3883
+ Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "< /[A-Za-z0-9]/ > { text }")
3884
+ Rules[:_Digit] = rule_info("Digit", "< /[0-9]/ > { text }")
3885
+ Rules[:_NonindentSpace] = rule_info("NonindentSpace", "< / | | |/ > { text }")
3886
+ Rules[:_Indent] = rule_info("Indent", "< /\\t| / > { text }")
3887
+ Rules[:_IndentedLine] = rule_info("IndentedLine", "Indent Line:c { c }")
3888
+ Rules[:_OptionallyIndentedLine] = rule_info("OptionallyIndentedLine", "Indent? Line")
3889
+ Rules[:_Line] = rule_info("Line", "RawLine:c { c }")
3890
+ Rules[:_RawLine] = rule_info("RawLine", "(< /[^\\r\\n]*/ > Newline { text } | < /.+/ > Eof { text }):c {text(self, position, c)}")
3891
+ # :startdoc:
3892
+ end