はい、またまたルビ作業のお話です。
職場でInDesign組版が少しずつ動いていまして、テンプレートデータをつくって、xmlの取り込み書き出しあたりをまとめて、残った懸念点はInDesign上でのルビ振り機能です。
そもそも、日本語IMはInDesignに組み込んであるわけではないので、Word~MSIMEのようにネイティブ動作はしないんですよね。なので、InDesignが出始めた当初から「〓漢字《るび》」に整形してからInDesignに取り込んで、スクリプトを回すことで、一括ルビ振りっぽいことを行ってきた歴史があります。
※唐突ですが、歴戦の勇者(開発者)の皆さま、本当にありがとうございます。あなたたちが積み重ねてきたモノがあるから、ワタクシたちが気軽にコードをカキカキできるのです。
で、勉強はした事あるけどまったく触っていなかったjavascriptで、InDesignのスクリプトを文字通り勉強がてら書いてみた結果、ひとまず動作する物ができました。
//-------------------------------
//@target "indesign";
var aDoc=app.activeDocument;
var aPgObj = app.activeDocument.pages;
var aTxfr;
var aTxct;
var aObj;
var feature1;
var feature2;
app.findGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "〓([一-龠々]{1,})(《[ぁ-ん]{1,}》)";
for (var i=0; i
for (var j=0; j
aTxfr = aPgObj[i].textFrames[j];
aTxct = aPgObj[i].textFrames[j].contents;
var result = aTxfr.findGrep();
if (result){
for(l=0;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.rubyString = rubyStr;
if(aObj.length
aObj.rubyType = RubyTypes.PER_CHARACTER_RUBY;
}else{
aObj.rubyType = RubyTypes.GROUP_RUBY;
}
aObj.rubyFlag = true;
}
}
}
}
//-------------------------------
function rubySlice(rsltStr){
for(var x=0; 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];
}
//--------------------------------
function rubyCheck(rObj){
var u=0;
var v=0;
var y=0;
for(var a=0;a
result[l].characters[a].select();
aObj = aDoc.selection[0];
var rFlg=aObj.rubyFlag;
if(rFlg=true){
u=u+1;
}else{
v=v+1;
if(v==1){
y=a;
}
}
}
return[u,v];
}
//--------------------------------
正規表現で「〓漢字《るび》」を検索して、ヒットしたら選択状態にして、関数でルビと親文字の範囲値を割り出して、検索文字と親文字をさしかえて、ルビを振る、という何の変哲もない流れです。いま見ると消してもいいセンテンスがありますね。なぜか、親文字となる漢字が二文字以上はグループルビにするという、地味な事をしております。
最近はVBAばかりいじっていたので、書き方がVBAになっています(´・ω・`) エラー処理とかよくわからなかったので、現段階では「とりあえず動作するもの」としています。いくつか文字列のパターンを試して、複数ページで試して、エラーもなく動作していました。もしかしたら出るかもしれない不具合はこれから直します、的な立ち位置。
ちなみに一番下の「rubyCheck(rObj)」は、実は途中まで〓(ゲタ)をはかせないまま「漢字《るび》」だけでできないか、とこねくり回していたのですが、その最中にできあがった、rubyFlagの有無チェックです。なんとなく残してあります。上手く動いていなかったような…まあいいや。
たぶん、見る人が見れば「コードが汚い」「セオリー無視してる」「こんな書き方しない」などなど突っ込みどころ満載でしょう。何かありましたら、優しく声をかけて下さいね。というかアドバイス下さい<(_ _)>
あ、ちなみに開発環境は「InDesign CS6」です(´・ω・`)<会社は2020...
※仕事で書いたコードなので、問題があれば消しますデス
※コメント投稿者のブログIDはブログ作成者のみに通知されます