Haxe Process Expression Language (HPEL)
Create cross-platform, multi-threaded, software process quickly via XML and/or DSL.
Note: very much a work in progress
TODO:
Some examples
Sequences
DSL |
XML |
.beginSequence()
.beginSequence()
.log("start sequence 1")
.delay(.5)
.log("end sequence 1")
.endSequence()
.beginSequence()
.log("start sequence 2")
.delay(.5)
.log("end sequence 2")
.endSequence()
.beginSequence()
.log("start sequence 3")
.delay(.5)
.log("end sequence 3")
.endSequence()
.endSequence()
|
<sequence>
<sequence>
<log message="start sequence 1" />
<delay seconds=".5" />
<log message="end sequence 1" />
</sequence>
<sequence>
<log message="start sequence 2" />
<delay seconds=".5" />
<log message="end sequence 2" />
</sequence>
<sequence>
<log message="start sequence 3" />
<delay seconds=".5" />
<log message="end sequence 3" />
</sequence>
</sequence>
|
Parallel (Threads)
DSL |
XML |
.beginParallel()
.beginSequence()
.log("start thread 1")
.delay(15)
.log("end thread 1")
.endSequence()
.beginSequence()
.log("start thread 2")
.delay(10)
.log("end thread 2")
.endSequence()
.beginSequence()
.log("start thread 3")
.delay(5)
.log("end thread 3")
.endSequence()
.endParallel()
|
<parallel>
<sequence>
<log message="start thread 1" />
<delay seconds="15" />
<log message="end thread 1" />
</sequence>
<sequence>
<log message="start thread 2" />
<delay seconds="10" />
<log message="end thread 2" />
</sequence>
<sequence>
<log message="start thread 3" />
<delay seconds="5" />
<log message="end thread 3" />
</sequence>
</parallel>
|
Variables
DSL |
XML |
.beginSequence()
.set("var1", 100)
.beginSequence()
.set("scopedVar", 200)
.set("result", "${var1 + scopedVar}")
.log("result = ${result}")
.endSequence()
.beginSequence()
.set("scopedVar", 300)
.set("result", "${var1 + scopedVar}")
.log("result = ${result}")
.endSequence()
.endSequence()
|
<sequence>
<set var="var1" value="100" />
<sequence>
<set var="scopedVar" value="200" />
<set var="result" value="${var1 + scopedVar}" />
<log message="result = ${result}" />
</sequence>
<sequence>
<set var="scopedVar" value="300" />
<set var="result" value="${var1 + scopedVar}" />
<log message="result = ${result}" />
</sequence>
</sequence>
|
Loops
DSL |
XML |
.beginSequence()
.beginLoop([15, 10, 5], "delay")
.log("delaying for ${delay} seconds")
.delay("${delay}")
.log("${delay} second delay complete")
.endLoop()
.endSequence()
|
<sequence>
<loop items="[15, 10, 5]" var="delay">
<log message="delaying for ${delay} seconds" />
<delay seconds="${delay}" />
<log message="${delay} second delay complete" />
</loop>
</sequence>
|
Loops (Threaded)
DSL |
XML |
.beginParallel()
.beginLoop([15, 10, 5], "delay")
.log("delaying for ${delay} seconds")
.delay("${delay}")
.log("${delay} second delay complete")
.endLoop()
.endParallel()
|
<parallel>
<loop items="[15, 10, 5]" var="delay">
<log message="delaying for ${delay} seconds" />
<delay seconds="${delay}" />
<log message="${delay} second delay complete" />
</loop>
</parallel>
|
Conditionals
DSL |
XML |
.beginSequence()
.set("testVar", 0)
.beginChoose()
.when("${testVar >= 1}")
.log("1 or greater! (value=${testVar})")
.when("${testVar < 0}")
.log("less than 0! (value=${testVar})")
.otherwise()
.log("Guess it must be zero! (value=${testVar})")
.endChoose()
.endSequence()
|
<sequence>
<set var="testVar" value="0" />
<choose>
<when condition="${testVar >= 1}">
<log message="1 or greater! (value=${testVar})" />
</when>
<when condition="${testVar < 0}">
<log message="less than 0! (value=${testVar})" />
</when>
<otherwise>
<log message="Guess it must be zero! (value=${testVar})" />
</otherwise>
</choose>
</sequence>
|