コード例 #1
0
        private void VisitRender(HxlRenderWorkElement element)
        {
            string parent     = stack.Peek();
            string slug       = GenerateSlug(element);
            string renderName = NewVariable("_Render" + slug, false, true);
            string varName    = SafeNewVariable(renderName);

            CurrentOutput.WriteLine("{0} = global::{2}.Create({1});", varName, renderName.TrimStart('_'), typeof(HxlElement).FullName);

            stack.Push(varName);
            PushRenderIsland(renderName.TrimStart('_'));
            element.WritePreLines(CurrentOutput);

            if (element.ChildNodes.Count > 0)
            {
                CurrentOutput.WriteLine("    __self.RenderBody();");
            }

            element.WritePostLines(CurrentOutput);
            PopRenderIsland();

            CurrentOutput.WriteLine("{0}.Append({1});", parent, varName);

            VisitAll(element.ChildNodes);
            stack.Pop();
        }
コード例 #2
0
 private void ClearLiteralCache()
 {
     if (literalCache.Length > 0)
     {
         CurrentOutput.WriteLine("base.Write(\"{0}\");", literalCache);
         literalCache.Length = 0;
     }
 }
コード例 #3
0
        protected override void VisitAttribute(DomAttribute attribute)
        {
            string parent = stack.Peek();

            CurrentOutput.WriteLine("{0}.Attribute(\"{1}\", \"{2}\");",
                                    parent,
                                    CodeUtility.Escape(attribute.Name),
                                    CodeUtility.Escape(attribute.Value));
        }
コード例 #4
0
        protected override void VisitText(HxlTextElement element)
        {
            // These should have been converted to render islands, BUT there are a few
            // cases where we want to keep an object:
            // - parent is retained (easier to work with)
            // - only writing a space or tab (no need for the overhead)
            string parent = stack.Peek();

            CurrentOutput.WriteLine("{0}.AppendText(\"{1}\");", parent, CodeUtility.Escape(element.Data));
        }
コード例 #5
0
        protected override void VisitDocumentType(DomDocumentType documentType)
        {
            string varName = SafeNewVariable(documentType.Name);

            CurrentOutput.WriteLine(
                "{0} = this.__document.CreateDocumentType(\"{1}\", \"{2}\", \"{3}\");",
                varName,
                documentType.Name,
                documentType.PublicId,
                documentType.SystemId);
            DoAppend(varName);
        }
コード例 #6
0
        protected override void VisitElement(DomElement element)
        {
            string varName = SafeNewVariable(element.Name);

            CurrentOutput.WriteLine(
                "{1} = this.__document.CreateElement(\"{0}\");",
                element.Name,
                varName);
            foreach (var m in element.Annotations <IRenderWorkElementCodeBuilder>())
            {
                m.EmitCode(output, varName, element);
            }

            DoChildVisit(element, varName);
            DoAppend(varName);
        }
コード例 #7
0
        private string SafeNewVariable(string suffix, bool isAttr = false)
        {
            string result;

            suffix = CodeUtility.Slug(suffix);

            if (stack.Count <= 1)
            {
                CurrentOutput.WriteLine();
                result = NewVariable("root_" + suffix, isAttr);
            }
            else
            {
                string variable = stack.Peek();
                result = NewVariable(string.Format("{0}_{1}", variable, suffix), isAttr);
            }

            return(result);
        }
コード例 #8
0
        protected override void VisitText(DomText text)
        {
            string parent = stack.Peek();

            CurrentOutput.WriteLine("{0}.AppendText(\"{1}\");", parent, CodeUtility.Escape(text.Data));
        }
コード例 #9
0
 private void DoAppend(string variable)
 {
     CurrentOutput.Write("{0}.Append({1});", stack.Peek(), variable);
     CurrentOutput.WriteLine();
 }
コード例 #10
0
 protected void EmitCode(string str)
 {
     ClearLiteralCache();
     CurrentOutput.WriteLine(str);
 }