k_ikiの雑記帳

DTPのこと、創作のことなど、思いつくまま

ルビの文字数に応じた変形

InDesignのルビ機能は、親文字よりルビ文字の方が長くなった場合に自動的に何%まで長体(縦組みでは平体)をかけるか設定できます。
ですが、稀なケースではありますが、「親文字1文字に対してルビ文字3文字のとき、70%にしたい」とか、「4文字のときは55%にしたい。50%にしても良いのは5文字以上」といったこだわりのお仕事もある、かもしれません。
そこで、書いてみました。
 
先に言っておくと、問題があります。
処理の中で、ルビフラグがtrueかどうかで分岐させてはいますが、それがモノルビかグループルビか判別させるのを忘れてました。
なお、複数の親文字に対し、スペース区切りでモノルビを設定していた際の処理も想定していません。
 
そこで、ミシマバイカモさんのInDesignスクリプト配給所にある、ルビ分割修正というスクリプトで前処理する必要が出てきます。これ、Version 4.0 Scriptsフォルダに入れてやらないとCS6(というかCS3以降)では使えません。
 
2013/02/01追記:と、思ったら、以前PICTRIX師匠がCS4で動くものを作っておられました!(確認したところCS6でも動作しました)
 
なんとか、前述のモノ/グループ判別と、この分割処理も含めて一括処理してやりたいな、と。
2013/02/01追記:モノルビ判別するように直しました。
 
rubyStringを" "でsplitし、検索置換機能で順番に親文字に対して設定してやればいい、とやるべきことがわかっててもそれなりに手間がかかるわけで(^^;
そんなわけで不完全ではありますが、ひとまず今回書いた分を。
 

//ルビ文字数に応じて変形
var selObj = app.selection;

for (i=0; i<selObj.length; i++) {
    if (selObj[i].constructor.name === "TextFrame") {
        var myPara = selObj[i].parentStory.paragraphs;  //parentStory追加(2013.02.06)
        for (j=0; j<myPara.length; j++) {
            var myCha = myPara[j].characters;
            for (k=0; k<myCha.length; k++) {

                   //if (myCha[k].rubyFlag === true) {  //修正前(2013.01.31)
                   if (myCha[k].rubyType === RubyTypes.PER_CHARACTER_RUBY) {  //修正後(2013.02.01)

                   if (myCha[k].rubyString.length > 4) {
                         myCha[k].rubyXScale = 50;
                    } else if (myCha[k].rubyString.length === 4) {
                        myCha[k].rubyXScale = 55;
                    } else if (myCha[k].rubyString.length === 3) {
                        myCha[k].rubyXScale = 70;
                    } else {
                        myCha[k].rubyXScale = 100;
                    }
                }
            }
        }
    } else {
        alert ("選択ツールでテキストフレームを選択してください");
        exit();
    }
}