Sha256: 561f5bd3ed7d41383dd57897f5e749f00e85b964612149cd2bc4f22b2570509a

Contents?: true

Size: 1.52 KB

Versions: 11

Compression:

Stored size: 1.52 KB

Contents

require 'jsduck/util/html'
require 'jsduck/logger'
require 'pp'

module JsDuck
  module Inline

    # Implementation of inline tag {@img}
    class Img
      # Instance of Img::Dir or Img::DirSet that's used for looking up
      # image information.
      attr_accessor :images

      # Sets up instance to work in context of particular doc object.
      # Used for error reporting.
      attr_accessor :doc_context

      def initialize(opts={})
        @tpl = opts[:img_tpl] || '<img src="%u" alt="%a" width="%w" height="%h"/>'

        @re = /\{@img\s+(\S*?)(?:\s+(.+?))?\}/m
      end

      # Takes StringScanner instance.
      #
      # Looks for inline tag at the current scan pointer position, when
      # found, moves scan pointer forward and performs the apporpriate
      # replacement.
      def replace(input)
        if input.check(@re)
          input.scan(@re).sub(@re) { apply_tpl($1, $2) }
        else
          false
        end
      end

      # applies the image template
      def apply_tpl(url, alt_text)
        img = @images.get(url)
        if !img
          Logger.warn(:image, "Image #{url} not found.", @doc_context[:filename], @doc_context[:linenr])
          img = {}
        end

        @tpl.gsub(/(%\w)/) do
          case $1
          when '%u'
            img[:relative_path]
          when '%a'
            Util::HTML.escape(alt_text||"")
          when '%w'
            img[:width]
          when '%h'
            img[:height]
          else
            $1
          end
        end
      end
    end

  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
jsduck-4.10.4 lib/jsduck/inline/img.rb
jsduck-4.10.3 lib/jsduck/inline/img.rb
jsduck-4.10.2 lib/jsduck/inline/img.rb
jsduck-4.10.1 lib/jsduck/inline/img.rb
jsduck-4.10.0 lib/jsduck/inline/img.rb
jsduck-4.9.0 lib/jsduck/inline/img.rb
jsduck-4.8.0 lib/jsduck/inline/img.rb
jsduck-4.7.1 lib/jsduck/inline/img.rb
jsduck-4.7.0 lib/jsduck/inline/img.rb
jsduck-5.0.0.beta01 lib/jsduck/inline/img.rb
jsduck-4.6.2 lib/jsduck/inline/img.rb