[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:994) Re: [AS Illustrator CS] とりあえず文字種置換してみます
あちらでお世話になっております。
おそるおそる、こちらにも書き込んでみたり。
Illustrator CSからAppleScriptでテキストを取得して
それをdo shell scriptでperlに渡して処理しようとしてます。
perlスクリプトのほうをeucで書くと、tr/0-9A-Za-z/0-9A-Za-z/;
の処理で止まってしまいます。
AppleScriptからはutf8でテキストがわたっているようなので、
perlの方もutf 8でかくと、処理は止まらないのですが、
2バイト文字の置換がまったくききません。さらに¥nの改行も
改行とみなしてくれないようです。
いままではOS 9でMacJPerlを使ってまして、この辺の文字コード周りは
まったく無頓着だったので、どうすればいいのかお手上げになりました。
解決策をご存知でしたらご教授いただきたく、よろしくお願いいたします。
tell application "Illustrator CS"
activate
tell document 1
set DLMT to AppleScript's text item delimiters --現在のデリミタを保存する
set AppleScript's text item delimiters to "■項目区切り■" --現在のデリミタを "■項目区切り■"にする
set Text_frame_Properties to {position, width, height, contents} of text frame 1 --必要な情報だけとる
set Text_frame_Properties to Text_frame_Properties as string --as Unicode text
end tell
end tell
set AppleScript's text item delimiters to DLMT
set Text_frame_Properties to quoted form of Text_frame_Properties --引用符で囲む
set Perl_Script to choose file-----Perlのスクリプトを指定
set Perl_Script to Perl_Script as string
set Perl_Script to POSIX path of Perl_Script --UNIX形式のパス表記に
set Perl_Script to quoted form of Perl_Script --引用符で囲む
set Perl_ANS to do shell script "perl " & Perl_Script & " " & Text_frame_Properties
指定するPerlスクリプトの内容
#EUCで書いたもの
#!/usr/bin/perl
use Encode;
foreach $_(@ARGV){##@ARGVはAppleScriptから渡した文字列
Encode::from_to($_, "utf8", "euc-jp", 1);##文字コード変換
#tr/0-9A-Za-z/0-9A-Za-z/;##ここでとまるから使用しない
@frame_Properties_List = split("■項目区切り■",$_);
$str = join ("?n",@frame_Properties_List);
Encode::from_to($str, "euc-jp", "utf8", 1);
print $str;
}
#utf8で書いたもの
#!/usr/bin/perl
use utf8;
foreach $_(@ARGV){##@ARGVはAppleScriptから渡した文字列
tr/0-9A-Za-z/0-9A-Za-z/;##エラーにはならないけど全然働かない
@frame_Properties_List = split("■項目区切り■",$_); #ここも効かない
print join ("?n",@frame_Properties_List);
}
環境 OS X 10.3.7
perl v5.8.1
Illustrator CS 11.0.0
AppleScript 1.9.3
スクリプトエディタ2.0
Perlスクリプトを書いているエディタmi 2.1.5