Sha256: 1991704f33d8897ef5ac02bfe5f49395ed742444ed555d36270768e1596c2fe2
Contents?: true
Size: 1.76 KB
Versions: 2
Compression:
Stored size: 1.76 KB
Contents
$:.unshift(File.expand_path("../", __FILE__)) require "ostruct" module Lays Layer = Struct.new(:content, :transparent_char, :space_char) do def initialize(attrs={}) attrs.each do |attr, val| self.send("self.#{attr}=", val) end end end def []=(layer, content) set_layer(layer) layers[layer].content = content @result = nil end def [](layer) set_layer(layer) layers[layer] end def set_layer(id) layers[id] ||= Layer.new end def layers @layers ||= {} end def to_s @result ||= render end def render result = [] lays = layers.sort {|a, b| a[0] <=> b[0] } lays.each do |key, layer| content = layer.content content.split("\n").each_with_index.map do |line, i| line.each_char.each_with_index do |c, j| result[i] ||= [] if space_char_for(layer, c) result[i][j] = " " elsif !transparent_char_for(layer, c) result[i][j] = c elsif key == lays.first.first result[i][j] = " " end end end end result.map {|a|a.join}.join("\n") end def height layers.count end def width layers.max { |a, b| a.last.content.size <=> b.last.content.size }.last.content.size end def transparent_char=(char) @transparent_char = char @space_char = nil end def transparent_char @transparent_char ||= " " end def transparent_char_for(layer, char) transparent = layer.transparent_char || transparent_char char == transparent end def space_char=(char) @space_char = char @transparent_char = nil end def space_char @space_char end def space_char_for(layer, char) char == layer.space_char || char == space_char end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
lays-0.1.2 | lib/lays.rb |
lays-0.1.1 | lib/lays.rb |