スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

青空文庫のルビをIndesignのルビタグに変換する

以前、ルビを扱う仕事があったので関数の動作確認用として作りました。
(注意:青空文庫のルビは1字ずつ区切っていないので全てグループルビになります)

//
// 青空文庫のルビ付きテキストファイルのルビをIndesignのルビタグに変換して
// 書き出すスクリプト
//
// ※ルビ記号のルール
//
// ルビは「《》」で括る
// (例)健三《けんぞう》
//
// ルビの付く文字列の始まりを特定する場合、「|」を用いる
// (例)ある日|小雨《こさめ》が降った
//
// Indesignではグループルビで処理するため、モノルビにしたい場合はルビを全角空白で区切る
// (例)健三《けん ぞう》
//

var tmpFileObj;

//ダイアログで読み込むファイル名(元ファイル)を指定する
var srcFileRef = File.openDialog("ファイルを選択してください", "txtファイル:*.txt" );
var srcFileObj = new File(srcFileRef);

//元ファイルをReadOnlyで開く
var flag = srcFileObj.open("r");

if (flag == true) {
//作業用ファイルのファイル名を決定する。パスは元ファイルと同じ
do {
tmpFileObj = new File(srcFileObj.path + "/" + "hoge" + Math.floor(Math.random() * 10000) + 1 + ".tmp");
} while(tmpFileObj.exist)

//作業用ファイルをWrite属性で開く
tmpFileObj.open("w");
//作業用ファイルのエンコードはUTF-16(Unicodeベタ)
tmpFileObj.encoding = "UTF-16";

//Indesignタグのファイル開始タグを挿入
if(Folder.fs == "Windows")
tmpFileObj.writeln("");
else
tmpFileObj.writeln("");

//元ファイルを1行ずつ読み出し、青空文庫のルビを
//Indesignのルビタグに変換しタグ付きファイルに1行ずつ書き込む
while(!srcFileObj.eof) {
var srcText = srcFileObj.readln();
var distText = addIndesignRubyTag(srcText);
tmpFileObj.writeln(distText);
}

//元ファイル、作業用ファイルを閉じる
srcFileObj.close();
tmpFileObj.close();

do {
//保存ダイアログで保存するファイル名を指定する
distFileRef = File.saveDialog("保存", "txtファイル:*.txt" );
//OKが押された場合の処理
if(distFileRef != null) {
var distFileObj = new File(distFileRef);
//同じ名前のファイルがあった場合、上書き保存確認ダイアログを出す
if(distFileObj.exists) {
res = confirm("上書き保存しますか?");
//OKが押されたら元ファイルを削除、キャンセルならばループ先頭へ
if(res) distFileObj.remove()
else continue;
}
//作業用ファイルの名前を保存ファイル名にリネームし、ファイルオブジェクトを削除する
tmpFileObj.rename(distFileObj.name);
delete distFileObj;
break;
} else {
//保存ダイアログでキャンセルが押されたら作業用ファイルを削除する
tmpFileObj.remove();
break;
}
} while(1);

//ファイルオブジェクトを削除する
delete srcFileObj;
delete tmpFileObj;

} else {
alert("ファイルが開けませんでした。");
}

// 青空文庫のルビをIndesignのルビタグに変換する関数
function addIndesignRubyTag(srcText) {
res = srcText.replace(/([一-龠]+)《(.+?)》/g, "$1");
res = res.replace(/|/g,"");
return res;
}

Mac版、Win版のCS2、Mac版のCS3で動作確認しています。
スポンサーサイト

COMMENTS

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

承認待ちコメント

このコメントは管理者の承認待ちです

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。