初歩のシェルではないスクリプトで遊ぶ[ぬかみそフォントの制作サポート(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;
		}
	}
}




}