201 intermediate commit for state navigation
This commit is contained in:
@@ -35,6 +35,14 @@
|
||||
<cfset var args=[]/>
|
||||
<cfset parse(args, tokenize(arguments.expression),0)/>
|
||||
<cfreturn computeExpression(args[1].function, args[1].args, arguments.context)/>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="extractParams" returntype="any" access="public">
|
||||
<cfargument name="expression" type="string"/>
|
||||
|
||||
<cfset var params=[]/>
|
||||
<cfset parseForParams(params, tokenize(arguments.expression),0)/>
|
||||
<cfreturn params/>
|
||||
</cffunction>
|
||||
|
||||
<!---
|
||||
@@ -115,6 +123,38 @@ expression parse-evaluate
|
||||
</cfloop>
|
||||
</cffunction>
|
||||
|
||||
<cffunction name="parseForParams" returntype="numeric" access="private"><!--- returns last token position --->
|
||||
<cfargument name="args" type="array"/><!--- puts here parsed params --->
|
||||
<cfargument name="tokens" type="array"/>
|
||||
<cfargument name="positionBefore" type="numeric"/><!--- before first processed token, initially 0 --->
|
||||
|
||||
<cfset var i = arguments.positionBefore/>
|
||||
<cfloop condition="++i LE arrayLen(arguments.tokens)">
|
||||
<cfswitch expression=#tokenType(arguments.tokens[i])#>
|
||||
<cfcase value="string">
|
||||
<!--- skip ---><!--- <cfset arrayAppend(arguments.args,mid(arguments.tokens[i],2,len(arguments.tokens[i])-2))/>--->
|
||||
</cfcase>
|
||||
<cfcase value="variable">
|
||||
<cfset arrayAppend( arguments.args, tokens[i] )/>
|
||||
</cfcase>
|
||||
<cfcase value="function">
|
||||
<cfset var f = {"function"=arguments.tokens[i],"args"=[]}/>
|
||||
<cfif i GE arrayLen(arguments.tokens)>
|
||||
<cfthrow message="unexpected end of expression"/>
|
||||
</cfif>
|
||||
<cfif #tokenType(arguments.tokens[++i])# NEQ "("><!--- skip opening parenthesis ---><!--- *** possible out of range --->
|
||||
<cfthrow message="function syntax incorrect" detail="function #arguments.tokens[i-1]#, token='#arguments.tokens[i]#' (#arrayToList(tokens,' ')#"/>
|
||||
</cfif>
|
||||
<cfset i = parseForParams(f.args, arguments.tokens, i)/>
|
||||
<!--- <cfset arrayAppend(arguments.args,f)/> --->
|
||||
</cfcase>
|
||||
<cfcase value=")">
|
||||
<cfreturn i/><!--- returns last token position --->
|
||||
</cfcase>
|
||||
</cfswitch>
|
||||
</cfloop>
|
||||
</cffunction>
|
||||
|
||||
|
||||
<cffunction name="computeExpression" returntype="any" access="private"><!--- вычисление выражения снаружи внутрь --->
|
||||
<cfargument name="function" type="string"/>
|
||||
@@ -138,16 +178,6 @@ expression parse-evaluate
|
||||
<cfargument name="functionName"/><!--- а ссылку на функцию передать не получится? (замыкание даже наверно не нужно) --->
|
||||
<cfargument name="args" type="array"/>
|
||||
<cfargument name="context" type="any"/>
|
||||
<!--- <cfoutput>#arguments.functionName#</cfoutput> args<cfdump var=#arguments.args#/> --->
|
||||
<!--- <cfswitch expression=#arguments.functionName#>
|
||||
<cfcase value="concat"><cfreturn concat(argumentCollection=arguments.args)/></cfcase>
|
||||
<cfcase value="getResourceRealmConfig"><cfreturn getResourceRealmConfig(argumentCollection=arguments.args)/></cfcase>
|
||||
<cfcase value="getKeyListFromStruct"><cfreturn getKeyListFromStruct(argumentCollection=arguments.args)/></cfcase>
|
||||
<cfcase value="getValue"><cfreturn getValue(argumentCollection=arguments.args)/></cfcase>
|
||||
<cfdefaultcase>
|
||||
<cfthrow message="Undefined Function" detail="#arguments.functionName#"/>
|
||||
</cfdefaultcase>
|
||||
</cfswitch> --->
|
||||
<!--- <cfdump var=#arguments#/> --->
|
||||
<cfset var obj = createObject("component", arguments.context.component).init(arguments.context.keys, arguments.context.params)/>
|
||||
<!--- <cfdump var=#obj# abort=true/> --->
|
||||
|
||||
Reference in New Issue
Block a user