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