初歩のシェルではないスクリプトで遊ぶ[ぬかみそフォントの制作サポート(19)]
TTEdit,OTEditの制御点データをcsvファイルへ書き出す
TTEditでは、画像の赤枠で囲った部分、座標の値を、csvファイルで書き出すことができます。
書き出したcsvファイルは、TTEditに読み込むこともできます。
どちらも一文字ずつならGUIでできますが、GUIで一括書き出しの機能は見当たりません。
読み込みなら「フォルダ内全てのファイルをインポート」がありますが、縦書き文字のインポートの方法がよくわかりません。
このあたりの機能を、TTEdit,OTEditのJavaScriptマクロで作ります。Windows 32bit版専用です。
いつまでマクロ機能を使えるのか、非常に怪しいところではありますが。
それぞれのスクリプトで一カ所ずつ、保存先のフォルダの書き換えが必要です。
私はWindows10でユーザ名「Narr」で使っていて、デスクトップに作業用のフォルダ「003」を置いてまして、そこに保存する設定にしてます。エクスプローラから保存したいフォルダのフルパスをコピーして、フォルダの区切りの「\」を「\\」に書き換えると簡単です。
扱うフォントファイルは、TrueType/OpenTypeのそれぞれTTEdit,OTEditで作成するデフォルトフォントファイルを想定してます。(世間一般のフォントを書き出せるかどうかは分からないよ、ということ。)
スクリプト自体は、武蔵システムのサンプルスクリプトの改変です。が、以下のスクリプトは、そのままでは使わないほうが良いです。
なぜなら私がJavaScriptを全く知らないから。
武蔵システムのサンプルスクリプトを改変するときの参考にする、程度にしておいてください。無保証、ということで宜しくお願いします。
TTEdit 横書き文字すべてをcsvファイルに書き出し
書き出しcsvファイル名は、TTEditの一括インポート機能に合わせて設定してます。
// 指定範囲でグリフが存在するコードをCSVエクスポート TTEdit専用 // csvファイルの出力先は「csvSavePath」で設定する。 // 絶対パス指定しなくとも、csvを保存する作業をUIメニューから実行すると、ディレクトリ指定が可能ではある。 // しかし、エクスポートでは可能だが、インポートではできない。操作を統一して作業を安定させるため、絶対パスで明示する。 // エクスポート先フォルダのパス // 「\」は2回続けて書くこと // ディレクトリの末尾に「\\」は付加しないこと var csvSavePath = "C:\\Users\\Narr\\Desktop\\003" var ERRNUM_STOPMACRO = 3000 ; // マクロ中止時のエラー番号 var ERRNUM_INVALIDCODE = 2006 ; // 無効文字のエラー番号 function Main(){ var StartCode = 0x0020 ; // 開始コード値 横書き //var EndCode = 0x0030 ; // 終了コード値 横書き テスト用 var EndCode = 0x2ffff ; // 終了コード値 横書き var Code ; // 編集対象コード var errorNumber ; // エラー番号 var WshShell = new ActiveXObject("WScript.Shell"); var Doc = Application.ActiveDocument; // Documentオブジェクト if ( Application.Name != "TTEdit"){ WshShell.Popup( "TTEditのみ実行可能です" ); return; } if (!Doc) { WshShell.Popup("フォントファイルがオープンされていません") ; return; } // WshShell.Popup(Application.Path) ; for (Code=StartCode; Code<=EndCode ; Code = Code + 1) { try { if ( Doc.IsRegisteredCode( 2,Code,false ) ){ true ; }else { continue ; } Doc.SetCode( 2 , Code , false ) ; // Unicode,Code,横書き CodeHex = Code.toString( 16 ) ; Doc.ExportCSVFile( csvSavePath + "\\U" + CodeHex + ".csv", true); } catch (e) { errorNumber = e.number & 0xffff; if (errorNumber == ERRNUM_STOPMACRO) { // マクロ中止ボタン return; } if (errorNumber != ERRNUM_INVALIDCODE) { WshShell.Popup("エラー番号" + String(errorNumber) + ":" + e.description); return; } } } }
TTEdit 縦書き文字すべてをcsvファイルに書き出し
縦書きのcsvファイル名は、横書きと同様のTTEdit一括読み込み仕様に、「_」を付加しています。
// 指定範囲でグリフが存在するコードをCSVエクスポート TTEdit 縦書き専用 // 出力ファイル名は「_Uxxxx.csv」とする。 // エクスポート先フォルダのパス // 「\」は2回続けて書くこと // ディレクトリの末尾に「\\」は付加しないこと var csvSavePath = "C:\\Users\\Narr\\Desktop\\003" var ERRNUM_STOPMACRO = 3000 ; // マクロ中止時のエラー番号 var ERRNUM_INVALIDCODE = 2006 ; // 無効文字のエラー番号 function Main(){ var StartCode = 0x0020 ; // 開始コード値 縦書きUnicode var EndCode = 0xffff ; // 終了コード値 縦書き 基本多言語面のみ // var EndCode = 0x02ffff ; // 終了コード値 縦書き var Code ; // 編集対象コード var errorNumber ; // エラー番号 var WshShell = new ActiveXObject("WScript.Shell"); var Doc = Application.ActiveDocument; // Documentオブジェクト if ( Application.Name != "TTEdit"){ WshShell.Popup( "TTEditのみ実行可能です" ); return; } if (!Doc) { WshShell.Popup("フォントファイルがオープンされていません") ; return; } // WshShell.Popup(Application.Path) ; for (Code=StartCode; Code<=EndCode ; Code = Code + 1) { try { if ( Doc.IsRegisteredCode( 2,Code,true ) ){ true ; } else { continue ; } Doc.SetCode( 2 , Code , true ) ; // Unicode,Code,縦書き CodeHex = Code.toString( 16 ) ; Doc.ExportCSVFile( csvSavePath + "\\_U" + CodeHex + ".csv", true ); } catch (e) { errorNumber = e.number & 0xffff; if (errorNumber == ERRNUM_STOPMACRO) { // マクロ中止ボタン return; } if (errorNumber != ERRNUM_INVALIDCODE) { WshShell.Popup("エラー番号" + String(errorNumber) + ":" + e.description); return; } } } }
TTEdit 縦書き文字全てを一括で読み込み
上のスクリプトで書き出した縦書き文字のcsvファイルを、順番に読み込みます。
// 複数のCSVをインポート TTEdit 縦書き専用 // 一度csvを読み込む作業をして、読み込み元ディレクトリを決め、ようとしても動かない。 // 絶対パスをスクリプト内で指定する必要がある。 // TTEditの「フォルダ内全てのファイルをインポート」では、縦書き文字はインポートできない模様 // ファイル名を連続インポートすることは諦めて、頭に「_」をつけておく // Unicodeの総当たりで処理するため、処理に時間はそこそこかかる。 // インポート元フォルダのパス //「\」は2回続けて書くこと // ディレクトリの末尾に「\\」は付加しないこと var csvLoadPath = "C:\\Users\\Narr\\Desktop\\003" var ERRNUM_STOPMACRO = 3000 ; // マクロ中止時のエラー番号 var ERRNUM_INVALIDCODE = 2006 ; // 無効文字のエラー番号 function Main(){ var StartCode = 0x0020 ; // 開始コード値 縦書きUnicode var EndCode = 0xffff ; // 終了コード値 縦書き 基本多言語面のみ // var EndCode = 0x02ffff ; // 終了コード値 縦書き var Code ; // 編集対象コード var errorNumber ; // エラー番号 var WshShell = new ActiveXObject("WScript.Shell"); var Doc = Application.ActiveDocument; // Documentオブジェクト if ( Application.Name != "TTEdit"){ WshShell.Popup( "TTEditのみ実行可能です" ); return; } if (!Doc) { WshShell.Popup("フォントファイルがオープンされていません") ; return; } // WshShell.Popup(Application.Path) ; for (Code=StartCode; Code<=EndCode ; Code = Code + 1) { try { Doc.SetCode( 2 , Code , true ) ; // Unicode,Code,縦書き CodeHex = Code.toString( 16 ) ; // WshShell.Popup( csvLoadPath + "\\_U" + CodeHex + ".csv") ; // 【debug】 Doc.ImportCSVFile( csvLoadPath + "\\_U" + CodeHex + ".csv" ); Doc.UnSelectAll() ; } catch (e) { errorNumber = e.number & 0xffff; if (errorNumber == ERRNUM_STOPMACRO) { // マクロ中止ボタン return; } if (errorNumber != ERRNUM_INVALIDCODE) { WshShell.Popup("エラー番号" + String(errorNumber) + ":" + e.description); return; } } } }
OTEdit cid順でcsvファイルをすべて書き出し
// 指定範囲でグリフが存在するコードをCSVエクスポート OpenType専用 CID全部 // エクスポート先フォルダのパス 「\」は2回続けて書くこと // ディレクトリの末尾に「\\」は付加しないこと var csvSavePath = "C:\\Users\\Narr\\Desktop\\003" var ERRNUM_STOPMACRO = 3000; // マクロ中止時のエラー番号 var ERRNUM_INVALIDCODE = 2006; // 無効文字のエラー番号 function Main(){ var StartCode = 0; // 開始CIDコード var EndCode = 23059; // 終了CIDコード var Code; // 編集対象コード var errorNumber; // エラー番号 var WshShell = new ActiveXObject("WScript.Shell"); var Doc = Application.ActiveDocument; // Documentオブジェクト if ( Application.Name != "OTEdit"){ WshShell.Popup( "OTEditのみ実行可能" ); return; } if (!Doc) { WshShell.Popup("フォントファイルがオープンされていません"); return; } for ( Code = StartCode ; Code <= EndCode ; Code = Code + 1 ) { try { Doc.SetCode( 3 , Code , 0) ; // CID , Code , よくわからないが0 if ( Doc.TotalPoint >= 1 ){ true ; } else { continue ; } Doc.ExportCSVFile( csvSavePath + "\\C" + Code + ".csv", true ); } catch (e) { errorNumber = e.number & 0xffff; if (errorNumber == ERRNUM_STOPMACRO) // マクロ中止ボタン return; if (errorNumber != ERRNUM_INVALIDCODE) { WshShell.Popup("エラー番号" + String(errorNumber) + ":" + e.description); return; } } } }