private static Token ContinueReadingStringToken(StringCodeReader charStream, bool forgive) { var escaping = false; var openedQuote = false; var sb = new StringBuilder(); while (true) { var chVal = charStream.Read(); if (chVal < 0) { var e = new UnexpectedCharacterException( charStream.LineNo, charStream.Col, "continuation of string literal", (char)0); PardonOrDeath(e, forgive); return(FailureToken); } var ch = (char)chVal; if (escaping) { ReadEscapedChar(ch, sb); escaping = false; } else if (ch == '"') { if (openedQuote) { sb.Append('"'); openedQuote = false; } else { var chPeek = (char)charStream.Peek(); if (char.IsWhiteSpace(chPeek)) { return(new Token(TokenType.StringType, sb.ToString())); } else { openedQuote = true; sb.Append('"'); } } } else if (ch == '\\') { escaping = true; } else { sb.Append(ch); } } }
public void TestMethod5() { using (var reader = new StringCodeReader("123\n\n 456")) { while (true) { int ch = reader.Peek(); int chr = reader.Read(); Console.Write((ch == chr) ? "1" : String.Format("||{0}|{1}||", ch, chr)); Assert.IsTrue(ch == chr); if (ch < 0 || chr < 0) { break; } } // Getting output? // https://www.codeproject.com/Articles/501610/Getting-Console-Output-Within-A-Unit-Test // No, this. // https://stackoverflow.com/questions/4786884/how-to-write-output-from-a-unit-test#comment100863043_13532856 Console.WriteLine(""); } }