渡辺コンバーター
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("変換が完了しました");