lib/asciidoctor/reducer/tree_processor.rb in asciidoctor-reducer-1.0.0.alpha.1 vs lib/asciidoctor/reducer/tree_processor.rb in asciidoctor-reducer-1.0.0.alpha.2
- old
+ new
@@ -2,24 +2,27 @@
module Asciidoctor::Reducer
class TreeProcessor < ::Asciidoctor::Extensions::TreeProcessor
def process doc
return if doc.options[:reduced]
- unless (inc_replacements = doc.reader.instance_variable_get :@x_include_replacements).empty?
- resolved_source_lines = doc.source_lines.dup
+ inc_replacements = doc.reader.instance_variable_get :@x_include_replacements
+ unless inc_replacements.length == 1 && inc_replacements[0][:drop].empty?
+ inc_replacements[0][:lines] = doc.source_lines.dup
inc_replacements.reverse_each do |it|
- # when into is -1, it indicates this is a top-level include
- target_lines = (into = it[:into]) < 0 ? resolved_source_lines : inc_replacements[into][:lines]
- # adds extra bit of assurance that we're replacing the correct line
- if target_lines[(index = it[:index])] == it[:replace]
- target_lines[index..index] = it[:lines]
+ if (into = it[:into])
+ target_lines = inc_replacements[into][:lines]
+ # adds extra bit of assurance that we're replacing the correct line
+ next unless target_lines[(index = it[:index])] == it[:replace]
end
+ lines = it[:lines]
+ unless (drop = it[:drop]).empty?
+ drop.reverse_each {|idx| ::Array === idx ? (lines[idx[0]] = idx[1]) : (lines.delete_at idx) }
+ end
+ target_lines[index] = lines if target_lines
end
# WARNING: if include directives remain that can still be resolved, the sourcemap won't match the source lines
- doc = ::Asciidoctor.load resolved_source_lines, (doc.options.merge sourcemap: true, reduced: true)
+ doc = ::Asciidoctor.load inc_replacements[0][:lines].flatten, (doc.options.merge reduced: true)
end
- ::Asciidoctor::LoggerManager.logger = ::Asciidoctor::LoggerManager.instance_variable_get :@original_logger
- ::Asciidoctor::LoggerManager.remove_instance_variable :@original_logger
doc
end
end
end