sleep.interfaces
Interface Environment
- DefaultEnvironment
public interface Environment
Blocks of code associated with an identifier are processed by their environment. An example of an environment is the
subroutine environment. To declare a subroutine in sleep you use:
sub identifier { commands; }
When sleep encounters this code it looks for the environment bound to the keyword "sub". It passes the environment
for "sub" a copy of the script instance, the identifier, and the block of executable code. The environment can do
anything it wants with this information. The subroutine environment simply creates a Function object with the block of code and
installs it into the environment. Thus allowing scripts to declare custom subroutines.
In general a block of code is associated with an environment using the following syntax:
keyword identifier { commands; } # sleep code
Script environment bridge keywords should be registered with the script parser before any scripts are loaded. This
can be accomplished as follows:
ParserConfig.addKeyword("keyword");
To install a new environment into the script environment:
ScriptInstance script; // assume
Environment myEnvironmentBridge; // assume
Hashtable environment = script.getScriptEnvironment().getEnvironment();
environment.put("keyword", myEnvironmentBridge);
The Block object passed to the environment can be executed using:
SleepUtils.runCode(commands, instance.getScriptEnvironment());
Environment bridges are great for implementing different types of paradigms. I've used this feature to add everything
from event driven scripting to popup menu structures to my application. Environments are a very powerful way to get the
most out of integrating your application with the sleep language.
abstract void | bindFunction(ScriptInstance si, String typeKeyword, String functionName, Block functionBody) - binds a function (functionName) of a certain type (typeKeyword) to the defined functionBody.
|
bindFunction
public abstract void bindFunction(ScriptInstance si,
String typeKeyword,
String functionName,
Block functionBody)
binds a function (functionName) of a certain type (typeKeyword) to the defined functionBody.
typeKeyword
- the keyword for the function. (i.e. sub)functionName
- the function name (i.e. add)functionBody
- the compiled body of the function (i.e. code to add 2 numbers)