Skip to content

Hscript addon with script classes, imports, usings, properties, string interpolation and more.

License

Notifications You must be signed in to change notification settings

DigiEggz/RuleScript

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RuleScript

Hscript addon with script classes, imports, usings, properties, string interpolation and more.

Features:

Package

package scripts.hello.world;

Import

import haxe.ds.StringMap;

var map = new StringMap();
map.set("Hello","World");
trace(map.get("Hello")); // World

Import with alias

you can use as or in keywords alias.

import haxe.ds.StringMap as StrMap;

var map = new StrMap();
map.set("Hello","World");
trace(map.get("Hello")); // World
import haxe.ds.StringMap in StrMap;

var map = new StrMap();
map.set("Hello","World");
trace(map.get("Hello")); // World

Static field import

import Reflect.getProperty;

var a = {
	"hello":"world"
};

return getProperty(a,"hello");

Using

using Reflect;

var a = {
  "Hello":"World"
};
trace(a.getProperty("Hello")); // World

Property

var _a = 'Hello World';

var a(get,set):String;

function get_a():String
	return _a;

function set_a(v:String):String
	return _a = v;

trace(a); // Hello World

String interpolation

var a = 'Hello';
trace('RuleScript: $a World'); // RuleScript: Hello World
var a = {
    a:'RuleScript',
    b: () -> 'Hello',
    c: (a) -> a ? 'World' : '';
};
        
trace('${a.a}: ${a.b() + ' ' + a.c(true)}'); // RuleScript: Hello World

RuleScriptedClass

Rulescript supports scripted classes, they can have a strict and non-strict constructor.

Script :

class ScriptedClass extends test.ScriptedClassTest
{
	public function new(customArg:Int,arg1:String)
	{
		trace('Constructor.pre: $customArg, $arg1');
		
		super('Super Arg');

		trace('Constructor.post: $customArg, $arg1');	
	}

	override public function info()
	{
		return 'Scripted class, super info: ${super.info()}';
	}
}

Source :

class ScriptedClassTest implements RuleScriptedClass extends SrcClass {}

See Main.hx, ScriptedClassTest.hx, ScriptedClass.

Abstracts in script

RuleScriptAbstracts.txt in any classpath :

test.HelloWorldAbstract

test/HelloWorldAbstract.hx :

abstract HelloWorldAbstract(String) from String to String
{
	public static function rulescriptPrint():HelloWorldAbstract
		return 'Hello World';
}

Script :

import test.HelloWorldAbstract;

trace(HelloWorldAbstract.rulescriptPrint()); // Hello World

More templates in test/src/Main.hx.

Key => value iterator

var map = [
	'RuleScript' => 'Hello World',
];

for(key => value in map){
	trace('$key: $value'); // RuleScript: Hello World
}

?? and ??= operators

trace(null ?? 'Hello World'); // Hello World

var a = 'hello';

a ??= 'world';
trace(a); // hello

a = null;
a ??= 'world';
trace(a) // world

Rest

var f = function(hello:String, ...rest:Dynamic)
{
	return '$hello: ' + rest.join(' ');
}

trace(f('Rulescript','Hello','World','!')); // Rulescript: Hello World !

trace(f('Rulescript',...['Hello','World','!'])); // Rulescript: Hello World !

Limitations

  • Script using callback supports max number of arguments is 8.
  • Wildcard imports don't support.
  • AbstractMacro ports only static fields

To Do

  • Lua Parser
  • Improve hscript module parser

Install

  1. Installing lib:

    • haxelib version

      • Haxelib : haxelib install rulescript
      • Hmm : hmm haxelib rulescript
    • github version

      • Haxelib : haxelib git rulescript https://github.com/Kriptel/RuleScript.git
      • Hmm : hmm git rulescript https://github.com/Kriptel/RuleScript.git
    • github version (dev)

      • Haxelib : haxelib git rulescript https://github.com/Kriptel/RuleScript.git dev
      • Hmm : hmm git rulescript https://github.com/Kriptel/RuleScript.git dev
  2. Adding lib to your project:

    Hxml :

    -lib rulescript

    Lime/OpenFL :

    <haxelib name="rulescript"/>

About

Hscript addon with script classes, imports, usings, properties, string interpolation and more.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Haxe 100.0%