public void ReadWord_With_NewLine() { var reader = new CreoleReader(" 123\r\n 456 7890 "); var actual = reader.ReadWord(); Assert.AreEqual("123", actual); Assert.AreEqual(5, reader.Position); }
public void ReadWord() { var reader = new CreoleReader(" 123456 7890 "); var actual = reader.ReadWord(); Assert.AreEqual("123456", actual); Assert.AreEqual(8, reader.Position); }
public void PeekLine() { var reader = new CreoleReader(" 123456 \r\n 7890 "); var actual = reader.PeekLine(); Assert.AreEqual(" 123456 ", actual); Assert.AreEqual(0, reader.Position); }
public void ReadLine() { var reader = new CreoleReader(" 123 \r\n 456 7890 "); var actual = reader.ReadLine(); Assert.AreEqual(" 123 ", actual); Assert.AreEqual(7, reader.Position); actual = reader.ReadLine(); Assert.AreEqual(" 456 7890 ", actual); Assert.AreEqual(true, reader.EndOfMarkup); }
internal string ParseInlines(string markup, params Func<CreoleReader, CreoleElement>[] ignore) { var elements = new List<InlineElement>(); // parse markup var reader = new CreoleReader(markup); var textBuilder = new StringBuilder(); while (!reader.EndOfMarkup) { InlineElement inline = null; foreach (var inlineParser in InlineElements) { if (ignore.Contains(inlineParser)) continue; inline = inlineParser(reader); if (inline == null) continue; break; } if (inline == null) { textBuilder.Append(reader.Read(1)); } else { elements.AddRange(TextInline.Parse(textBuilder.ToString())); textBuilder.Clear(); elements.Add(inline); } } if (textBuilder.Length > 0) elements.AddRange(TextInline.Parse(textBuilder.ToString())); // render output var writer = new CreoleWriter(); foreach (var element in elements) { element.Render(this, writer); } return writer.ToString().Replace("\n", Environment.NewLine); }
public void ReadLineUntil() { var reader = new CreoleReader(" 123 \r\n 456 7890 \r\n asdfMARK \r\nMARK \r\n test \r\nMARK "); var actual = reader.ReadLineUntil(l => l.StartsWith("MARK") ? 2 : -1); Assert.AreEqual(" 123 \n 456 7890 \n asdfMARK \nMA", actual); Assert.AreEqual(31, reader.Position); actual = reader.ReadLineUntil(l => l.StartsWith("MARK") ? 4 : -1); Assert.AreEqual("RK \n test \nMARK", actual); Assert.AreEqual(reader.Length - 1, reader.Position); }
public void HasPrefix() { var reader = new CreoleReader("123456789"); var actual = reader.HasPrefix("123", 3); Assert.IsTrue(actual); }
internal string Parse(string markup, params Func<CreoleReader, CreoleElement>[] ignore) { var elements = new List<BlockElement>(); // parse markup var reader = new CreoleReader(markup); var paragraphBuilder = new StringBuilder(); while (!reader.EndOfMarkup) { BlockElement block = null; foreach (var blockParser in BlockElements) { if (ignore.Contains(blockParser)) continue; block = blockParser(reader); if (block == null) continue; break; } if (block == null) { paragraphBuilder.AppendLine(reader.ReadLine()); } else { elements.AddRange(ParagraphBlock.Parse(paragraphBuilder.ToString())); paragraphBuilder.Clear(); elements.Add(block); } } if (paragraphBuilder.Length > 0) elements.AddRange(ParagraphBlock.Parse(paragraphBuilder.ToString())); // render output var writer = new CreoleWriter(); foreach (var element in elements) { element.Render(this, writer); } return writer.ToString().Replace("\n", Environment.NewLine).Trim(); }