kpeg 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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