[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