eval %w{ a = Math::PI / 13 * (ARGV.size > 0 ? -1 : 1); z = []; r = u = b = y = 0; 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); z.map!{|d| p = d[1] - b; q = d[0] - y; p -= (i * q).round; q += (Math::sin(a) * 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, q = d; r = (u < p) ? n : r; print "\n" * (p - u), "\40" * (q - r), d[2]; u = p; r = q + 1 }; print "\n"; end } * ""