Example #1
0
        public void NestRepeat()
        {
            var x     = XElement.Parse("<z><a xi-repeat='i in items'><b xi-repeat='j in i.items'>${j.id}</b></a></z>");
            var scope = new Scope(new {
                items = new object[] {
                    new {
                        items = new object[] {
                            new { id = 1 },
                            new { id = 2 },
                        }
                    },
                    new {
                        items = new object[] {
                            new { id = 3 },
                            new { id = 4 },
                        }
                    }
                }
            }.jsonify());
            var xi = new XmlInterpolation {
                UseExtensions = true
            };
            var xml = xi.Interpolate(x, scope);
            var str = xml.ToString().Simplify(SimplifyOptions.SingleQuotes);

            Console.WriteLine(str);
        }
Example #2
0
        public void RepeatExtensionWithComplexIfOption()
        {
            var x = new BxlParser().Parse(@"
e 
    was-excluded ${mycode} xi-repeat=data xi-where=!include xi-expand
    not-complete ${mycode} ${myname} xi-repeat=data xi-where='!(mycode & myname)'  xi-expand
    more-than-2 ${mycode} ${myname} xi-repeat=data xi-where='mycode > 2'  xi-expand
", options: BxlParserOptions.NoLexData | BxlParserOptions.ExtractSingle);

            _xi = new XmlInterpolation {
                UseExtensions = true
            };
            var ctx = new
            {
                data = new object[] {
                    new { mycode = 2, myname = "Two", include = true },
                    new { mycode = 3, myname = "Three", include = false },
                    new { mycode = 0, myname = "Four", include = true },
                    new { mycode = 5, myname = "", include = false }
                }
            };
            var cfg = new Scope(ctx.ToDict());

            x = _xi.Interpolate(x, cfg);
            Console.WriteLine(x.ToString().Replace("\"", "'"));
            Assert.AreEqual(@"<e>
  <was-excluded code='3' id='3' />
  <was-excluded code='5' id='5' />
  <not-complete code='0' id='0' name='Four' />
  <not-complete code='5' id='5' name='' />
  <more-than-2 code='3' id='3' name='Three' />
  <more-than-2 code='5' id='5' name='' />
</e>".Simplify(SimplifyOptions.Full), x.ToString().Simplify(SimplifyOptions.Full));
        }
Example #3
0
        public void RepeatExtensionWithIfOption()
        {
            var x = new BxlParser().Parse(@"
e b=true
    x  xi-repeat=data xi-body xi-where=include xi-if=!b  xi-expand
        x-code ${mycode} x=1 xi-if=mycode
        x-name ${myname} x=1 xi-if=myname
    x  xi-repeat=data xi-body xi-where=include xi-if=b  xi-expand
        x-code ${mycode} x=2 xi-if=mycode
        x-name ${myname} x=2 xi-if=myname
", options: BxlParserOptions.NoLexData | BxlParserOptions.ExtractSingle);

            _xi = new XmlInterpolation {
                UseExtensions = true
            };
            var ctx = new { data = new object[] {
                                new { mycode = 2, myname = "Two", include = true },
                                new { mycode = 3, myname = "Three", include = false },
                                new { mycode = 0, myname = "Four", include = true },
                                new { mycode = 5, myname = "", include = true }
                            } };
            var cfg = new Scope(ctx.ToDict());

            x = _xi.Interpolate(x, cfg);
            Console.WriteLine(x.ToString().Replace("\"", "'"));
            Assert.AreEqual(@"<e b='true'>
  <x-code code='2' id='2' x='2' />
  <x-name code='Two' id='Two' x='2' />
  <x-name code='Four' id='Four' x='2' />
  <x-code code='5' id='5' x='2' />
</e>".Simplify(SimplifyOptions.Full), x.ToString().Simplify(SimplifyOptions.Full));
        }
        public override IScope Render(IReportContext context, IScope scope, object item)
        {
            scope    = scope ?? context.Scope;
            Template = Template ?? XmlExtensions.Load(FileName, BxlParserOptions.ExtractSingle);
            Xi       = Xi ?? new XmlInterpolation {
                UseExtensions = true, XmlIncludeProvider = new XmlIncludeProvider {
                    Container = _container
                }
            };
            IScope ws = null;

            if (null == context)
            {
                ws = scope;
            }
            else
            {
                ws               = new Scope(context.Data);
                ws["data"]       = context.Data;
                ws["context"]    = context;
                ws["scope"]      = scope;
                ws["item"]       = item;
                ws["reportcode"] = context.Report.Id;
                ws["reportname"] = context.Report.Name;
            }
            var result = Xi.Interpolate(Template, ws);

            RemoveDebugInfo(scope, result);
            Finalize(context, scope, result);
            return(scope);
        }
Example #5
0
        public static XElement Interpolate(this XElement element, object context = null, bool nocopy = false, Action <XmlInterpolation> setup = null)
        {
            var e  = nocopy ? element : new XElement(element);
            var xi = new XmlInterpolation();

            if (null != setup)
            {
                setup(xi);
            }
            return(xi.Interpolate(e, context));
        }
Example #6
0
        public void RepeatWithScopeExtension()
        {
            var x = new BxlParser().Parse(@"
e mycode=1 myname=2
    x ${x.mycode} ${x.myname} mc=${mycode} mn=${myname} xi-repeat=data xi-scope=x
", options: BxlParserOptions.NoLexData | BxlParserOptions.ExtractSingle);

            _xi = new XmlInterpolation {
                UseExtensions = true
            };
            var ctx = new { data = new object[] { new { mycode = 2, myname = "Two" }, new { mycode = 3, myname = "Three" } } };
            var cfg = new Scope(ctx.ToDict());

            x = _xi.Interpolate(x, cfg);
            Console.WriteLine(x.ToString().Replace("\"", "'"));
            Assert.AreEqual(@"<e mycode='1' myname='2'>
  <x code='2' id='2' name='Two' mc='1' mn='2' />
  <x code='3' id='3' name='Three' mc='1' mn='2' />
</e>".Simplify(SimplifyOptions.Full), x.ToString().Simplify(SimplifyOptions.Full));
        }
	    public void NestRepeat() {
	        var x = XElement.Parse("<z><a xi-repeat='i in items'><b xi-repeat='j in i.items'>${j.id}</b></a></z>");
	        var scope =new Scope( new {
	            items = new object[] {
	                new {
	                    items = new object[] {
	                        new {id = 1},
	                        new {id = 2},
	                    }
	                },
	                new {
	                    items = new object[] {
	                        new {id = 3},
	                        new {id = 4},
	                    }
	                }
	            }
	        }.jsonify());
	        var xi = new XmlInterpolation {UseExtensions = true};
	        var xml = xi.Interpolate(x, scope);
	        var str = xml.ToString().Simplify(SimplifyOptions.SingleQuotes);
            Console.WriteLine(str);
	    }
        public void RepeatExtensionWithComplexIfOption()
        {
            var x = new BxlParser().Parse(@"
e 
    was-excluded ${mycode} xi-repeat=data xi-where=!include xi-expand
    not-complete ${mycode} ${myname} xi-repeat=data xi-where='!(mycode & myname)'  xi-expand
    more-than-2 ${mycode} ${myname} xi-repeat=data xi-where='mycode > 2'  xi-expand
", options: BxlParserOptions.NoLexData | BxlParserOptions.ExtractSingle);
            _xi = new XmlInterpolation { UseExtensions = true };
            var ctx = new
            {
                data = new object[] {
                new { mycode = 2, myname = "Two", include=true }, 
                new { mycode = 3, myname = "Three", include=false },
                new { mycode = 0, myname = "Four", include=true },
                new { mycode = 5, myname = "", include=false }
            }
            };
            var cfg = new Scope(ctx.ToDict());
            x = _xi.Interpolate(x, cfg);
            Console.WriteLine(x.ToString().Replace("\"", "'"));
            Assert.AreEqual(@"<e>
  <was-excluded code='3' id='3' />
  <was-excluded code='5' id='5' />
  <not-complete code='0' id='0' name='Four' />
  <not-complete code='5' id='5' name='' />
  <more-than-2 code='3' id='3' name='Three' />
  <more-than-2 code='5' id='5' name='' />
</e>".Simplify(SimplifyOptions.Full), x.ToString().Simplify(SimplifyOptions.Full));
        }
        public void RepeatExtensionWithIfOption()
        {
            var x = new BxlParser().Parse(@"
e b=true
    x  xi-repeat=data xi-body xi-where=include xi-if=!b  xi-expand
        x-code ${mycode} x=1 xi-if=mycode
        x-name ${myname} x=1 xi-if=myname
    x  xi-repeat=data xi-body xi-where=include xi-if=b  xi-expand
        x-code ${mycode} x=2 xi-if=mycode
        x-name ${myname} x=2 xi-if=myname
", options: BxlParserOptions.NoLexData | BxlParserOptions.ExtractSingle);
            _xi = new XmlInterpolation { UseExtensions = true };
            var ctx = new { data = new object[] {
                new { mycode = 2, myname = "Two", include=true }, 
                new { mycode = 3, myname = "Three", include=false },
                new { mycode = 0, myname = "Four", include=true },
                new { mycode = 5, myname = "", include=true }
            } };
            var cfg = new Scope(ctx.ToDict());
            x = _xi.Interpolate(x, cfg);
            Console.WriteLine(x.ToString().Replace("\"", "'"));
            Assert.AreEqual(@"<e b='true'>
  <x-code code='2' id='2' x='2' />
  <x-name code='Two' id='Two' x='2' />
  <x-name code='Four' id='Four' x='2' />
  <x-code code='5' id='5' x='2' />
</e>".Simplify(SimplifyOptions.Full), x.ToString().Simplify(SimplifyOptions.Full));
        }
		public void SetUp()
		{
			_xi = new XmlInterpolation();
		}
        public void RepeatWithScopeExtensionAndFunctionCall()
        {
            var x = new BxlParser().Parse(@"
e mycode=1 myname=aa
    x ${x.mycode} ${x.myname} mf=${upper(myname)} mc=${mycode} mn=${myname} xi-repeat=data xi-scope=x
", options: BxlParserOptions.NoLexData | BxlParserOptions.ExtractSingle);
            _xi = new XmlInterpolation { UseExtensions = true };
            var ctx = new { data = new object[] { new { mycode = 2, myname = "Two" }, new { mycode = 3, myname = "Three" } } };
            var cfg = new Scope(ctx.ToDict());
            cfg["upper"] = (Func<string, string>) (s => s.ToUpper());
            x = _xi.Interpolate(x, cfg);
            Console.WriteLine(x.ToString().Replace("\"", "'"));
            Assert.AreEqual(@"<e mycode='1' myname='aa'>
  <x code='2' id='2' name='Two' mf='AA' mc='1' mn='aa' />
  <x code='3' id='3' name='Three' mf='AA' mc='1' mn='aa' />
</e>".Simplify(SimplifyOptions.Full), x.ToString().Simplify(SimplifyOptions.Full));
        }
	    public void RepeatExtension() {
	        var x = new BxlParser().Parse(@"
e u=33
    x ${mycode} ${myname} z=${u} xi-repeat=data xi-expand 
",options:BxlParserOptions.NoLexData|BxlParserOptions.ExtractSingle);
	        _xi = new XmlInterpolation {UseExtensions = true};
	        var ctx = new {data = new object[] {new {mycode = 2, myname = "Two"}, new {mycode = 3, myname = "Three"}}};
	        var cfg = new Scope(ctx.ToDict());
	        x = _xi.Interpolate(x, cfg);
            Console.WriteLine(x.ToString().Replace("\"","'"));
            Assert.AreEqual(@"<e u='33'>
  <x code='2' id='2' name='Two' z='33' />
  <x code='3' id='3' name='Three' z='33' />
</e>".Simplify(SimplifyOptions.Full), x.ToString().Simplify(SimplifyOptions.Full));
	    }
Example #13
0
 public void SetUp()
 {
     _xi = new XmlInterpolation();
 }