概要
- 選択したオブジェクトのプロパティを 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