Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="script"></param>
        /// <param name="line"></param>
        /// <param name="overlay"></param>
        /// <param name="isTemplate"></param>
        /// <param name="parent"></param>
        /// <returns></returns>
        private bool ParseChildren(TextReader script, string line, Overlay overlay, bool isTemplate, OverlayElementContainer parent)
        {
            var ret       = false;
            var skipParam = 0;

            var parms = line.Split(' ', '(', ')');

            // split on lines with a ) will have an extra blank array element, so lets get rid of it
            if (parms[parms.Length - 1].Length == 0)
            {
                Array.Resize(ref parms, parms.Length - 1);
            }

            if (isTemplate)
            {
                // the first param = 'template' on a new child element
                if (parms[0] == "template")
                {
                    skipParam++;
                }
            }

            // top level component cannot be an element, it must be a container unless it is a template
            if (parms[0 + skipParam] == "container" ||
                (parms[0 + skipParam] == "element" && (isTemplate || parent != null)))
            {
                var templateName = "";
                ret = true;

                // nested container/element
                if (parms.Length > 3 + skipParam)
                {
                    if (parms.Length != 5 + skipParam)
                    {
                        LogManager.Instance.Write("Bad element/container line: {0} in {1} - {2}, expecting ':' templateName", line, parent.GetType().Name, parent.Name);
                        ParseHelper.SkipToNextCloseBrace(script);
                        return(ret);
                    }
                    if (parms[3 + skipParam] != ":")
                    {
                        LogManager.Instance.Write("Bad element/container line: {0} in {1} - {2}, expecting ':' for element inheritance.", line, parent.GetType().Name, parent.Name);
                        ParseHelper.SkipToNextCloseBrace(script);
                        return(ret);
                    }

                    // get the template name
                    templateName = parms[4 + skipParam];
                }
                else if (parms.Length != 3 + skipParam)
                {
                    LogManager.Instance.Write("Bad element/container line: {0} in {1} - {2}, expecting 'element type(name)'.", line, parent.GetType().Name, parent.Name);
                    ParseHelper.SkipToNextCloseBrace(script);
                    return(ret);
                }

                ParseHelper.SkipToNextOpenBrace(script);
                var isContainer = (parms[0 + skipParam] == "container");
                ParseNewElement(script, parms[1 + skipParam], parms[2 + skipParam], isContainer, overlay, isTemplate, templateName, parent);
            }


            return(ret);
        }