public override bool OnExportPhpScriptCode(ActionBranch previousAction, ActionBranch nextAction, StringCollection jsCode, StringCollection methodCode, JsMethodCompiler data) { string indexName = RepeatIndex.CodeName; methodCode.Add(Indentation.GetIndent()); methodCode.Add("for("); methodCode.Add(indexName); methodCode.Add("=0;"); methodCode.Add(indexName); methodCode.Add("<"); methodCode.Add(RepeatCount.CreateJavaScript(methodCode)); methodCode.Add(";"); methodCode.Add(indexName); methodCode.Add("++) {\r\n"); Indentation.IndentIncrease(); string indents = Indentation.GetIndent(); StringCollection sc = new StringCollection(); if (_iconList != null) { foreach (ComponentIcon ci in _iconList) { ComponentIconLocal cil = ci as ComponentIconLocal; if (cil != null && cil.ScopeGroupId == this.BranchId) { sc.Add(indents); sc.Add("$"); sc.Add(cil.LocalPointer.CodeName); sc.Add("="); sc.Add(ValueTypeUtil.GetDefaultPhpScriptValueByType(cil.LocalPointer.BaseClassType)); sc.Add(";\r\n"); } } } SetWithinLoop(); Method.SubMethod.Push(this); data.AddSubMethod(this); bool bRet = base.OnExportPhpScriptCode(previousAction, nextAction, jsCode, sc, data); Method.SubMethod.Pop(); // for (int i = 0; i < sc.Count; i++) { methodCode.Add(sc[i]); } Indentation.IndentDecrease(); methodCode.Add(Indentation.GetIndent()); methodCode.Add("}\r\n"); return(bRet); }
public override bool OnExportPhpScriptCode(ActionBranch previousAction, ActionBranch nextAction, StringCollection jsCode, StringCollection methodCode, JsMethodCompiler data) { bool bRet; if (_actionData == null) { _actionData = (ActionSubMethod)this.Method.GetActionInstance(_actId.ActionId); } SubMethodInfoPointer smi = _actionData.ActionMethod as SubMethodInfoPointer; SubMethodInfo mi = smi.MethodInformation as SubMethodInfo; if (mi == null) { return(false); } if (mi.IsForeach) { ParameterClassSubMethod p = mi.GetParameterType(0, smi, this); StringBuilder sb = new StringBuilder(); string s1 = smi.Owner.CodeName; IObjectPointer op = smi.Owner; sb.Append(s1); while (!(op is ILocalvariable) && op.Owner != null && op.Owner.Owner != null) { if (string.CompareOrdinal(s1, op.Owner.CodeName) != 0) { s1 = op.Owner.CodeName; sb.Insert(0, "->"); sb.Insert(0, s1); } op = op.Owner; } if (op is ILocalvariable || op.Owner is ILocalvariable) { } else { sb.Insert(0, "$this->"); } s1 = sb.ToString(); string indents = Indentation.GetIndent(); string s0 = string.Format(System.Globalization.CultureInfo.InvariantCulture, "\r\n{2}foreach ({0} as {1}) {{\r\n", s1, p.CodeName, indents); methodCode.Add(s0); // Method.SubMethod.Push(this); data.AddSubMethod(this); Indentation.IndentIncrease(); bRet = base.OnExportPhpScriptCode(previousAction, nextAction, jsCode, methodCode, data); Indentation.IndentDecrease(); Method.SubMethod.Pop(); // methodCode.Add(indents); methodCode.Add("}\r\n"); } else { string indents = Indentation.GetIndent(); StringBuilder sb = new StringBuilder(); string s1 = smi.Owner.CodeName; IObjectPointer op = smi.Owner; sb.Append(s1); while (!(op is ILocalvariable) && op.Owner != null && op.Owner.Owner != null) { if (string.CompareOrdinal(s1, op.Owner.CodeName) != 0) { s1 = op.Owner.CodeName; sb.Insert(0, "->"); sb.Insert(0, s1); } op = op.Owner; } if (op is ILocalvariable) { } else { sb.Insert(0, "$this->"); } s1 = sb.ToString(); ParameterClassSubMethod p = mi.GetParameterType(1, smi, this); p.ParameterID = _actionData.ParameterValues[1].ParameterID; string v = p.CodeName; string s0 = string.Format(System.Globalization.CultureInfo.InvariantCulture, "\r\n{3}foreach ({0} as {1} => {2} ) {{\r\n", s1, mi.GetIndexCodePHP(smi, this.BranchId), v, indents); methodCode.Add(s0); Method.SubMethod.Push(this); data.AddSubMethod(this); // Indentation.IndentIncrease(); bRet = base.OnExportPhpScriptCode(previousAction, nextAction, jsCode, methodCode, data); Method.SubMethod.Pop(); // Indentation.IndentDecrease(); methodCode.Add(indents); methodCode.Add("}\r\n"); } return(bRet); }
public override bool OnExportPhpScriptCode(ActionBranch previousAction, ActionBranch nextAction, StringCollection jsCode, StringCollection methodCode, JsMethodCompiler data) { string c; if (_logicExpression == null) { c = "true"; } else { _logicExpression.PrepareForCompile(this.Method); c = _logicExpression.CreatePhpScript(methodCode); } methodCode.Add(Indentation.GetIndent()); string initCodeStr = null; string increCodeStr = null; if (_initAction != null && _initAction.Action != null) { StringCollection initCode = new StringCollection(); _initAction.Action.ExportPhpScriptCode(null, null, methodCode, initCode, data); StringBuilder sb = new StringBuilder(); for (int i = 0; i < initCode.Count; i++) { sb.Append(initCode[i]); } initCodeStr = sb.ToString().Replace("\r\n", ""); } if (_increAction != null && _increAction.Action != null) { StringCollection increCode = new StringCollection(); _increAction.Action.ExportPhpScriptCode(null, null, methodCode, increCode, data); StringBuilder sb = new StringBuilder(); for (int i = 0; i < increCode.Count; i++) { sb.Append(increCode[i]); } increCodeStr = sb.ToString().Replace("\r\n", ""); } if (string.IsNullOrEmpty(initCodeStr)) { initCodeStr = ";"; } if (!string.IsNullOrEmpty(increCodeStr)) { increCodeStr = increCodeStr.Trim(); while (increCodeStr.EndsWith(";", StringComparison.Ordinal)) { increCodeStr = increCodeStr.Substring(0, increCodeStr.Length - 1); increCodeStr = increCodeStr.Trim(); } } methodCode.Add("for("); methodCode.Add(initCodeStr); methodCode.Add(c); methodCode.Add(";"); methodCode.Add(increCodeStr); methodCode.Add(") {\r\n"); Indentation.IndentIncrease(); string indents = Indentation.GetIndent(); StringCollection sc = new StringCollection(); if (_iconList != null) { foreach (ComponentIcon ci in _iconList) { ComponentIconLocal cil = ci as ComponentIconLocal; if (cil != null && cil.ScopeGroupId == this.BranchId) { sc.Add(indents); sc.Add("$"); sc.Add(cil.LocalPointer.CodeName); sc.Add("="); sc.Add(ValueTypeUtil.GetDefaultPhpScriptValueByType(cil.LocalPointer.BaseClassType)); sc.Add(";\r\n"); } } } Method.SubMethod.Push(this); data.AddSubMethod(this); bool bRet = base.OnExportPhpScriptCode(previousAction, nextAction, jsCode, sc, data); Method.SubMethod.Pop(); // for (int i = 0; i < sc.Count; i++) { methodCode.Add(sc[i]); } Indentation.IndentDecrease(); methodCode.Add(Indentation.GetIndent()); methodCode.Add("}\r\n"); return(bRet); }
public override bool OnExportJavaScriptCode(ActionBranch previousAction, ActionBranch nextAction, StringCollection jsCode, StringCollection methodCode, JsMethodCompiler data) { bool bRet; if (_actionData == null) { _actionData = (ActionSubMethod)this.Method.GetActionInstance(_actId.ActionId); // (ActionSubMethod)compiler.ActionEventList.GetAction(_actId); } if (_actionData == null) { return(false); } SubMethodInfoPointer smi = _actionData.ActionMethod as SubMethodInfoPointer; SubMethodInfo mi = smi.MethodInformation as SubMethodInfo; if (mi == null) { return(false); } if (mi.IsForeach) { ParameterClassSubMethod p = mi.GetParameterType(0, smi, this); StringBuilder sb = new StringBuilder(); string s1 = smi.Owner.CodeName; IObjectPointer op = smi.Owner; sb.Append(s1); while (!(op is ILocalvariable) && op.Owner != null && op.Owner.Owner != null) { if (!s1.StartsWith(op.Owner.CodeName, StringComparison.Ordinal)) { s1 = op.Owner.CodeName; sb.Insert(0, "."); sb.Insert(0, s1); } op = op.Owner; } s1 = sb.ToString(); string indents = Indentation.GetIndent(); string a = string.Format(CultureInfo.InvariantCulture, "a{0}", Guid.NewGuid().GetHashCode().ToString("x", CultureInfo.InvariantCulture)); string idx = string.Format(CultureInfo.InvariantCulture, "i{0}", Guid.NewGuid().GetHashCode().ToString("x", CultureInfo.InvariantCulture)); string s0 = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{4}var {3} = {1};\r\n{4}if({3}) for(var {0}=0;{0}<{3}.length;{0}++) {{\r\n{4}var {2}={3}[{0}]; \r\n", idx, s1, p.CodeName, a, indents); methodCode.Add(s0); Method.SubMethod.Push(this); data.AddSubMethod(this); Indentation.IndentIncrease(); bRet = base.OnExportJavaScriptCode(previousAction, nextAction, jsCode, methodCode, data); Indentation.IndentDecrease(); Method.SubMethod.Pop(); // methodCode.Add(indents); methodCode.Add("}\r\n"); } else { string indents = Indentation.GetIndent(); methodCode.Add(indents); methodCode.Add("for(var "); methodCode.Add(mi.GetInitStatementJS(smi, jsCode, methodCode, data, this.BranchId)); methodCode.Add(mi.GetTestExpressionJS(smi, jsCode, methodCode, data, this.BranchId)); methodCode.Add(mi.GetIncrementalStatementJS(smi, jsCode, methodCode, data, this.BranchId)); methodCode.Add(") {\r\n"); Method.SubMethod.Push(this); data.AddSubMethod(this); Indentation.IndentIncrease(); if (_iconList != null) { foreach (ComponentIcon ci in _iconList) { ComponentIconLocal cil = ci as ComponentIconLocal; if (cil != null && cil.ScopeGroupId == this.BranchId) { methodCode.Add(Indentation.GetIndent()); methodCode.Add("var "); methodCode.Add(cil.LocalPointer.CodeName); methodCode.Add("="); methodCode.Add(ValueTypeUtil.GetDefaultJavaScriptValueByType(cil.LocalPointer.BaseClassType)); methodCode.Add(";\r\n"); } } } bRet = base.OnExportJavaScriptCode(previousAction, nextAction, jsCode, methodCode, data); Method.SubMethod.Pop(); // Indentation.IndentDecrease(); methodCode.Add(indents); methodCode.Add("}\r\n"); } return(bRet); }