Class ScriptMonkey
- java.lang.Object
-
- ca.cgjennings.apps.arkham.plugins.ScriptMonkey
-
public final class ScriptMonkey extends java.lang.ObjectAScriptMonkeymanages the execution of a script from Strange Eons.- Author:
- Chris Jennings
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringCLEAR_CONSOLE_ON_RUN_KEYA boolean setting key that stores whether the script output console should be cleared before running a script.static java.lang.StringON_INSTALL_EVENT_KEYIf a component's private settings set this key, then the script it contains will be executed when the component is installed in an editor.static java.lang.StringON_PAINT_EVENT_KEYIf a component's private settings set this key, thenSheets evaluate the script it contains and call the functiononPaint( Graphics2D, GameComponent, Sheet ).static java.nio.charset.CharsetSCRIPT_FILE_ENCODINGThe standard encoding for script code stored in a file (UTF-8).static java.lang.StringVAR_APPLICATIONThe reserved variable name for the application instance (Eons)static java.lang.StringVAR_COMPONENTThe reserved variable name for the active (edited) game component (Component).static java.lang.StringVAR_CONTEXTThe reserved variable name for the script'sPluginContext(PluginContext).static java.lang.StringVAR_EDITORThe reserved variable name for the active (selected) editor (Editor).static java.lang.StringVAR_FILEThe reserved variable name for the source file name (sourcefile).
-
Constructor Summary
Constructors Constructor Description ScriptMonkey(java.lang.String scriptFileName)Creates a newScriptMonkeythat can be used to execute script code.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.ObjectambivalentCall(java.lang.String method, java.lang.Object... args)Call a script function, returningnullwithout displaying an error if the method does not exist.voidbind(PluginContext pluginContext)Binds the specifiedPluginContextto the global scope.voidbind(java.lang.String name, java.lang.Object object)Bind a value to a variable name in the global scope of the script.voidbindToConsoleInput()Attaches this script monkey to the shared console.java.lang.Objectcall(java.lang.String method, java.lang.Object... args)Call a script function.java.lang.Objecteval(java.io.Reader r)Evaluates a script from a reader.java.lang.Objecteval(java.lang.String s)Evaluates a script stored in a string.java.lang.Objecteval(java.net.URL url)Evaluates a script from a URL.static java.lang.StringgetCurrentScriptLocation()Returns a string describing the current file and line of the script running on the current thread.LanguagegetGameLangProvider()Returns theLanguageobject that is used to look up game strings with #string_key syntax.static java.lang.StringgetLibrary(java.lang.String name)Returns a library as a string.SettingsgetSettingProvider()Returns theSettingsobject that is used to look up settings with $setting_name syntax.static ScriptConsolegetSharedConsole()Returns the shared script console.LanguagegetUiLangProvider()Returns theLanguageobject that is used to look up interface strings with @string_key syntax.<T> Timplement(java.lang.Class<T> klass)Returns an object that implements a Java interface by calling script functions.static voidincludeLibrary(javax.script.ScriptEngine engine, java.lang.String name)Evaluate a library file within the current script context.static booleanisLibraryNameAURL(java.lang.String s)Returnstrueif a library identifier is actually a URL.static java.lang.ObjectrunResourceCreationScript(java.lang.String resource)Runs a resource creation script stored in a resource file.static booleanrunResourceScript(java.lang.String resource, boolean debug)Runs a script file stored in a resource file.static voidscriptError(java.lang.Throwable se)Handles an error as if it was an uncaught exception thrown from a script.voidsetBreakpoint(boolean breakpoint)If the debugger is enabled, sets whether a breakpoint should be set at the start of the next script evaluation.voidsetGameLangProvider(Language language)Sets theLanguageobject that is used to look up game strings with #string_key syntax.voidsetInternalFileName(java.lang.String name)The script engine tracks two identifiers for the source of the script.voidsetSettingProvider(Settings settings)Sets theSettingsobject that is used to look up settings with $setting_name syntax.voidsetUiLangProvider(Language language)Sets theLanguageobject that is used to look up interface strings with @string_key syntax.
-
-
-
Field Detail
-
ON_INSTALL_EVENT_KEY
public static final java.lang.String ON_INSTALL_EVENT_KEY
If a component's private settings set this key, then the script it contains will be executed when the component is installed in an editor.- See Also:
- Constant Field Values
-
ON_PAINT_EVENT_KEY
public static final java.lang.String ON_PAINT_EVENT_KEY
If a component's private settings set this key, thenSheets evaluate the script it contains and call the functiononPaint( Graphics2D, GameComponent, Sheet ).- See Also:
- Constant Field Values
-
CLEAR_CONSOLE_ON_RUN_KEY
public static final java.lang.String CLEAR_CONSOLE_ON_RUN_KEY
A boolean setting key that stores whether the script output console should be cleared before running a script. This applies to user-initiated actions, like right-clicking on a script editor and choosing Run. It has no effect in other circumstances, such as when plug-ins are being loaded.- See Also:
- Constant Field Values
-
VAR_APPLICATION
public static final java.lang.String VAR_APPLICATION
The reserved variable name for the application instance (Eons)- See Also:
- Constant Field Values
-
VAR_CONTEXT
public static final java.lang.String VAR_CONTEXT
The reserved variable name for the script'sPluginContext(PluginContext).- See Also:
- Constant Field Values
-
VAR_COMPONENT
public static final java.lang.String VAR_COMPONENT
The reserved variable name for the active (edited) game component (Component).- See Also:
- Constant Field Values
-
VAR_EDITOR
public static final java.lang.String VAR_EDITOR
The reserved variable name for the active (selected) editor (Editor).- See Also:
- Constant Field Values
-
VAR_FILE
public static final java.lang.String VAR_FILE
The reserved variable name for the source file name (sourcefile).- See Also:
- Constant Field Values
-
SCRIPT_FILE_ENCODING
public static final java.nio.charset.Charset SCRIPT_FILE_ENCODING
The standard encoding for script code stored in a file (UTF-8).
-
-
Constructor Detail
-
ScriptMonkey
public ScriptMonkey(java.lang.String scriptFileName)
Creates a newScriptMonkeythat can be used to execute script code.- Parameters:
scriptFileName- the identifier to associate with the code that will be executed; this will be reported as the script's file name in error messages- See Also:
setInternalFileName(java.lang.String)
-
-
Method Detail
-
setInternalFileName
public void setInternalFileName(java.lang.String name)
The script engine tracks two identifiers for the source of the script. One is the "sourcefile" variable available to the script. When a plug-in is running, this will normally be the same name as the other, true, identifier. But when running a script "on demand", as from the project Run command or the Quickscript window, then theScriptMonkeywill typically be constructed using the file name "Quickscript", because many scripts check for this and change their behaviour accordingly. (For example, the source code for a plug-in might run a test of the plug-in functionality.) However, in this case the script will also report the identifier "Quickscript" in error messages, which may not be ideal. This method can be used to set the internal name to a different value than the one available to the script, so that error messages display a more appropriate name.- Parameters:
name- the internal identifier to use when the script is evaluated
-
getSharedConsole
public static ScriptConsole getSharedConsole()
Returns the shared script console.- Returns:
- the script output window
-
bindToConsoleInput
public void bindToConsoleInput()
Attaches this script monkey to the shared console. Input from the console will be executed in the context of this monkey until the binding is changed.
-
implement
public <T> T implement(java.lang.Class<T> klass)
Returns an object that implements a Java interface by calling script functions. Functions that are not defined in the evaluated script code will do nothing. If such missing functions return a value in the specified interface, they will return zero if the return type is a primitive numeric type, ornullotherwise.- Type Parameters:
T- the type of the implemented interface- Parameters:
klass- the class value of the interface to implement- Returns:
- an instance of the requested class that is implemented by script code
-
eval
public java.lang.Object eval(java.net.URL url)
Evaluates a script from a URL. Any errors will be displayed on the script console.- Parameters:
url- the URL that contains script code to execute- Returns:
- the return value of the script code, if any
-
eval
public java.lang.Object eval(java.io.Reader r)
Evaluates a script from a reader. Any errors will be displayed on the script console.- Parameters:
r- the reader that contains script code to execute- Returns:
- the return value of the script code, if any
-
eval
public java.lang.Object eval(java.lang.String s)
Evaluates a script stored in a string. Any errors will be displayed on the script console.- Parameters:
s- the script code to execute- Returns:
- the return value of the script code, if any
-
ambivalentCall
public java.lang.Object ambivalentCall(java.lang.String method, java.lang.Object... args)Call a script function, returningnullwithout displaying an error if the method does not exist. If a script error occurs, an error message is displayed andnullis returned.- Parameters:
method- the name of a script functionargs- the arguments to pass to the function- Returns:
- the return value of the function
-
call
public java.lang.Object call(java.lang.String method, java.lang.Object... args)Call a script function. If the function does not exist, an error message is displayed and aNoSuchMethodExceptionexception is returned. If a script error occurs, the error is printed on the console and returned. Otherwise, the return value of the function (ornull) is returned.- Parameters:
method- the name of a script functionargs- the arguments to pass to the function- Returns:
- the return value of the function
-
bind
public void bind(java.lang.String name, java.lang.Object object)Bind a value to a variable name in the global scope of the script.- Parameters:
name- the variable name to bindobject- the value to assign to the variable name- Throws:
java.lang.NullPointerException- if the variable name isnulljava.lang.IllegalArgumentException- if the variable name starts with a reserved character ($, @, #)
-
bind
public void bind(PluginContext pluginContext)
Binds the specifiedPluginContextto the global scope.- Parameters:
pluginContext- the plug-in context to bind (may benull)- See Also:
PluginContextFactory
-
scriptError
public static void scriptError(java.lang.Throwable se)
Handles an error as if it was an uncaught exception thrown from a script.- Parameters:
se- the script exception (or pseudo-script exception) to handle
-
runResourceScript
public static boolean runResourceScript(java.lang.String resource, boolean debug)Runs a script file stored in a resource file. The script is simply evaluated; no specific function is called or result captured. Returnstrueif the script was loaded and run without error,falseotherwise.- Parameters:
resource- the resource file containing the script- Returns:
trueif a breakpoint should be set at the start of the script
-
runResourceCreationScript
public static java.lang.Object runResourceCreationScript(java.lang.String resource)
Runs a resource creation script stored in a resource file. The script is evaluated and then itscreateResource()method is invoked. The result of that function is then returned. If there is an error loading or running the script, anullvalue is returned. If the script is missing, an error message is shown. If there is an error in the script, it is displayed in the output console.- Parameters:
resource- the resource file containing the script- Returns:
- the object returned from
createResource(), ornull
-
setBreakpoint
public void setBreakpoint(boolean breakpoint)
If the debugger is enabled, sets whether a breakpoint should be set at the start of the next script evaluation. This setting reverts to false when the next script is evaluated. If the debugger is not enabled, this method has no effect.- Parameters:
breakpoint-
-
setSettingProvider
public void setSettingProvider(Settings settings)
Sets theSettingsobject that is used to look up settings with $setting_name syntax.- Parameters:
settings- the settings that will be visible in the global scope
-
getSettingProvider
public Settings getSettingProvider()
Returns theSettingsobject that is used to look up settings with $setting_name syntax.- Returns:
- the settings that are visible in the global scope
-
setUiLangProvider
public void setUiLangProvider(Language language)
Sets theLanguageobject that is used to look up interface strings with @string_key syntax. Passingnullwill reset the language toLanguage.getInterface().- Parameters:
language- the UI language whose strings will be visible in the global scope
-
getUiLangProvider
public Language getUiLangProvider()
Returns theLanguageobject that is used to look up interface strings with @string_key syntax.- Returns:
- the interface language that is visible in the global scope
-
setGameLangProvider
public void setGameLangProvider(Language language)
Sets theLanguageobject that is used to look up game strings with #string_key syntax. Passingnullwill reset the language toLanguage.getGame().- Parameters:
language- the game language whose strings will be visible in the global scope
-
getGameLangProvider
public Language getGameLangProvider()
Returns theLanguageobject that is used to look up game strings with #string_key syntax.- Returns:
- the game language that is visible in the global scope
-
includeLibrary
public static void includeLibrary(javax.script.ScriptEngine engine, java.lang.String name) throws javax.script.ScriptException, java.io.IOException, java.net.MalformedURLExceptionEvaluate a library file within the current script context. This method is not intended for external use, although nothing prevents it. It is invoked from within scripts in order to processuseLibrary()calls.- Parameters:
engine- the engine to add the library toname- the library's identifier, or a URL that points to it- Throws:
javax.script.ScriptException- if the library evaluation results in an errorjava.io.IOException- if there is an error loading the libraryjava.net.MalformedURLException- if the URL is invalid
-
getLibrary
public static java.lang.String getLibrary(java.lang.String name) throws java.io.IOException, java.net.MalformedURLExceptionReturns a library as a string. If the string contains :, it is treated as a URL and the library is fetched from that location. Otherwise, it is assumed to be a standard library that lives in resources/libraries. In this case, the ".js" extension is added automatically.- Parameters:
name- the library name (or a URL)- Returns:
- the requested library
- Throws:
java.io.IOExceptionjava.net.MalformedURLException
-
isLibraryNameAURL
public static boolean isLibraryNameAURL(java.lang.String s)
Returnstrueif a library identifier is actually a URL. For example, it would returnfalsefor "imageutils", buttruefor "res://my/library.js".- Parameters:
s- the identifier to check- Returns:
trueif the identifier is not a simple library name
-
getCurrentScriptLocation
public static java.lang.String getCurrentScriptLocation()
Returns a string describing the current file and line of the script running on the current thread.- Returns:
- the location of the currently running script, or null
-
-