a = Math::PI / 13; ' '; eval(%w{ r = u = b = y = 0; %{(ct;c}; a *= ARGV.size > 0 ? -1 : 1; z = []; ARGF.each_line{|i| i.each_grapheme_cluster{|j| if (k = j.ord) < 33; r += k == 32 ? 1 : k == 9 ? 8 - r % 8 : k == 10 ? -r : 0; u += k == 10 ? 1 : 0; else; z += [[u, r, j]]; b += r; y += u; r += 1; end } }; if (s = z.size) > 0; b /= s; y /= s; m, n = z[0]; i = Math::tan(a / 2); j = Math::sin(a); z.map!{|d| p = d[1] - b; q = d[0] - y; p -= (i * q).round; q += (j * p).round; p -= (i * q).round; n = [n, p].min; m = [m, q].min; [q, p, d[2]] }; r = n; u = m; z.sort.each{|d| p, b = d; r = (u < p) ? n : r; print "\n" * (p - u), "\40" * (b - r), d[2]; u = p; r = b + 1 }; print "\n"; end } * "")