insert_whitespace_detection.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 514 行 · 第 1/2 页

HPP
514
字号
            return impl::handle_alt_leftbracket(prev, beforeprev);         case T_FIXEDPOINTLIT:            return impl::handle_fixedpointlit(prev, beforeprev);         case T_DOT:            return impl::handle_dot(prev, beforeprev);         case T_QUESTION_MARK:            return impl::handle_questionmark(prev, beforeprev);         case T_NEWLINE:            return impl::handle_newline(prev, beforeprev);         case T_LEFTPAREN:        case T_RIGHTPAREN:        case T_LEFTBRACKET:        case T_RIGHTBRACKET:        case T_SEMICOLON:        case T_COMMA:        case T_COLON:            switch (static_cast<unsigned int>(prev)) {            case T_LEFTPAREN:            case T_RIGHTPAREN:            case T_LEFTBRACKET:            case T_RIGHTBRACKET:            case T_LEFTBRACE:            case T_RIGHTBRACE:                return false;   // no insertion between parens/brackets/braces            default:                if (IS_CATEGORY(prev, OperatorTokenType))                    return false;                break;            }                    break;                    case T_LEFTBRACE:        case T_RIGHTBRACE:            switch (static_cast<unsigned int>(prev)) {            case T_LEFTPAREN:            case T_RIGHTPAREN:            case T_LEFTBRACKET:            case T_RIGHTBRACKET:            case T_LEFTBRACE:            case T_RIGHTBRACE:            case T_SEMICOLON:            case T_COMMA:            case T_COLON:                return false;   // no insertion between parens/brackets/braces            case T_QUESTION_MARK:                if (T_QUESTION_MARK == beforeprev)                    return true;                if (IS_CATEGORY(prev, OperatorTokenType))                    return false;                break;                            default:                break;            }            break;                                    case T_MINUS:        case T_MINUSMINUS:        case T_MINUSASSIGN:            if (T_MINUS == prev || T_MINUSMINUS == prev)                return true;            if (!impl::handle_parens(prev))                return false;            if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)                return true;            break;                    case T_PLUS:        case T_PLUSPLUS:        case T_PLUSASSIGN:            if (T_PLUS == prev || T_PLUSPLUS == prev)                return true;            if (!impl::handle_parens(prev))                return false;            if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)                return true;            break;                    case T_DIVIDE:        case T_DIVIDEASSIGN:            if (T_DIVIDE == prev)                return true;            if (!impl::handle_parens(prev))                return false;            if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)                return true;            break;                case T_EQUAL:        case T_ASSIGN:            switch (static_cast<unsigned int>(prev)) {            case T_PLUSASSIGN:            case T_MINUSASSIGN:            case T_DIVIDEASSIGN:            case T_STARASSIGN:            case T_SHIFTRIGHTASSIGN:            case T_SHIFTLEFTASSIGN:            case T_EQUAL:            case T_NOTEQUAL:            case T_LESSEQUAL:            case T_GREATEREQUAL:            case T_LESS:            case T_GREATER:            case T_PLUS:            case T_MINUS:            case T_STAR:            case T_DIVIDE:            case T_ORASSIGN:            case T_ANDASSIGN:            case T_XORASSIGN:            case T_OR:            case T_AND:            case T_XOR:            case T_OROR:            case T_ANDAND:                return true;            case T_QUESTION_MARK:                if (T_QUESTION_MARK == beforeprev)                    return true;                break;                            default:                if (!impl::handle_parens(prev))                    return false;                break;            }            break;        case T_GREATER:            if (T_MINUS == prev || T_GREATER == prev)                return true;    // prevent -> or >>            if (!impl::handle_parens(prev))                return false;            if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)                return true;            break;        case T_LESS:            if (T_LESS == prev)                return true;    // prevent <<            // fall through        case T_CHARLIT:        case T_NOT:        case T_NOTEQUAL:            if (!impl::handle_parens(prev))                return false;            if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)                return true;            break;        case T_AND:        case T_ANDAND:            if (!impl::handle_parens(prev))                return false;            if (T_AND == prev || T_ANDAND == prev)                return true;            break;                    case T_OR:            if (!impl::handle_parens(prev))                return false;            if (T_OR == prev)                return true;            break;                    case T_XOR:            if (!impl::handle_parens(prev))                return false;            if (T_XOR == prev)                return true;            break;                    case T_COMPL_ALT:        case T_OR_ALT:        case T_AND_ALT:        case T_NOT_ALT:        case T_XOR_ALT:        case T_ANDASSIGN_ALT:        case T_ORASSIGN_ALT:        case T_XORASSIGN_ALT:        case T_NOTEQUAL_ALT:            switch (static_cast<unsigned int>(prev)) {            case T_LEFTPAREN:            case T_RIGHTPAREN:            case T_LEFTBRACKET:            case T_RIGHTBRACKET:            case T_LEFTBRACE:            case T_RIGHTBRACE:            case T_SEMICOLON:            case T_COMMA:            case T_COLON:                // no insertion between parens/brackets/braces and operators                return false;               case T_IDENTIFIER:                if (T_NONREPLACABLE_IDENTIFIER == prev ||                    IS_CATEGORY(prev, KeywordTokenType))                {                    return true;                }                break;                            default:                break;            }            break;                    case T_STAR:            if (T_STAR == prev)                return false;     // '*****' do not need to be separated            if (T_GREATER== prev &&                 (T_MINUS == beforeprev || T_MINUSMINUS == beforeprev)               )            {                return true;    // prevent ->*            }            break;        }    // FIXME: else, handle operators separately (will catch to many cases)//         if (IS_CATEGORY(current, OperatorTokenType) && //             IS_CATEGORY(prev, OperatorTokenType))//         {//             return true;    // operators must be delimited always//         }        return false;    }    void shift_tokens (boost::wave::token_id next_id)    {        if (insert_whitespace) {            beforeprev = prev;            prev = next_id;        }    }    private:    bool insert_whitespace;            // enable this component    boost::wave::token_id prev;        // the previous analyzed token    boost::wave::token_id beforeprev;  // the token before the previous};///////////////////////////////////////////////////////////////////////////////}   //  namespace util}   //  namespace wave }   //  namespace boost// the suffix header occurs after all of the code#ifdef BOOST_HAS_ABI_HEADERS#include BOOST_ABI_SUFFIX#endif#endif // !defined(INSERT_WHITESPACE_DETECTION_HPP_765EF77B_0513_4967_BDD6_6A38148C4C96_INCLUDED)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?