Irony.Parsing.FreeTextLiteral.TryMatch C# (CSharp) Method

TryMatch() public method

public TryMatch ( ParsingContext context, ISourceStream source ) : Token
context ParsingContext
source ISourceStream
return Token
    public override Token TryMatch(ParsingContext context, ISourceStream source) {
      string tokenText = string.Empty;
      while (true) {
        //Find next position
        var newPos = source.Text.IndexOfAny(_stopChars, source.PreviewPosition);
        if(newPos == -1) {
          if(IsSet(FreeTextOptions.AllowEof)) {
            source.PreviewPosition = source.Text.Length;
            return source.CreateToken(this.OutputTerminal);
          }  else
            return null;
        }
        if (newPos == source.PreviewPosition)   // DC
        {
            context.AddParserError("(DC) in TryMatch, newPos == source.PreviewPosition", new object[] {});
            break;                              // DC
        }
        tokenText += source.Text.Substring(source.PreviewPosition, newPos - source.PreviewPosition);
        source.PreviewPosition = newPos;
        //if it is escape, add escaped text and continue search
        if (CheckEscape(source, ref tokenText)) 
          continue;
        //check terminators
        if (CheckTerminators(source, ref tokenText))
          break; //from while (true)        
      }
      return source.CreateToken(this.OutputTerminal, tokenText);
    }