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 ? k == 9 ? 8 - r % 8 : k == 10 || k == 13 ? [u += 1, -r][1] : 0 : 1; 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; m = [m, q += (j * p).round].min; n = [n, p -= (i * q).round].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 } * "")