Here’s a basic toolkit for drawing Mexican blankets in xterm.
Unfortunately, it only works in xterm and the like, and only in
those compiled with 256 color support, because the control codes are
so arcane. In fact, the code is quite simple - this quiz is really
more a matter of presentation, and I hope to find a nicer way to draw
this.
Some stuff to be improved on:
- Ugly (better if you turn the font size way down and make ARGV[0]
large) - Xterm-only
- The pattern is entirely hardcoded - I have to input all colors, the
order of dividers, etc. A more elgant solution would know something
about color fading and might be able to make some aesthetic choices on
its own. I really didn’t want to have to implement that in xterm,
though!
def gradient(color_list)
old = [color_list[0]]
pattern = old5
(1…color.length).each do |i|
new = [color_list[i]]
1.upto(5) { |j| pattern += newj + old*(5-j) }
old = new
end
return pattern
end
def divider(color)
[color.to_s]*5
end
def mexico
[“28”]*4 + [“15”]*4 + [“88”]*4
end
generate pattern
pattern = gradient(%w[16 22 28 34 40 46])
pattern += divider(0) #divider
pattern += gradient(%w[21 20 19 18 17 16])
pattern += mexico
pattern += gradient(%w[196 197 198 199 200 201])
pattern += divider(0)
pattern += gradient(%w[226 220 214 208 202 196])
width of the flag from CLI
flagwidth = ARGV[0] ? ARGV[0].to_i : 80
translate to xterm (256-color) control codes, and then print
pattern.collect! {|i| "\033[48;5;#{i}m "}
while (pattern.length >= flagwidth) do
puts pattern[0…flagwidth].join + “\033[0m”
pattern.slice!(0)
end