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 + -
显示快捷键?