private void ScanDefault(LineProgress p) { while (!p.EndOfLine) { if (p.Char() == '$' && p.NextChar() == '@' && p.NextNextChar() == '"') // interpolated multiline string { p.Advance(3); p.StartString(State.InterpolatedMultiLineString); ScanMultiLineString(p, true); } else if (p.Char() == '$' && p.NextChar() == '"') // interpolated string { p.Advance(2); p.StartString(State.InterpolatedString); ScanString(p, true); } else if (p.Char() == '@' && p.NextChar() == '"') // multi-line string { p.Advance(2); p.StartString(State.MultiLineString); ScanMultiLineString(p, false); } else if (p.Char() == '"') // single-line string { p.Advance(); p.StartString(State.String); ScanString(p, false); } else if (p.Char() == '\'') // character { p.Advance(); ScanCharacter(p); } else if (p.Char() == '/' && p.NextChar() == '*') // multiline comment { p.Advance(2); p.State = State.MultilineComment; ScanMultiLineComment(p); } else if (p.Char() == '/' && p.NextChar() == '/') // single-line comment { p.AdvanceToEndOfLine(); } else { p.Advance(); } } }
private void ScanMultiLineComment(LineProgress p, bool skipOnly = false) { while (!p.EndOfLine) { if (p.Char() == '*' && p.NextChar() == '/') { p.Advance(2); if (!skipOnly) { p.State = State.Default; } return; } else { p.Advance(); } } }