2007年01月15日 05:00 [Edit]

perl - 半角スペースを自動で入れる

camel

是非はさておき、入れるのであれば自動で入れたい。というわけでこちら。

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


この記事へのトラックバックURL

この記事へのトラックバック
日本語と半角英数字の間にスペースを入れるという話題 [1] 現時点では Perl 5 以外に移植するのはちょっと難しいですね。 とのことなんですが、ICU [2] を使える環境(ICU4C へのバインディングがある言語ないし Java ライブラリを利用できる言語)であれば同じようにで...
Scala + ICU で日本語と半角英数字の間にスペースを入れる【Rainy Day Codings】at 2007年01月16日 01:02
なんか半年〜1年くらい前にも似た話題を見たな…。と思ったら今回のエントリの中でもまさにそれがリンクされてた。 自分はアルファベットの前後には半角スペース入れる派で、4〜5年前から習慣的に行っているので、もうすっかり手に染みついて何も考えなくても自然に半角スペ...
半角スペース入れてますか?@portal shit!【[ぴ]】at 2007年01月16日 00:48
この記事へのコメント
>text-autospace
Geckoも対応してくれれば…。
Posted by 通りすがり at 2007年01月16日 01:59
わざわざperlなんて使わなくても

text-autospace:ideograph-alpha;
 
Posted by speedy at 2007年01月16日 00:21
Perlで対応できるのですね。早速ターミナルを動かしてspacer.plを実行してみましたがIT弱者なのでよく分からず。勉強し直して試してみたいと思います。ありがとうございました。
Posted by 森井ゴンザレス at 2007年01月15日 23:41