visual_widthというgemを書いた
UnicodeのEast Asian Width (東アジアの文字幅)特性を扱うgemを書いた。CPANの Unicode::EastAsianWidth, Text::VisualWIdth::PP, Text::UnicodeTable::Simpleの機能をマージしたようなものになってる。文字特性のデータはUnicode仕様書から自動生成している。
ターミナルにさくっとテーブルを書きたいときは日本語でもくずれないので便利かも。
# VisualWidth::Table require 'visual_width/table' t = VisualWidth::Table.new( style: [ { align: :center, width: 10 }, { align: :center, width: 14 }, { align: :left, width: 28 }, ], header: ['Title', 'Author', 'Beginning'], ) # cf. http://www.benricho.org/famous_novel/ rows = [ ['蜘蛛の糸', '芥川 龍之介', 'ある日の事でございます。 御釈迦様は極楽の 蓮池のふちを、独りでぶらぶら御歩きになっていらっしゃいました。'], ['こころ', '夏目 漱石', '私はその人を常に先生と呼んでいた。だからここでもただ先生と書くだけで本名は打ち明けない。'], ['人間失格', '太宰 治', '私は、その男の写真を三葉、見たことがある。'] ] puts t.render(rows)
reuslt(ブラウザでは崩れて見えるがターミナルだとちゃんと表示されるはず):
+------------+----------------+------------------------------+ | Title | Author | Beginning | +------------+----------------+------------------------------+ | 蜘蛛の糸 | 芥川 龍之介 | ある日の事でございます。 御 | | | | 釈迦様は極楽の 蓮池のふちを | | | | 、独りでぶらぶら御歩きになっ | | | | ていらっしゃいました。 | | こころ | 夏目 漱石 | 私はその人を常に先生と呼んで | | | | いた。だからここでもただ先生 | | | | と書くだけで本名は打ち明けな | | | | い。 | | 人間失格 | 太宰 治 | 私は、その男の写真を三葉、見 | | | | たことがある。 | +------------+----------------+------------------------------+