module Mireru::Widget

Public Instance Methods

binary?(file) click to toggle source
# File lib/mireru/widget.rb, line 102
def binary?(file)
  if /\.(la|lo|o|so|a|dll|exe|msi|tar|gz|zip|7z|lzh|rar|iso)\z/i =~ file
    true
  else
    bytes = File.read(file, 512)
    return false if bytes.nil?
    return false if utf16?(bytes)
    bytes.count("\x00-\x07\x0b\x0e-\x1a\x1c-\x1f") > (bytes.size / 10)
  end
end
check() { || ... } click to toggle source

TODO: improve

# File lib/mireru/widget.rb, line 65
def check
  begin
    yield
  rescue LoadError
    $stderr.puts("Warning: #{$!.message}")
  end
end
create(file, width, height, chupa=false) click to toggle source
# File lib/mireru/widget.rb, line 24
def create(file, width, height, chupa=false)
  if chupa
    check do
      require "mireru/widget/extracted_text"
      return Widget::ExtractedText.new(file)
    end
  end

  if image?(file)
    return Widget::Image.new(file, width, height)
  end

  if video?(file) or music?(file)
    check do
      require "mireru/widget/video"
      return Widget::Video.new(file)
    end
  end

  if pdf?(file)
    check do
      require "mireru/widget/pdf"
      return Widget::PDF.new(file)
    end
  end

  if svg?(file)
    check do
      require "mireru/widget/svg"
      return Widget::SVG.new(file)
    end
  end

  if text?(file)
    return Widget::Text.new(file)
  end

  return Widget::Binary.new(file)
end
document?(file) click to toggle source
# File lib/mireru/widget.rb, line 93
def document?(file)
  /\.(odt|ods|odp|doc|xls|ppt|docx|xlsx|pptx)\z/i =~ file
end
image?(file) click to toggle source
# File lib/mireru/widget.rb, line 73
def image?(file)
  /\.(png|jpe?g|gif|ico|ani|bmp|pnm|ras|tga|tiff|xbm|xpm)\z/i =~ file
end
music?(file) click to toggle source
# File lib/mireru/widget.rb, line 77
def music?(file)
  /\.(og[ag]|wav|acc|mp3|m4a|wma|flac|tta|aiff|ape|tak)\z/i =~ file
end
pdf?(file) click to toggle source
# File lib/mireru/widget.rb, line 85
def pdf?(file)
  /\.pdf\z/i =~ file
end
svg?(file) click to toggle source
# File lib/mireru/widget.rb, line 89
def svg?(file)
  /\.svg\z/i =~ file
end
text?(file) click to toggle source
# File lib/mireru/widget.rb, line 97
def text?(file)
  return false if binary?(file)
  true
end
utf16?(bytes) click to toggle source
# File lib/mireru/widget.rb, line 113
def utf16?(bytes)
  # TODO: simplify
  (bytes.start_with?("\xff\xfe".force_encoding("ASCII-8BIT")) or
     bytes.start_with?("\xfe\xff".force_encoding("ASCII-8BIT"))) and
    bytes.count("\x01-\x07\x0b\x0e-\x1a\x1c-\x1f") < (bytes.size / 20)
end
video?(file) click to toggle source
# File lib/mireru/widget.rb, line 81
def video?(file)
  /\.(ogm|mp4|m4v|flv|mpe?g2?|ts|mov|avi|divx|mkv|wmv|asf|wmx)\z/i =~ file
end