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)); }
private void EvaluateNamespaceDefinitionAttribute(DekiScriptDomElement.Attribute expr, DekiScriptEvalContext context, DekiScriptEnv env) { if (expr.IsNamespaceDefinition) { DekiScriptLiteral name = expr.Name.VisitWith(DekiScriptExpressionEvaluation.Instance, env); DekiScriptLiteral value = expr.Value.VisitWith(DekiScriptExpressionEvaluation.Instance, env); if (!value.IsNil) { if (string.IsNullOrEmpty(expr.Prefix)) { context.Namespaces.AddNamespace(string.Empty, value.AsString()); } else { context.Namespaces.AddNamespace(XmlConvert.EncodeLocalName(name.AsString() ?? string.Empty), value.AsString()); } } } }
private void EvaluateAttribute(DekiScriptDomElement.Attribute expr, DekiScriptEvalContext context, XmlElement element, DekiScriptEnv env) { if (!expr.IsNamespaceDefinition) { try { string name = expr.Name.VisitWith(DekiScriptExpressionEvaluation.Instance, env).AsString(); if (name != null) { name = XmlConvert.EncodeLocalName(name); string value = expr.Value.VisitWith(DekiScriptExpressionEvaluation.Instance, env).AsString(); if (value != null) { element.SetAttribute(name, context.Namespaces.LookupNamespace(expr.Prefix), value); } } } catch (Exception e) { context.InsertExceptionMessageBeforeNode(env, element, null, expr.Location, e); } } }
private DekiScriptDomElement.Attribute Optimize(DekiScriptDomElement.Attribute expr, DekiScriptOptimizerState state) { DekiScriptExpression value = expr.Value.VisitWith(DekiScriptExpressionOptimizer.Instance, state); return(new DekiScriptDomElement.Attribute(expr.Location, expr.Prefix, expr.Name, value)); }