Example #1
0
        /// <summary>
        /// 
        /// </summary>
        /// <returns>Next line start context</returns>
        public LineContext FinalizeLine()
        {
            m_tb.PutToken(m_currentContext);
            if(m_currentContext == BabelTokenContext.CommentSingleLine)
            {
                m_currentContext = m_commentContext;
                m_commentContext = BabelTokenContext.Other;
            }

            if(m_currentContext != BabelTokenContext.CommentMultiLine)
            {
                //Only multiline comments can be carried to a new line
                m_currentContext = BabelTokenContext.Other;
                m_commentContext = BabelTokenContext.Other;
            }
            return new LineContext { Context = m_currentContext, CommentContext = m_commentContext };
        }
Example #2
0
        public void ProcessChar(char c)
        {
            switch(m_currentContext)
            {
                case BabelTokenContext.StringConst:
                    m_tb.SkipChar();
                    switch(c)
                    {
                        case '\\':
                            m_isEscape = !m_isEscape;
                            break;
                        case '"':
                            if(!m_isEscape)
                            {
                                m_tb.PutToken(BabelTokenType.StringConst);
                                m_currentContext = BabelTokenContext.Other;
                                m_isEscape = false;
                            }
                            break;
                        default:
                            m_isEscape = false;
                            break;
                    }
                    break;
                case BabelTokenContext.CharConst:
                    m_tb.SkipChar();
                    switch(c)
                    {
                        case '\\':
                            m_isEscape = !m_isEscape;
                            break;
                        case '\'':
                            if(!m_isEscape)
                            {
                                m_tb.PutToken(BabelTokenType.StringConst);
                                m_currentContext = BabelTokenContext.Other;
                                m_isEscape = false;
                            }
                            break;
                        default:
                            m_isEscape = false;
                            break;
                    }
                    break;
                case BabelTokenContext.CommentMultiLine:
                    m_tb.SkipChar();
                    switch(c)
                    {
                        case '/':
                            if(m_isEscape)
                            {
                                m_tb.PutToken(BabelTokenType.Comment);
                                m_isEscape = false;
                                m_currentContext = m_commentContext;
                            }
                            break;
                        case '*':
                            m_isEscape = true;
                            break;
                        default:
                            m_isEscape = false;
                            break;
                    }
                    break;
                case BabelTokenContext.CommentSingleLine:
                    m_tb.SkipChar();
                    break;
                /*case BabelTokenContext.Attribute:
                    m_tb.SkipChar();
                    switch(c)
                    {
                        case ']':
                            m_tb.PutToken(BabelTokenContext.Attribute);
                            m_currentContext = BabelTokenContext.Other;
                            break;
                        default: break;
                    }
                    break;*/
                default:
                    switch(c)
                    {
                        case ' ':
                        case '\t':
                        case '(':
                        case ')':
                        case '{':
                        case '}':
                        case '[':
                        case ']':
                        case ',':
                        case ';':
                        case '<':
                        case '>':
                        case '=':
                            m_tb.PutToken(m_currentContext);
                            m_tb.SkipChar();
                            m_tb.PutToken(BabelTokenContext.Other);
                            m_isSlash = false;
                            break;
                        case '/':
                            if(m_isSlash)
                            {
                                m_tb.SkipChar();
                                m_isSlash = false;
                                m_commentContext = m_currentContext;
                                m_currentContext = BabelTokenContext.CommentSingleLine;
                            }
                            else
                            {
                                m_tb.PutToken(m_currentContext);
                                m_tb.SkipChar();
                                m_isSlash = true;
                            }
                            break;
                        case '*':
                            if(m_isSlash)
                            {
                                m_commentContext = m_currentContext;
                                m_currentContext = BabelTokenContext.CommentMultiLine;
                            }

                            m_tb.SkipChar();
                            m_isSlash = false;
                            break;
                        case '@':
                            m_tb.PutToken(m_currentContext);
                            m_tb.SkipChar();
                            m_currentContext = BabelTokenContext.BabelContext;
                            m_isSlash = false;
                            break;
                        /*case '[':
                            m_tb.PutToken(m_currentContext);
                            m_tb.SkipChar();
                            m_currentContext = BabelTokenContext.Attribute;
                            m_isSlash = false;
                            break;*/
                        case '"':
                            m_tb.PutToken(m_currentContext);
                            m_tb.SkipChar();
                            m_currentContext = BabelTokenContext.StringConst;
                            m_isSlash = false;
                            break;
                        case '\'':
                            m_tb.PutToken(m_currentContext);
                            m_tb.SkipChar();
                            m_currentContext = BabelTokenContext.CharConst;
                            m_isSlash = false;
                            break;
                        default:
                            m_tb.AddChar(c);
                            m_isSlash = false;
                            break;
                    }
                    break;
            }
        }
Example #3
0
 public Analizer(int locationStart, ITextSnapshotLine snapshotSpan, LineContext startContext, IClassificationTypeRegistryService typeService, List<ITagSpan<ClassificationTag>> result)
 {
     m_tb = new TokenBuilder(locationStart, snapshotSpan, typeService, result);
     m_currentContext = startContext.Context;
     m_commentContext = startContext.CommentContext;
 }
Example #4
0
        public int PutToken(BabelTokenContext context)
        {
            BabelTokenType tt;
            switch(context)
            {
                case BabelTokenContext.CharConst:
                case BabelTokenContext.StringConst:
                    tt = BabelTokenType.StringConst;
                    break;
                /*case BabelTokenContext.Attribute:
                    tt = BabelTokenType.BabelOther;
                    break;*/
                case BabelTokenContext.CommentSingleLine:
                case BabelTokenContext.CommentMultiLine:
                    tt = BabelTokenType.Comment;
                    break;
                case BabelTokenContext.BabelContext:
                    tt = BabelTokenType.BabelContext;
                    break;
                default:
                    tt = Classify();
                    break;

            }
            return PutToken(tt);
        }