Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. // class template regex -*- C++ -*-
  2.  
  3. // Copyright (C) 2010-2013 Free Software Foundation, Inc.
  4. //
  5. // This file is part of the GNU ISO C++ Library.  This library is free
  6. // software; you can redistribute it and/or modify it under the
  7. // terms of the GNU General Public License as published by the
  8. // Free Software Foundation; either version 3, or (at your option)
  9. // any later version.
  10.  
  11. // This library is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. // GNU General Public License for more details.
  15.  
  16. // Under Section 7 of GPL version 3, you are granted additional
  17. // permissions described in the GCC Runtime Library Exception, version
  18. // 3.1, as published by the Free Software Foundation.
  19.  
  20. // You should have received a copy of the GNU General Public License and
  21. // a copy of the GCC Runtime Library Exception along with this program;
  22. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  23. // <http://www.gnu.org/licenses/>.
  24.  
  25. /**
  26.  *  @file bits/regex_constants.h
  27.  *  @brief Constant definitions for the std regex library.
  28.  *
  29.  *  This is an internal header file, included by other library headers.
  30.  *  Do not attempt to use it directly. @headername{regex}
  31.  */
  32.  
  33. namespace std _GLIBCXX_VISIBILITY(default)
  34. {
  35. /**
  36.  * @defgroup regex Regular Expressions
  37.  *
  38.  * A facility for performing regular expression pattern matching.
  39.  * @{
  40.  */
  41.  
  42. /**
  43.  * @namespace std::regex_constants
  44.  * @brief ISO C++-0x entities sub namespace for regex.
  45.  */
  46. namespace regex_constants
  47. {
  48. _GLIBCXX_BEGIN_NAMESPACE_VERSION
  49.  
  50.   /**
  51.    * @name 5.1 Regular Expression Syntax Options
  52.    */
  53.   //@{
  54.   enum __syntax_option
  55.     {
  56.       _S_icase,
  57.       _S_nosubs,
  58.       _S_optimize,
  59.       _S_collate,
  60.       _S_ECMAScript,
  61.       _S_basic,
  62.       _S_extended,
  63.       _S_awk,
  64.       _S_grep,
  65.       _S_egrep,
  66.       _S_syntax_last
  67.     };
  68.  
  69.   /**
  70.    * @brief This is a bitmask type indicating how to interpret the regex.
  71.    *
  72.    * The @c syntax_option_type is implementation defined but it is valid to
  73.    * perform bitwise operations on these values and expect the right thing to
  74.    * happen.
  75.    *
  76.    * A valid value of type syntax_option_type shall have exactly one of the
  77.    * elements @c ECMAScript, @c basic, @c extended, @c awk, @c grep, @c egrep
  78.    * %set.
  79.    */
  80.   typedef unsigned int syntax_option_type;
  81.  
  82.   /**
  83.    * Specifies that the matching of regular expressions against a character
  84.    * sequence shall be performed without regard to case.
  85.    */
  86.   constexpr syntax_option_type icase      = 1 << _S_icase;
  87.  
  88.   /**
  89.    * Specifies that when a regular expression is matched against a character
  90.    * container sequence, no sub-expression matches are to be stored in the
  91.    * supplied match_results structure.
  92.    */
  93.   constexpr syntax_option_type nosubs     = 1 << _S_nosubs;
  94.  
  95.   /**
  96.    * Specifies that the regular expression engine should pay more attention to
  97.    * the speed with which regular expressions are matched, and less to the
  98.    * speed with which regular expression objects are constructed. Otherwise
  99.    * it has no detectable effect on the program output.
  100.    */
  101.   constexpr syntax_option_type optimize   = 1 << _S_optimize;
  102.  
  103.   /**
  104.    * Specifies that character ranges of the form [a-b] should be locale
  105.    * sensitive.
  106.    */
  107.   constexpr syntax_option_type collate    = 1 << _S_collate;
  108.  
  109.   /**
  110.    * Specifies that the grammar recognized by the regular expression engine is
  111.    * that used by ECMAScript in ECMA-262 [Ecma International, ECMAScript
  112.    * Language Specification, Standard Ecma-262, third edition, 1999], as
  113.    * modified in section [28.13].  This grammar is similar to that defined
  114.    * in the PERL scripting language but extended with elements found in the
  115.    * POSIX regular expression grammar.
  116.    */
  117.   constexpr syntax_option_type ECMAScript = 1 << _S_ECMAScript;
  118.  
  119.   /**
  120.    * Specifies that the grammar recognized by the regular expression engine is
  121.    * that used by POSIX basic regular expressions in IEEE Std 1003.1-2001,
  122.    * Portable Operating System Interface (POSIX), Base Definitions and
  123.    * Headers, Section 9, Regular Expressions [IEEE, Information Technology --
  124.    * Portable Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
  125.    */
  126.   constexpr syntax_option_type basic      = 1 << _S_basic;
  127.  
  128.   /**
  129.    * Specifies that the grammar recognized by the regular expression engine is
  130.    * that used by POSIX extended regular expressions in IEEE Std 1003.1-2001,
  131.    * Portable Operating System Interface (POSIX), Base Definitions and Headers,
  132.    * Section 9, Regular Expressions.
  133.    */
  134.   constexpr syntax_option_type extended   = 1 << _S_extended;
  135.  
  136.   /**
  137.    * Specifies that the grammar recognized by the regular expression engine is
  138.    * that used by POSIX utility awk in IEEE Std 1003.1-2001.  This option is
  139.    * identical to syntax_option_type extended, except that C-style escape
  140.    * sequences are supported.  These sequences are:
  141.    * \\\\, \\a, \\b, \\f, \\n, \\r, \\t , \\v, \\&apos;, &apos;,
  142.    * and \\ddd (where ddd is one, two, or three octal digits).  
  143.    */
  144.   constexpr syntax_option_type awk        = 1 << _S_awk;
  145.  
  146.   /**
  147.    * Specifies that the grammar recognized by the regular expression engine is
  148.    * that used by POSIX utility grep in IEEE Std 1003.1-2001.  This option is
  149.    * identical to syntax_option_type basic, except that newlines are treated
  150.    * as whitespace.
  151.    */
  152.   constexpr syntax_option_type grep       = 1 << _S_grep;
  153.  
  154.   /**
  155.    * Specifies that the grammar recognized by the regular expression engine is
  156.    * that used by POSIX utility grep when given the -E option in
  157.    * IEEE Std 1003.1-2001.  This option is identical to syntax_option_type
  158.    * extended, except that newlines are treated as whitespace.
  159.    */
  160.   constexpr syntax_option_type egrep      = 1 << _S_egrep;
  161.  
  162.   //@}
  163.  
  164.   /**
  165.    * @name 5.2 Matching Rules
  166.    *
  167.    * Matching a regular expression against a sequence of characters [first,
  168.    * last) proceeds according to the rules of the grammar specified for the
  169.    * regular expression object, modified according to the effects listed
  170.    * below for any bitmask elements set.
  171.    *
  172.    */
  173.   //@{
  174.  
  175.   enum __match_flag
  176.     {
  177.       _S_not_bol,
  178.       _S_not_eol,
  179.       _S_not_bow,
  180.       _S_not_eow,
  181.       _S_any,
  182.       _S_not_null,
  183.       _S_continuous,
  184.       _S_prev_avail,
  185.       _S_sed,
  186.       _S_no_copy,
  187.       _S_first_only,
  188.       _S_match_flag_last
  189.     };
  190.  
  191.   /**
  192.    * @brief This is a bitmask type indicating regex matching rules.
  193.    *
  194.    * The @c match_flag_type is implementation defined but it is valid to
  195.    * perform bitwise operations on these values and expect the right thing to
  196.    * happen.
  197.    */
  198.   typedef std::bitset<_S_match_flag_last> match_flag_type;
  199.  
  200.   /**
  201.    * The default matching rules.
  202.    */
  203.   constexpr match_flag_type match_default     = 0;
  204.  
  205.   /**
  206.    * The first character in the sequence [first, last) is treated as though it
  207.    * is not at the beginning of a line, so the character (^) in the regular
  208.    * expression shall not match [first, first).
  209.    */
  210.   constexpr match_flag_type match_not_bol     = 1 << _S_not_bol;
  211.  
  212.   /**
  213.    * The last character in the sequence [first, last) is treated as though it
  214.    * is not at the end of a line, so the character ($) in the regular
  215.    * expression shall not match [last, last).
  216.    */
  217.   constexpr match_flag_type match_not_eol     = 1 << _S_not_eol;
  218.    
  219.   /**
  220.    * The expression \\b is not matched against the sub-sequence
  221.    * [first,first).
  222.    */
  223.   constexpr match_flag_type match_not_bow     = 1 << _S_not_bow;
  224.    
  225.   /**
  226.    * The expression \\b should not be matched against the sub-sequence
  227.    * [last,last).
  228.    */
  229.   constexpr match_flag_type match_not_eow     = 1 << _S_not_eow;
  230.    
  231.   /**
  232.    * If more than one match is possible then any match is an acceptable
  233.    * result.
  234.    */
  235.   constexpr match_flag_type match_any         = 1 << _S_any;
  236.    
  237.   /**
  238.    * The expression does not match an empty sequence.
  239.    */
  240.   constexpr match_flag_type match_not_null    = 1 << _S_not_null;
  241.    
  242.   /**
  243.    * The expression only matches a sub-sequence that begins at first .
  244.    */
  245.   constexpr match_flag_type match_continuous  = 1 << _S_continuous;
  246.    
  247.   /**
  248.    * --first is a valid iterator position.  When this flag is set then the
  249.    * flags match_not_bol and match_not_bow are ignored by the regular
  250.    * expression algorithms 28.11 and iterators 28.12.
  251.    */
  252.   constexpr match_flag_type match_prev_avail  = 1 << _S_prev_avail;
  253.  
  254.   /**
  255.    * When a regular expression match is to be replaced by a new string, the
  256.    * new string is constructed using the rules used by the ECMAScript replace
  257.    * function in ECMA- 262 [Ecma International, ECMAScript Language
  258.    * Specification, Standard Ecma-262, third edition, 1999], part 15.5.4.11
  259.    * String.prototype.replace. In addition, during search and replace
  260.    * operations all non-overlapping occurrences of the regular expression
  261.    * are located and replaced, and sections of the input that did not match
  262.    * the expression are copied unchanged to the output string.
  263.    *
  264.    * Format strings (from ECMA-262 [15.5.4.11]):
  265.    * @li $$  The dollar-sign itself ($)
  266.    * @li $&  The matched substring.
  267.    * @li $`  The portion of @a string that precedes the matched substring.
  268.    *         This would be match_results::prefix().
  269.    * @li $'  The portion of @a string that follows the matched substring.
  270.    *         This would be match_results::suffix().
  271.    * @li $n  The nth capture, where n is in [1,9] and $n is not followed by a
  272.    *         decimal digit.  If n <= match_results::size() and the nth capture
  273.    *         is undefined, use the empty string instead.  If n >
  274.    *         match_results::size(), the result is implementation-defined.
  275.    * @li $nn The nnth capture, where nn is a two-digit decimal number on
  276.    *         [01, 99].  If nn <= match_results::size() and the nth capture is
  277.    *         undefined, use the empty string instead. If
  278.    *         nn > match_results::size(), the result is implementation-defined.
  279.    */
  280.   constexpr match_flag_type format_default    = 0;
  281.  
  282.   /**
  283.    * When a regular expression match is to be replaced by a new string, the
  284.    * new string is constructed using the rules used by the POSIX sed utility
  285.    * in IEEE Std 1003.1- 2001 [IEEE, Information Technology -- Portable
  286.    * Operating System Interface (POSIX), IEEE Standard 1003.1-2001].
  287.    */
  288.   constexpr match_flag_type format_sed        = 1 << _S_sed;
  289.  
  290.   /**
  291.    * During a search and replace operation, sections of the character
  292.    * container sequence being searched that do not match the regular
  293.    * expression shall not be copied to the output string.
  294.    */
  295.   constexpr match_flag_type format_no_copy    = 1 << _S_no_copy;
  296.  
  297.   /**
  298.    * When specified during a search and replace operation, only the first
  299.    * occurrence of the regular expression shall be replaced.
  300.    */
  301.   constexpr match_flag_type format_first_only = 1 << _S_first_only;
  302.  
  303.   //@}
  304.  
  305. _GLIBCXX_END_NAMESPACE_VERSION
  306. } // namespace regex_constants
  307.  
  308. /* @} */ // group regex
  309. } // namespace std
  310.  
  311.