のヮの@no05071730


五十路男の独り言集。
乱筆乱文はご容赦ください。

今さらながらのInDesignの〓(ゲタ)ルビスクリプト 2回目

2022年06月08日 00時13分42秒 | パソコン

はい、2回目と題しましたが、ようは昨日上げたコードを修正してみました、というだけなのですが。

余計な物を取り除いたのもそうですが、選択必須にして TextFrame 判別をいれて要所で alert を出すようにしました。後は変えてないつもりです。

 

//-------------------------------
//@target "indesign";

var aDoc=app.activeDocument;
var aPgObj;
var aObj;
var feature1;
var feature2;

app.findGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "〓([一-龠々]{1,})(《[ぁ-ん]{1,}》)";

rubyStart();

function rubyStart(){
    try{
        
    rubyMain();

function rubyMain(){
    aPgObj=aDoc.selection;
    for (var i=0; i<aPgObj.length; i++){
        if(aPgObj[i].constructor.name !== "TextFrame"){
            alert("テキストボックスを選択してください");
            exit();
        }
        if(aPgObj[i].contents !== ""){
            var result = aPgObj[i].findGrep();
            if(result){
                for(l=0;l<result.length;l++){
                    result[l].select();
                    aStr=result[l].contents;
                    feature2=rubySlice(aStr);
                    var sStr=aStr.substr(1,feature2[1]-2);
                    var rubyStr=feature2[0];
                    var sNum=feature2[1];
                    result[l].select();
                    aObj = aDoc.selection[0];
                    aObj.contents=aObj.contents.replace(aStr,sStr);
                    aObj.rubyFlag = true;
                    aObj.rubyString = rubyStr;
                    if(aObj.length<2){
                        aObj.rubyType = RubyTypes.PER_CHARACTER_RUBY;
                    }else{
                        aObj.rubyType = RubyTypes.GROUP_RUBY;
                    }
                }
            }
        }
    }
}

 

//-------------------------------

function rubySlice(rsltStr){
    for(var x=0; x<rsltStr.length; x++){
        //cutStr = rsltStr.charAt(k);
        if(rsltStr[x] != "《" ) continue;
        var s=x+1;
    }
    var remStr=rsltStr.slice(s,rsltStr.length-1);
    var sliNum=s;

    return[remStr,sliNum];
}

}catch (e) { }
};

alert("終了しました");

app.findGrepPreferences.findWhat = "";
app.changeGrepPreferences.changeTo = "";

 

//-------------------------------

 

もっといい書き方があると思うのデスが、いまはこれが精一杯。 catch(e) が何を意味しているのかなんてよくわかっていません。

一応、空のTextFrameを無視したり、複数のTextFrameでも動作したりします。ただ、おそらく仕様だと思うのですが、TextFrameに表示しきれなくて隠れた(オーバーフローの)テキストは無視されてしまいます。 select() してるからだと思いますが、これをやめると rubyFlag がいろいろめんどくさいなあと思って、とりあえず保留中です…

 

(´・ω・`)

 

 



最新の画像もっと見る

コメントを投稿