Class: RDoc::RD::BlockParser

Inherits:
Racc::Parser show all
Defined in:
lib/rdoc/rd/block_parser.rb

Overview

RD format parser for headings, paragraphs, lists, verbatim sections that exist as blocks.

Constant Summary collapse

MARK_TO_LEVEL =

:stopdoc:

{
  '='    => 1,
  '=='   => 2,
  '==='  => 3,
  '====' => 4,
  '+'    => 5,
  '++'   => 6,
}
Racc_arg =
[
racc_action_table,
racc_action_check,
racc_action_default,
racc_action_pointer,
racc_goto_table,
racc_goto_check,
racc_goto_default,
racc_goto_pointer,
racc_nt_base,
racc_reduce_table,
racc_token_table,
racc_shift_n,
racc_reduce_n,
racc_use_result_var ]
Racc_token_to_s_table =
[
"$end",
"error",
"DUMMY",
"ITEMLISTLINE",
"ENUMLISTLINE",
"DESCLISTLINE",
"METHODLISTLINE",
"STRINGLINE",
"WHITELINE",
"SUBTREE",
"HEADLINE",
"INCLUDE",
"INDENT",
"DEDENT",
"$start",
"document",
"blocks",
"block",
"textblock",
"verbatim",
"lists",
"headline",
"include",
"textblockcontent",
"verbatimcontent",
"verbatim_after_lists",
"list",
"itemlist",
"enumlist",
"desclist",
"methodlist",
"lists2",
"itemlistitems",
"itemlistitem",
"first_textblock_in_itemlist",
"other_blocks_in_list",
"enumlistitems",
"enumlistitem",
"first_textblock_in_enumlist",
"desclistitems",
"desclistitem",
"description_part",
"methodlistitems",
"methodlistitem",
"whitelines",
"blocks_in_list",
"block_in_list",
"whitelines2" ]
Racc_debug_parser =
false

Constants inherited from Racc::Parser

Racc::Parser::Racc_Runtime_Core_Version_R, Racc::Parser::Racc_Runtime_Version

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Racc::Parser

#_racc_do_parse_rb, #_racc_do_reduce, #_racc_evalact, #_racc_init_sysvars, #_racc_setup, #_racc_yyparse_rb, #racc_accept, #racc_e_pop, #racc_next_state, #racc_print_stacks, #racc_print_states, #racc_read_token, #racc_reduce, racc_runtime_type, #racc_shift, #racc_token2str, #token_to_str, #yyaccept, #yyerrok, #yyerror

Constructor Details

#initializeBlockParser

Creates a new RDoc::RD::BlockParser. Use #parse to parse an rd-format document.



695
696
697
698
699
700
701
702
# File 'lib/rdoc/rd/block_parser.rb', line 695

def initialize
  @inline_parser = RDoc::RD::InlineParser.new self
  @include_path = []

  # for testing
  @footnotes = []
  @labels    = {}
end

Instance Attribute Details

#footnotesObject (readonly)

Footnotes for this document



679
680
681
# File 'lib/rdoc/rd/block_parser.rb', line 679

def footnotes
  @footnotes
end

#include_pathObject

Path to find included files in



689
690
691
# File 'lib/rdoc/rd/block_parser.rb', line 689

def include_path
  @include_path
end

#labelsObject (readonly)

Labels for items in this document



684
685
686
# File 'lib/rdoc/rd/block_parser.rb', line 684

def labels
  @labels
end

Instance Method Details

#_reduce_1(val, _values, result) ⇒ Object

reduce 0 omitted



1330
1331
1332
1333
# File 'lib/rdoc/rd/block_parser.rb', line 1330

def _reduce_1(val, _values, result)
 result = RDoc::Markup::Document.new(*val[0])
    result
end

#_reduce_10(val, _values, result) ⇒ Object



1372
1373
1374
1375
# File 'lib/rdoc/rd/block_parser.rb', line 1372

def _reduce_10(val, _values, result)
 result = [RDoc::Markup::BlankLine.new]
    result
end

#_reduce_11(val, _values, result) ⇒ Object



1377
1378
1379
1380
# File 'lib/rdoc/rd/block_parser.rb', line 1377

def _reduce_11(val, _values, result)
 result = val[0].parts
    result
end

#_reduce_12(val, _values, result) ⇒ Object



1382
1383
1384
1385
1386
1387
1388
# File 'lib/rdoc/rd/block_parser.rb', line 1382

def _reduce_12(val, _values, result)
      # val[0] is like [level, title]
      title = @inline_parser.parse(val[0][1])
      result = RDoc::Markup::Heading.new(val[0][0], title)

    result
end

#_reduce_13(val, _values, result) ⇒ Object



1390
1391
1392
1393
1394
# File 'lib/rdoc/rd/block_parser.rb', line 1390

def _reduce_13(val, _values, result)
      result = RDoc::Markup::Include.new val[0], @include_path

    result
end

#_reduce_14(val, _values, result) ⇒ Object



1396
1397
1398
1399
1400
1401
# File 'lib/rdoc/rd/block_parser.rb', line 1396

def _reduce_14(val, _values, result)
      # val[0] is Array of String
      result = paragraph val[0]

    result
end

#_reduce_15(val, _values, result) ⇒ Object



1403
1404
1405
1406
# File 'lib/rdoc/rd/block_parser.rb', line 1403

def _reduce_15(val, _values, result)
 result << val[1].rstrip
    result
end

#_reduce_16(val, _values, result) ⇒ Object



1408
1409
1410
1411
# File 'lib/rdoc/rd/block_parser.rb', line 1408

def _reduce_16(val, _values, result)
 result = [val[0].rstrip]
    result
end

#_reduce_17(val, _values, result) ⇒ Object



1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
# File 'lib/rdoc/rd/block_parser.rb', line 1413

def _reduce_17(val, _values, result)
      # val[1] is Array of String
      content = cut_off val[1]
      result = RDoc::Markup::Verbatim.new(*content)

      # imform to lexer.
      @in_verbatim = false

    result
end

#_reduce_18(val, _values, result) ⇒ Object



1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
# File 'lib/rdoc/rd/block_parser.rb', line 1424

def _reduce_18(val, _values, result)
      # val[0] is Array of String
      content = cut_off val[0]
      result = RDoc::Markup::Verbatim.new(*content)

      # imform to lexer.
      @in_verbatim = false

    result
end

#_reduce_19(val, _values, result) ⇒ Object



1435
1436
1437
1438
1439
# File 'lib/rdoc/rd/block_parser.rb', line 1435

def _reduce_19(val, _values, result)
      result << val[1]

    result
end

#_reduce_2(val, _values, result) ⇒ Object

Raises:



1335
1336
1337
1338
# File 'lib/rdoc/rd/block_parser.rb', line 1335

def _reduce_2(val, _values, result)
 raise ParseError, "file empty"
    result
end

#_reduce_20(val, _values, result) ⇒ Object



1441
1442
1443
1444
1445
# File 'lib/rdoc/rd/block_parser.rb', line 1441

def _reduce_20(val, _values, result)
      result.concat val[2]

    result
end

#_reduce_21(val, _values, result) ⇒ Object



1447
1448
1449
1450
1451
# File 'lib/rdoc/rd/block_parser.rb', line 1447

def _reduce_21(val, _values, result)
      result << "\n"

    result
end

#_reduce_22(val, _values, result) ⇒ Object



1453
1454
1455
1456
1457
1458
1459
# File 'lib/rdoc/rd/block_parser.rb', line 1453

def _reduce_22(val, _values, result)
      result = val
      # inform to lexer.
      @in_verbatim = true

    result
end

#_reduce_27(val, _values, result) ⇒ Object

reduce 26 omitted



1469
1470
1471
1472
1473
# File 'lib/rdoc/rd/block_parser.rb', line 1469

def _reduce_27(val, _values, result)
      result = val[0]

    result
end

#_reduce_28(val, _values, result) ⇒ Object



1475
1476
1477
1478
1479
# File 'lib/rdoc/rd/block_parser.rb', line 1475

def _reduce_28(val, _values, result)
      result = val[1]

    result
end

#_reduce_29(val, _values, result) ⇒ Object



1481
1482
1483
1484
1485
# File 'lib/rdoc/rd/block_parser.rb', line 1481

def _reduce_29(val, _values, result)
      result = val[1].push(val[2])

    result
end

#_reduce_3(val, _values, result) ⇒ Object



1340
1341
1342
1343
# File 'lib/rdoc/rd/block_parser.rb', line 1340

def _reduce_3(val, _values, result)
 result = val[0].concat val[1]
    result
end

#_reduce_30(val, _values, result) ⇒ Object



1487
1488
1489
1490
# File 'lib/rdoc/rd/block_parser.rb', line 1487

def _reduce_30(val, _values, result)
 result = val[0] << val[1]
    result
end

#_reduce_31(val, _values, result) ⇒ Object



1492
1493
1494
1495
# File 'lib/rdoc/rd/block_parser.rb', line 1492

def _reduce_31(val, _values, result)
 result = [val[0]]
    result
end

#_reduce_32(val, _values, result) ⇒ Object



1497
1498
1499
1500
1501
# File 'lib/rdoc/rd/block_parser.rb', line 1497

def _reduce_32(val, _values, result)
      result = RDoc::Markup::List.new :BULLET, *val[0]

    result
end

#_reduce_33(val, _values, result) ⇒ Object



1503
1504
1505
1506
# File 'lib/rdoc/rd/block_parser.rb', line 1503

def _reduce_33(val, _values, result)
 result.push(val[1])
    result
end

#_reduce_34(val, _values, result) ⇒ Object



1508
1509
1510
1511
# File 'lib/rdoc/rd/block_parser.rb', line 1508

def _reduce_34(val, _values, result)
 result = val
    result
end

#_reduce_35(val, _values, result) ⇒ Object



1513
1514
1515
1516
1517
# File 'lib/rdoc/rd/block_parser.rb', line 1513

def _reduce_35(val, _values, result)
      result = RDoc::Markup::ListItem.new nil, val[0], *val[1]

    result
end

#_reduce_36(val, _values, result) ⇒ Object



1519
1520
1521
1522
1523
# File 'lib/rdoc/rd/block_parser.rb', line 1519

def _reduce_36(val, _values, result)
      result = RDoc::Markup::List.new :NUMBER, *val[0]

    result
end

#_reduce_37(val, _values, result) ⇒ Object



1525
1526
1527
1528
# File 'lib/rdoc/rd/block_parser.rb', line 1525

def _reduce_37(val, _values, result)
 result.push(val[1])
    result
end

#_reduce_38(val, _values, result) ⇒ Object



1530
1531
1532
1533
# File 'lib/rdoc/rd/block_parser.rb', line 1530

def _reduce_38(val, _values, result)
 result = val
    result
end

#_reduce_39(val, _values, result) ⇒ Object



1535
1536
1537
1538
1539
# File 'lib/rdoc/rd/block_parser.rb', line 1535

def _reduce_39(val, _values, result)
      result = RDoc::Markup::ListItem.new nil, val[0], *val[1]

    result
end

#_reduce_4(val, _values, result) ⇒ Object



1345
1346
1347
1348
# File 'lib/rdoc/rd/block_parser.rb', line 1345

def _reduce_4(val, _values, result)
 result = val[0]
    result
end

#_reduce_40(val, _values, result) ⇒ Object



1541
1542
1543
1544
1545
# File 'lib/rdoc/rd/block_parser.rb', line 1541

def _reduce_40(val, _values, result)
      result = RDoc::Markup::List.new :NOTE, *val[0]

    result
end

#_reduce_41(val, _values, result) ⇒ Object



1547
1548
1549
1550
# File 'lib/rdoc/rd/block_parser.rb', line 1547

def _reduce_41(val, _values, result)
 result.push(val[1])
    result
end

#_reduce_42(val, _values, result) ⇒ Object



1552
1553
1554
1555
# File 'lib/rdoc/rd/block_parser.rb', line 1552

def _reduce_42(val, _values, result)
 result = val
    result
end

#_reduce_43(val, _values, result) ⇒ Object



1557
1558
1559
1560
1561
1562
1563
# File 'lib/rdoc/rd/block_parser.rb', line 1557

def _reduce_43(val, _values, result)
      term = @inline_parser.parse val[0].strip

      result = RDoc::Markup::ListItem.new term, *val[1]

    result
end

#_reduce_44(val, _values, result) ⇒ Object



1565
1566
1567
1568
1569
# File 'lib/rdoc/rd/block_parser.rb', line 1565

def _reduce_44(val, _values, result)
      result = RDoc::Markup::List.new :LABEL, *val[0]

    result
end

#_reduce_45(val, _values, result) ⇒ Object



1571
1572
1573
1574
# File 'lib/rdoc/rd/block_parser.rb', line 1571

def _reduce_45(val, _values, result)
 result.push(val[1])
    result
end

#_reduce_46(val, _values, result) ⇒ Object



1576
1577
1578
1579
# File 'lib/rdoc/rd/block_parser.rb', line 1576

def _reduce_46(val, _values, result)
 result = val
    result
end

#_reduce_47(val, _values, result) ⇒ Object



1581
1582
1583
1584
1585
# File 'lib/rdoc/rd/block_parser.rb', line 1581

def _reduce_47(val, _values, result)
      result = RDoc::Markup::ListItem.new "<tt>#{val[0].strip}</tt>", *val[1]

    result
end

#_reduce_48(val, _values, result) ⇒ Object



1587
1588
1589
1590
1591
# File 'lib/rdoc/rd/block_parser.rb', line 1587

def _reduce_48(val, _values, result)
      result = [val[1]].concat(val[2])

    result
end

#_reduce_49(val, _values, result) ⇒ Object



1593
1594
1595
1596
1597
# File 'lib/rdoc/rd/block_parser.rb', line 1593

def _reduce_49(val, _values, result)
      result = [val[1]]

    result
end

#_reduce_5(val, _values, result) ⇒ Object



1350
1351
1352
1353
# File 'lib/rdoc/rd/block_parser.rb', line 1350

def _reduce_5(val, _values, result)
 result = val
    result
end

#_reduce_50(val, _values, result) ⇒ Object



1599
1600
1601
1602
1603
# File 'lib/rdoc/rd/block_parser.rb', line 1599

def _reduce_50(val, _values, result)
      result = val[2]

    result
end

#_reduce_51(val, _values, result) ⇒ Object



1605
1606
1607
1608
1609
# File 'lib/rdoc/rd/block_parser.rb', line 1605

def _reduce_51(val, _values, result)
      result = []

    result
end

#_reduce_52(val, _values, result) ⇒ Object



1611
1612
1613
1614
# File 'lib/rdoc/rd/block_parser.rb', line 1611

def _reduce_52(val, _values, result)
 result.concat val[1]
    result
end

#_reduce_54(val, _values, result) ⇒ Object

reduce 53 omitted



1618
1619
1620
1621
# File 'lib/rdoc/rd/block_parser.rb', line 1618

def _reduce_54(val, _values, result)
 result = val
    result
end

#_reduce_55(val, _values, result) ⇒ Object



1623
1624
1625
1626
# File 'lib/rdoc/rd/block_parser.rb', line 1623

def _reduce_55(val, _values, result)
 result = val
    result
end

#_reduce_57(val, _values, result) ⇒ Object

reduce 56 omitted



1630
1631
1632
1633
# File 'lib/rdoc/rd/block_parser.rb', line 1630

def _reduce_57(val, _values, result)
 result = []
    result
end

#_reduce_6(val, _values, result) ⇒ Object



1355
1356
1357
1358
# File 'lib/rdoc/rd/block_parser.rb', line 1355

def _reduce_6(val, _values, result)
 result = val
    result
end

#_reduce_62(val, _values, result) ⇒ Object

reduce 61 omitted



1643
1644
1645
1646
1647
# File 'lib/rdoc/rd/block_parser.rb', line 1643

def _reduce_62(val, _values, result)
      result = paragraph [val[0]].concat(val[1])

    result
end

#_reduce_63(val, _values, result) ⇒ Object



1649
1650
1651
1652
1653
# File 'lib/rdoc/rd/block_parser.rb', line 1649

def _reduce_63(val, _values, result)
      result = paragraph [val[0]]

    result
end

#_reduce_64(val, _values, result) ⇒ Object



1655
1656
1657
1658
1659
# File 'lib/rdoc/rd/block_parser.rb', line 1655

def _reduce_64(val, _values, result)
      result = paragraph [val[0]].concat(val[1])

    result
end

#_reduce_65(val, _values, result) ⇒ Object



1661
1662
1663
1664
1665
# File 'lib/rdoc/rd/block_parser.rb', line 1661

def _reduce_65(val, _values, result)
      result = paragraph [val[0]]

    result
end

#_reduce_66(val, _values, result) ⇒ Object



1667
1668
1669
1670
1671
# File 'lib/rdoc/rd/block_parser.rb', line 1667

def _reduce_66(val, _values, result)
      result = [val[0]].concat(val[1])

    result
end

#_reduce_67(val, _values, result) ⇒ Object



1673
1674
1675
1676
# File 'lib/rdoc/rd/block_parser.rb', line 1673

def _reduce_67(val, _values, result)
 result.concat val[1]
    result
end

#_reduce_68(val, _values, result) ⇒ Object



1678
1679
1680
1681
# File 'lib/rdoc/rd/block_parser.rb', line 1678

def _reduce_68(val, _values, result)
 result = val[1]
    result
end

#_reduce_69(val, _values, result) ⇒ Object



1683
1684
1685
1686
# File 'lib/rdoc/rd/block_parser.rb', line 1683

def _reduce_69(val, _values, result)
 result = val
    result
end

#_reduce_71(val, _values, result) ⇒ Object

reduce 70 omitted



1690
1691
1692
1693
# File 'lib/rdoc/rd/block_parser.rb', line 1690

def _reduce_71(val, _values, result)
 result = []
    result
end

#_reduce_72(val, _values, result) ⇒ Object



1695
1696
1697
1698
# File 'lib/rdoc/rd/block_parser.rb', line 1695

def _reduce_72(val, _values, result)
 result = []
    result
end

#_reduce_8(val, _values, result) ⇒ Object

reduce 7 omitted



1362
1363
1364
1365
# File 'lib/rdoc/rd/block_parser.rb', line 1362

def _reduce_8(val, _values, result)
 result = val
    result
end

#_reduce_9(val, _values, result) ⇒ Object



1367
1368
1369
1370
# File 'lib/rdoc/rd/block_parser.rb', line 1367

def _reduce_9(val, _values, result)
 result = val
    result
end

#_reduce_none(val, _values, result) ⇒ Object



1700
1701
1702
# File 'lib/rdoc/rd/block_parser.rb', line 1700

def _reduce_none(val, _values, result)
  val[0]
end

#add_footnote(content) ⇒ Object

Adds footnote content to the document



1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
# File 'lib/rdoc/rd/block_parser.rb', line 1045

def add_footnote content
  index = @footnotes.length / 2 + 1

  footmark_link = "{^#{index}}[rdoc-label:footmark-#{index}:foottext-#{index}]"

  @footnotes << RDoc::Markup::Paragraph.new(footmark_link, ' ', *content)
  @footnotes << RDoc::Markup::BlankLine.new

  index
end

#add_label(label) ⇒ Object

Adds label label to the document



1059
1060
1061
1062
1063
# File 'lib/rdoc/rd/block_parser.rb', line 1059

def add_label label
  @labels[label] = true

  label
end

#content(values) ⇒ Object

Retrieves the content of values as a single String



1028
1029
1030
# File 'lib/rdoc/rd/block_parser.rb', line 1028

def content values
 values.map { |value| value.content }.join
end

#line_indexObject

Current line number



983
984
985
# File 'lib/rdoc/rd/block_parser.rb', line 983

def line_index
  @i
end

#next_tokenObject

Returns the next token from the document



751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
# File 'lib/rdoc/rd/block_parser.rb', line 751

def next_token # :nodoc:
  # preprocessing
  # if it is not in RD part
  # => method
  while @in_part != "rd"
    line = @src[@i]
    @i += 1 # next line

    case line
    # src end
    when false
      return [false, false]
    # RD part begin
    when /^=begin\s*(?:\bRD\b.*)?\s*$/
      if @in_part # if in non-RD part
        @part_content.push(line)
      else
        @in_part = "rd"
        return [:WHITELINE, "=begin\n"] # <= for textblockand
      end
    # non-RD part begin
    when /^=begin\s+(\w+)/
      part = $1
=begin # not imported to RDoc
      if @in_part # if in non-RD part
        @part_content.push(line)
      else
        @in_part = part if @tree.filter[part] # if filter exists
#  p "BEGIN_PART: #{@in_part}" # DEBUG
      end
=end
      @in_part = part
    # non-RD part end
    when /^=end(?:$|[\s\0\C-d\C-z])/
      if @in_part # if in non-RD part
=begin # not imported to RDoc
#  p "END_PART: #{@in_part}" # DEBUG
        # make Part-in object
        part = RDoc::RD::Part.new(@part_content.join(""), @tree, "r")
        @part_content.clear
        # call filter, part_out is output(Part object)
        part_out = @tree.filter[@in_part].call(part)

        if @tree.filter[@in_part].mode == :rd # if output is RD formatted
          subtree = parse_subtree(part_out.to_a)
        else # if output is target formatted
          basename = Tempfile.create(["rdtmp", ".#{@in_part}"], @tree.tmp_dir) do |tmpfile|
            tmpfile.print(part_out)
            File.basename(tmpfile.path)
          end
          subtree = parse_subtree(["=begin\n", "<<< #{basename}\n", "=end\n"])
        end
        @in_part = nil
        return [:SUBTREE, subtree]
=end
      end
    else
=begin # not imported to RDoc
      if @in_part # if in non-RD part
        @part_content.push(line)
      end
=end
    end
  end

  @current_indent = @indent_stack.join("")
  line = @src[@i]
  case line
  when false
    if_current_indent_equal("") do
      [false, false]
    end
  when /^=end/
    if_current_indent_equal("") do
      @in_part = nil
      [:WHITELINE, "=end"] # MUST CHANGE??
    end
  when /^\s*$/
    @i += 1 # next line
    return [:WHITELINE, ':WHITELINE']
  when /^\#/  # comment line
    @i += 1 # next line
    self.next_token()
  when /^(={1,4})(?!=)\s*(?=\S)/, /^(\+{1,2})(?!\+)\s*(?=\S)/
    rest = $'                    # '
    rest.strip!
    mark = $1
    if_current_indent_equal("") do
      return [:HEADLINE, [MARK_TO_LEVEL[mark], rest]]
    end
  when /^<<<\s*(\S+)/
    file = $1
    if_current_indent_equal("") do
      suffix = file[-3 .. -1]
      if suffix == ".rd" or suffix == ".rb"
        subtree = parse_subtree(get_included(file))
        [:SUBTREE, subtree]
      else
        [:INCLUDE, file]
      end
    end
  when /^(\s*)\*(\s*)/
    rest = $'                   # '
    newIndent = $2
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s" + newIndent)
        [:ITEMLISTLINE, rest]
      end
    end
  when /^(\s*)(\(\d+\))(\s*)/
    rest = $'                     # '
    mark = $2
    newIndent = $3
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s" * mark.size + newIndent)
        [:ENUMLISTLINE, rest]
      end
    end
  when /^(\s*):(\s*)/
    rest = $'                    # '
    newIndent = $2
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s#{$2}")
        [:DESCLISTLINE, rest]
      end
    end
  when /^(\s*)---(?!-|\s*$)/
    indent = $1
    rest = $'
    /\s*/ === rest
    term = $'
    new_indent = $&
    if_current_indent_equal(indent) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s\s\s" + new_indent)
        [:METHODLISTLINE, term]
      end
    end
  when /^(\s*)/
    if_current_indent_equal($1) do
      [:STRINGLINE, line]
    end
  else
    raise "[BUG] parsing error may occurred."
  end
end

#on_error(et, ev, _values) ⇒ Object

Raises a ParseError when invalid formatting is found

Raises:



967
968
969
970
971
972
973
974
975
976
977
978
# File 'lib/rdoc/rd/block_parser.rb', line 967

def on_error(et, ev, _values)
  prv, cur, nxt = format_line_num(@i, @i+1, @i+2)

  raise ParseError, <<Msg

RD syntax error: line #{@i+1}:
  #{prv}  |#{@src[@i-1].chomp}
  #{cur}=>|#{@src[@i].chomp}
  #{nxt}  |#{@src[@i+1].chomp}

Msg
end

#paragraph(value) ⇒ Object

Creates a paragraph for value



1035
1036
1037
1038
1039
1040
# File 'lib/rdoc/rd/block_parser.rb', line 1035

def paragraph value
  content = cut_off(value).join(' ').rstrip
  contents = @inline_parser.parse content

  RDoc::Markup::Paragraph.new(*contents)
end

#parse(src) ⇒ Object

Parses src and returns an RDoc::Markup::Document.



707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
# File 'lib/rdoc/rd/block_parser.rb', line 707

def parse src
  @src = src
  @src.push false

  @footnotes = []
  @labels    = {}

  # @i: index(line no.) of src
  @i = 0

  # stack for current indentation
  @indent_stack = []

  # how indented.
  @current_indent = @indent_stack.join("")

  # RDoc::RD::BlockParser for tmp src
  @subparser = nil

  # which part is in now
  @in_part = nil
  @part_content = []

  @in_verbatim = false

  @yydebug = true

  document = do_parse

  unless @footnotes.empty? then
    blankline = document.parts.pop

    document.parts << RDoc::Markup::Rule.new(1)
    document.parts.concat @footnotes

    document.parts.push blankline
  end

  document
end