Esempio n. 1
0
        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);
        }