k_ikiの雑記帳

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

渡辺コンバーター

Adobe Community: Forum: ジャパンフォーラムにおいて、「異体字テキストエディタでの入力」という話題に横からレスを入れ、学ばせていただいた。
人名によく出てくる渡辺さんの「辺」の異体字を、テキストエディタで指定する方法だ。
最初からタグ付きテキストにしてしまえばよいが、「辺_02」とか「辺_03」といった符合にしておいた方がより入力ミス(というか該当の文字に対応させるミス?)が少ないと思われるので、大変有意義な情報のやりとりだったのではなかろうか。
詳細な経緯は該当の一連のレスに委ねるとして、ここにWIN用、MAC用それぞれのソースを記録しておく。

なお、ソース冒頭のルーチン「タグ付きテキストの内容を変換する関数」については、mixiでCLさんに教えていただいたものがかっこいいので、ここではそちらを使っている。

WIN用

//NabeConv_win.js
//いったんストーリー単位でタグ付きテキストに書き出して置換後、読み込んで配置する。
//Cドライブにあらかじめtmpフォルダを作成しておくこと。
//置換対象の文字列にはあらかじめ段落スタイルをあてておくこと。

//タグ付きテキストの内容を変換する関数
function text_replace(text) {
	var _replace = function (a,b) {
		switch (b) {
			case "02": return "<clig:0><cotfcalt:0>邉<clig:><cotfcalt:>";
			case "03": return "<clig:0><cotfcalt:0><calgf:JIS78Form>邉<clig:><cotfcalt:><calgf:>";
			case "04": return "<clig:0><cotfcalt:0><cotfl:aalt\,4>邉<clig:><cotfcalt:><cotfl:>";
			case "05": return "<clig:0><cotfcalt:0><cotfl:aalt\,5>邉<clig:><cotfcalt:><cotfl:>";
			case "06": return "<clig:0><cotfcalt:0><cotfl:aalt\,6>邉<clig:><cotfcalt:><cotfl:>";
			case "07": return "<clig:0><cotfcalt:0><cotfl:aalt\,7>邉<clig:><cotfcalt:><cotfl:>";
			case "08": return "<clig:0><cotfcalt:0><cotfl:aalt\,8>邉<clig:><cotfcalt:><cotfl:>";
			case "09": return "<clig:0><cotfcalt:0><cotfl:aalt\,9>邉<clig:><cotfcalt:><cotfl:>";
			case "10": return "<clig:0><cotfcalt:0><cotfl:aalt\,10>邉<clig:><cotfcalt:><cotfl:>";
			case "11": return "<clig:0><cotfcalt:0><cotfl:aalt\,11>邉<clig:><cotfcalt:><cotfl:>";
		}
		return a;
	};
	return text.replace(/辺_(\d\d)/g, _replace);
}

//(1)タグ付テキスト書き出し。
app.taggedTextExportPreferences.characterSet = TagTextExportCharacterSet.unicode;
doc = app.activeDocument;
path = doc.filePath;
fname = path+"/"+doc.name;
for (icnt = 0;
icnt <doc.stories.length;
icnt++) {
	myStory = doc.stories.item(icnt);
	tag0="c:\\tmp\\taggedwk"+ "_" + icnt +".txt";
	myStory.exportFile(ExportFormat.taggedText,tag0,false);
}
doc.close;

//(2)タグ付きテキストを読み込んで変換をおこなった後配置する。
fileObj = new File(fname);
doc = app.open(File(fileObj),false);

//ストーリー単位で処理。ファイルは書き出したファイルと同じものなので、完全一致する。
for(icnt = 0;
icnt <doc.stories.length;
icnt++) {
	myStory = doc.stories.item(icnt);
	tag1 = "c:\\tmp\\taggedwk"+ "_" + icnt +".txt";
	tag2 = "c:\\tmp\\taggedxk"+ "_" + icnt +".txt";
	taggedObj1 = new File(tag1);
	if(taggedObj1.open("r")) {
		text = taggedObj1.read();
		taggedObj1.close();
		text = text_replace(text);
		taggedObj2 = new File(tag2);
		if (taggedObj2.open("w")) {
			taggedObj2.encoding="UTF-16";
			taggedObj2.write(text);
			taggedObj2.close();
		}else{
			alert("★作業用タグ付きテキストファイルが書き出せませんでした");
		}
	}else{
		alert("★作業用タグ付きテキストファイルが読めませんでした");
	}
	myStory.contents="";
	myStory.insertionPoints.item(0).place(tag2);
}
alert("変換が完了しました");

MAC用

//NabeConv_mac.js
//いったんストーリー単位でタグ付きテキストに書き出して置換後、読み込んで配置する。
//Macintosh HD直下にあらかじめtempフォルダを作成しておくこと。
//置換対象の文字列にはあらかじめ段落スタイルをあてておくこと。

//タグ付きテキストの内容を変換する関数
function text_replac (text) {
	var _replace = function (a,b) {
		switch (b) {
			case "02": return "<clig:0><cotfcalt:0>邉<clig:><cotfcalt:>";
			case "03": return "<clig:0><cotfcalt:0><calgf:JIS78Form>邉<clig:><cotfcalt:><calgf:>";
			case "04": return "<clig:0><cotfcalt:0><cotfl:aalt\,4>邉<clig:><cotfcalt:><cotfl:>";
			case "05": return "<clig:0><cotfcalt:0><cotfl:aalt\,5>邉<clig:><cotfcalt:><cotfl:>";
			case "06": return "<clig:0><cotfcalt:0><cotfl:aalt\,6>邉<clig:><cotfcalt:><cotfl:>";
			case "07": return "<clig:0><cotfcalt:0><cotfl:aalt\,7>邉<clig:><cotfcalt:><cotfl:>";
			case "08": return "<clig:0><cotfcalt:0><cotfl:aalt\,8>邉<clig:><cotfcalt:><cotfl:>";
			case "09": return "<clig:0><cotfcalt:0><cotfl:aalt\,9>邉<clig:><cotfcalt:><cotfl:>";
			case "10": return "<clig:0><cotfcalt:0><cotfl:aalt\,10>邉<clig:><cotfcalt:><cotfl:>";
			case "11": return "<clig:0><cotfcalt:0><cotfl:aalt\,11>邉<clig:><cotfcalt:><cotfl:>";
		}
	return a;
	};
	return text.replace(/辺_(\d\d)/g, _replace);
}

//(1)タグ付テキスト書き出し。
app.taggedTextExportPreferences.characterSet = TagTextExportCharacterSet.unicode;
doc=app.activeDocument;
path=doc.filePath;
fname=path+"/"+doc.name;
for(icnt = 0;
icnt < doc.stories.length;
icnt++){
	myStory = doc.stories.item(icnt);
	tag0="Macintosh HD:temp:taggedwk"+ "_" + icnt +".txt";
	myStory.exportFile(ExportFormat.taggedText,tag0,false);
}
doc.close;

//(2)タグ付きテキストを読み込んで変換をおこなった後配置する。
fileObj = new File(fname);
doc=app.open(File(fileObj),false);

//ストーリー単位で処理。ファイルは書き出したファイルと同じものなので、完全一致する。
for(icnt = 0;
icnt < doc.stories.length;
icnt++){
	myStory = doc.stories.item(icnt);
	tag1="Macintosh HD:temp:taggedwk"+ "_" + icnt +".txt";
	tag2="Macintosh HD:temp:taggedxk"+ "_" + icnt +".txt";
	taggedObj1 = new File(tag1);
	if(taggedObj1.open("r")){
		taggedObj1.encoding="UTF-16LE";
		text = taggedObj1.read();
		taggedObj1.close();
		text=text_replace(text);
		taggedObj2 = new File(tag2);
		if(taggedObj2.open("w")){
			taggedObj2.encoding="UTF-16BE";
			taggedObj2.write(text);
			taggedObj2.close();
		}else{
			alert("★作業用タグ付きテキストファイルが書き出せませんでした");
		}
	}else{
		alert("★作業用タグ付きテキストファイルが読めませんでした");
	}
	myStory.contents="";
	myStory.insertionPoints.item(0).place(tag2);
}
alert("変換が完了しました");