示例#1
0
        public codeLine(string __name, syntaxBlockLineDeclaration __declaration)
        {
            _declarationBase = __declaration;
            //_source = __source;
            _name = __name;

            _children = new codeElementCollection(this, typeof(codeLineToken));
            //deployDeclaration();
        }
示例#2
0
        /// <summary>
        /// Generates source code string for this line
        /// </summary>
        /// <param name="syntax"></param>
        /// <returns></returns>
        public String render(syntaxDeclaration syntax)
        {
            //if (__declaration == null) __declaration = declaration;
            // __declaration.className
            String output = "";

            if (declaration == null)
            {
                output = "# error [" + name + "]:[" + GetType().Name + "]" + Environment.NewLine;
            }
            else
            {
                syntaxLineClassDeclaration lineclass = syntax.lineClasses.getClass(declaration.className);
                syntaxBlockLineDeclaration sLD       = null;

                if (parent != null)
                {
                    syntaxBlockDeclaration sBD = syntax.blocks.find(parent.name) as syntaxBlockDeclaration;
                    sLD = sBD.lines.find(name);

                    if (sLD == null)
                    {
                        output = "# not supported: [" + name + "]:[" + GetType().Name + "]" + Environment.NewLine;
                        return(output);
                    }
                }
                //syntax.blocks.find()

                List <String> values = new List <String>();

                foreach (codeLineToken tk in children.items)
                {
                    values.Add(tk.getValue());
                }

                if (sLD != null)
                {
                    values[0] = sLD.name;
                }
                else
                {
                }

                if (!String.IsNullOrEmpty(values[0]))
                {
                    output = String.Format(lineclass.template, values.ToArray());
                }
                else
                {
                }
            }
            return(output);
        }
示例#3
0
        public void deployCode(codeSourceElement el, syntaxDeclaration syntax)
        {
            codeSourceElementCollection subElements = new codeSourceElementCollection(el, syntax);
            syntaxBlockDeclaration      sb;

            foreach (codeSourceElement subEl in subElements.codeElements)
            {
                if (subEl.lineClass != null)
                {
                    switch (subEl.lineClass.lineType)
                    {
                    case syntaxBlockLineType.normal:
                        codeLine cl = children.getElement <codeLine>(subEl.name);
                        if (cl == null)
                        {
                            syntaxBlockLineDeclaration cld = declaration.lines.Find(x => x.name == subEl.name);
                            cl = new codeLine(subEl.name, cld);
                            children.Add(cl);
                        }
                        cl.deployDeclaration(syntax);
                        cl.deployCode(subEl);
                        break;

                    case syntaxBlockLineType.block:

                        sb = syntax.blocks.find(subEl.name);

                        codeBlock cb = children.getElement <codeBlock>(subEl.name);

                        if (cb == null)
                        {
                            cb = new codeBlock(subEl.name, sb);
                            children.Add(cb);
                        }
                        // cb.deployDeclaration(syntax);
                        cb.deployCode(subEl, syntax);
                        ////// ovde poziva obradu koda

                        break;

                    case syntaxBlockLineType.emptyLine:
                        break;

                    default:
                        break;
                    }
                }
            }
        }