18 返信 最新の回答 日時: Dec 5, 2008 10:52 AM ユーザー:k-ooishi

    異体字のテキストエディタでの入力

      Mac版のIndesign CS3を使っています。人名が多く、例えば「渡邊さん」の「邊」をオープンタイプフォントにある文字を全て使う必要が出てきます。Indesignで直接テキストを入力すればよいのですが、 入力用のMacは非力なG4を使っているので、出来れば軽く動く「Jedit」(こだわらい)などを使いたいのです。
      もう一つ、同じくIllustrator CS3で入力された異体字をIndesign CS3に持ってくる(できればコピペで)方法も解りません。
      必要ならばWindowsを絡めた方法でも結構です。
      ネットでかなり調べたのですが解決策がどうしても見あたりません。出来ないなら出来ないという回答でも良いのですが、アドバイスの方よろしくお願いします。
        • 1. Re: 異体字のテキストエディタでの入力
          k-ooishi
          undefined
          • 2. Re: 異体字のテキストエディタでの入力
            k-ooishi Level 1
            かなり遅くなってしまいましたが、最近似たことをやったので、ご報告します。(もういらない?) <br />現在のところオープンタイプを直接操作できるテキストエディタは無いようなので、テキストエディタを使う場合、符号で入力し後で置換するしかないのではないでしょうか。 <br />例えば「辺_02」「辺_03」「辺_04」などと入力しておいて異体字に一括置換することになると思います。 <br />ただ、面倒なのは、異体字の置換は「タグ付きテキスト」でないとできないものが多いことで、一度タグ付きテキストに書き出して、置換後、再度読み込ませることになるかと思います。 <br />私は以下のようなJavaScriptを書いて、一括置換しました。 <br />Windows CS3用です。(CSでは動きませんでした。CS2では不明)Macでも動くと思います。 <br />アクティブなドキュメントを対象に、符号を置換します。 <br />text.replace()の中に個々の置換方法を記述することになります。 <br />書き方は、実際に課題の文字のタグ付きテキストを書き出してみて真似して書いてみてください。 <br /><br />//渡辺 変換.js <br />//いったんストーリー単位でタグ付きテキストに書き出して置換後、読み込んで配置する。 <br /><br />//タグ付きテキストの内容を変換する関数 <br />function text_replace(text){ <br />text=text.replace(/辺_02/,"<clig:0><cotfcalt:0>邉<clig:><cotfcalt:>"); <br />text=text.replace(/辺_03/,"<clig:0><cotfcalt:0><calgf:JIS78Form>邉<clig:><cotfcalt:><calg f:>"); <br />text=text.replace(/辺_04/,"<clig:0><cotfcalt:0><cotfl:aalt¥,4>邉<clig:><cotfcalt:><cotfl: >"); <br />text=text.replace(/辺_05/,"<clig:0><cotfcalt:0><cotfl:aalt¥,5>邉<clig:><cotfcalt:><cotfl: >"); <br />text=text.replace(/辺_06/,"<clig:0><cotfcalt:0><cotfl:aalt¥,6>邉<clig:><cotfcalt:><cotfl: >"); <br />text=text.replace(/辺_07/,"<clig:0><cotfcalt:0><cotfl:aalt¥,7>邉<clig:><cotfcalt:><cotfl: >"); <br />text=text.replace(/辺_08/,"<clig:0><cotfcalt:0><cotfl:aalt¥,8>邉<clig:><cotfcalt:><cotfl: >"); <br />text=text.replace(/辺_09/,"<clig:0><cotfcalt:0><cotfl:aalt¥,9>邉<clig:><cotfcalt:><cotfl: >"); <br />text=text.replace(/辺_10/,"<clig:0><cotfcalt:0><cotfl:aalt¥,10>邉<clig:><cotfcalt:><cotfl :>"); <br />text=text.replace(/辺_11/,"<clig:0><cotfcalt:0><cotfl:aalt¥,11>邉<clig:><cotfcalt:><cotfl :>"); <br />return(text); <br />} <br /><br />//(1)タグ付テキスト書き出し。 <br />app.taggedTextExportPreferences.characterSet = TagTextExportCharacterSet.unicode; <br />doc=app.activeDocument; <br />path=doc.filePath; <br />fname=path+"/"+doc.name; <br />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;<br /><br />//(2)タグ付きテキストを読み込んで変換をおこなった後配置する。 <br />fileObj = new File(fname); <br />doc=app.open(File(fileObj),false);<br /><br />//ストーリー単位で処理。ファイルは書き出したファイルと同じものなので、完全一致する。 <br />for(icnt = 0; icnt < doc.stories.length; icnt++){ myStory = doc.stories.item(icnt); tag1="c:¥¥tmp¥¥taggedwk"+ "_" + icnt +".txt"; <br />tag2="c:¥¥tmp¥¥taggedxk"+ "_" + icnt +".txt"; taggedObj1 = new File(tag1);<br />if(taggedObj1.open("r")){ text = taggedObj1.read(); taggedObj1.close(); text=text_replace(text); <br />taggedObj2 = new File(tag2); <br />if(taggedObj2.open("w")){ taggedObj2.encoding="UTF-16"; taggedObj2.write(text); taggedObj2.close(); <br />}else{<br /> alert("★作業用タグ付きテキストファイルが書き出せませんでした"); <br />} <br />}else{<br /> alert("★作業用タグ付きテキストファイルが読めませんでした"); }<br />myStory.contents=""; myStory.insertionPoints.item(0).place(tag2); <br />}<br />alert("変換が完了しました");<br /><br />illustratorから持ってくる方法は分かりません。すみません。
            • 3. Re: 異体字のテキストエディタでの入力
              横レス失礼いたします。

              >k-ooishi様

              便利です! 有難く利用させていただきます。
              win XP/CS3で正常な動作、確認しました。
              win XP/CS2ではエラーになりました。
              ただ、CS3で変換した“taggedxk_0.txt”はきちんと意図通りの異体字でCS2に配置できました(当たり前ですね)

              MACだとCS3しか当方においてすぐに確認できる環境がありませんが、c:¥¥tmp¥¥の部分をMACのフォルダにどう対応させればよいかわからず、動作チェックできておりません。すみま せん。
              • 4. Re: 異体字のテキストエディタでの入力
                Level 1
                お礼が遅れてごめんなさい。さっそく利用させていただきます。でも、やっぱりこういう方法しかないんですね。
                同じAdobeのソフト内でもコピペできないのはちょっと残念です。OSやOTFにも問題があるんでしょうね。
                • 5. Re: 異体字のテキストエディタでの入力
                  Level 1
                  MACのCS3で試しました。
                  c:¥¥tmp¥¥ の部分を Macintosh HD:temp: に書き換えましたが、うまくいきません。
                  次に
                  taggedObj2.encoding="UTF-16";  の部分を taggedObj2.encoding="UTF-16BE"; に書き換えたら、一応読み込みました。
                  が、異体字が全て“邉”になってしまいました。

                  InDesignの勉強部屋の過去ログでこんなのを見つけました。
                  [8208]ユニコードでタグの読み込み
                  http://bbs.ddc.co.jp/mt/indesignbbs/archives/8208_20060206001100.html
                  そこで、ShiftJISで書き出そうとしてみたのですがエラー終了してしまいました。

                  もう少し勉強しますが、今の私ではここまでの検証が限界です。
                  • 6. Re: 異体字のテキストエディタでの入力
                    k-ooishi Level 1
                    IKI Kohei様<br />検証ありがとうございます。普段Macを使っていないので、検証不足でした。申し訳ありません。<br />前回書き忘れたのですが、スクリプトの文字コードはUTF-16で作りました。もしスクリプトがSJISなら正常に動かないということがあるのかもしれません。<br />なお、今回OSX CS3の環境でMacでもテストしてみました。<br />当方の環境ではIKIさんの試していただいた、「Macintosh HD:temp:」、「taggedObj2.encoding="UTF-16BE";」という設定で正常に変換したことを確認しました。<br />上手くいかないようでしたら、異体字を入力したデータからタグ付きテキストに書き出してみて、その「邊」や「邉」の文字の周辺の<clig:0>〜<cotfl:>の部分をスクリプトの <clig:0>〜<cotfl:>の部分にコピーしていただけば確実だと思います。<br />変換の経過はtempフォルダに作られた"taggedwk1.txt"と"taggedxk1.txt"に残っています。"taggedwk1.txt"が変換前のタグ付きテキストで 、"taggedxk1.txt"が変換後のタグ付きテキストです。<br />テキストエディタで開けて比較していただくと問題点がはっきりするかもしれません。「異体字が全て“邉”になってしまいました」ということなら、とりあえず変換はされているわけですから 、その部分が実際どうなっているかですね。<br />しかし、UTF-16BEということはCPUがビッグエンディアンだからなんでしょうね。IntelMacなら、リトルエンディアン(UTF-16LE)になるんですかね?そこらへんは 、ちょっとIntelMacの環境が無くてよく分かりません。
                    • 7. Re: 異体字のテキストエディタでの入力
                      Level 1
                      > スクリプトの文字コードはUTF-16で作りました。

                      あ、そうですね。そこ、注意不足でした。
                      明日また時間が取れたら検証してみます。
                      • 8. Re: 異体字のテキストエディタでの入力
                        Level 1
                        Windowsの方、解決です。<br />実は、スクリプトの内容をちょっとだけ編集して保存していたのです。<br />なべの異体字が連続する場合に備え、置換にグローバルオプションを追加した後、SJISでスクリプトを保存してしまっていました。<br />で、UTF-16で保存し直したところ、一昨日と同様に間違いなく動作しました。<br /><br />編集したのはここです。<br /><br />//タグ付きテキストの内容を変換する関数<br />function text_replace(text){<br />text=text.replace(/辺_02/<b>g</b>,"<clig:0><cotfcalt:0>邉<clig:><cotfcalt:>");<br /><br />(以下同様)<br /><br />MACは、IntelMACです。OSは10.5.4。<br />"taggedwk1.txt"と"taggedxk1.txt"を確認したところ、置換前の"taggedwk1.txt"はきちんとタグテキストとして配置できました。<br />"taggedxk1.txt"は、開いてみると改行がなくなっていました。置換そのものはできています。<br />そのままInDesignに配置しようとすると、「割り付けフィルタがありません」と警告が出て配置できません。<br />ダメもとで、MACの"taggedxk1.txt"をWINに配置してみましたが、やはり配置できず。<br />引き続き、時間が空いた時に検証します。
                        • 9. Re: 異体字のテキストエディタでの入力
                          k-ooishi Level 1
                          あ…全部置換するには"//g"が必要ですか。失礼しました。あれこれ抜けてますね…。
                          それと当方はIntelMacでした。
                          で、あれこれ手動でやってみるとどうも、UTF16の場合、配置するタグ付きテキストは以下の条件が必要のようです。
                          ○「UTF16BEでCR改行」
                          ○「UTF16LEでLF改行」
                          ×「UTF16LEでCR改行」
                          ×「UTF16BEでLF改行」
                          ううむ、writeで改行コードを指定するにはどうしたらいいのか…?
                          • 10. Re: 異体字のテキストエディタでの入力
                            Level 1
                            > あ…全部置換するには"//g"が必要ですか。

                            いえいえ、なべが連続しない限り、同一行に複数あってもgなしで置換できますから。

                            > ○「UTF16BEでCR改行」
                            > ○「UTF16LEでLF改行」

                            な、なんと! 思いつきもしませんでした。
                            • 11. Re: 異体字のテキストエディタでの入力
                              k-ooishi Level 1
                              どうもMacでのスクリプトからのencoding="UTF-16LE"にしたときのwriteでは、改行がLFからCRに変わってしまうようで、それが読み込めなくなる原因のようです。( OSXは改行がLFだそうですから旧Macとの互換性のためにそうしているのか、根本的な原因がよく分かりません。)これの回避方法が見つかりません。なので、"UTF-16LE"はあきらめ てしまって、ご指摘のように、配置するタグ付きテキストはencoding="UTF-16BE"でBEに指定すると一応正常に動作するようです。読み込みのほうのエンコーディングが抜けてい たので、これを追加して、該当箇所はMac版では下記のようになるでしょうか。
                              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();
                              • 12. Re: 異体字のテキストエディタでの入力
                                Level 1
                                ありがとうございます。MACのほうも成功しました。<br />一応、改訂したコードを再掲しておきましょうか。<br /><br />//渡辺 変換.js<br />//いったんストーリー単位でタグ付きテキストに書き出して置換後、読み込んで配置する。<br /><br />//タグ付きテキストの内容を変換する関数<br />function text_replace(text){ <br />  text=text.replace(/辺_02/g,"<clig:0><cotfcalt:0>邉<clig:><cotfcalt:>"); <br />  text=text.replace(/辺_03/g,"<clig:0><cotfcalt:0><calgf:JIS78Form>邉<clig:><cotfcalt:><calgf :>"); <br />  text=text.replace(/辺_04/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,4>邉<clig:><cotfcalt:><cotfl:> "); <br />  text=text.replace(/辺_05/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,5>邉<clig:><cotfcalt:><cotfl:> "); <br />  text=text.replace(/辺_06/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,6>邉<clig:><cotfcalt:><cotfl:> "); <br />  text=text.replace(/辺_07/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,7>邉<clig:><cotfcalt:><cotfl:> "); <br />  text=text.replace(/辺_08/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,8>邉<clig:><cotfcalt:><cotfl:> "); <br />  text=text.replace(/辺_09/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,9>邉<clig:><cotfcalt:><cotfl:> "); <br />  text=text.replace(/辺_10/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,10>邉<clig:><cotfcalt:><cotfl: >"); <br />  text=text.replace(/辺_11/g,"<clig:0><cotfcalt:0><cotfl:aalt¥,11>邉<clig:><cotfcalt:><cotfl: >"); <br />  return(text); <br />} <br /><br />//(1)タグ付テキスト書き出し。<br />app.taggedTextExportPreferences.characterSet = TagTextExportCharacterSet.unicode;<br />doc=app.activeDocument;<br />path=doc.filePath;<br />fname=path+"/"+doc.name;<br />for(icnt = 0;<br />icnt < doc.stories.length;<br />icnt++){<br />  myStory = doc.stories.item(icnt);<br />  tag0="Macintosh HD:temp:taggedwk"+ "_" + icnt +".txt";<br />  myStory.exportFile(ExportFormat.taggedText,tag0,false);<br />}<br />doc.close;<br /><br />//(2)タグ付きテキストを読み込んで変換をおこなった後配置する。<br />fileObj = new File(fname);<br />doc=app.open(File(fileObj),false);<br /><br />//ストーリー単位で処理。ファイルは書き出したファイルと同じものなので、完全一致する。<br />for(icnt = 0;<br />icnt < doc.stories.length;<br />icnt++){<br />  myStory = doc.stories.item(icnt);<br />  tag1="Macintosh HD:temp:taggedwk"+ "_" + icnt +".txt";<br />  tag2="Macintosh HD:temp:taggedxk"+ "_" + icnt +".txt";<br />  taggedObj1 = new File(tag1);<br />  if(taggedObj1.open("r")){<br />    taggedObj1.encoding="UTF-16LE";<br />    text = taggedObj1.read();<br />    taggedObj1.close();<br />    text=text_replace(text);<br />    taggedObj2 = new File(tag2);<br />    if(taggedObj2.open("w")){<br />      taggedObj2.encoding="UTF-16BE";<br />      taggedObj2.write(text);<br />      taggedObj2.close();<br />    }else{<br />      alert("★作業用タグ付きテキストファイルが書き出せませんでした");<br />    }<br />  }else{<br />    alert("★作業用タグ付きテキストファイルが読めませんでした");<br />  }<br />  myStory.contents="";<br />  myStory.insertionPoints.item(0).place(tag2);<br />}<br />alert("変換が完了しました");
                                • 13. Re: 異体字のテキストエディタでの入力
                                  k-ooishi Level 1
                                  おお!これがMac最終版ですね。
                                  今回はいろいろ勉強になりました。
                                  ありがとうございました。
                                  • 14. Re: 異体字のテキストエディタでの入力
                                    Level 1
                                    いえいえ、勉強させていただいたのは私の方です。
                                    はてな日記に、win用、mac用それぞれ記録しておきました。

                                    http://d.hatena.ne.jp/k_iki/20081107/1226049299
                                    • 15. Re: 異体字のテキストエディタでの入力
                                      k-ooishi Level 1
                                      問題点を整理しておきます。
                                      (1)すべての異体字を置換するには、Indesignの仕様上タグ付きテキストでの置換が必要なので、タグ付きテキストを介して置換するスクリプトを設計しました。
                                      (2)タグ付きテキストを書き出す際、ユニコードを指定すると、タグ付きテキストはUTF-16LE(リトルエンディアン)・改行コードLFで書き出されました。
                                      (3)書き出したタグ付きテキストを、read()とwrite()を使用して読み込ませ、該当文字を置換後書き出しました。ここでタグ付きテキストの配置には条件があり、「UTF16BE( ビッグエンディアン)でCR改行」か「UTF16LEでLF改行」でなければならないようです。しかし、write()のencodingで"UTF-16"、"UTF-16LE"を指定する と、データ中の改行コードのLFがCRに変わってしまい、条件を満たせずエラーとなって配置できませんでした。
                                      (4)このため、encodingを"UTF-16BE"とし、タグ付きテキストを「UTF16BEでCR改行」で書き出し配置できるデータにしました。

                                      ということですね。
                                      関わってくる2系統の仕様があります。これらは、Macの歴史ですね。
                                      (1)CPUの処理するデータの並び。
                                       旧Mac---モトローラとPowerPCのCPU---BE(ビッグエンディアン)
                                       新IntelMac---Intel系CPU---LE(リトルエンディアン)
                                      (2)改行コード
                                       OS9まで---CR
                                       OSX---LF
                                      これらが絡んで、互換性のためにwrite()の"UTF-16"指定ではUTF-16LE・改行コードCRで書き出すようになっているということなんですかね?エンコードにunicodeを 指定したタグ付きテキスト書き出しでは UTF-16LE・改行コードLFで書き出されるのに?
                                      ううむ納得できない。これはIndesignMac版の内部的な自己矛盾では?
                                      まるで、スクリプト中ではタグ付きテキストの読み書きをすることは想定していないような…。Adobe様、こんなこと、どっかにきちんと文書化しておいてよ〜。ユーザーが試してみないとわから ないというのは…。
                                      • 16. Re: 異体字のテキストエディタでの入力
                                        k-ooishi Level 1
                                        異体字に置換_CID経由版を作ってみました。<br />このスクリプトは、文字列またはCIDコードで指定した文字を、CIDで指定した異体字に置換します。<br />タグ付きテキスト版と比べた長所は異体字のCIDさえわかれば、タグ付きテキストを書き出してスクリプトを書き換える必要がないことです。<br />CS3で新設されたグリフ置換の関数changeGlyphを利用しました。そのためCS3(以降?)でなければ動きません。<br />また、changeGlyphの仕様上、置換にはオープンタイプフォントが必須です。ドキュメントに使われている全フォントのうち、オープンタイプフォント以外の文字は処理対象から除外 します。<br />文字列からCIDへ変換する場合、ドキュメントで使用していない変換用文字に一度変換し、その文字を媒介にCID変換します。<br />CIDの一覧表はhttp://partners.adobe.com/public/developer/en/font/5078.Adobe-Japan1-6.pdfや、htt p://coe21.zinbun.kyoto-u.ac.jp/‾yasuoka/publications/Adobe-Japan1kanji.pdfなどから入手してください。<br /><br />変換用リストは下記のフォーマットのタブ区切りテキスト(ShiftJIS)で記述し読み込ませてください。スクリプト自体もShiftJISで問題ありません。<br />区分¥t対象文字列かCID番号¥t変換後CID番号¥n<br />(例1)CID¥t2730¥t6766¥n(先頭カラムが"CID"のもの:CIDからCIDに置換します。賎→賤など一文字の異体字置換の場合、変換元と変換先をCIDで指定してく ださい)<br />(例2)TXT¥t辺_01¥t14241¥n(先頭カラムが"TXT"のもの:文字列からCIDに置換します。「辺_01」→CID14241など、変換元は文字列、変換先はCIDで 指定してください)<br />処理結果のログは変換用リストと同一フォルダに"log_日付_時刻.txt"という名称で書き出されます。<br />WindowsVISTA,macOSX InDesignCS3で動作確認しました。<br /><br />現状確認されている不具合は、1件。macの場合、フォントがインストールされていない場合でも、FontStatus.installedと認識されてしまい、チェックを通過するため 、"要求されたフォントは利用できません"というメッセージを出して異常終了する場合があります。(mac版のバグ?)macではすべての使用フォントがインストールされたマシンで動作させて ください。<br />それ以外はほぼ動くと思いますが、不都合があった場合はお知らせください。<br />以下、少々長いです。すみません。<br /><br />//異体字に置換_CID版.js<br />function tbl_chk(tbl,cd,key_str){     //リスト内に変換用グリフがあれば除外<br />     rc=true;<br />     c=0;<br />     while((c<tbl[0].length)&&(rc)){<br />          if(cd==parseInt(tbl[0][c][1])){<br />               rc=false;<br />          }<br />          if(cd==parseInt(tbl[0][c][2])){<br />               rc=false;<br />          }<br />          c+=1<br />     }<br />     c=0;<br />     while((c<tbl[1].length)&&(rc)){<br />          if(tbl[1][c][1].indexOf(key_str)>=0){<br />               rc=false;<br />          }<br />          if(cd==parseInt(tbl[1][c][2])){<br />               rc=false;<br />          }<br />          c+=1;<br />     }<br />     return(rc);<br />}<br /><br />function cid_aki_kensaku(tbl){<br />     found_flg=false;<br /> moji=new Array();<br />     rc=new Array();<br />//CID7491〜7539(罫線素)を文字列からのグリフ置換の中継ぎとして使う。ドキュメントで使用されていたら除外される。万一13個の候補が全部使用されていたらエラーとする 。<br />     moji[7491]="┌";<br />     moji[7495]="┐";<br />     moji[7499]="└";<br />     moji[7503]="┘";<br />     moji[7507]="├";<br />     moji[7511]="┠";<br />     moji[7515]="┤";<br />     moji[7519]="┨";<br />     moji[7523]="┬";<br />     moji[7527]="┰";<br />     moji[7531]="┴";<br />     moji[7535]="┸";<br />     moji[7539]="┼";<br />     g=7487;<br />     while(found_flg==false){<br />          g+=4;<br />          if(tbl_chk(tbl,g,moji[g])){<br />               if(g>7539){<br />                    rc=[0,""]<br />                    found_flg=true;<br />               }else{<br />                    //ドキュメントから候補文字を検索<br />                    app.findTextPreferences=NothingEnum.nothing;<br />                    app.findChangeTextOptions.caseSensitive=false;<br />                    app.findChangeTextOptions.includeFootnotes=false;<br />                    app.findChangeTextOptions.includeHiddenLayers=false;<br />                    app.findChangeTextOptions.includeLockedLayersForFind=false;<br />                    app.findChangeTextOptions.includeLockedStoriesForFind=false;<br />                    app.findChangeTextOptions.includeMasterPages=false;<br />                    app.findChangeTextOptions.wholeWord=false;<br />                    app.findTextPreferences.findWhat=moji[g];<br />                    try{<br />                         found_array=doc.findText();<br />                    }catch(e){<br />                         alert( '★候補文字検索失敗 ' + moji[g]);<br />                         found_array=new Array(" "," "," ");<br />                    } <br />                    if(found_array.length==0){     //無ければ決定<br />                         found_flg=true;<br />                    }<br />               }<br />          }<br />          rc=[g,moji[g]]<br />     }<br />     return(rc);<br />}<br /><br />function cid_henkan(findcid,changecid,cnt_flg){<br />     rc=0;<br />     for(m=0;m<doc.fonts.length;m++){     //ドキュメントに使われているすべてのフォントについて旧CIDの文
                                        • 17. Re: 異体字のテキストエディタでの入力
                                          k-ooishi Level 1
                                          ↓続き<br />function cid_henkan(findcid,changecid,cnt_flg){<br />     rc=0;<br />     for(m=0;m<doc.fonts.length;m++){     //ドキュメントに使われているすべてのフォントについて旧CIDの文字があれば新CIDに置換 <br />          if((doc.fonts[m].status==FontStatus.installed)&&((doc.fonts[m].fontType==Font Types.opentypeCID)||(doc.fonts[m].fontType==FontTypes.opentypeCFF)||(doc.fonts[m].fontType ==FontTypes.opentypeTT))){<br />//フォントがインストールされていてオープンタイプなら置換・さもなければエラーを出す以外なにもしない。<br />               app.findGlyphPreferences=NothingEnum.nothing;<br />               app.changeGlyphPreferences=NothingEnum.nothing;<br />               //★mac版ではフォントがインストールされていなくてもFontStatus.installedで通過し、次行がエラーになる。3mac版のバグか ?<br />               app.findGlyphPreferences.appliedFont=doc.fonts[m].name;<br />               app.changeGlyphPreferences.appliedFont=doc.fonts[m].name;<br />               app.findGlyphPreferences.glyphID=findcid;<br />               app.changeGlyphPreferences.glyphID=changecid;<br />               try{<br />                    insertion_points=doc.changeGlyph();<br />               }catch(e){<br />                    errmsg='★CID変換失敗 フォント名:' + doc.fonts[m].name + " " + findcid + "→" + changecid<br />                    alert(errmsg);<br />                    logObj.write(errmsg);<br />                    insertion_points=new Array();<br />               }<br />               if(cnt_flg){<br />                    rc+=insertion_points.length;<br />               }<br />          }<br />     }<br />     return(rc);<br />}<br /><br />doc=app.activeDocument;<br />errmsg="";<br />errmsg1="";<br />errmsg2="";<br />//(1)変換リストを読み込み<br />filename=File.openDialog("変換リストを指定してください。タブ区切りUTF-16で、1.データ区分(0:CID 1:文字列) 2.変換元CIDか文字列 3.変換先CID");<br />if(filename){<br /> wordObj=new File(filename);<br /> dObj = new Date();<br /> day_s=dObj.getFullYear()+"-"+(dObj.getMonth() + 1)+"-"+dObj.getDate()+"_"+dObj.getHours()+":"+dObj.getMinutes();<br /> logObj=new File(filename.path+"/log_"+day_s+".txt");<br /> wordObj.encoding="ShiftJIS";<br /> logObj.encoding="ShiftJIS";<br /> if(wordObj.open("r")){<br />  if(logObj.open("w")){<br />   for(n=0;n<doc.fonts.length;n++){<br />    if(doc.fonts[n].status==FontStatus.installed){<br />     if((doc.fonts[n].fontType!=FontTypes.opentypeCID)&&(doc.fonts[n].fontType!=FontTypes.open typeCFF)&&(doc.fonts[n].fontType!=FontTypes.opentypeTT)){<br />      errmsg2=errmsg2+"→"+doc.fonts[n].name+"¥n";<br />     }<br />    }else{<br />     errmsg1=errmsg1+"→"+doc.fonts[n].name+"¥n";<br />    }<br />   }<br />   if(errmsg1.length>0){<br />    errmsg=errmsg+"★このフォントはインストールされていないので異体字に置換できません¥n"+errmsg1;<br />   }<br />   if(errmsg2.length>0){<br />    errmsg=errmsg+"★このフォントはオープンタイプでないので異体字に置換できません¥n"+errmsg2;<br />   }<br />   if(errmsg.length>0){<br />    alert(errmsg);<br />    logObj.write(errmsg);<br />   }<br />   array=wordObj.read().split("¥n").sort();<br />   tbl=new Array();<br />   tbl[0]=new Array();<br />   tbl[1]=new Array();<br />   t0=0;<br />   t1=0;<br />   for(n=0;n<array.length;n++){<br />    if((array[n].substring(0,2)!="//")&&(array[n]!="")){<br />     wk=array[n].split("¥t");<br />     switch(wk[0]){<br />     case "CID"://CID変換<br />      tbl[0][t0++]=wk;<br />      break;<br />     case "TXT"://文字列変換_変換用CIDの確定前にとりあえず格納しておく<br />      tbl[1][t1++]=wk;<br />      break;<br />     default:<br />      alert("★変換リスト区分エラー"+array[n]);<br />      logObj.write("★変換リスト区分エラー"+array[n]+"¥n");<br />      break;<br />     }<br />    }<br />   }<br />   wordObj.close();<br />//(2)区分が"CID"のレコードについて旧CIDを新CIDに変換<br />   for(n=0;n<tbl[0].length;n++){<br />    tbl[0][n][3]=cid_henkan(parseInt(tbl[0][n][1]),parseInt(tbl[0][n][2]),n,true);     //tbl[ 0][n][3]にCID置換件数を格納<br />    logObj.write(tbl[0][n][0]+": "+tbl[0][n][1]+" → "+tbl[0][n][2]+" 変換 "+tbl[0][n][3]+"件¥n");<br />   }<br />//(3)TXT区分の変換用にドキュメントで使用していないCIDを取得、それを文字列置換の中継ぎグリフとして使用する。<br />   tmpcd=cid_aki_kensaku(tbl);//戻り値配列[CID,文字]、CIDが0はエラー
                                          • 18. Re: 異体字のテキストエディタでの入力
                                            k-ooishi Level 1
                                            ↓続き2<br />//(4)区分が"TXT"のレコードについて旧テキストを中継ぎグリフに変換<br />               if(tmpcd[0]>0){<br />                    app.findTextPreferences=NothingEnum.nothing;<br />                    app.changeTextPreferences=NothingEnum.nothing;<br />                    app.findChangeTextOptions.caseSensitive=false;<br />                    app.findChangeTextOptions.includeFootnotes=false;<br />                    app.findChangeTextOptions.includeHiddenLayers=false;<br />                    app.findChangeTextOptions.includeLockedLayersForFind=false;<br />                    app.findChangeTextOptions.includeLockedStoriesForFind=false;<br />                    app.findChangeTextOptions.includeMasterPages=false;<br />                    app.findChangeTextOptions.wholeWord=false;<br />                    for(n=0;n<tbl[1].length;n++){<br />                         app.findTextPreferences.findWhat=tbl[1][n][1];<br />                         app.changeTextPreferences.changeTo=tmpcd[1];<br />                         try{<br />                              doc.changeText();<br />                         }catch(e){<br />                              errmsg='★TXT変換失敗 ' + tbl[1][n][1] + "→" + tmpcd[1]<br />                              alert(errmsg);<br />                              logObj.write(errmsg);<br />                         }<br />//(5)区分が"TXT"のレコードについて中継ぎグリフからCID指定による置換を試みる<br />                         tbl[1][n][3]=cid_henkan(tmpcd[0],parseInt(tbl[1][n][2]),n,fals e);     //tbl[1][n][3]にTXT置換件数を格納<br />//(6)区分が"TXT"のレコードについてフォントがインストールされていないか、オープンタイプでないため置換できなかったものを復旧<br />                         app.findTextPreferences.findWhat=tmpcd[1];<br />                         app.changeTextPreferences.changeTo=tbl[1][n][1];<br />                         try{<br />                              insertion_points=doc.changeText();<br />                         }catch(e){<br />                              errmsg='★TXT復旧変換失敗 ' + tmpcd[1] + "→" + tbl[1][n][1]<br />                              alert(errmsg);<br />                              logObj.write(errmsg);<br />                              insertion_points=new Array();<br />                         }<br />                         logObj.write(tbl[1][n][0]+": "+tbl[1][n][1]+" → "+tbl[1][n][2]+" 変換 "+tbl[1][n][3]+"件¥n");<br />                         if(insertion_points.length>0){<br />                              logObj.write("TXT: "+tbl[1][n][1]+" → "+tbl[1][n][2]+" ★未変換(フォント起因) "+insertion_points.length+"件 ¥n");<br />                         }<br />                    }<br />                    alert("異体字変換が完了しました。¥n変換件数は変換リストと同じフォルダにlog_日付_時刻.txtとして格納しています。"); <br />                    app.findTextPreferences=NothingEnum.nothing;<br />                    app.changeTextPreferences=NothingEnum.nothing;<br />                    app.findGlyphPreferences=NothingEnum.nothing;<br />                    app.changeGlyphPreferences=NothingEnum.nothing;<br />               }else{<br />                    alert("★中継ぎグリフ候補の罫線素がすべてドキュメントで使われているため異体字変換出来ませんでした");<br />               }<br />               doc.close;<br />               logObj.close;<br />          }else{<br />               alert("★ログファイルが開けません");<br />          }<br />          wordObj.close;<br />     }else{<br />          alert("★変換リストが開けません");<br />     }<br />}