private TemplateElement(TemplateElement document, TemplateElementTypes type, int index, int length, IDictionary items) { this.Document = document; this.TemplateFile = document.TemplateFile; Type = type; Index = index; Length = length; m_Items = items; SourceTemplate = document.SourceTemplate; if (SourceTemplate == string.Empty || length == 0) { return; } switch (type) { case TemplateElementTypes.Tag: if ((bool)Items[KEY_CLOSED] == false) { ParseTemplateTag(Index, Length); } break; case TemplateElementTypes.Document: case TemplateElementTypes.AjaxPanel: case TemplateElementTypes.IfExpression: case TemplateElementTypes.LoopExpression: ParseTemplateTag(Index, Length); break; case TemplateElementTypes.AttributeList: ParseAttributeList(Index, Length); break; case TemplateElementTypes.IndexInvokeParam: case TemplateElementTypes.FunctionInvokeParam: ParseTemplateCode(Index, Length, false, true); break; case TemplateElementTypes.CodeBlock: case TemplateElementTypes.DoubleQuteString: case TemplateElementTypes.SingleQuteString: case TemplateElementTypes.AttributeListItem: case TemplateElementTypes.ConditionExpression: ParseTemplateCode(Index, Length); break; case TemplateElementTypes.LoopExpressionParam: ParseLoopExpressionParam(Index, Length); break; } }
private TemplateElement(TemplateElement document, TemplateElementTypes type, int index, int length, IDictionary items) { this.Document = document; this.TemplateFile = document.TemplateFile; Type = type; Index = index; Length = length; m_Items = items; SourceTemplate = document.SourceTemplate; if (SourceTemplate == string.Empty || length == 0) return; switch (type) { case TemplateElementTypes.Tag: if ((bool)Items[KEY_CLOSED] == false) ParseTemplateTag(Index, Length); break; case TemplateElementTypes.Document: case TemplateElementTypes.AjaxPanel: case TemplateElementTypes.IfExpression: case TemplateElementTypes.LoopExpression: ParseTemplateTag(Index, Length); break; case TemplateElementTypes.AttributeList: ParseAttributeList(Index, Length); break; case TemplateElementTypes.IndexInvokeParam: case TemplateElementTypes.FunctionInvokeParam: ParseTemplateCode(Index, Length, false, true); break; case TemplateElementTypes.CodeBlock: case TemplateElementTypes.DoubleQuteString: case TemplateElementTypes.SingleQuteString: case TemplateElementTypes.AttributeListItem: case TemplateElementTypes.ConditionExpression: ParseTemplateCode(Index, Length); break; case TemplateElementTypes.LoopExpressionParam: ParseLoopExpressionParam(Index, Length); break; } }
internal TemplateElement(TemplateElementTypes type, IDictionary items) { Type = type; m_Items = items; }
private TemplateElement CreateTag(Match match) { Group param = match.Groups["param"]; string name = match.Groups["name"].Value; bool closed = false; TemplateElementTypes type = TemplateElementTypes.Tag; name = name.ToLower(); switch (name) { case "if": type = TemplateElementTypes.IfExpression; break; case "else": if (SourceTemplate.IndexOf("if ", param.Index, param.Length, StringComparison.OrdinalIgnoreCase) == param.Index) { type = TemplateElementTypes.ElseIfExpression; } else { type = TemplateElementTypes.ElseExpression; } break; case "load": type = TemplateElementTypes.LoadExpression; break; //case "pre-include": // type = TemplateElementTypes.PreIncludeExpression; // break; case "loop": type = TemplateElementTypes.LoopExpression; break; case "ajaxpanel": type = TemplateElementTypes.AjaxPanel; break; } closed = match.Groups["close"].Success || type == TemplateElementTypes.ElseExpression || type == TemplateElementTypes.ElseIfExpression || type == TemplateElementTypes.LoadExpression; //|| type == TemplateElementTypes.PreIncludeExpression; Hashtable items = new Hashtable(2); items.Add(KEY_NAME, name); items.Add(KEY_CLOSED, closed); int index = match.Index + match.Length; int contentLength = closed ? match.Length : SourceTemplate.Length - index; if (closed) { items.Add("END", index); } TemplateElement result = new TemplateElement(this.Document, type, index, contentLength, items); if (type == TemplateElementTypes.IfExpression || type == TemplateElementTypes.ElseIfExpression) { result.ChildNodes.Insert(0, CreateConditionExpression(param, type == TemplateElementTypes.ElseIfExpression)); } else if (type == TemplateElementTypes.LoopExpression) { result.ChildNodes.Insert(0, CreateLoopExpressionParam(param)); } else { result.ChildNodes.Insert(0, CreateAttributeList(param)); } return(result); }