RD format parser for inline markup such as emphasis, links, footnotes, etc.
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
Creates a new RDoc::RD::Inline for the
rdoc
markup and the raw reference
# File lib/rdoc/rd/inline_parser.rb, line 238
def inline rdoc, reference = rdoc
RDoc::RD::Inline.new rdoc, reference
end
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
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
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
message = "RD syntax error: line #{@block_parser.line_index - lines_of_rest}:
...#{prev_words} #{(ev||'')} #{next_words_on_error()} ...
"
message << " " * at + "^" * (ev ? ev.length : 0) + "\n"
raise ParseError, message
end
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 %r#{Regexp.quote(ev)}$/ =~ pre
pre = $`
end
last_line(pre)
end
/ | Search |
---|---|
? | Show this help |