コード例 #1
0
        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;
            }
        }
コード例 #2
0
ファイル: TemplateElement.cs プロジェクト: huchao007/bbsmax
        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;
			}
		}
コード例 #3
0
ファイル: TemplateElement.cs プロジェクト: huchao007/bbsmax
		internal TemplateElement(TemplateElementTypes type, IDictionary items)
		{
			Type = type;

			m_Items = items;
		}
コード例 #4
0
        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);
        }
コード例 #5
0
        internal TemplateElement(TemplateElementTypes type, IDictionary items)
        {
            Type = type;

            m_Items = items;
        }