protected internal bool Balance(BalancingModes mode) { TSymbolType left = CurrentSymbol.Type; TSymbolType right = Language.FlipBracket(left); SourceLocation start = CurrentLocation; AcceptAndMoveNext(); if (EndOfFile && !mode.HasFlag(BalancingModes.NoErrorOnFailure)) { Context.OnError(start, RazorResources.ParseError_Expected_CloseBracket_Before_EOF, Language.GetSample(left), Language.GetSample(right)); } return(Balance(mode, left, right, start)); }
protected internal bool Balance(BalancingModes mode) { var left = CurrentSymbol.Type; var right = Language.FlipBracket(left); var start = CurrentLocation; AcceptAndMoveNext(); if (EndOfFile && ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure)) { Context.OnError(start, RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF( Language.GetSample(left), Language.GetSample(right))); } return(Balance(mode, left, right, start)); }
protected internal bool Balance(BalancingModes mode) { var left = CurrentToken.Type; var right = Language.FlipBracket(left); var start = CurrentStart; AcceptAndMoveNext(); if (EndOfFile && ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure)) { Context.ErrorSink.OnError( RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(start, contentLength: 1 /* { OR } */), Language.GetSample(left), Language.GetSample(right))); } return(Balance(mode, left, right, start)); }
protected internal bool Balance(BalancingModes mode, TTokenType left, TTokenType right, SourceLocation start) { var startPosition = CurrentStart.AbsoluteIndex; var nesting = 1; if (!EndOfFile) { var syms = new List <TToken>(); do { if (IsAtEmbeddedTransition( (mode & BalancingModes.AllowCommentsAndTemplates) == BalancingModes.AllowCommentsAndTemplates, (mode & BalancingModes.AllowEmbeddedTransitions) == BalancingModes.AllowEmbeddedTransitions)) { Accept(syms); syms.Clear(); HandleEmbeddedTransition(); // Reset backtracking since we've already outputted some spans. startPosition = CurrentStart.AbsoluteIndex; } if (At(left)) { nesting++; } else if (At(right)) { nesting--; } if (nesting > 0) { syms.Add(CurrentToken); } }while (nesting > 0 && NextToken()); if (nesting > 0) { if ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure) { Context.ErrorSink.OnError( RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(start, contentLength: 1 /* { OR } */), Language.GetSample(left), Language.GetSample(right))); } if ((mode & BalancingModes.BacktrackOnFailure) == BalancingModes.BacktrackOnFailure) { Context.Source.Position = startPosition; NextToken(); } else { Accept(syms); } } else { // Accept all the tokens we saw Accept(syms); } } return(nesting == 0); }
protected internal bool Balance( BalancingModes mode, TSymbolType left, TSymbolType right, SourceLocation start ) { int startPosition = CurrentLocation.AbsoluteIndex; int nesting = 1; if (!EndOfFile) { IList <TSymbol> syms = new List <TSymbol>(); do { if ( IsAtEmbeddedTransition( mode.HasFlag(BalancingModes.AllowCommentsAndTemplates), mode.HasFlag(BalancingModes.AllowEmbeddedTransitions) ) ) { Accept(syms); syms.Clear(); HandleEmbeddedTransition(); // Reset backtracking since we've already outputted some spans. startPosition = CurrentLocation.AbsoluteIndex; } if (At(left)) { nesting++; } else if (At(right)) { nesting--; } if (nesting > 0) { syms.Add(CurrentSymbol); } } while (nesting > 0 && NextToken()); if (nesting > 0) { if (!mode.HasFlag(BalancingModes.NoErrorOnFailure)) { Context.OnError( start, RazorResources.ParseError_Expected_CloseBracket_Before_EOF, Language.GetSample(left), Language.GetSample(right) ); } if (mode.HasFlag(BalancingModes.BacktrackOnFailure)) { Context.Source.Position = startPosition; NextToken(); } else { Accept(syms); } } else { // Accept all the symbols we saw Accept(syms); } } return(nesting == 0); }