Method: RDoc::Markup::PreProcess#handle
- Defined in:
- lib/rdoc/markup/pre_process.rb
#handle(text, code_object = nil, &block) ⇒ Object
Look for directives in the given text
.
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.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/rdoc/markup/pre_process.rb', line 99 def handle text, code_object = nil, &block first_line = 1 if RDoc::Comment === text then comment = text text = text.text first_line = comment.line || 1 end # regexp helper (square brackets for optional) # $1 $2 $3 $4 $5 # [prefix][\]:directive:[spaces][param]newline text = text.lines.map.with_index(first_line) do |line, num| next line unless line =~ /\A([ \t]*(?:#|\/?\*)?[ \t]*)(\\?):([\w-]+):([ \t]*)(.+)?(\r?\n|$)/ # 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, text.encoding, num, &block end.join if comment then comment.text = text else comment = text end self.class.post_processors.each do |handler| handler.call comment, code_object end text end |