JSScriptingSuite.h
Go to the documentation of this file.
00001 // ADOBE SYSTEMS INCORPORATED
00002 // Copyright  2002-2003 Adobe Systems Incorporated
00003 // All Rights Reserved
00004 //
00005 // NOTICE:  Adobe permits you to use, modify, and distribute this
00006 // file in accordance with the terms of the Adobe license agreement
00007 // accompanying it.  If you have received this file from a source
00008 // other than Adobe, then your use, modification, or distribution
00009 // of it requires the prior written permission of Adobe.
00026 #ifndef __JSScriptingSuite__
00027 #define __JSScriptingSuite__
00028 
00029 #if MC_WIN
00030 #include <crtdefs.h>
00031 #endif
00032 
00033 #ifndef __ASTypes__
00034 #include "ASTypes.h"
00035 #endif
00036 
00037 #ifndef __ASPragma__
00038 #include "ASPragma.h"
00039 #endif
00040 
00041 #ifndef __SPFiles__
00042 #include "SPFiles.h"
00043 #endif
00044 
00045 #ifdef __cplusplus
00046 extern "C" {
00047 #endif
00048 
00049 #pragma PRAGMA_IMPORT_BEGIN
00050 
00051 
00052 /*******************************************************************************
00053  * @defgroup JavaScriptSuite
00054  **/
00055 
00057 #define kJSScriptingSuite               "JavaScript Scripting Suite"
00058 #define kJSScriptingSuiteVersion4       4L
00059 #define kJSScriptingSuiteVersion3       3L
00060 #define kJSScriptingSuiteVersion2       2L
00061 #define kJSScriptingSuiteVersion1       1L
00062 #define kJSScriptingSuiteVersion        kJSScriptingSuiteVersion3
00063 #define kJSScriptingVersion             kJSScriptingSuiteVersion
00064 
00065 
00066 //-------------------------------------------------------------------------------
00067 //  Error codes.
00068 //-------------------------------------------------------------------------------
00077 #define kJSScriptExecutionError         'ScEr'  
00078 #define kJSScriptInternalError          'ScIE'  
00079 #define kJSScriptGeneralError           'ScGr'  
00080 #define kJSScriptCantCreateEngine       'ScCJ'  
00081 #define kJSScriptBadEnginReference      'ScBR'  
00082 #define kJSScriptLanguageNotSupported   'Sc!s'  
00083 #define kJSBufferTooSmall               'Sbts'        // close defgroup, because I don't want others to appear in it.
00086 
00087 /*******************************************************************************
00088  **
00089  ** Types
00090  **
00091  **/
00092 
00094 typedef struct _t_JSEngine              * JSEngineRef; 
00098 enum  JavaScriptExecutionMode
00099 {
00100     kJSExecutionModeNoDebug             = 1,    
00101     kJSExecutionModeDebugOnError        = 2,    
00102     kJSExecutionModeDebugAtBeginning    = 3 
00103 };
00104 
00105 
00106 
00107 /*******************************************************************************
00108  * @ingroup JavaScriptSuite
00109 
00110     How to use the Scripting suite:
00111     
00112     To execute a JavaScript script inside a host application, you must acquire 
00113     and use a JavaScript engine instance.
00114 
00115     A typical use of the engine:
00116 
00117         JSEngineRef     engineRef = NULL;
00118         SPErr           err = noErr;
00119 
00120         JSScriptingSuite2 * sScriptingSuite = NULL;
00121         err = basicSuite->AcquireSuite(kJSScriptingSuite, 
00122                                    kJSScriptingSuiteVersion, 
00123                                    (const void **)&sScriptingSuite);
00124         if ( err == kSPNoError ) 
00125         {
00126             err = sScriptingSuite->CreateEngine( &engineRef );
00127             if ( err == kSPNoError )
00128             {
00129                 const ASUnicode        scriptText[] = {'a', 'l', 'e', 'r', 't', '(', '\'', 'h', 'i', '\'', ')', ';', 0 } ;  //    Script to create a new document
00130                 const ASUnicode        * result = NULL;
00131             
00132                 err = sScriptingSuite->ExecuteScript( engineRef, scriptText, kJSExecutionModeNoDebug, &result );
00133                 if ( err == kJSScriptExecutionError )
00134                 {
00135                     //  If error during execution, display a dialog containing returned error information string.
00136                     // ErrorAlert( result );
00137                 }
00138             }
00139         }
00140         
00141         ...
00142         
00143         err = sScriptingSuite->DeleteEngine( engineRef );
00144         engineRef = NULL;
00145 
00146         basicSuite->ReleaseSuite(kJSScriptingSuite, 
00147                                    kJSScriptingSuiteVersion);
00148 
00149 
00150     Notes:
00151     
00152         Do not deallocate the result value.  The engine instance owns it and will dispose of it.
00153 
00154         The engine instance doesn't need to be deleted after calling ExecuteJavaScript.  If you execute 
00155         multiple JavaScript scripts inside the same engine instance they will share the same context 
00156         (including global variables).  If you want scripts to execute independently use a different 
00157         engine instance for each script.
00158 */
00159 
00163 typedef struct {
00164 
00166     ASAPI ASBoolean (*ScriptIsRunning) ( void );
00167 
00169     ASAPI ASErr (*CreateEngine) ( JSEngineRef * engineRefPtr );
00170     
00172     ASAPI ASErr (*DeleteEngine) ( JSEngineRef engineRef );
00173 
00177     ASAPI ASErr (*SetIncludePath) ( JSEngineRef engineRef, const ASUnicode * includePath );
00178     
00184     ASAPI ASErr (*GetIncludePath) ( JSEngineRef engineRef, ASUnicode * includePathBuff, long * buffSize );
00185 
00193     ASAPI ASErr (*ExecuteScript) ( JSEngineRef              engineRef,
00194                                    const ASUnicode          * script,
00195                                    JavaScriptExecutionMode  executionMode,
00196                                    const ASUnicode          ** result );
00197 
00199 
00212     ASAPI ASErr (*SuspendResumeAppleEventProcessing) (ASBoolean suspend);
00213     
00216     ASAPI ASErr (*IsAppleEventProcessingSuspended) (ASBoolean* suspended);
00217 
00221     ASAPI ASErr (*HasSuspendedAppleEvents) (ASBoolean* hasEvents);
00222 
00223 } JSScriptingSuite4;
00224 
00226 typedef struct {
00227 
00229     ASAPI ASBoolean (*ScriptIsRunning) ( void );
00230 
00232     ASAPI ASErr (*CreateEngine) ( JSEngineRef * engineRefPtr );
00233     
00235     ASAPI ASErr (*DeleteEngine) ( JSEngineRef engineRef );
00236 
00240     ASAPI ASErr (*SetIncludePath) ( JSEngineRef engineRef, const ASUnicode * includePath );
00241     
00247     ASAPI ASErr (*GetIncludePath) ( JSEngineRef engineRef, ASUnicode * includePathBuff, long * buffSize );
00248 
00256     ASAPI ASErr (*ExecuteScript) ( JSEngineRef              engineRef,
00257                                    const ASUnicode          * script,
00258                                    JavaScriptExecutionMode  executionMode,
00259                                    const ASUnicode          ** result );
00260 
00262 
00275     ASAPI ASErr (*SuspendResumeAppleEventProcessing) (ASBoolean suspend);
00276     
00279     ASAPI ASErr (*IsAppleEventProcessingSuspended) (ASBoolean* suspended);
00280 
00281 } JSScriptingSuite3;
00282 
00284 typedef struct {
00285 
00287     ASAPI ASBoolean (*ScriptIsRunning) ( void );
00288 
00290     ASAPI ASErr (*CreateEngine) ( JSEngineRef * engineRefPtr );
00291     
00293     ASAPI ASErr (*DeleteEngine) ( JSEngineRef engineRef );
00294 
00298     ASAPI ASErr (*SetIncludePath) ( JSEngineRef engineRef, const ASUnicode * includePath );
00299     
00305     ASAPI ASErr (*GetIncludePath) ( JSEngineRef engineRef, ASUnicode * includePathBuff, long * buffSize );
00306 
00314     ASAPI ASErr (*ExecuteScript) ( JSEngineRef              engineRef,
00315                                    const ASUnicode          * script,
00316                                    JavaScriptExecutionMode  executionMode,
00317                                    const ASUnicode          ** result );
00318 
00320 
00321 
00322 
00324     ASAPI ASErr (*CreateEngineAPE) ( JSEngineRef * engineRefPtr, intptr_t apeEngineRef  );
00325 
00326 } JSScriptingSuite2;
00327 
00328 
00329 
00332 typedef struct {
00333 
00335     ASAPI ASBoolean (*ScriptIsRunning) ( void );
00336 
00338     ASAPI ASErr (*CreateEngine) ( JSEngineRef * engineRefPtr );
00339     
00341     ASAPI ASErr (*DeleteEngine) ( JSEngineRef engineRef );
00342 
00346     ASAPI ASErr (*SetIncludePath) ( JSEngineRef engineRef, const ASUnicode * includePath );
00347     
00353     ASAPI ASErr (*GetIncludePath) ( JSEngineRef engineRef, ASUnicode * includePathBuff, long * buffSize );
00354 
00362     ASAPI ASErr (*ExecuteScript) ( JSEngineRef              engineRef,
00363                                    const ASUnicode          * script,
00364                                    JavaScriptExecutionMode  executionMode,
00365                                    const ASUnicode          ** result );
00366 
00367 } JSScriptingSuite1;
00368 
00369 
00370 
00371 /*******************************************************************************
00372  * @defgroup Script Value suite
00373  **/
00374 typedef struct Opaque_ScriptValueRef*                   ScriptValueRef;
00375 
00378 enum
00379 {
00380     kScriptValue_Undefined,
00381     kScriptValue_Null,
00382     kScriptValue_Boolean,
00383     kScriptValue_Number,
00384     kScriptValue_String,
00385     kScriptValue_Array,
00386     kScriptValue_Object,
00387     kScriptValue_ByteArray
00388 };
00389 typedef SPInt32 ScriptValueType;
00390 
00391 enum
00392 {
00393     kScriptValue_Double,
00394     kScriptValue_Int32,
00395     kScriptValue_UInt32,
00396     kScriptValue_Int64,
00397 };
00398 typedef SPInt32 ScriptValueNumericType;
00399 
00400 typedef SPBoolean (*ScriptKeyIterator)(SPUInt32, const char*, void* userData);
00401 
00403 #define kScriptValueSuite                "Script Value Suite"
00404 #define kScriptValueSuiteVersion1        1L
00405 
00406 typedef struct {
00407     ASAPI ASErr (*CreateUndefined)(ScriptValueRef* valueRef);
00408     ASAPI ASErr (*CreateNull)(ScriptValueRef* valueRef);
00409     ASAPI ASErr (*CreateBoolean)(SPBoolean value, ScriptValueRef* valueRef);
00410     ASAPI ASErr (*CreateDouble)(double value, ScriptValueRef* valueRef);
00411     ASAPI ASErr (*CreateInt32)(SPInt32 value, ScriptValueRef* valueRef);
00412     ASAPI ASErr (*CreateUInt32)(SPUInt32 value, ScriptValueRef* valueRef);
00413     ASAPI ASErr (*CreateInt64)(int64_t value, ScriptValueRef* valueRef);
00414     ASAPI ASErr (*CreateUTF8)(const char* value, ScriptValueRef* valueRef);
00415     ASAPI ASErr (*CreateArray)(ScriptValueRef* valueRef);
00416     ASAPI ASErr (*CreateObject)(ScriptValueRef* valueRef);
00417 
00418     ASAPI ASErr (*DestroyValue)(ScriptValueRef valueRef);
00419 
00420     ASAPI ASErr (*GetType)(ScriptValueRef valueRef, ScriptValueType* type);
00421     ASAPI ASErr (*GetNumericType)(ScriptValueRef valueRef, ScriptValueNumericType* type);
00422     ASAPI ASErr (*GetBoolean)(ScriptValueRef valueRef, ASBoolean* value);
00423     ASAPI ASErr (*GetDouble)(ScriptValueRef valueRef, double* value);
00424     ASAPI ASErr (*GetInt32)(ScriptValueRef valueRef, SPInt32* value);
00425     ASAPI ASErr (*GetUInt32)(ScriptValueRef valueRef, SPUInt32* value);
00426     ASAPI ASErr (*GetInt64)(ScriptValueRef valueRef, int64_t* value);
00427 
00428     ASAPI ASErr (*GetUTF8Length)(ScriptValueRef valueRef, SPUInt32* length);
00429     ASAPI ASErr (*GetUTF8)(ScriptValueRef valueRef, SPUInt32 length, char* buffer);
00430 
00431     ASAPI ASErr (*IterateKeys)(ScriptValueRef valueRef, ScriptKeyIterator iterator, void* userData);
00432     ASAPI ASErr (*HasProperty)(ScriptValueRef valueRef, const char* name, SPBoolean* value);
00433     ASAPI ASErr (*GetProperty)(ScriptValueRef valueRef, const char* name, ScriptValueRef* value);
00434     ASAPI ASErr (*SetProperty)(ScriptValueRef valueRef, const char* name, ScriptValueRef value, SPBoolean move);
00435 
00436     ASAPI ASErr (*GetArrayLength)(ScriptValueRef valueRef, SPUInt32* count);
00437     ASAPI ASErr (*GetArrayValue)(ScriptValueRef valueRef, SPUInt32 index, ScriptValueRef* value);
00438     ASAPI ASErr (*SetArrayValue)(ScriptValueRef valueRef, SPUInt32 index, ScriptValueRef value, SPBoolean move);
00439     ASAPI ASErr (*AppendArrayValue)(ScriptValueRef valueRef, ScriptValueRef value, SPBoolean move);
00440 } ScriptValueSuite1;
00441 
00442 /*******************************************************************************
00443  * @defgroup LiveObjectSuite
00444  **/
00445 
00447 #define kLiveObjectScriptSuite                "LiveObject Script Suite"
00448 #define kLiveObjectScriptSuiteVersion1        1L
00449 
00450 typedef struct {
00453     ASAPI ASErr    (*PerformAction) (ScriptValueRef args, ScriptValueRef* result, SPBoolean* isError);
00454 } LiveObjectScriptSuite1;
00455 
00456 
00457 #pragma PRAGMA_IMPORT_END
00458 
00459 #ifdef __cplusplus
00460 }
00461 #endif
00462 
00463 #endif // __JSScriptingSuite__