Options that we don’t handle are yielded. If the
block returns false the directive is restored to the text. If the block
returns nil or no block was given the directive is handled according to the
registered
directives. If a String was returned the
directive is replaced with the string.
If no matching directive was registered the
directive is restored to the text.
If code_object is given and the directive is unknown then the
directive’s parameter is set as metadata on the code_object.
See RDoc::CodeObject#metadata for details.
# File lib/rdoc/markup/pre_process.rb, line 98
def handle text, code_object = nil, &block
if RDoc::Comment === text then
comment = text
text = text.text
end
encoding = text.encoding if defined?(Encoding)
# regexp helper (square brackets for optional)
# $1 $2 $3 $4 $5
# [prefix][\]:directive:[spaces][param]newline
text.gsub!(/^([ \t]*(?:#|\/?\*)?[ \t]*)(\\?):(\w+):([ \t]*)(.+)?(\r?\n|$)/) do
# skip something like ':toto::'
next $& if $4.empty? and $5 and $5[0, 1] == ':'
# skip if escaped
next "#$1:#$3:#$4#$5\n" unless $2.empty?
# This is not in handle_directive because I didn't want to pass another
# argument into it
if comment and $3 == 'markup' then
next "#{$1.strip}\n" unless $5
comment.format = $5.downcase
next "#{$1.strip}\n"
end
handle_directive $1, $3, $5, code_object, encoding, &block
end
comment = text unless comment
self.class.post_processors.each do |handler|
handler.call comment, code_object
end
text
end