示例#1
0
        public ICompiledStylesheet Compile(
            Func <object, ISelectable> asSelectable,
            IEvaluator evaluator,
            IDynamicInvoker invoker,
            params ScriptParameter[] closure)
        {
            if (!ContainsScripts())
            {
                return(CompileSimple(asSelectable));
            }

            var compiled = CompiledScript.Compile(this, invoker, asSelectable);

            closure = compiled.Closure.Concat(closure ?? new ScriptParameter[0]).ToArray();
            var code = new StringBuilder();

            code.AppendLine($"(function ({string.Join(", ", closure.Select(c => c.Name))}) {{");
            code.AppendLine(compiled.Code);
            code.AppendLine("}).valueOf()");
            var func = invoker.Invoke(evaluator.Evaluate(code.ToString()), closure.Select(c => c.Value).ToArray());

            return(new ScriptStylesheet((root, arg) => invoker.Invoke(func, root, arg)));
        }
示例#2
0
 public CompiledScript CompileJs(
     Func <object, ISelectable> asSelectable,
     IDynamicInvoker invoker)
 {
     return(CompiledScript.Compile(this, invoker, asSelectable));
 }