Racc::Parser
RD
format parser for headings, paragraphs, lists, verbatim sections that exist as blocks.
Creates a new RDoc::RD::BlockParser
. Use parse
to parse an rd-format document.
# File rdoc/rd/block_parser.rb, line 53 def initialize @inline_parser = RDoc::RD::InlineParser.new self @include_path = [] # for testing @footnotes = [] @labels = {} end
Adds footnote content
to the document
# File rdoc/rd/block_parser.rb, line 397 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 rdoc/rd/block_parser.rb, line 411 def add_label label @labels[label] = true label end
Retrieves the content of values
as a single String
# File rdoc/rd/block_parser.rb, line 380 def content values values.map { |value| value.content }.join end
Current line number
# File rdoc/rd/block_parser.rb, line 335 def line_index @i end
Raises a ParseError when invalid formatting is found
# File rdoc/rd/block_parser.rb, line 319 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 rdoc/rd/block_parser.rb, line 387 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 rdoc/rd/block_parser.rb, line 65 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