2010年3月21日日曜日

等幅半角字形に置換スクリプトの読み解き

いっちゃんのブログ(仮)の異体字(等幅半角字形)に切り替えるスクリプトの読み解きです。
リンク先で解説されているところはパスします。自分にとって必要ないなぁ~と感じるところも割愛しました。
var docObj = app.activeDocument;
var selObj = docObj.selection;

var i, j;

if( (selObj[0].typename == "TextFrame") ) {
 for(j = 0; j < selObj.length; j++) {
  for(i = 0; i < selObj[j].contents.length; i++) {
  if(selObj[j].characters[i].contents.match(/[0-9]/) != null)
  selObj[j].characters[i].characterAttributes.alternateGlyphs = AlternateGlyphsForm.HALFWIDTH;
  }
 }
}
Ctr+Aの全選択で数字のみ一括置換しますので、これでも動作すると思います。
ちなみにPDF本には異体字(等幅半角字形)の例がなかった。

var i, j;
var i; とvar j; をひとつにまとめた表記と推測
3/25追記:04基本編p4に複数まとめて用意したい場合には,(カンマ)で区切って列記とある。

if( (selObj[0].typename == "TextFrame") ) {
二重括弧はいらんのじゃないのか?
if (selObj[0].typename == "TextFrame" ) {
でも動作するような希ガス。。。

match(/[0-9]/) != null)
正規表現[0-9]、/[0-9]/でパターンマッチ、! は not の意、nullは要素がない
つまり、0から9の数字パターンがmatchする要素がなく(null)はない(not)、つまりmatchする要素がある意。

selObj[j].characters[i].characterAttributes.alternateGlyphs = AlternateGlyphsForm.HALFWIDTH;
選択オブジェクトの文字の文字属性の異体字=異体字の等幅半角
で、理解できんのがPerlの初心者本ではif文は、if (条件) {処理}となるのだが、この行を{}で囲んでいない? 省略できるのか???
{selObj[j].characters[i].characterAttributes.alternateGlyphs = AlternateGlyphsForm.HALFWIDTH;}
でもいけそうな希ガス。。。


で、このスクリプトってタテ組み本文の縦中横の新ゴ数字の出っ張りが気になる方に役立つんですよね。
PDF本に縦中横の例文スクリプトがありますので、合体すれば結構使えそうな気がします。
数字1桁は全角、2桁以上は半角に変換するスクリプトと合体すれば、なおよろしって感じですが、構文が長すぎますのでパスします。
まずは短い文から読み解きですわ。

0 件のコメント: