public override object VisitPattern([NotNull] PageInterpreterParser.PatternContext context) { var onlyFirstCaptured = context.Any() == null ? true : false; currentCount = 0; base.VisitPattern(context); if (!ResultCountByQuery.ContainsKey(currentQuery)) { ResultCountByQuery.Add(currentQuery, new AnalyzedQuery() { IsArray = !onlyFirstCaptured, NumberOfCaptures = currentCount }); } else { if (!onlyFirstCaptured && !ResultCountByQuery[currentQuery].IsArray) { ResultCountByQuery[currentQuery].IsArray = true; } if (currentCount > ResultCountByQuery[currentQuery].NumberOfCaptures) { ResultCountByQuery[currentQuery].NumberOfCaptures = currentCount; } } return(null); }
public override Symbol VisitPattern([NotNull] PageInterpreterParser.PatternContext context) { var onlyFirstCaptured = context.Any() == null ? true : false; var subsets = context?.subset()?.Accept(this)?.GetValue <Dictionary <SubsetPart, int> >(); for ( int x = page.Contents.GetLength(0) - calculateSubsetOnPage(subsets, SubsetPart.Right); x < calculateSubsetOnPage(subsets, SubsetPart.Left); x++ ) { for ( int y = page.Contents.GetLength(1) - calculateSubsetOnPage(subsets, SubsetPart.Bottom); y < calculateSubsetOnPage(subsets, SubsetPart.Top); y++ ) { if (page.Contents[x, y] == null || page.Contents[x, y].Count == 0) { continue; } pageTraverser = new PageTraverser(page, new PageIndex(x, y)); currentPatternResult = new PatternResult(); try { base.VisitPattern(context); if (currentPatternResult != null) { foreach (var item in currentPatternResult.Result) { Result.AddResult(queryLabel, item.Key, item.Value); } } if (onlyFirstCaptured) { x = page.Contents.GetLength(0); break; } } catch (ParseCanceledException) { currentPatternResult = null; } } } return(new Symbol(SymbolType.Success)); }