private Processor() { gadgetSpecFactory = DefaultGadgetSpecFactory.Instance; substituter = new VariableSubstituter(); blacklist = new BasicGadgetBlacklist(""); containerConfig = JsonContainerConfig.Instance; }
/// <summary> /// Evaluates the tokens bound to this AggregatorNode and generates the list of InferredFacts. /// </summary> internal void Evaluate() { int cntOfEarlierConditions = lhs.Count - 1; VariableSubstituter vs = null; for (int i = cntOfEarlierConditions; i >= 0; i--) { Condition earlier_cond = lhs[i]; if (earlier_cond.ConditionType == ConditionType.Positive) { for (int f2 = 0; f2 < 3; f2++) { Variable o = earlier_cond.Fields[f2] as Variable; if (o != null && o.Equals(_groupBy)) { vs = new VariableSubstituter(); vs.FieldNumber = f2; vs.NumberOfLevelsUp = (cntOfEarlierConditions - i); vs.BindingPair.Variable = o; f2 = 3; i = -1; //escape loop of cntOfEarlierConditions } } } } if (vs == null) { throw new ApplicationException("Bad rule"); } Dictionary <Term, List <WME> > sorter = new Dictionary <Term, List <WME> >(); foreach (Token token in _aggregatorNode.Items) { Token ptoken = token.GetTokenUp(vs.NumberOfLevelsUp); Term key = ptoken.WME.Fields[vs.FieldNumber]; if (sorter.ContainsKey(key)) { List <WME> list = sorter[key]; if (list.Contains(token.WME) == false) { list.Add(token.WME); } } else { List <WME> list = new List <WME>(); list.Add(token.WME); sorter.Add(key, list); } } foreach (KeyValuePair <Term, List <WME> > pair in sorter) { Term val = _aggregator.Evaluate(pair.Value); _inferredFacts.Add(new Activation(new WME(pair.Key, _aggregator.Alias, val), _conditionType)); } }
public void Test() { var s = VariableSubstituter.SedTransform("Pokwer", "s/o/0/g"); Assert.AreEqual("P0kwer", s); s = VariableSubstituter.SedTransform("Pokwer", "s/([A-Z]).*/$1$0/g"); Assert.AreEqual("PPokwer", s); s = VariableSubstituter.SedTransform("DbPokwer", "s/Db(Pokwer)/$1/g"); Assert.AreEqual("Pokwer", s); s = VariableSubstituter.SedTransform("Pokwer22", "s/Db(Pokwer)/$1/g"); Assert.AreEqual("Pokwer22", s); }
public void Test() { var s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g; s/HELL(.*)/BYE$1/"); Assert.AreEqual("BYEO", s); s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g \n;\ts/HELL(.*)/BYE$1/"); Assert.AreEqual("BYEO", s); s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g \n\t;s/HELL(.*)/BYE$1/ "); Assert.AreEqual("BYEO", s); s = VariableSubstituter.SedTransform("Pokwer22", "s/^.*$/$(env.USERNAME)$0/g"); Assert.AreEqual(Environment.GetEnvironmentVariable("USERNAME") + "Pokwer22", s); s = VariableSubstituter.SedTransform("Pokwer", "s/o/0/g"); Assert.AreEqual("P0kwer", s); s = VariableSubstituter.SedTransform("Pokwer", "s/([A-Z]).*/$1$0/g"); Assert.AreEqual("PPokwer", s); s = VariableSubstituter.SedTransform("DbPokwer", "s/Db(Pokwer)/$1/g"); Assert.AreEqual("Pokwer", s); s = VariableSubstituter.SedTransform("Pokwer22", "s/Db(Pokwer)/$1/g"); Assert.AreEqual("Pokwer22", s); s = VariableSubstituter.SedTransform("Hello", "s/^$/HELLO/g"); Assert.AreEqual("Hello", s); s = VariableSubstituter.SedTransform("", "s/^$/HELLO/g"); Assert.AreEqual("HELLO", s); }
public void Test() { var s = VariableSubstituter.SedTransform("Pokwer22", "s/^.*$/$(env.USERNAME)$0/g"); Assert.AreEqual(Environment.GetEnvironmentVariable("USERNAME") + "Pokwer22", s); s = VariableSubstituter.SedTransform("Pokwer", "s/o/0/g"); Assert.AreEqual("P0kwer", s); s = VariableSubstituter.SedTransform("Pokwer", "s/([A-Z]).*/$1$0/g"); Assert.AreEqual("PPokwer", s); s = VariableSubstituter.SedTransform("DbPokwer", "s/Db(Pokwer)/$1/g"); Assert.AreEqual("Pokwer", s); s = VariableSubstituter.SedTransform("Pokwer22", "s/Db(Pokwer)/$1/g"); Assert.AreEqual("Pokwer22", s); }
public void TestSubstitution() { var subst = new VariableSubstituter("n", two); var result = n.Accept(subst); Assert.AreEqual("2", testAsync(result, 200).Result); result = zero.Accept(subst); Assert.AreEqual("0", testAsync(result, 200).Result); var exists = new NumExists("n", n == n); result = exists.Accept(subst); Assert.AreEqual(True, testAsync(result, 200).Result); var test = new Apply(new LambdaExpression("n", n == n), two); Assert.AreEqual(True, testAsync(test, 200).Result); // test that substitution avoids explosions var test2 = new Apply(new LambdaExpression("x", logicTrue), logicLoop); Assert.AreEqual(True, testAsync(test2, 200).Result); var test3 = new Apply(new LambdaExpression("x", logicLoop), logicTrue); Assert.AreEqual(Loop, testAsync(test3, 500).Result); var test4 = new Apply(new LambdaExpression("x", x & logicTrue), logicLoop); Assert.AreEqual(Loop, testAsync(test4, 500).Result); var test5 = new Apply(new LambdaExpression("x", x | logicTrue), logicLoop); Assert.AreEqual(True, testAsync(test5, 500).Result); }
internal string GetName(TypeDescriptor type, string transformString = "") { return(VariableSubstituter.SedTransform(VariableSubstituter.Substitute(this.Name ?? type.TypeName, type), transformString)); }
public static string GetHtml(ContentItem model) { if (model == null) { return("{model = null}"); // nothing to do } if (!(model is ContentList)) { return("{adapter failure - Model is not a NewsList}"); // nothing to do } var errorList = new List <string>(); var currentItem = model as ContentList; var chH = currentItem.HtmlHeader ?? string.Empty; var chF = currentItem.HtmlFooter ?? string.Empty; var sb = new System.Text.StringBuilder(50 * 1024 + chH.Length + chF.Length); var allNews = new List <ContentItem>(); var containerLinks = currentItem.Containers as IEnumerable <ContentListContainerLink>; Func <ContentItem, bool> pageCriteria = x => x.IsPage && x.Published.HasValue; if (containerLinks == null) { sb.Append(@"<div class=""alert alert-error"">Content List: ContainerLinks is null.</div>"); } else if (currentItem.Containers.Count == 0) { sb.Append(@"<div class=""alert alert-warning"">Content List: ContainerLinks is empty. Edit the content list and add at least one content container.</div>"); } else { foreach (var containerLink in containerLinks.Where(c => c.Container != null && c.Container.IsPage)) { var aChildren = currentItem.EnforcePermissions ? containerLink.Container.GetChildren().Where(pageCriteria).ToList() : containerLink.Container.Children.Where(pageCriteria).ToList(); var cycleCheck = new List <ContentItem>(); if (containerLink.Recursive) { while (aChildren.Count > 0) { var child = aChildren[0]; aChildren.RemoveAt(0); var chr = currentItem.EnforcePermissions ? child.GetChildren().Where(pageCriteria).Where(f => !cycleCheck.Contains(f)) : child.Children.Where(pageCriteria).Where(f => !cycleCheck.Contains(f)); var chrX = chr as ContentItem[] ?? chr.ToArray(); /* otherwise possible multiple enumeration to follow */ aChildren.AddRange(chrX); cycleCheck.AddRange(chrX); allNews.Add(child); } } else { allNews.AddRange(aChildren); } } } foreach (var x in currentItem.Exceptions) { errorList.Add(x.ToString()); } if (!String.IsNullOrEmpty(currentItem.Title)) { sb.AppendFormat("<h{0}>{1}</h{0}>", currentItem.TitleLevel, currentItem.Title); } var newsEnumerable = allNews.Where(pageCriteria); { // apply sort order *** var sortAscending = currentItem.SortDirection == SortDirection.Ascending; switch (currentItem.SortColumn) { case ContentSortMode.Expiration: Func <ContentItem, DateTime> expirySortSelector = a => a.Expires != null ? a.Expires.Value : new DateTime(); newsEnumerable = sortAscending ? allNews.OrderBy(expirySortSelector) : allNews.OrderByDescending(expirySortSelector); break; case ContentSortMode.Title: Func <ContentItem, String> titleSortSelector = a => a.Title; newsEnumerable = sortAscending ? allNews.OrderBy(titleSortSelector) : allNews.OrderByDescending(titleSortSelector); break; case ContentSortMode.PublishDate: Func <ContentItem, DateTime> dateSortSelector = a => a.Published != null ? a.Published.Value : new DateTime(); newsEnumerable = sortAscending ? allNews.OrderBy(dateSortSelector) : allNews.OrderByDescending(dateSortSelector); break; } // apply filter *** if (!currentItem.ShowFutureEvents) { newsEnumerable = newsEnumerable.Where(a => a.Published != null && a.Published.Value <= N2.Utility.CurrentTime()); } if (!currentItem.ShowPastEvents) { newsEnumerable = newsEnumerable.Where(a => a.Published != null && a.Published.Value >= N2.Utility.CurrentTime()); } if (currentItem.MaxNews > 0) { newsEnumerable = newsEnumerable.Take(currentItem.MaxNews); } } if (currentItem.DisplayMode == NewsDisplayMode.HtmlItemTemplate) { sb.Append(chH); } DateTime?lastDate = null; // why no ForEach here? it turns out that the C# compiler changes the behavior RE: how it deals with foreach // variables accessed from within lambda expressions. using (var itemEnumerator = newsEnumerable.GetEnumerator()) while (itemEnumerator.MoveNext()) { ContentItem item = itemEnumerator.Current; var itemPublished = item.Published == null ? new DateTime() : item.Published.Value; if (currentItem.SortColumn == ContentSortMode.PublishDate && currentItem.GroupByMonth && (lastDate == null || lastDate.Value.Month != itemPublished.Month)) { // new month *** sb.AppendFormat("<h2>{0:MMMM yyyy}</h2>\n", itemPublished); lastDate = item.Published.Value; } var showTitle = !String.IsNullOrEmpty(item.Title); // && item.ShowTitle var text = (item.GetDetail("Text") ?? "").ToString(); var summary = (item.GetDetail("Summary") ?? "").ToString(); // display either full article or abstract + link *** switch (currentItem.DisplayMode) { case NewsDisplayMode.TitleAndText: if (showTitle) { sb.AppendFormat("<h{1}>{0}</h{1}>\n", item.Title ?? "Untitled", currentItem.TitleLevel + 1); } Debug.Assert(item.Published != null, "item.Published != null"); sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value); sb.AppendFormat("<div class=\"article\">\n{0}\n</div>\n", text); break; case NewsDisplayMode.TitleAndAbstract: if (!String.IsNullOrEmpty(text)) { if (showTitle) { sb.AppendFormat("<h{2}><a href=\"{1}\">{0}</a></h{2}>\n", item.Title ?? "Untitled", item.Url, currentItem.TitleLevel + 1); } Debug.Assert(item.Published != null, "item.Published != null"); sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value); sb.AppendFormat("<div class=\"abstract\">\n{0}\n</div>\n", summary); sb.AppendFormat("<a href=\"{0}\">Read more...</a>\n", item.Url); } else { if (showTitle) { sb.AppendFormat("<h{1}>{0}</h{1}>\n", item.Title ?? "Untitled", currentItem.TitleLevel + 1); } Debug.Assert(item.Published != null, "item.Published != null"); sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value); sb.AppendFormat("<div class=\"abstract\">\n{0}\n</div>\n", summary); } break; case NewsDisplayMode.TitleLinkOnly: sb.AppendFormat("<h{2}><a href=\"{1}\">{0}</a></h{2}>\n", item.Title ?? "Untitled", item.Url, currentItem.TitleLevel + 1); Debug.Assert(item.Published != null, "item.Published != null"); sb.AppendFormat("<div class=\"date\">{0:MMMM d, yyyy}</div>\n", item.Published.Value); break; case NewsDisplayMode.HtmlItemTemplate: try { if (String.IsNullOrWhiteSpace(currentItem.HtmlItemTemplate)) { break; } if (!currentItem.HtmlItemTemplate.Contains("$$") && !currentItem.HtmlItemTemplate.Contains("{{")) { sb.Append(currentItem.HtmlItemTemplate); break; } sb.Append(VariableSubstituter.Substitute(currentItem.HtmlItemTemplate, item)); } catch (Exception x) { errorList.Add(x.ToString()); } break; default: errorList.Add("Can't render web part: invalid NewsDisplayMode."); break; } } if (currentItem.DisplayMode == NewsDisplayMode.HtmlItemTemplate) { sb.Append(chF); } errorList.ForEach(x => sb.AppendFormat(@"<div class=""alert alert-error""><pre>{0}</pre></div>", x)); return(sb.ToString()); }
/// <summary> /// Called when [variable substituter] is visited. /// </summary> /// <param name="substituter">The substituter.</param> public override void OnVariableSubstituter(VariableSubstituter substituter) { _sb.AppendLine(substituter.ToString()); }
/// <summary> /// Called when [variable substituter] is visited. /// </summary> /// <param name="substituter">The substituter.</param> public virtual void OnVariableSubstituter(VariableSubstituter substituter) { }
internal string GetSuffixName(PropertyDescriptor property, string transformString = "") { return(VariableSubstituter.SedTransform(VariableSubstituter.Substitute(this.SuffixName, property), transformString)); }