コード例 #1
0
 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();
         }
     }
 }
コード例 #2
0
        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);
        }