111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===-------------------------- regex.cpp ---------------------------------===// 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The LLVM Compiler Infrastructure 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "regex" 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "algorithm" 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "iterator" 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_LIBCPP_BEGIN_NAMESPACE_STD 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst char* 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertmake_error_type_string(regex_constants::error_type ecode) 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (ecode) 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_collate: 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained an invalid collating element name."; 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_ctype: 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained an invalid character class name."; 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_escape: 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained an invalid escaped character, or a " 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert "trailing escape."; 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_backref: 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained an invalid back reference."; 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_brack: 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained mismatched [ and ]."; 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_paren: 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained mismatched ( and )."; 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_brace: 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained mismatched { and }."; 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_badbrace: 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained an invalid range in a {} expression."; 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_range: 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The expression contained an invalid character range, " 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert "such as [b-a] in most encodings."; 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_space: 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "There was insufficient memory to convert the expression into " 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert "a finite state machine."; 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_badrepeat: 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "One of *?+{ was not preceded by a valid regular expression."; 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_complexity: 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "The complexity of an attempted match against a regular " 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert "expression exceeded a pre-set level."; 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::error_stack: 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "There was insufficient memory to determine whether the regular " 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert "expression could match the specified character sequence."; 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::__re_err_grammar: 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "An invalid regex grammar has been requested."; 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case regex_constants::__re_err_empty: 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "An empty regex is not allowed in the POSIX grammar."; 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return "Unknown error type"; 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertregex_error::regex_error(regex_constants::error_type ecode) 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : runtime_error(make_error_type_string(ecode)), 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __code_(ecode) 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{} 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertregex_error::~regex_error() throw() {} 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertnamespace { 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct collationnames 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* elem_; 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char char_; 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst collationnames collatenames[] = 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"A", 0x41}, 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"B", 0x42}, 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"C", 0x43}, 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"D", 0x44}, 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"E", 0x45}, 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"F", 0x46}, 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"G", 0x47}, 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"H", 0x48}, 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"I", 0x49}, 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"J", 0x4a}, 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"K", 0x4b}, 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"L", 0x4c}, 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"M", 0x4d}, 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"N", 0x4e}, 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"NUL", 0x00}, 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"O", 0x4f}, 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"P", 0x50}, 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"Q", 0x51}, 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"R", 0x52}, 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"S", 0x53}, 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"T", 0x54}, 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"U", 0x55}, 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"V", 0x56}, 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"W", 0x57}, 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"X", 0x58}, 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"Y", 0x59}, 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"Z", 0x5a}, 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"a", 0x61}, 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"alert", 0x07}, 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"ampersand", 0x26}, 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"apostrophe", 0x27}, 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"asterisk", 0x2a}, 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"b", 0x62}, 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"backslash", 0x5c}, 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"backspace", 0x08}, 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"c", 0x63}, 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"carriage-return", 0x0d}, 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"circumflex", 0x5e}, 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"circumflex-accent", 0x5e}, 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"colon", 0x3a}, 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"comma", 0x2c}, 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"commercial-at", 0x40}, 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"d", 0x64}, 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"dollar-sign", 0x24}, 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"e", 0x65}, 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"eight", 0x38}, 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"equals-sign", 0x3d}, 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"exclamation-mark", 0x21}, 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"f", 0x66}, 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"five", 0x35}, 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"form-feed", 0x0c}, 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"four", 0x34}, 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"full-stop", 0x2e}, 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"g", 0x67}, 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"grave-accent", 0x60}, 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"greater-than-sign", 0x3e}, 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"h", 0x68}, 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"hyphen", 0x2d}, 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"hyphen-minus", 0x2d}, 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"i", 0x69}, 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"j", 0x6a}, 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"k", 0x6b}, 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"l", 0x6c}, 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"left-brace", 0x7b}, 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"left-curly-bracket", 0x7b}, 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"left-parenthesis", 0x28}, 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"left-square-bracket", 0x5b}, 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"less-than-sign", 0x3c}, 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"low-line", 0x5f}, 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"m", 0x6d}, 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"n", 0x6e}, 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"newline", 0x0a}, 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"nine", 0x39}, 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"number-sign", 0x23}, 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"o", 0x6f}, 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"one", 0x31}, 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"p", 0x70}, 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"percent-sign", 0x25}, 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"period", 0x2e}, 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"plus-sign", 0x2b}, 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"q", 0x71}, 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"question-mark", 0x3f}, 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"quotation-mark", 0x22}, 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"r", 0x72}, 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"reverse-solidus", 0x5c}, 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"right-brace", 0x7d}, 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"right-curly-bracket", 0x7d}, 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"right-parenthesis", 0x29}, 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"right-square-bracket", 0x5d}, 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"s", 0x73}, 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"semicolon", 0x3b}, 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"seven", 0x37}, 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"six", 0x36}, 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"slash", 0x2f}, 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"solidus", 0x2f}, 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"space", 0x20}, 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"t", 0x74}, 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"tab", 0x09}, 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"three", 0x33}, 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"tilde", 0x7e}, 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"two", 0x32}, 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"u", 0x75}, 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"underscore", 0x5f}, 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"v", 0x76}, 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"vertical-line", 0x7c}, 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"vertical-tab", 0x0b}, 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"w", 0x77}, 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"x", 0x78}, 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"y", 0x79}, 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"z", 0x7a}, 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"zero", 0x30} 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct classnames 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* elem_; 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert regex_traits<char>::char_class_type mask_; 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst classnames ClassNames[] = 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"alnum", ctype_base::alnum}, 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"alpha", ctype_base::alpha}, 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"blank", ctype_base::blank}, 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"cntrl", ctype_base::cntrl}, 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"d", ctype_base::digit}, 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"digit", ctype_base::digit}, 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"graph", ctype_base::graph}, 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"lower", ctype_base::lower}, 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"print", ctype_base::print}, 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"punct", ctype_base::punct}, 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"s", ctype_base::space}, 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"space", ctype_base::space}, 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"upper", ctype_base::upper}, 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"w", regex_traits<char>::__regex_word}, 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {"xdigit", ctype_base::xdigit} 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct use_strcmp 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool operator()(const collationnames& x, const char* y) 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {return strcmp(x.elem_, y) < 0;} 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool operator()(const classnames& x, const char* y) 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {return strcmp(x.elem_, y) < 0;} 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstring 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__get_collation_name(const char* s) 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const collationnames* i = 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _VSTD::lower_bound(begin(collatenames), end(collatenames), s, use_strcmp()); 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert string r; 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (i != end(collatenames) && strcmp(s, i->elem_) == 0) 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert r = char(i->char_); 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return r; 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertregex_traits<char>::char_class_type 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__get_classname(const char* s, bool __icase) 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const classnames* i = 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _VSTD::lower_bound(begin(ClassNames), end(ClassNames), s, use_strcmp()); 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert regex_traits<char>::char_class_type r = 0; 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (i != end(ClassNames) && strcmp(s, i->elem_) == 0) 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert r = i->mask_; 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (r == regex_traits<char>::__regex_word) 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert r |= ctype_base::alnum | ctype_base::upper | ctype_base::lower; 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else if (__icase) 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (r & (ctype_base::lower | ctype_base::upper)) 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert r |= ctype_base::alpha; 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return r; 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <> 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__match_any_but_newline<char>::__exec(__state& __s) const 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__s.__current_ != __s.__last_) 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (*__s.__current_) 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case '\r': 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case '\n': 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__do_ = __state::__reject; 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__node_ = nullptr; 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__do_ = __state::__accept_and_consume; 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ++__s.__current_; 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__node_ = this->first(); 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__do_ = __state::__reject; 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__node_ = nullptr; 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <> 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__match_any_but_newline<wchar_t>::__exec(__state& __s) const 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__s.__current_ != __s.__last_) 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (*__s.__current_) 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case '\r': 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case '\n': 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case 0x2028: 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case 0x2029: 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__do_ = __state::__reject; 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__node_ = nullptr; 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__do_ = __state::__accept_and_consume; 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ++__s.__current_; 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__node_ = this->first(); 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__do_ = __state::__reject; 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __s.__node_ = nullptr; 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_LIBCPP_END_NAMESPACE_STD 316