private bool Accept <TInput, TOutput>(IfParser <TInput, TOutput> p, BnfStringifyVisitor state) { var children = p.GetChildren().ToArray(); state.Append("IF ", children[0], " THEN ", children[1], " ELSE ", children[2]); return(true); }
public override Parser <TInput> VisitIf(IfParser <TInput> parser) { if (state.State == 0) { state.State = 1; return(parser.Test); } else if (state.State == 1) { var length = state.LastResult; if (length < 0) { state.InputLength = length; return(null); } else { state.State = 2; return(parser.Parser); } } else { state.InputLength = state.LastResult; return(null); } }
public override int VisitIf <TOutput>(IfParser <TInput, TOutput> parser, int start) { var oldPrevWasMissing = _prevWasMissing; var length = Search(parser.Test, start); if (length < 0) { return(length); } _prevWasMissing = oldPrevWasMissing; return(Search(parser.Parser, start)); }
public void TestParseCplx() { using (var docStream = AssemblyResourceHelper.GetResourceStream(this, "document_dontworking_if.xml")) { var doc = XDocument.Load(docStream); var documentRoot = doc.Root.Element(WordMl.WordMlNamespace + "body"); var parser = new IfParser(); var startElement = TraverseUtils.TagElement(documentRoot, "If"); var endElement = TraverseUtils.TagElement(documentRoot, "EndIf"); var parentProcessor = new RootProcessor(); parser.Parse(parentProcessor, startElement); var ifProcessor = (IfProcessor)parentProcessor.Processors.First(); var ifTag = ifProcessor.Tag; const string IfCondition = "//test/condition"; Assert.IsNotNull(ifProcessor); //Assert.IsTrue(IfCondition.Equals(ifTag.Conidition)); CollectionAssert.AreEqual(Encoding.UTF8.GetBytes(IfCondition), Encoding.UTF8.GetBytes(ifTag.Conidition)); Assert.AreEqual(startElement, ifTag.StartIf); Assert.AreEqual(endElement, ifTag.EndIf); var elements = ifTag.IfContent.ToList(); Assert.AreEqual(1, elements.Count()); /* * Assert.IsTrue(elements.Take(6).All(e => e.Name.Equals(WordMl.TextRunName))); * Assert.IsTrue(elements.Skip(6).Take(1).All(e => e.Name.Equals(WordMl.ParagraphName))); * Assert.IsTrue(elements.Skip(7).Take(1).All(e => e.Name.Equals(WordMl.ParagraphPropertiesName))); * Assert.IsTrue(elements.Skip(8).Take(1).All(e => e.Name.Equals(WordMl.BookmarkStartName))); * Assert.IsTrue(elements.Skip(9).Take(4).All(e => e.Name.Equals(WordMl.TextRunName))); * Assert.IsTrue(elements.Skip(13).Take(1).All(e => e.Name.Equals(WordMl.ProofingErrorAnchorName))); * Assert.IsTrue(elements.Skip(14).Take(1).All(e => e.Name.Equals(WordMl.TextRunName))); * Assert.IsTrue(elements.Skip(15).Take(1).All(e => e.Name.Equals(WordMl.ProofingErrorAnchorName))); * Assert.IsTrue(elements.Skip(16).Take(1).All(e => e.Name.Equals(WordMl.TextRunName))); */ Assert.AreEqual(startElement, ifTag.StartIf); Assert.AreEqual(endElement, ifTag.EndIf); } }
public void TestParse() { using (var docStream = AssemblyResourceHelper.GetResourceStream(this, "IfParserTest.xml")) { var doc = XDocument.Load(docStream); var documentRoot = doc.Root.Element(WordMl.WordMlNamespace + "body"); var parser = new IfParser(); var startElement = TraverseUtils.TagElement(documentRoot, "If"); var endElement = TraverseUtils.TagElement(documentRoot, "EndIf"); var parentProcessor = new RootProcessor(); parser.Parse(parentProcessor, startElement); var ifProcessor = (IfProcessor)parentProcessor.Processors.First(); var ifTag = ifProcessor.Tag; const string IfCondition = "//test/condition"; Assert.IsNotNull(ifProcessor); Assert.AreEqual(IfCondition, ifTag.Conidition); var content = ifTag.IfContent.ToList(); Assert.AreEqual(1, content.Count); Assert.AreEqual(WordMl.ParagraphName, content[0].Name); var paragraphChildren = content[0].Elements().ToList(); Assert.AreEqual(6, paragraphChildren.Count()); Assert.AreEqual(WordMl.ParagraphPropertiesName, paragraphChildren[0].Name); Assert.AreEqual(WordMl.ProofingErrorAnchorName, paragraphChildren[1].Name); Assert.AreEqual(WordMl.TextRunName, paragraphChildren[2].Name); Assert.AreEqual("Hello", paragraphChildren[2].Value); Assert.AreEqual(WordMl.ProofingErrorAnchorName, paragraphChildren[3].Name); Assert.AreEqual(WordMl.TextRunName, paragraphChildren[4].Name); Assert.AreEqual(", World!", paragraphChildren[4].Value); Assert.AreEqual(WordMl.SdtName, paragraphChildren[5].Name); Assert.IsTrue(paragraphChildren[5].IsTag("text")); Assert.AreEqual(startElement, ifTag.StartIf); Assert.AreEqual(endElement, ifTag.EndIf); var textProcessor = (TextProcessor)ifProcessor.Processors.FirstOrDefault(); Assert.IsNotNull(textProcessor); Assert.IsNotNull(textProcessor.TextTag); Assert.AreEqual("//test/text", textProcessor.TextTag.Expression); } }
public override Parser <TInput> VisitIf <TOutput>(IfParser <TInput, TOutput> parser) { if (state.State == 0) { var length = parser.Test.Scan(source, state.InputStart); if (length < 0) { state.InputLength = length; return(null); } else { state.State = 1; return(parser.Parser); } } else { state.InputLength = state.LastResult; return(null); } }
public override int VisitIf(IfParser <TInput> parser, int start) { var oldPrevWasMissing = _prevWasMissing; var length = parser.Test.Scan(_source, start); if (length >= 0) { _prevWasMissing = oldPrevWasMissing; length = Search(parser.Parser, start); } else { _prevWasMissing = oldPrevWasMissing; length = Search(parser.Test, start); } if (length < 0) { _prevWasMissing = oldPrevWasMissing; } return(length); }
public override void VisitIf(IfParser <TInput> parser) { this.Visit(parser.Parser); }
public override Parser <TInput> VisitIf(IfParser <TInput> parser) { return(NextIf(parser.Test, parser.Parser)); }
public static bool Parse(SyntaxContext context, int position) { var list = context.list; var offset = 0; var index = position; var count = 0; var isMissed = false; count = 0; while (true) { while (ReturnParser.Parse(context, index)) { ; } while (BreakParser.Parse(context, index)) { ; } while (DoParser.Parse(context, index)) { ; } while (WhileParser.Parse(context, index)) { ; } while (ForNParser.Parse(context, index)) { ; } while (ForParser.Parse(context, index)) { ; } while (ForEachParser.Parse(context, index)) { ; } while (FunctionNParser.Parse(context, index)) { ; } while (FunctionSParser.Parse(context, index)) { ; } while (IfParser.Parse(context, index)) { ; } while (IfElseParser.Parse(context, index)) { ; } while (DefineNParser.Parse(context, index)) { ; } while (CallParser.Parse(context, index)) { ; } while (BindParser.Parse(context, index)) { ; } while (BindNParser.Parse(context, index)) { ; } if (context.isMissed) { context.isMissed = false; offset += 1; index = position + offset; count += 1; break; } if (!list[index].isStatement) { break; } else { // ignored } offset += 1; index = position + offset; count += 1; } if (count == 0) { return(false); } context.Insert(position, ExpressionCreator.CreateModule(list, position, offset)); context.Remove(position + 1, offset); return(true); }