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 State ScanLine(State state, ITextSnapshotLine line, List <TagSpan <StringTag> > naturalTextSpans = null) { LineProgress p = new LineProgress(line, state, naturalTextSpans); while (!p.EndOfLine) { if (p.State == State.Default) { ScanDefault(p); } else if (p.State == State.MultiLineString || p.State == State.InterpolatedMultiLineString) { p.StartString(p.State); ScanMultiLineString(p, isInterpolated: p.State == State.InterpolatedMultiLineString); } else if (p.State == State.MultilineComment) { ScanMultiLineComment(p); } else { Debug.Fail("Invalid state at beginning of line."); } } // End Of Line state must be one of these. Debug.Assert(p.State == State.Default || p.State == State.MultiLineString || p.State == State.InterpolatedMultiLineString || p.State == State.MultilineComment); return(p.State); }