Exemplo n.º 1
0
        public void Render(ViewContext viewContext, TextWriter writer)
        {
            var nodes = GetNodes(viewContext, viewPath);

            var evaluator  = new InternalEvaluator(viewContext, functions);
            var masterNode = nodes.First() as MasterNode;

            if (!string.IsNullOrEmpty(masterPath))
            {
                string content;
                if (masterNode != null)
                {
                    var attributes = evaluator.EvaluateAttributes(masterNode.Id, masterNode.Attributes);
                    foreach (var attribute in attributes.Where(a => a.Key != "file"))
                    {
                        evaluator.LocalData[attribute.Key] = attribute.Value;
                    }

                    content = evaluator.Evaluate(masterNode.Content);
                }
                else
                {
                    content = evaluator.Evaluate(nodes);
                }

                evaluator.ViewData["content"] = content;

                var masterNodes = GetNodes(viewContext, masterPath);
                writer.Write(evaluator.Evaluate(masterNodes));
            }
            else if (masterNode != null)
            {
                var attributes    = evaluator.EvaluateAttributes(masterNode.Id, masterNode.Attributes);
                var evaluatedView = evaluator.Evaluate(masterNode.Content);

                var file        = attributes.GetRequiredAttribute <string>("file");
                var masterNodes = GetNodes(viewContext, file);
                foreach (var attribute in attributes.Where(a => a.Key != "file"))
                {
                    evaluator.LocalData[attribute.Key] = attribute.Value;
                }

                evaluator.ViewData["content"] = evaluatedView;
                writer.Write(evaluator.Evaluate(masterNodes));
            }
            else
            {
                writer.Write(evaluator.Evaluate(nodes));
            }
        }
Exemplo n.º 2
0
        internal string EvaluateTemplate(int nodeId, string templatePath, object model, IDictionary <string, object> viewData)
        {
            IEnumerable <IParserNode> nodes;

            using (var stream = new StreamReader(viewContext.MapViewPath(templatePath)))
            {
                var tokenizer = new Tokenizer(stream);
                var parser    = new Parser(nodeId + 1, tokenizer, functions);

                nodes = parser.ParseAll();
            }

            var evaluator = new InternalEvaluator(viewContext, functions);

            return(evaluator.Evaluate(nodes));
        }
Exemplo n.º 3
0
 public Evaluator(InternalEvaluator evaluator, int currentNodeId)
 {
     this.evaluator     = evaluator;
     this.currentNodeId = currentNodeId;
 }
Exemplo n.º 4
0
 public FunctionEvaluator(InternalEvaluator internalEvaluator, int currentNodeId, IDictionary <string, object> functionData)
 {
     this.internalEvaluator = internalEvaluator;
     this.currentNodeId     = currentNodeId;
     FunctionData           = functionData;
 }