public IEnumerable<int> GetPositions(int position, RegexBlock block) { var zeroOrOneBlock = block as ZeroOrOneBlock; if (zeroOrOneBlock != null) return GetPositionsFromZeroOrOneBlock(position, zeroOrOneBlock); var zeroOrMoreBlock = block as ZeroOrMoreBlock; if (zeroOrMoreBlock != null) return GetPositionsFromZeroOrMoreBlock(position, zeroOrMoreBlock); var oneOrMoreBlock = block as OneOrMoreBlock; if (oneOrMoreBlock != null) return GetPositionsFromOneOrMoreBlock(position, oneOrMoreBlock); var orGroupBlock = block as OrGroupBlock; if (orGroupBlock != null) return GetPositionsFromOrGroupBlock(position, orGroupBlock); var andGroupBlock = block as AndGroupBlock; if (andGroupBlock != null) return GetPositionsFromAndGroupBlock(position, andGroupBlock); var visitor = new CheckerRegexVisitor(position, _input, _groupValues); return visitor.GetPositions(block); }
/// <summary> /// Search for and process all object blocks in the file. /// </summary> /// <returns></returns> private IEnumerable <Block> ProcessBlocks() { // process found block strings foreach (Match match in RegexBlock.Matches(Text)) { yield return(new Block(this, TextIndex.Skip(match.Index).Take(match.Length).ToList(), Text.LineFromPosition(match.Index), match.Value)); } }
public IEnumerable<int> GetPositions(RegexBlock block) { var enumerable = Visit(block) as IEnumerable<int>; Contract.Assert(enumerable != null); return enumerable; }
private void CheckVisitorResult(BuilderRegexVisitor visitor, RegexBlock block, IEnumerable<string> expectedLines) { visitor.Visit(block); var lines = visitor.Result; CollectionAssert.AreEquivalent(expectedLines.ToList(), lines.ToList()); }
public void PushBlock(RegexBlock block) { _blocks.Push(block); }
protected object Visit(RegexBlock block) { var textBlock = block as TextBlock; if (textBlock != null) { return VisitTextBlock(textBlock); } var anyCharacterBlock = block as AnyCharacterBlock; if (anyCharacterBlock != null) { return VisitAnyCharacterBlock(anyCharacterBlock); } var inclusiveSetBlock = block as InclusiveSetBlock; if (inclusiveSetBlock != null) { return VisitInclusiveSetBlock(inclusiveSetBlock); } var exclusiveSetBlock = block as ExclusiveSetBlock; if (exclusiveSetBlock != null) { return VisitExclusiveSetBlock(exclusiveSetBlock); } var zeroOrOneBlock = block as ZeroOrOneBlock; if (zeroOrOneBlock != null) { return VisitZeroOrOneBlock(zeroOrOneBlock); } var zeroOrMoreBlock = block as ZeroOrMoreBlock; if (zeroOrMoreBlock != null) { return VisitZeroOrMoreBlock(zeroOrMoreBlock); } var oneOrMoreBlock = block as OneOrMoreBlock; if (oneOrMoreBlock != null) { return VisitOneOrMoreBlock(oneOrMoreBlock); } var orGroupBlock = block as OrGroupBlock; if (orGroupBlock != null) { return VisitOrGroupBlock(orGroupBlock); } var andGroupBlock = block as AndGroupBlock; if (andGroupBlock != null) { return VisitAndGroupBlock(andGroupBlock); } var backreferenceBlock = block as BackreferenceBlock; if (backreferenceBlock != null) { return VisitBackreferenceBlock(backreferenceBlock); } return block; }
public ZeroOrOneBlock(RegexBlock innerBlock) : base(innerBlock) { }
private IEnumerable<int> GetPositionsFromBlock(int position, RegexBlock block) { foreach (var nextPosition in GetPositions(position, block)) { yield return nextPosition; foreach (var nestedNextPosition in GetPositionsFromBlock(nextPosition, block)) { yield return nestedNextPosition; } } }
public QuantifierBlock(RegexBlock innerBlock) { InnerBlock = innerBlock; }
public OneOrMoreBlock(RegexBlock innerBlock) : base(innerBlock) { }
private static bool IsCharacterContainer(RegexBlock block) { return block is TextBlock || block is SetBlock; }
private static RegexBlock AddCharacter(RegexBlock container, char c) { var textBlock = container as TextBlock; if (textBlock != null) { return new TextBlock(textBlock.Text + c); } var inclusiveSetBlock = container as InclusiveSetBlock; if (inclusiveSetBlock != null) { return new InclusiveSetBlock(inclusiveSetBlock.Characters + c); } var exclusiveSetBlock = container as ExclusiveSetBlock; if (exclusiveSetBlock != null) { return new ExclusiveSetBlock(exclusiveSetBlock.Characters + c); } return null; }