def parse data = nil
if @parsed
self
else
doc = self
if data
@reader = PreprocessorReader.new doc, data, (Reader::Cursor.new @attributes['docfile'], @base_dir), :normalize => true
end
if (exts = @parent_document ? nil : @extensions) && exts.preprocessors?
exts.preprocessors.each do |ext|
@reader = ext.process_method[doc, @reader] || @reader
end
end
Parser.parse @reader, doc, :header_only => @options[:parse_header_only]
restore_attributes
if exts && exts.tree_processors?
exts.tree_processors.each do |ext|
if (result = ext.process_method[doc]) && Document === result && result != doc
doc = result
end
end
end
@parsed = true
doc
end
end