コード例 #1
0
        void CreateSyntaxHighlightInfo(string expression_str, out List <ExpressionTextBox.ColorChangeInfo> color_changes)
        {
            color_changes = new List <ExpressionTextBox.ColorChangeInfo>();
            Tokenizer tokenizer = new Tokenizer(expression_str, true);

            ExpressionTextBox.ColorChangeInfo prev_color = new ExpressionTextBox.ColorChangeInfo(0, -1, -1);
            ExpressionTextBox.ColorChangeInfo color;

            for (; ;)
            {
                int token_length;
                try
                {
                    Token token = tokenizer.GetNextToken();
                    token_length           = token.length;
                    color.text_index       = token.pos;
                    color.back_color_index = m_ColorInfo.back_color_normal;

                    switch (token.type)
                    {
                    case TokenType.OpNot:
                    case TokenType.OpUpcase:
                    case TokenType.OpLocase:
                    case TokenType.OpLcap:
                    case TokenType.OpContains:
                    case TokenType.OpStartsWith:
                    case TokenType.OpEndsWith:
                    case TokenType.OpConcat:
                    case TokenType.OpEquals:
                    case TokenType.OpNotEquals:
                    case TokenType.OpRegexMatch:
                    case TokenType.OpRegexNotMatch:
                    case TokenType.OpAnd:
                    case TokenType.OpXor:
                    case TokenType.OpOr:
                    case TokenType.Ternary:
                        color.fore_color_index = m_ColorInfo.color_operator;
                        break;

                    case TokenType.String:
                        color.fore_color_index = m_ColorInfo.color_string_literal;
                        break;

                    case TokenType.Variable:
                        color.fore_color_index = m_ColorInfo.color_const_or_variable;
                        break;

                    case TokenType.If:
                    case TokenType.Else:
                        color.fore_color_index = m_ColorInfo.color_keyword;
                        break;

                    case TokenType.OpenBrace:
                    case TokenType.CloseBrace:
                    case TokenType.OpenBracket:
                    case TokenType.CloseBracket:
                        color.fore_color_index = m_ColorInfo.color_brackets;
                        break;

                    case TokenType.SingleLineComment:
                        color.fore_color_index = m_ColorInfo.color_comment;
                        break;

                    default:
                        color.fore_color_index = m_ColorInfo.color_default;
                        break;

                    case TokenType.EOF:
                        color.fore_color_index = -1;
                        break;
                    }
                }
                catch (TokenizerException ex)
                {
                    int pos = ex.ErrorPos;
                    token_length           = 1;
                    color.text_index       = pos;
                    color.fore_color_index = m_ColorInfo.color_bad_token;
                    color.back_color_index = m_ColorInfo.back_color_error;
                    tokenizer.ResetAndGoToPosition(pos + 1);
                }

                // color of space between tokens
                if (prev_color.text_index < color.text_index)
                {
                    if (prev_color.back_color_index != m_ColorInfo.back_color_normal)
                    {
                        color_changes.Add(new ExpressionTextBox.ColorChangeInfo(prev_color.text_index, -1, m_ColorInfo.back_color_normal));
                        prev_color.back_color_index = m_ColorInfo.back_color_normal;
                    }
                }

                if (prev_color.fore_color_index != color.fore_color_index || prev_color.back_color_index != color.back_color_index)
                {
                    ExpressionTextBox.ColorChangeInfo change;
                    change.text_index       = color.text_index;
                    change.fore_color_index = prev_color.fore_color_index != color.fore_color_index ? color.fore_color_index : -1;
                    change.back_color_index = prev_color.back_color_index != color.back_color_index ? color.back_color_index : -1;
                    color_changes.Add(change);
                }

                // Check for eof
                if (color.fore_color_index < 0)
                {
                    break;
                }

                prev_color.text_index       = color.text_index + token_length;
                prev_color.fore_color_index = color.fore_color_index;
                prev_color.back_color_index = color.back_color_index;
            }
        }
コード例 #2
0
        void CreateSyntaxHighlightInfo(string expression_str, out List<ExpressionTextBox.ColorChangeInfo> color_changes)
        {
            color_changes = new List<ExpressionTextBox.ColorChangeInfo>();
            Tokenizer tokenizer = new Tokenizer(expression_str, true);
            ExpressionTextBox.ColorChangeInfo prev_color = new ExpressionTextBox.ColorChangeInfo(0, -1, -1);
            ExpressionTextBox.ColorChangeInfo color;

            for (; ; )
            {
                int token_length;
                try
                {
                    Token token = tokenizer.GetNextToken();
                    token_length = token.length;
                    color.text_index = token.pos;
                    color.back_color_index = m_ColorInfo.back_color_normal;

                    switch (token.type)
                    {
                        case TokenType.OpNot:
                        case TokenType.OpUpcase:
                        case TokenType.OpLocase:
                        case TokenType.OpLcap:
                        case TokenType.OpContains:
                        case TokenType.OpStartsWith:
                        case TokenType.OpEndsWith:
                        case TokenType.OpConcat:
                        case TokenType.OpEquals:
                        case TokenType.OpNotEquals:
                        case TokenType.OpRegexMatch:
                        case TokenType.OpRegexNotMatch:
                        case TokenType.OpAnd:
                        case TokenType.OpXor:
                        case TokenType.OpOr:
                        case TokenType.Ternary:
                            color.fore_color_index = m_ColorInfo.color_operator;
                            break;
                        case TokenType.String:
                            color.fore_color_index = m_ColorInfo.color_string_literal;
                            break;
                        case TokenType.Variable:
                            color.fore_color_index = m_ColorInfo.color_const_or_variable;
                            break;
                        case TokenType.If:
                        case TokenType.Else:
                            color.fore_color_index = m_ColorInfo.color_keyword;
                            break;
                        case TokenType.OpenBrace:
                        case TokenType.CloseBrace:
                        case TokenType.OpenBracket:
                        case TokenType.CloseBracket:
                            color.fore_color_index = m_ColorInfo.color_brackets;
                            break;
                        case TokenType.SingleLineComment:
                            color.fore_color_index = m_ColorInfo.color_comment;
                            break;
                        default:
                            color.fore_color_index = m_ColorInfo.color_default;
                            break;
                        case TokenType.EOF:
                            color.fore_color_index = -1;
                            break;
                    }
                }
                catch (TokenizerException ex)
                {
                    int pos = ex.ErrorPos;
                    token_length = 1;
                    color.text_index = pos;
                    color.fore_color_index = m_ColorInfo.color_bad_token;
                    color.back_color_index = m_ColorInfo.back_color_error;
                    tokenizer.ResetAndGoToPosition(pos + 1);
                }

                // color of space between tokens
                if (prev_color.text_index < color.text_index)
                {
                    if (prev_color.back_color_index != m_ColorInfo.back_color_normal)
                    {
                        color_changes.Add(new ExpressionTextBox.ColorChangeInfo(prev_color.text_index, -1, m_ColorInfo.back_color_normal));
                        prev_color.back_color_index = m_ColorInfo.back_color_normal;
                    }
                }

                if (prev_color.fore_color_index != color.fore_color_index || prev_color.back_color_index != color.back_color_index)
                {
                    ExpressionTextBox.ColorChangeInfo change;
                    change.text_index = color.text_index;
                    change.fore_color_index = prev_color.fore_color_index != color.fore_color_index ? color.fore_color_index : -1;
                    change.back_color_index = prev_color.back_color_index != color.back_color_index ? color.back_color_index : -1;
                    color_changes.Add(change);
                }

                // Check for eof
                if (color.fore_color_index < 0)
                    break;

                prev_color.text_index = color.text_index + token_length;
                prev_color.fore_color_index = color.fore_color_index;
                prev_color.back_color_index = color.back_color_index;
            }
        }