From 4492bcbddffaf83c02298c6a4bac442c97e82b7e Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Tue, 8 Oct 2013 19:58:27 +0200 Subject: [PATCH] Evaluate inside Container --- .../Exporter/Visitors/ExpressionVisitor.cs | 23 +++++++++++------- .../Src/Expressions/ExpressionHelper.cs | 12 +++++++--- .../Expressions/Irony/ExpressionEvaluator.cs | 3 --- .../src/Expressions/IntegrationTests.cs | 24 ++++++++++++------- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs index fb328554d9..426f0ebf8a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs @@ -6,7 +6,6 @@ using ICSharpCode.Reporting.Expressions; using ICSharpCode.Reporting.Expressions.Irony; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder.ExportColumns; -using Irony.Interpreter.Evaluator; namespace ICSharpCode.Reporting.Exporter.Visitors { @@ -18,7 +17,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors private readonly Collection pages; private readonly ReportingLanguageGrammer grammar; private readonly ReportingExpressionEvaluator evaluator; - + public ExpressionVisitor(Collection pages,ReportSettings reportSettings):this(reportSettings) { this.pages = pages; @@ -30,6 +29,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors evaluator.App.Globals.Add("ReportSettings", reportSettings); } + public override void Visit(ExportPage page) { var result = evaluator.Evaluate("5 * 10"); @@ -39,12 +39,10 @@ namespace ICSharpCode.Reporting.Exporter.Visitors ac.Accept(this); } } - + public override void Visit(ExportContainer exportColumn) { - var result = evaluator.Evaluate("2 * 10"); - Console.WriteLine("\tExpressionVisitor <{0}> - {1}",exportColumn.Name,result); foreach (var element in exportColumn.ExportedItems) { var ac = element as IAcceptor; ac.Accept(this); @@ -54,16 +52,23 @@ namespace ICSharpCode.Reporting.Exporter.Visitors public override void Visit(ExportText exportColumn) { - if (exportColumn.Text.StartsWith("=")) { + if (ExpressionHelper.CanEvaluate(exportColumn.Text)) { try { - var str = ExpressionHelper.ExtractExpressionPart(exportColumn.Text); - var result = evaluator.Evaluate(str); - exportColumn.Text = result.ToString(); + object result = Evaluate(exportColumn); + exportColumn.Text = result.ToString(); } catch (Exception e) { var s = String.Format("SharpReport.Exprssions -> {0}",e.Message); Console.WriteLine(s); } } } + + + object Evaluate(ExportText exportColumn) + { + var str = ExpressionHelper.ExtractExpressionPart(exportColumn.Text); + var result = evaluator.Evaluate(str); + return result; + } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs index bd1f9fc491..ece3f53614 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionHelper.cs @@ -11,14 +11,20 @@ namespace ICSharpCode.Reporting.Expressions /// class ExpressionHelper { - public ExpressionHelper() - { - } public static string ExtractExpressionPart (string src) { char v = Convert.ToChar("=",CultureInfo.CurrentCulture ); return StringHelper.RightOf(src,v).Trim(); } + + + public static bool CanEvaluate (string expression) + { + if ((!String.IsNullOrEmpty(expression)) && (expression.StartsWith("=",StringComparison.InvariantCultureIgnoreCase))) { + return true; + } + return false; + } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ExpressionEvaluator.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ExpressionEvaluator.cs index 347e8261b7..b7750cec15 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ExpressionEvaluator.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/ExpressionEvaluator.cs @@ -23,9 +23,6 @@ namespace ICSharpCode.Reporting.Expressions.Irony get { return App.Globals; } } - //Default constructor, creates default evaluator - public ReportingExpressionEvaluator() : this(new ExpressionEvaluatorGrammar()) { - } //Default constructor, creates default evaluator public ReportingExpressionEvaluator(InterpretedLanguageGrammar grammar) { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs index 389f9f3e6e..f675b81894 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests.cs @@ -32,14 +32,6 @@ namespace ICSharpCode.Reporting.Test.Expressions expressionVisitor.Visit(collection[0]); } - [Test] - public void SimpleMath() { - collection[0].Text = "=3 + 6"; - expressionVisitor.Visit(collection[0]); - Assert.That(collection[0].Text,Is.EqualTo("9")); - var res = Convert.ToInt32(collection[0].Text); - Assert.That(res is int); - } [Test] @@ -67,6 +59,22 @@ namespace ICSharpCode.Reporting.Test.Expressions #endregion + #region Convert inside Container + [Test] + public void SimpleStringHandlingInContainer () { + var script = "='Sharpdevelop' + ' is great'"; + + collection[0].Text = script; + var exportContainer = new ExportContainer(); + exportContainer.ExportedItems.Add(collection[0]); + expressionVisitor.Visit(exportContainer); + + var resultColumn = (ExportText)exportContainer.ExportedItems[0]; + Assert.That(resultColumn.Text,Is.EqualTo("Sharpdevelop is great")); + } + + #endregion + #region System.Math [Test]