Table of Contents

概要

  • 選択したオブジェクトのプロパティを YAML 形式でファイルに出力する。

ソース

  • dumpObjInfo.zip
    //	選択したオブジェクトのプロパティを YAML 形式でファイルに出力する。
    #target 'InDesign'
    #includepath "~/AppData/Roaming/Adobe/JavaScript/lib"
    #include "ominoDialogMaker.jsx" // http://omino.com/pixelblog/tag/omino-dialog/
    
    var maxDepth = 2;
    var fileName = 'D:/_temp/ObjInfo.yml';
    var reIgnore = new RegExp( '^(parent|all|event)' );
    
    var doc = app.activeDocument;
    var selected = doc.selection;
    
    var omd = newOminoDialog("dump Object Info");
    omd.saveFile( 'Output', 'fileName', fileName );
    omd.number( 'Depth', 'maxDepth', maxDepth );
    var result = omd.run();
    if ( result ){
    	fileName = result[ 'fileName' ];
    	maxDepth = result[ 'maxDepth' ];
    
    	var pltProgress = new Window( 'palette', 'dump Object Info', [100, 100, 210, 150] );
    	pltProgress.msg0 = pltProgress.add( 'statictext', [10, 10, 100, 20], 'Scanning...' );
    	pltProgress.msg1 = pltProgress.add( 'statictext', [10, 30, 100, 40], '0/' + selected.length );
    	pltProgress.show();
    
    	var result = '';
    	for( var i=0; i<selected.length; ++i ){
    		pltProgress.msg1.text = ( i + 1 ) + '/' + selected.length;
    		result += i + ':\n' + dump( selected[i], 1 );
    	}
    
    	var file = new File( fileName );
    	if ( file.open('w') ){
    		file.write( result );
    		file.close();
    		alert( 'Success: ' + file.fullName );
    	} else {
    		alert( 'Failed: ' + file.fullName );
    	}
    }
    
    function dump( obj, ind ){
    	var ret = '';
    	ind = ind || 0;
    	if ( ind <= maxDepth ){
    		for( var p in obj ){
    			try{
    				if ( !p.match(reIgnore) ){
    					ret += ( typeof( obj[p] ) == 'object' )
    						? indent( ind ) + p + ':\n' + dump( obj[p], ind+1 )
    						: ( ( typeof( obj[p] ) != 'string' )
    							? indent( ind ) + p + ': ' + obj[p] + '\n'
    							: indent( ind ) + p + ': "' + obj[p] + '"\n');
    				} else {
    					ret += indent( ind ) + p + ': "' + obj[p] + '"\n';
    				}
    			}
    			catch(e){
    				ret += indent( ind ) + p + ': "<forbidden>"\n';
    			}
    		}
    	} else {
    		ret += indent( ind ) + '"' + obj + '"\n';
    	}
    	return ret;
    }
    
    function indent( ind ){
    	var ret = '';
    	for( var i=0; i<ind; ++i ){
    		ret += '  ';
    	}
    	return ret;
    }
    
    // EOF