Graph Easyの使い方
Graph Easyとは
テキストベースで作成したコードから、アスキーアートの状態遷移図とか作れるツール。
こんな感じのコードから...。
1[Alice] -> [Bob]
こんな感じのアスキーアートを作れる。
1+-------+ +-----+
2| Alice | --> | Bob |
3+-------+ +-----+
インストール
Perlのパッケージマネージャであるcpanを使用してインストールする。
1cpan install Graph::Easy
使い方
以下のコマンドを実行する。
1graph-easy <ソースファイル名>
より詳細については、以下の記事が参考になる。
残念なところ
全角文字も、半角の幅の長さで計算されている。 そのため、以下のようにアスキーアートが崩れてしまう。
1このコードが...
2[あ]
3
4こんなふうになってしまう...
5+---+
6| あ |
7+---+
一応、以下の記事で紹介されているパッチを使えば良さそうだけど...正直そこまでやりたくない...。
本を読む Perlでカラム数単位のlengthとsubstrを作ってみる
暫定の対処
自分の用途としては、Vim上で編集しているときにちょっとしたアスキーアートを作成するために 使う程度なので、以下のキーマッピングを使うことでとりあえずは満足している。 (かなりひどい対応だが、今の所それほど問題になっていない)
1vnoremap ge :s/[^\x01-\x7E]/&薔/ge<CR> \| gv:!graph-easy<CR> \| :'[,']s/薔//ge<CR>
このキーマッピングを使うと以下の動画のように、選択範囲のテキストに対してGrapy::Easyの 変換を適用できる。(補足:Asciinemaでのフォントの関係上、若干ずれているように見えるが実際にはちゃんとできている。)
このキーマッピングでは以下のような処理を行っている。
:s/[^\x01-\x7E]/&薔/ge<CR>の部分。 選択範囲の全角文字([^\x01-\x7E]という正規表現に一致するもの)の直後に「薔」という 文字を追加して、全角文字の横幅を無理やり文字2つ分にする。 (なお、「薔」という文字は別に他のものでも構わないが、自分が絶対に使わないであろう文字を暫定で選んだ)
1このテキストが
2[おはよう]
3
4以下のように変換される
5[お薔は薔よ薔う薔]
gv:!graph-easy<CR>の部分。 先程選択していた範囲のテキストを標準入力としてgraph-easyコマンドに与えて、 その出力結果でもとのテキストを置き換える。
1このテキストが
2[お薔は薔よ薔う薔]
3
4以下のように変換される
5+----------+
6| お薔は薔よ薔う薔 |
7+----------+
:'[,']s/薔//ge<CR>の部分。 「1.」のときに横幅の帳尻合わせのために追加した文字を削除する。
1このテキストが
2[お薔は薔よ薔う薔]
3
4以下のように変換される
5+----------+
6| おはよう |
7+----------+
参考
Categories: