Class: RDoc::RD::InlineParser
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Racc::Parser
|
|
Instance Chain:
self,
Racc::Parser
|
|
Inherits: |
Racc::Parser
|
Defined in: | lib/rdoc/rd/inline_parser.rb |
Overview
::RDoc::RD format parser for inline markup such as emphasis, links, footnotes, etc.
Class Method Summary
-
.new(block_parser) ⇒ InlineParser
constructor
Creates a new parser for inline markup in the rd format.
Instance Method Summary
-
#inline(rdoc, reference = rdoc)
Creates a new Inline for the
rdoc
markup and the rawreference
-
#next_token
Returns the next token from the inline text.
-
#next_words_on_error
Returns words following an error.
-
#on_error(et, ev, values)
Raises a ParseError when invalid formatting is found.
-
#parse(inline)
Parses the #inline text from ::RDoc::RD format into ::RDoc::RDoc format.
-
#prev_words_on_error(ev)
Returns words before the error.
-
#last_line(src)
private
Returns the last line of
src
Constructor Details
.new(block_parser) ⇒ InlineParser
Creates a new parser for inline markup in the rd format. The block_parser
is used to for footnotes and labels in the inline text.
# File 'lib/rdoc/rd/inline_parser.rb', line 89
def initialize block_parser @block_parser = block_parser end
Instance Method Details
#inline(rdoc, reference = rdoc)
Creates a new Inline for the rdoc
markup and the raw reference
#last_line(src) (private)
Returns the last line of src
# File 'lib/rdoc/rd/inline_parser.rb', line 215
def last_line(src) if n = src.rindex("\n") src[(n+1) .. -1] else src end end
#next_token
Returns the next token from the inline text
# File 'lib/rdoc/rd/inline_parser.rb', line 107
def next_token return [false, false] if @src.eos? # p @src.rest if @yydebug if ret = @src.scan(EM_OPEN_RE) @pre << ret [:EM_OPEN, ret] elsif ret = @src.scan(EM_CLOSE_RE) @pre << ret [:EM_CLOSE, ret] elsif ret = @src.scan(CODE_OPEN_RE) @pre << ret [:CODE_OPEN, ret] elsif ret = @src.scan(CODE_CLOSE_RE) @pre << ret [:CODE_CLOSE, ret] elsif ret = @src.scan(VAR_OPEN_RE) @pre << ret [:VAR_OPEN, ret] elsif ret = @src.scan(VAR_CLOSE_RE) @pre << ret [:VAR_CLOSE, ret] elsif ret = @src.scan(KBD_OPEN_RE) @pre << ret [:KBD_OPEN, ret] elsif ret = @src.scan(KBD_CLOSE_RE) @pre << ret [:KBD_CLOSE, ret] elsif ret = @src.scan(INDEX_OPEN_RE) @pre << ret [:INDEX_OPEN, ret] elsif ret = @src.scan(INDEX_CLOSE_RE) @pre << ret [:INDEX_CLOSE, ret] elsif ret = @src.scan(REF_OPEN_RE) @pre << ret [:REF_OPEN, ret] elsif ret = @src.scan(REF_CLOSE_RE) @pre << ret [:REF_CLOSE, ret] elsif ret = @src.scan(FOOTNOTE_OPEN_RE) @pre << ret [:FOOTNOTE_OPEN, ret] elsif ret = @src.scan(FOOTNOTE_CLOSE_RE) @pre << ret [:FOOTNOTE_CLOSE, ret] elsif ret = @src.scan(VERB_OPEN_RE) @pre << ret [:VERB_OPEN, ret] elsif ret = @src.scan(VERB_CLOSE_RE) @pre << ret [:VERB_CLOSE, ret] elsif ret = @src.scan(BAR_RE) @pre << ret [:BAR, ret] elsif ret = @src.scan(QUOTE_RE) @pre << ret [:QUOTE, ret] elsif ret = @src.scan(SLASH_RE) @pre << ret [:SLASH, ret] elsif ret = @src.scan(BACK_SLASH_RE) @pre << ret [:BACK_SLASH, ret] elsif ret = @src.scan(URL_RE) @pre << ret [:URL, ret] elsif ret = @src.scan(OTHER_RE) @pre << ret [:OTHER, ret] else ret = @src.rest @pre << ret @src.terminate [:OTHER, ret] end end
#next_words_on_error
Returns words following an error
# File 'lib/rdoc/rd/inline_parser.rb', line 227
def next_words_on_error if n = @src.rest.index("\n") @src.rest[0 .. (n-1)] else @src.rest end end
#on_error(et, ev, values)
Raises a ParseError when invalid formatting is found
# File 'lib/rdoc/rd/inline_parser.rb', line 187
def on_error(et, ev, values) lines_of_rest = @src.rest.lines.to_a.length prev_words = prev_words_on_error(ev) at = 4 + prev_words.length = <<-MSG RD syntax error: line #{@block_parser.line_index - lines_of_rest}: #...#{prev_words} #{(ev||'')} #{next_words_on_error()} ... MSG << " " * at + "^" * (ev ? ev.length : 0) + "\n" raise ParseError, end
#parse(inline)
Parses the #inline text from ::RDoc::RD format into ::RDoc::RDoc format.
#prev_words_on_error(ev)
Returns words before the error
# File 'lib/rdoc/rd/inline_parser.rb', line 204
def prev_words_on_error(ev) pre = @pre if ev and /#{Regexp.quote(ev)}$/ =~ pre pre = $` end last_line(pre) end