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);
		}
Пример #5
0
		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);
		}
Пример #8
0
		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();
		}