public Empty Visit(DekiScriptDomElement expr, DekiScriptDomEvaluationState state) { var context = state.Context; var env = state.Env; var parent = state.Parent; env = env.NewLocalScope(); // check if any namespaces are being defined try { foreach (DekiScriptDomElement.Attribute attribute in expr.Attributes) { EvaluateNamespaceDefinitionAttribute(attribute, context, env); } // create element XmlElement result = context.CreateElement(expr.Prefix, XmlConvert.EncodeLocalName(expr.Name.VisitWith(DekiScriptExpressionEvaluation.Instance, env).AsString()), context.Namespaces.LookupNamespace(expr.Prefix)); parent.AppendChild(result); // add attributes foreach (DekiScriptDomElement.Attribute attribute in expr.Attributes) { EvaluateAttribute(attribute, context, result, env); } // process deki-javascript DekiJavaScriptProcessor.ProcessDekiJavaScriptConstructor(context, result, env); // add elements expr.Node.VisitWith(this, new DekiScriptDomEvaluationState(context, result, env)); } catch (Exception e) { EmbedExceptionMessage(expr, env, context, e, parent); } return(Empty.Value); }
public DekiScriptDom Visit(DekiScriptDomElement expr, DekiScriptOptimizerState state) { DekiScriptDomElement.Attribute[] attributes = new DekiScriptDomElement.Attribute[expr.Attributes.Length]; for (int i = 0; i < expr.Attributes.Length; i++) { attributes[i] = Optimize(expr.Attributes[i], state); } DekiScriptDom node = expr.Node.VisitWith(this, state); return(new DekiScriptDomElement(expr.Location, expr.Prefix, expr.Name, attributes, node)); }