2007年01月15日 05:00 [Edit]
perl - 半角スペースを自動で入れる
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
Posted by dankogai at 05:00│Comments(3)│TrackBack(2)
この記事へのトラックバックURL
この記事へのトラックバック
なんか半年〜1年くらい前にも似た話題を見たな…。と思ったら今回のエントリの中でもまさにそれがリンクされてた。
自分はアルファベットの前後には半角スペース入れる派で、4〜5年前から習慣的に行っているので、もうすっかり手に染みついて何も考えなくても自然に半角スペ...
半角スペース入れてますか?@portal shit!【[ぴ]】at 2007年01月16日 00:48
日本語と半角英数字の間にスペースを入れるという話題 [1]
現時点では Perl 5 以外に移植するのはちょっと難しいですね。
とのことなんですが、ICU [2] を使える環境(ICU4C へのバインディングがある言語ないし Java ライブラリを利用できる言語)であれば同じようにで...
Scala + ICU で日本語と半角英数字の間にスペースを入れる【Rainy Day Codings】at 2007年01月16日 01:02
この記事へのコメント
Perlで対応できるのですね。早速ターミナルを動かしてspacer.plを実行してみましたがIT弱者なのでよく分からず。勉強し直して試してみたいと思います。ありがとうございました。
Posted by 森井ゴンザレス at 2007年01月15日 23:41
わざわざperlなんて使わなくても
text-autospace:ideograph-alpha;
text-autospace:ideograph-alpha;
Posted by speedy at 2007年01月16日 00:21
>text-autospace
Geckoも対応してくれれば…。
Geckoも対応してくれれば…。
Posted by 通りすがり at 2007年01月16日 01:59