예제 #1
0
        /// <summary>
        /// Creates a ParsingObject as a child of this one, and returns it.
        /// </summary>
        public virtual ParsingObject CreateChildParsingObject(ILocation location, string tagid, TagAttributes attributes)
        {
            string[] str = tagid.Split(':');

            //html tags
            //TODO: check for valid tags?
            if (str.Length == 1)
            {
                if (attributes.IsRunAtServer() && (0 == string.Compare("form", tagid)))
                {
                    return(new ServerFormParsingObject(location.PlainText, tagid, this));
                }
                return(new HtmlParsingObject(location.PlainText, tagid, this));
            }

            //fall through to server tags
            if (str.Length != 2)
            {
                throw new ParseException(location, "Server tag name is not of form prefix:name");
            }

            Type tagType = WebFormReferenceManager.GetObjectType(str[0], str[1]);

            if (tagType == null)
            {
                throw new ParseException(location, "The tag " + tagid + "has not been registered");
            }

            return(new ServerObjectParsingObject(tagType, attributes.GetDictionary(null), tagid, this));
        }
예제 #2
0
        public override ParsingObject CreateChildParsingObject(ILocation location, string tagid, TagAttributes attributes)
        {
            switch (mode)
            {
            case ParseChildrenMode.DefaultProperty:
                //oops, we didn't need to tokenise this.
                innerText += location.PlainText;
                //how do we get end tag?
                throw new NotImplementedException("Inner default properties that look like tags have not been implemented yet.");

            case ParseChildrenMode.DefaultEncodedProperty:
                innerText += System.Web.HttpUtility.HtmlDecode(location.PlainText);
                //how do we get end tag?
                throw new NotImplementedException("Inner default properties that look like tags have not been implemented yet.");

            case ParseChildrenMode.Controls:
                //html tags
                if (tagid.IndexOf(':') == -1)
                {
                    return(new HtmlParsingObject(location.PlainText, tagid, this));
                }
                goto case ParseChildrenMode.DefaultCollectionProperty;

            case ParseChildrenMode.DefaultCollectionProperty:
                string[] str = tagid.Split(':');
                if (str.Length != 2)
                {
                    throw new ParseException(location, "Server tag name is not of form prefix:name");
                }

                Type tagType = WebFormReferenceManager.GetObjectType(str[0], str[1]);
                if (tagType == null)
                {
                    throw new ParseException(location, "The tag " + tagid + "has not been registered");
                }

                return(new ServerObjectParsingObject(tagType, attributes.GetDictionary(null), tagid, this));

            case ParseChildrenMode.Properties:
                throw new NotImplementedException("Multiple child properties have not yet been implemented.");
            }
            throw new ParseException(location, "Unexpected state encountered: ");
        }