是非はさておき、入れるのであれば自動で入れたい。というわけでこちら。
portal shit! : 半角スペース入れてますか?半角スペース入れるべき、入れないべき?
spacer.pl
#!/usr/local/bin/perl
use strict;
use warnings;
use Encode;
my $east = qr/(?!\p{M})(?:\p{Han}|\p{Katakana}|\p{Hiragana})/;
my $west = qr/(?!\p{M})(?:\p{Latin}|\p{Greek}|\p{Cyrillic})/;
binmode STDOUT, ':utf8';
while(<>){
$_ = decode 'utf8', $_;
s/($east)($west)/$1 $2/g;
s/($west)($east)/$1 $2/g;
print;
}
ここでは、入出力ともUTF-8を想定しています。
これを使うと、
アップル - Mac OS X - 概要* Dashboardで、便利なユーティリティウィジェットに手早くアクセス。用が済んだら即座に隠せます。 * Automatorが反復作業を喜んで代行。あなたは単調な作業とは無縁に。 * VoiceOverの高度な技術で、Macが新着メールを読み上げ。 * どんなウインドウもExposéで瞬時に見つけて表示。 * メニューバーはシステムワイド。困ったときには各ウインドウからシステムコントロールにアクセスして選択。
が、
* Dashboard で、便利なユーティリティウィジェットに手早くアクセス。用が済んだら即座に隠せます。 * Automator が反復作業を喜んで代行。あなたは単調な作業とは無縁に。 * VoiceOver の高度な技術で、Mac が新着メールを読み上げ。 * どんなウインドウも Exposé で瞬時に見つけて表示。 * メニューバーはシステムワイド。困ったときには各ウインドウからシステムコントロールにアクセスして選択。
となります。
全角文字との境にはスペースが入りますが、句読点の前後はそのままです。また、Exposé のようにアクセントが入っても正しく処理します。
見ての通り、Character Property を使っているので、現時点では Perl 5 以外に移植するのはちょっと難しいですね。この手の微妙な調整をしたい場合は、今のところ唯一の選択肢です。
仕組みを知りたい人は、perlunicodeを参照のこと。
Dan the Unicoding Perl Monger
Geckoも対応してくれれば…。