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);
        }
Beispiel #2
0
        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));
        }