Sha256: f1cd73f82b88c828e0d8202a0ea045e7286f7314a0567709cdec4031f9cedda9

Contents?: true

Size: 1.67 KB

Versions: 4

Compression:

Stored size: 1.67 KB

Contents

module Artii
module Figlet

  class Smusher

    def initialize(font)
      Artii.raise_19_incompat
      @font = font
    end

    def [](result)
      todo = false

      @font.height.times do |j|
        result[j] = result[j].sub(pattern) { todo, x = callback(todo, $1, $2); x }
      end
      @font.height.times do |j|
        result[j] = if todo
          result[j].sub(/\s\x00(?!$)|\x00\s/, '').sub(/\x00(?!$)/, '')
        else
          result[j].sub(/\x00(?!$)/, '')
        end
      end
    end

    def pattern
      @pattern ||= /([^#{@font.hard_blank}\x00\s])\x00([^#{@font.hard_blank}\x00\s])/
    end

    def symbols
      @@symbols ||= {
        24 => '|/\\[]{}()<>',
        8 => {'[' => ']', ']' => '[', '{' => '}', '}' => '{', '(' => ')', ')' => '('},
        16 => {"/\\" => '|', "\\/" => 'Y', '><' => 'X'}
      }
    end

    def old_layout?(n)
      @font.old_layout & n > 0
    end

    def callback(s, a, b)
      combined = a + b
      
      if old_layout?(1) && a == b
        return true, a
      elsif old_layout?(2) && ('_' == a && symbols[24].include?(b) || '_' == b && symbols[24].include?(a))
        return true, a
      elsif old_layout?(4) && ((left = symbols[24].index(a)) && (right = symbols[24].index(b)))
        return true, (right > left ? b : a)
      elsif old_layout?(8) && (symbols[8].has_key?(b) && symbols[8][b] == a)
        return true, '|'
      elsif old_layout?(16) && symbols[16].has_key?(combined)
        return true, symbols[16][combined]
      elsif old_layout?(32) && (a == b && @font.hard_blank == a)
        return true, @font.hard_blank
      else
        return s, "#{a}\00#{b}"
      end
    end

  end

end # module Figlet
end # module Artii

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
artii-1.0.2 lib/figlet/smusher.rb
artii-1.0.1 lib/figlet/smusher.rb
artii-1.0.0 lib/figlet/smusher.rb
artii-0.0.3 lib/figlet/smusher.rb