WarpScript is fully extensible through a mechanism called extensions which modify the set of functions known to WarpScript.
WarpScript extensions are Java classes extending
getFunctions method of the base class should be overridden, it will return a map of function name to function instance that will modify the functions known to WarpScript. Extension classes must have a parameter less constructor.
By associating a null value with a function name key the named function will be removed from WarpScript when the extension is registered.
The template for creating a WarpScript extension is available on github.
A WarpScript function is a Java class which extends NamedWarpScriptFunction and implement the WarpScriptStackFunction. This latter interface has a method named
apply which is called with a stack as parameter. It is within this method that the function performs its actions, interacting with the stack.
The template for WarpScript extensions provides a
build.gradle build file with a
shadowJar task. This task will build a jar which will contain the compiled code for the extension with possible dependencies.
This jar should be placed in the class path known of the JVM launching Warp 10. For example, it can be placed in the directory
WarpScript extensions declared in the configuration are loaded at startup by Warp 10.
The declaration of an extension is done either via the
warpscript.extensions property which contains a comma separated list of class names to load, or, as a preferred solution via properties prefixed with
warpscript.extension, each one declaring a single extension.
The value of each of those properties is the fully qualified name of the
WarpScriptExtension class to instantiate.
// // Comma separated list of WarpScriptExtension classes to instantiate to modify the defined WarpScript functions // warpscript.extensions = ext.TutorialExtension // // Or Individual extension // warpscript.extension.template = ext.TutorialExtension
If you prefix such name by a sorting key followed by
#. This capability exists so you can control the order in which the extensions are loaded.
warpscript.extension.template1 = 1#ext.TutorialExtensionOne warpscript.extension.template3 = 3#ext.TutorialExtensionThree warpscript.extension.template2 = 2#ext.TutorialExtensionTwo
If the configuration file contains a property named after the fully qualified class name prefixed by
warpscript.namespace., the value will be used as a prefix of the name under which functions will be registered within WarpScript.
warpscript.extension.test = test.TestWarpScriptExtension warpscript.namespace.test.TestWarpScriptExtension = foo.
will register all functions of the
Note that the name of the function will appear in error messages WITHOUT the namespace.