原稿の縦書き整形スクリプトを修正
以前、半角英数字で書いた原稿を一発で縦書き用の体裁に整形するスクリプトを書きました。
縦書きフォーマット変更スクリプト修正版 - takepierrot Editor Note
Perlでの処理部分で、無意味にindexを使うとか、なかなかがんばっていたのですが、今考えると「tr演算子で変換すればいいじゃない?」と思ったわけです。
というわけで、もうちょいきれいになるようちょろっと修正してみました。
" 原稿を縦書き用にフォーマット func! Tategaki() range let str = getline(a:firstline, a:lastline) perl << EOF use utf8; use Encode; my $text = decode_utf8(VIM::Eval('str')); my $firstline = VIM::Eval('a:firstline'); my @list = (); foreach my $str (split /\n/, $text) { 1 while $str =~ s/([ 0-9a-zA-Z]+)/get_str($1)/e; 1 while $str =~ s/([ 0-9a-zA-Z]{6,})/get_str($1)/e; 1 while $str =~ s/^ \K([ 0-9a-zA-Z]{1,5})/get_str($1)/e; 1 while $str =~ s/(?<![0-9])([0-9]{2})(?![0-9])/get_str($1)/e; $str =~ s/^ /<e3><80><80>/; # 置換文字列は全角スペースが入ってます(文字化け? push @list, $str; } sub get_str { my $key = shift; if ($key =~ m|[ 0-9a-zA-Z]+|) { $key =~ tr/ 0-9a-zA-Z/ 0-9a-zA-Z/; } else { $key =~ tr/ 0-9a-zA-Z/ 0-9a-zA-Z/; } return $key; } $main::curbuf->Set($firstline, @list); EOF execute "normal " . a:lastline . "gg" endf
変な変数とかもやめました。だいぶすっきりした感じです。
使い方は前と同じです。
縦書き書籍の仕事がこないので、このスクリプトの出番があまりないのが残念です。
文庫本とかならちょっと書いたことはあるのですが……。