You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jb...@apache.org on 2010/06/12 21:34:18 UTC
svn commit: r954052 - in /commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt:
AbstractStatechartGenerator.xsl snippets.txt
Author: jbeard
Date: Sat Jun 12 19:34:17 2010
New Revision: 954052
URL: http://svn.apache.org/viewvc?rev=954052&view=rev
Log:
Did a bit more work on AbstractStatechartGenerator.xsl
Added:
commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/snippets.txt (with props)
Modified:
commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/AbstractStatechartGenerator.xsl
Modified: commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/AbstractStatechartGenerator.xsl
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/AbstractStatechartGenerator.xsl?rev=954052&r1=954051&r2=954052&view=diff
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/AbstractStatechartGenerator.xsl (original)
+++ commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/AbstractStatechartGenerator.xsl Sat Jun 12 19:34:17 2010
@@ -4,31 +4,40 @@
version="1.0">
<output method="text"/>
- <param name="noIndexOf"/>
- <param name="noMap"/>
+ <param name="log" select="true()"/>
+ <param name="noIndexOf" select="true()"/>
+ <param name="noMap" select="true()"/>
<param name="name"/>
<template match="/s:scxml">
- <!--
- {conf.noIndexOf ? self.genNoIndexOfArrayPrototypeExtension() : ""}
-
- {conf.noMap ? self.genNoMapArrayPrototypeExtension() : ""}
- -->
- <text>function </text><value-of select="$name" /><text>StatechartExecutionContext(){
+ <if test="$noIndexOf">
+ <call-template name="genNoIndexOfArrayPrototypeExtension"/>
+ </if>
+
+ <if test="$noMap">
+ <call-template name="genNoMapArrayPrototypeExtension"/>
+ </if>
+
+ function <value-of select="$name"/>StatechartExecutionContext(){
var self = this; //used in the rare occasions we call public functions from inside this class
//abstract state
- </text>
- <apply-templates match=".//s:transition[@event.length() > 0]"/>
- <text>
+ <call-template name="genAbstractState">
+ <with-param name="events" select=".//s:transition/@event"/>
+ </call-template>
+
//states
- </text>
- <apply-templates match=".//s:state"/>
+ <for-each select=".//s:state | .//s:initial | .//s:parallel ">
+ <call-template name="genState">
+ <with-param name="state" select="."/>
+ </call-template>
+ </for-each>
+ <!--
//states enum for glass-box unit testing
{self.genStatesEnum(conf.basicStates)}
@@ -48,16 +57,157 @@
//start static boilerplate code
{self.genBoilerplateDispatchCode(conf.dispatchInvocation)}
+ -->
}
- </text>
- <value-of select="@profile"/>
- <apply-templates select="s:state | s:initial | s:parallel"/>
</template>
- <template match="s:state | s:initial | s:parallel">
- <value-of select="@id"/>
+ <template name="genAbstractState">
+ <param name="events"/>
+
+ var AbstractState = new function(){
+ //triggers are methods
+
+ <for-each select="$events">
+ this.<value-of select="."/> = function(){};
+ </for-each>
+
+ this.$default = function(){};
+ }
+ </template>
+
+ <template name="genState">
+ <param name="state"/>
+
+ <variable name="stateName" select="$state/@id"/>
+
+ <variable name="parentName">
+ <choose>
+ <when test="$state/../@id">
+ <value-of select="$state/../@id"/>
+ </when>
+ <otherwise>
+ <value-of select="'AbstractState'"/>
+ </otherwise>
+ </choose>
+ </variable>
+
+ <variable name="historyState" select="$state/history"/>
+
+ <variable name="constructorFunctionName" select="concat($stateName,'Constructor')"/>
+
+ <!--
+ var stateName = state.@id;
+ var parentName = state.parent() ? state.parent().@id : "AbstractState";
+ var historyState = state.history;
+ var hasHistoryState = historyState.length() > 0;
+ var constructorFunctionName = stateName + "Constructor";
+ -->
+
+ var <value-of select="$stateName"/> = (function(){
+
+ function <value-of select="$constructorFunctionName"/>(){
+ this.parent = <value-of select="$parentName"/>;
+
+ this.initial = null;
+
+ <!--FIXME-->
+ this.depth = {self.computeDepth(state)};
+
+ this.historyState = null;
+
+ <if test="$state/self::history">
+ this.parent.historyState = this; //init parent's pointer to history state
+ </if>
+
+ <if test="$state/self::initial">
+ this.parent.initial = this; //init parent's pointer to initial state
+ </if>
+
+ this.toString = function(){
+ return "<value-of select="$stateName"/>"
+ }
+
+ this.enterAction = function(){
+ <if test="$log">
+ console.log("entering ' + <value-of select="$stateName"/> + '");
+ </if>
+
+ <for-each select="$state/onentry/*">
+ <call-template name="genExecutableContent">
+ <with-param name="executableNode" select="."/>
+ </call-template>
+ </for-each>
+ }
+
+ this.exitAction = function(){
+ <if test="$log">
+ console.log("exiting ' + <value-of select="$stateName"/> + '");
+ </if>
+
+ <if test="historyState">
+ this.historyState.lastConfiguration = currentConfiguration.slice();
+ </if>
+
+
+ <for-each select="$state/onexit/*">
+ <call-template name="genExecutableContent">
+ <with-param name="executableNode" select="."/>
+ </call-template>
+ </for-each>
+
+ }
+
+ <call-template name="genStateHooks">
+ <with-param name="state" select="."/>
+ </call-template>
+
+
+ }
+ <value-of select="$constructorFunctionName"/>.prototype = <value-of select="$parentName"/>;
+ return new <value-of select="$constructorFunctionName"/>();
+ })();
+
</template>
+
+ <template name="genExecutableContent">
+ <param name="executableNode"/>
+
+ //executable content goes here
+ </template>
+
+ <template name="genStateHooks">
+ <param name="s"/>
+
+ //gen state hooks here
+ </template>
+
+
+ <template name="genNoIndexOfArrayPrototypeExtension">
+ if(!Array.indexOf){
+ Array.prototype.indexOf = function(obj){
+ for(var i=0; i < this.length; i++){
+ if(this[i]==obj){
+ return i;
+ }
+ }
+ return -1;
+ }
+ }
+ </template>
+
+ <template name="genNoMapArrayPrototypeExtension">
+ if(!Array.map){
+ Array.prototype.map = function(fn){
+ var toReturn = [];
+ for(var i=0; i < this.length; i++){
+ toReturn[i]=fn(this[i]);
+ }
+ return toReturn;
+ }
+ }
+ </template>
+
</stylesheet>
Added: commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/snippets.txt
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/snippets.txt?rev=954052&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/snippets.txt (added)
+++ commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/snippets.txt Sat Jun 12 19:34:17 2010
@@ -0,0 +1,6 @@
+ <for-each select=".//s:state">
+ <call-template name="genState">
+ <with-param name="state" select="."/>
+ </call-template>
+ </for-each>
+
Propchange: commons/sandbox/gsoc/2010/scxml-js/trunk/test/xslt/snippets.txt
------------------------------------------------------------------------------
svn:eol-style = native