convert_trigraphs.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 140 行
HPP
140 行
/*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library Grammar for universal character validation (see C++ standard: Annex E) http://www.boost.org/ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)=============================================================================*/#if !defined(CONVERT_TRIGRAPHS_HK050403_INCLUDED)#define CONVERT_TRIGRAPHS_HK050403_INCLUDED#include <boost/wave/wave_config.hpp>#include <boost/wave/cpplexer/cpplexer_exceptions.hpp>// this must occur after all of the includes and before any code appears#ifdef BOOST_HAS_ABI_HEADERS#include BOOST_ABI_PREFIX#endif///////////////////////////////////////////////////////////////////////////////namespace boost {namespace wave {namespace cpplexer {namespace impl {/////////////////////////////////////////////////////////////////////////////////// Test, whether the given string represents a valid trigraph sequence/////////////////////////////////////////////////////////////////////////////////template <typename StringT>inline bool is_trigraph(StringT const& trigraph){ if (trigraph.size() < 3 || '?' != trigraph[0] || '?' != trigraph[1]) return false; switch (trigraph[2]) { case '\'': case '=': case '/': case '(': case ')': case '<': case '>': case '!': case '-': break; default: return false; } return true;}/////////////////////////////////////////////////////////////////////////////////// convert_trigraph//// The function convert_trigraph() converts a single trigraph character // sequence into the corresponding character.//// If the given character sequence doesn't form a valid trigraph sequence// no conversion is performed. /////////////////////////////////////////////////////////////////////////////////template <typename StringT>inline StringTconvert_trigraph(StringT const &trigraph){StringT result (trigraph); if (is_trigraph(trigraph)) { switch (trigraph[2]) { case '\'': result = "^"; break; case '=': result = "#"; break; case '/': result = "\\"; break; case '(': result = "["; break; case ')': result = "]"; break; case '<': result = "{"; break; case '>': result = "}"; break; case '!': result = "|"; break; case '-': result = "~"; break; } } return result;}/////////////////////////////////////////////////////////////////////////////////// convert_trigraphs//// The function convert_trigraph() converts all trigraphs in the given // string into the corresponding characters.//// If one of the given character sequences doesn't form a valid trigraph // sequence no conversion is performed. /////////////////////////////////////////////////////////////////////////////////template <typename StringT>inline StringTconvert_trigraphs(StringT const &value){ StringT result; typename StringT::size_type pos = 0; typename StringT::size_type pos1 = value.find_first_of ("?", 0); if (StringT::npos != pos1) { do { result += value.substr(pos, pos1-pos); StringT trigraph (value.substr(pos1)); if (is_trigraph(trigraph)) { result += convert_trigraph(trigraph); pos1 = value.find_first_of ("?", pos = pos1+3); } else { result += value[pos1]; pos1 = value.find_first_of ("?", pos = pos1+1); } } while (StringT::npos != pos1); result += value.substr(pos); } else { result = value; } return result;}///////////////////////////////////////////////////////////////////////////////} // namespace impl } // namespace cpplexer} // 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(CONVERT_TRIGRAPHS_HK050403_INCLUDED)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?