def parse data = nil
if @parsed
self
else
doc = self
@reader = PreprocessorReader.new doc, data, Reader::Cursor.new(@attributes['docfile'], @base_dir) if data
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.treeprocessors?
exts.treeprocessors.each do |ext|
if (result = ext.process_method[doc]) && Document === result && result != doc
doc = result
end
end
end
@parsed = true
doc
end
end