class RDoc::RD::BlockParser

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

Attributes

Footnotes for this document

Path to find included files in

Labels for items in this document

Public Class Methods

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

# 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

Public Instance Methods

Adds footnote content to the document

# 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

Adds label label to the document

# File lib/rdoc/rd/block_parser.rb, line 1059
def add_label label
  @labels[label] = true

  label
end

Retrieves the content of values as a single String

# File lib/rdoc/rd/block_parser.rb, line 1028
def content values
 values.map { |value| value.content }.join
end

Current line number

# File lib/rdoc/rd/block_parser.rb, line 983
def line_index
  @i
end

Raises a ParseError when invalid formatting is found

# 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

Creates a paragraph for value

# 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

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

# 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