private bool HandleIfExpression(char chr, int index) { ProcessStartEndLiterals(chr); if (_bcounter == 0) { _parser.WriteCode(chr); int nextIndex = index + 1, operandElseIndex = _parser.FindNextChars(nextIndex, "else{"), operandElseIfIndex = _parser.FindNextChars(nextIndex, "else if("); if (operandElseIfIndex > -1) { _parser.charIndex = operandElseIfIndex; _parser.WritePlainCode("else if("); MoveToBlockStart(); } else if (operandElseIndex > -1) { _parser.charIndex = operandElseIndex; _parser.WritePlainCode("else{\r\n"); _bcounter = 1; } else { _parser.ReplaceHtmlWriteAndRender(); if (_root == null) { _parser.EndViewResponse(); } _parser.charIndex++; return(true); } } else { HandleCode(chr); } return(false); }
private bool Process(char chr, int index) { if (chr == RazorParser.RazorChr) { if (_buffer.Length > 0) { _parser.WriteHtml(_buffer.ToString()); _buffer.Clear(); } IDocumentParser parser = new RazorDocumentParser(_razor, _root != null ? _root : this); parser.Execute(_parser); } else { WriteBuffer(chr); char prev = _parser.GetCharacterAtIndex(index - 1), next = _parser.GetCharacterAtIndex(index + 1); if (_textMode && _buffer.Length >= 6 && chr == RazorParser.TagEndChr) { if (_parser.FindNextChars(index - 5, RazorParser.TextTag) > -1) { _buffer.Remove(_buffer.Length - 6, 6); } } else if (chr == RazorParser.TagStartChr && (prev != RazorParser.QuoteChr || prev != RazorParser.SingleQuoteChr) && (next != RazorParser.TagCloseChr)) { if (_textMode) { if (_parser.FindNextChars(index, RazorParser.TextTag) > -1) { _tcounter++; } } else { _tcounter++; } } else if (chr == RazorParser.TagCloseChr && (prev == RazorParser.TagStartChr || next == RazorParser.TagEndChr)) { if (_textMode) { if (_parser.FindNextChars(index - 1, RazorParser.TextCloseTag) > -1) { _tcounter--; } } else { _tcounter--; } } if (_tcounter == 0) { while (true) { chr = _parser.GetCharacterAtIndex(++_parser.charIndex); if (!_textMode) { WriteBuffer(chr); } if (chr == RazorParser.TagEndChr) { break; } } if (_textMode) { _buffer.Remove(_buffer.Length - 2, 2); } _parser.WriteHtml(_buffer.ToString()); if (_razor == null) { _parser.EndViewResponse(); } _buffer.Clear(); return(true); } } return(false); }