resources/asciidoctor/lib/copy_images/extension.rb (29 lines of code) (raw):
# frozen_string_literal: true
require 'asciidoctor/extensions'
require_relative '../delegating_converter'
require_relative '../log_util'
require_relative 'copier'
##
# Copies images that are referenced into the same directory as the
# output files.
#
# It finds the images by looking in a comma separated list of directories
# defined by the `resources` attribute.
#
# It can also be configured to copy the images that number callout lists by
# setting `copy-callout-images` to the file extension of the images to copy.
#
# It can also be configured to copy the that decoration admonitions by
# setting `copy-admonition-images` to the file extension of the images
# to copy.
module CopyImages
def self.activate(registry)
DelegatingConverter.setup(registry.document) { |doc| Converter.new doc }
end
##
# A Converter implementation that copies images as it sees them.
class Converter < DelegatingConverter
include LogUtil
def initialize(delegate)
super(delegate)
@copier = Copier.new
end
#### "Conversion" methods
def convert_image(node)
copy_image node, node.image_uri(node.attr('target'))
yield
end
def convert_inline_image(node)
# Inline images aren't "real" and don't have a source_location so we have
# to get the location from the parent.
copy_image node.parent, node.image_uri(node.target)
yield
end
#### Helper methods
def copy_image(node, uri)
return unless uri
return if Asciidoctor::Helpers.uriish? uri # Skip external images
@copier.copy_image node, uri
end
end
end