imgtools/imglib/boostlibrary/boost/regex/v4/regex_format.hpp
author jjkang
Fri, 25 Jun 2010 18:11:34 +0800
changeset 600 6d08f4a05d93
permissions -rw-r--r--
add deprecated files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
600
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     1
/*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     2
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     3
 * Copyright (c) 1998-2002
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     4
 * John Maddock
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     5
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     6
 * Use, modification and distribution are subject to the 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     7
 * Boost Software License, Version 1.0. (See accompanying file 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     8
 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
     9
 *
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    10
 */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    11
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    12
 /*
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    13
  *   LOCATION:    see http://www.boost.org for most recent version.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    14
  *   FILE         regex_format.hpp
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    15
  *   VERSION      see <boost/version.hpp>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    16
  *   DESCRIPTION: Provides formatting output routines for search and replace
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    17
  *                operations.  Note this is an internal header file included
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    18
  *                by regex.hpp, do not include on its own.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    19
  */
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    20
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    21
#ifndef BOOST_REGEX_FORMAT_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    22
#define BOOST_REGEX_FORMAT_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    23
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    24
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    25
namespace boost{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    26
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    27
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    28
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    29
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    30
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    31
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    32
#  include BOOST_ABI_PREFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    33
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    34
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    35
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    36
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    37
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    38
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    39
// Forward declaration:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    40
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    41
   template <class BidiIterator, class Allocator = BOOST_DEDUCED_TYPENAME std::vector<sub_match<BidiIterator> >::allocator_type >
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    42
class match_results;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    43
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    44
namespace re_detail{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    45
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    46
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    47
// struct trivial_format_traits:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    48
// defines minimum localisation support for formatting
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    49
// in the case that the actual regex traits is unavailable.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    50
//
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    51
template <class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    52
struct trivial_format_traits
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    53
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    54
   typedef charT char_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    55
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    56
   static std::ptrdiff_t length(const charT* p)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    57
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    58
      return global_length(p);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    59
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    60
   static charT tolower(charT c)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    61
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    62
      return ::boost::re_detail::global_lower(c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    63
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    64
   static charT toupper(charT c)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    65
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    66
      return ::boost::re_detail::global_upper(c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    67
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    68
   static int value(const charT c, int radix)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    69
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    70
      int result = global_value(c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    71
      return result >= radix ? -1 : result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    72
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    73
   int toi(const charT*& p1, const charT* p2, int radix)const
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    74
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    75
      return global_toi(p1, p2, radix, *this);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    76
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    77
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    78
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    79
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    80
class basic_regex_formatter
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    81
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    82
public:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    83
   typedef typename traits::char_type char_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    84
   basic_regex_formatter(OutputIterator o, const Results& r, const traits& t)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    85
      : m_traits(t), m_results(r), m_out(o), m_state(output_copy), m_restore_state(output_copy), m_have_conditional(false) {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    86
   OutputIterator format(const char_type* p1, const char_type* p2, match_flag_type f);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    87
   OutputIterator format(const char_type* p1, match_flag_type f)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    88
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    89
      return format(p1, p1 + m_traits.length(p1), f);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    90
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    91
private:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    92
   typedef typename Results::value_type sub_match_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    93
   enum output_state
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    94
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    95
      output_copy,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    96
      output_next_lower,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    97
      output_next_upper,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    98
      output_lower,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
    99
      output_upper,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   100
      output_none
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   101
   };
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   102
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   103
   void put(char_type c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   104
   void put(const sub_match_type& sub);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   105
   void format_all();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   106
   void format_perl();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   107
   void format_escape();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   108
   void format_conditional();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   109
   void format_until_scope_end();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   110
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   111
   const traits& m_traits;       // the traits class for localised formatting operations
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   112
   const Results& m_results;     // the match_results being used.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   113
   OutputIterator m_out;         // where to send output.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   114
   const char_type* m_position;  // format string, current position
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   115
   const char_type* m_end;       // format string end
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   116
   match_flag_type m_flags;      // format flags to use
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   117
   output_state    m_state;      // what to do with the next character
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   118
   output_state    m_restore_state;  // what state to restore to.
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   119
   bool            m_have_conditional; // we are parsing a conditional
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   120
private:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   121
   basic_regex_formatter(const basic_regex_formatter&);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   122
   basic_regex_formatter& operator=(const basic_regex_formatter&);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   123
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   124
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   125
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   126
OutputIterator basic_regex_formatter<OutputIterator, Results, traits>::format(const char_type* p1, const char_type* p2, match_flag_type f)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   127
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   128
   m_position = p1;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   129
   m_end = p2;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   130
   m_flags = f;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   131
   format_all();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   132
   return m_out;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   133
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   134
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   135
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   136
void basic_regex_formatter<OutputIterator, Results, traits>::format_all()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   137
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   138
   // over and over:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   139
   while(m_position != m_end)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   140
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   141
      switch(*m_position)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   142
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   143
      case '&':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   144
         if(m_flags & ::boost::regex_constants::format_sed)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   145
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   146
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   147
            put(m_results[0]);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   148
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   149
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   150
         put(*m_position++);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   151
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   152
      case '\\':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   153
         format_escape();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   154
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   155
      case '(':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   156
         if(m_flags & boost::regex_constants::format_all)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   157
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   158
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   159
            bool have_conditional = m_have_conditional;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   160
            m_have_conditional = false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   161
            format_until_scope_end();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   162
            m_have_conditional = have_conditional;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   163
            if(m_position == m_end)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   164
               return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   165
            BOOST_ASSERT(*m_position == static_cast<char_type>(')'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   166
            ++m_position;  // skip the closing ')'
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   167
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   168
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   169
         put(*m_position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   170
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   171
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   172
      case ')':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   173
         if(m_flags & boost::regex_constants::format_all)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   174
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   175
            return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   176
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   177
         put(*m_position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   178
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   179
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   180
      case ':':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   181
         if((m_flags & boost::regex_constants::format_all) && m_have_conditional)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   182
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   183
            return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   184
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   185
         put(*m_position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   186
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   187
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   188
      case '?':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   189
         if(m_flags & boost::regex_constants::format_all)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   190
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   191
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   192
            format_conditional();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   193
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   194
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   195
         put(*m_position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   196
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   197
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   198
      case '$':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   199
         if((m_flags & format_sed) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   200
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   201
            format_perl();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   202
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   203
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   204
         // fall through, not a special character:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   205
      default:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   206
         put(*m_position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   207
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   208
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   209
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   210
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   211
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   212
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   213
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   214
void basic_regex_formatter<OutputIterator, Results, traits>::format_perl()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   215
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   216
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   217
   // On entry *m_position points to a '$' character
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   218
   // output the information that goes with it:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   219
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   220
   BOOST_ASSERT(*m_position == '$');
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   221
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   222
   // see if this is a trailing '$':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   223
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   224
   if(++m_position == m_end)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   225
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   226
      --m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   227
      put(*m_position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   228
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   229
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   230
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   231
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   232
   // OK find out what kind it is:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   233
   //
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   234
   bool have_brace = false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   235
   const char_type* save_position = m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   236
   switch(*m_position)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   237
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   238
   case '&':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   239
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   240
      put(this->m_results[0]);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   241
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   242
   case '`':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   243
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   244
      put(this->m_results.prefix());
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   245
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   246
   case '\'':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   247
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   248
      put(this->m_results.suffix());
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   249
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   250
   case '$':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   251
      put(*m_position++);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   252
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   253
   case '{':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   254
      have_brace = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   255
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   256
      // fall through....
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   257
   default:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   258
      // see if we have a number:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   259
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   260
         std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   261
         len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   262
         int v = m_traits.toi(m_position, m_position + len, 10);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   263
         if((v < 0) || (have_brace && ((m_position == m_end) || (*m_position != '}'))))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   264
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   265
            // leave the $ as is, and carry on:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   266
            m_position = --save_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   267
            put(*m_position);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   268
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   269
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   270
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   271
         // otherwise output sub v:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   272
         put(this->m_results[v]);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   273
         if(have_brace)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   274
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   275
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   276
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   277
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   278
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   279
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   280
void basic_regex_formatter<OutputIterator, Results, traits>::format_escape()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   281
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   282
   // skip the escape and check for trailing escape:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   283
   if(++m_position == m_end)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   284
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   285
      put(static_cast<char_type>('\\'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   286
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   287
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   288
   // now switch on the escape type:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   289
   switch(*m_position)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   290
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   291
   case 'a':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   292
      put(static_cast<char_type>('\a'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   293
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   294
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   295
   case 'f':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   296
      put(static_cast<char_type>('\f'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   297
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   298
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   299
   case 'n':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   300
      put(static_cast<char_type>('\n'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   301
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   302
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   303
   case 'r':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   304
      put(static_cast<char_type>('\r'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   305
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   306
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   307
   case 't':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   308
      put(static_cast<char_type>('\t'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   309
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   310
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   311
   case 'v':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   312
      put(static_cast<char_type>('\v'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   313
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   314
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   315
   case 'x':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   316
      if(++m_position == m_end)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   317
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   318
         put(static_cast<char_type>('x'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   319
         return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   320
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   321
      // maybe have \x{ddd}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   322
      if(*m_position == static_cast<char_type>('{'))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   323
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   324
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   325
         int val = m_traits.toi(m_position, m_end, 16);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   326
         if(val < 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   327
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   328
            // invalid value treat everything as literals:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   329
            put(static_cast<char_type>('x'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   330
            put(static_cast<char_type>('{'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   331
            return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   332
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   333
         if(*m_position != static_cast<char_type>('}'))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   334
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   335
            while(*m_position != static_cast<char_type>('\\'))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   336
               --m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   337
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   338
            put(*m_position++);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   339
            return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   340
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   341
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   342
         put(static_cast<char_type>(val));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   343
         return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   344
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   345
      else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   346
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   347
         std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   348
         len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   349
         int val = m_traits.toi(m_position, m_position + len, 16);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   350
         if(val < 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   351
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   352
            --m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   353
            put(*m_position++);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   354
            return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   355
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   356
         put(static_cast<char_type>(val));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   357
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   358
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   359
   case 'c':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   360
      if(++m_position == m_end)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   361
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   362
         --m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   363
         put(*m_position++);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   364
         return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   365
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   366
      put(static_cast<char_type>(*m_position++ % 32));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   367
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   368
   case 'e':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   369
      put(static_cast<char_type>(27));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   370
      ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   371
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   372
   default:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   373
      // see if we have a perl specific escape:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   374
      if((m_flags & boost::regex_constants::format_sed) == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   375
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   376
         bool breakout = false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   377
         switch(*m_position)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   378
         {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   379
         case 'l':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   380
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   381
            m_restore_state = m_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   382
            m_state = output_next_lower;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   383
            breakout = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   384
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   385
         case 'L':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   386
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   387
            m_state = output_lower;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   388
            breakout = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   389
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   390
         case 'u':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   391
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   392
            m_restore_state = m_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   393
            m_state = output_next_upper;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   394
            breakout = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   395
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   396
         case 'U':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   397
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   398
            m_state = output_upper;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   399
            breakout = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   400
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   401
         case 'E':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   402
            ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   403
            m_state = output_copy;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   404
            breakout = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   405
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   406
         }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   407
         if(breakout)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   408
            break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   409
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   410
      // see if we have a \n sed style backreference:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   411
      int v = m_traits.toi(m_position, m_position+1, 10);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   412
      if((v > 0) || ((v == 0) && (m_flags & ::boost::regex_constants::format_sed)))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   413
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   414
         put(m_results[v]);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   415
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   416
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   417
      else if(v == 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   418
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   419
         // octal ecape sequence:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   420
         --m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   421
         std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   422
         len = (std::min)(static_cast<std::ptrdiff_t>(4), len);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   423
         v = m_traits.toi(m_position, m_position + len, 8);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   424
         BOOST_ASSERT(v >= 0);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   425
         put(static_cast<char_type>(v));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   426
         break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   427
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   428
      // Otherwise output the character "as is":
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   429
      put(*m_position++);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   430
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   431
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   432
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   433
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   434
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   435
void basic_regex_formatter<OutputIterator, Results, traits>::format_conditional()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   436
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   437
   if(m_position == m_end)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   438
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   439
      // oops trailing '?':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   440
      put(static_cast<char_type>('?'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   441
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   442
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   443
   std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   444
   len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   445
   int v = m_traits.toi(m_position, m_position + len, 10);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   446
   if(v < 0)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   447
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   448
      // oops not a number:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   449
      put(static_cast<char_type>('?'));
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   450
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   451
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   452
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   453
   // output varies depending upon whether sub-expression v matched or not:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   454
   if(m_results[v].matched)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   455
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   456
      m_have_conditional = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   457
      format_all();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   458
      m_have_conditional = false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   459
      if((m_position != m_end) && (*m_position == static_cast<char_type>(':')))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   460
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   461
         // skip the ':':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   462
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   463
         // save output state, then turn it off:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   464
         output_state saved_state = m_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   465
         m_state = output_none;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   466
         // format the rest of this scope:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   467
         format_until_scope_end();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   468
         // restore output state:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   469
         m_state = saved_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   470
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   471
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   472
   else
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   473
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   474
      // save output state, then turn it off:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   475
      output_state saved_state = m_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   476
      m_state = output_none;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   477
      // format until ':' or ')':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   478
      m_have_conditional = true;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   479
      format_all();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   480
      m_have_conditional = false;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   481
      // restore state:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   482
      m_state = saved_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   483
      if((m_position != m_end) && (*m_position == static_cast<char_type>(':')))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   484
      {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   485
         // skip the ':':
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   486
         ++m_position;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   487
         // format the rest of this scope:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   488
         format_until_scope_end();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   489
      }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   490
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   491
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   492
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   493
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   494
void basic_regex_formatter<OutputIterator, Results, traits>::format_until_scope_end()
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   495
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   496
   do
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   497
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   498
      format_all();
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   499
      if((m_position == m_end) || (*m_position == static_cast<char_type>(')')))
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   500
         return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   501
      put(*m_position++);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   502
   }while(m_position != m_end);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   503
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   504
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   505
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   506
void basic_regex_formatter<OutputIterator, Results, traits>::put(char_type c)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   507
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   508
   // write a single character to output
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   509
   // according to which case translation mode we are in:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   510
   switch(this->m_state)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   511
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   512
   case output_none:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   513
      return;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   514
   case output_next_lower:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   515
      c = m_traits.tolower(c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   516
      this->m_state = m_restore_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   517
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   518
   case output_next_upper:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   519
      c = m_traits.toupper(c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   520
      this->m_state = m_restore_state;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   521
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   522
   case output_lower:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   523
      c = m_traits.tolower(c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   524
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   525
   case output_upper:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   526
      c = m_traits.toupper(c);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   527
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   528
   default:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   529
      break;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   530
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   531
   *m_out = c;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   532
   ++m_out;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   533
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   534
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   535
template <class OutputIterator, class Results, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   536
void basic_regex_formatter<OutputIterator, Results, traits>::put(const sub_match_type& sub)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   537
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   538
   typedef typename sub_match_type::iterator iterator_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   539
   iterator_type i = sub.first;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   540
   while(i != sub.second)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   541
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   542
      put(*i);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   543
      ++i;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   544
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   545
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   546
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   547
template <class S>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   548
class string_out_iterator
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   549
#ifndef BOOST_NO_STD_ITERATOR
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   550
   : public std::iterator<std::output_iterator_tag, typename S::value_type>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   551
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   552
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   553
   S* out;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   554
public:
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   555
   string_out_iterator(S& s) : out(&s) {}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   556
   string_out_iterator& operator++() { return *this; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   557
   string_out_iterator& operator++(int) { return *this; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   558
   string_out_iterator& operator*() { return *this; }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   559
   string_out_iterator& operator=(typename S::value_type v) 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   560
   { 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   561
      out->append(1, v); 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   562
      return *this; 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   563
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   564
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   565
#ifdef BOOST_NO_STD_ITERATOR
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   566
   typedef std::ptrdiff_t difference_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   567
   typedef typename S::value_type value_type;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   568
   typedef value_type* pointer;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   569
   typedef value_type& reference;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   570
   typedef std::output_iterator_tag iterator_category;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   571
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   572
};
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   573
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   574
template <class OutputIterator, class Iterator, class Alloc, class charT, class traits>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   575
OutputIterator regex_format_imp(OutputIterator out,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   576
                          const match_results<Iterator, Alloc>& m,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   577
                          const charT* p1, const charT* p2,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   578
                          match_flag_type flags,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   579
                          const traits& t
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   580
                         )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   581
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   582
   if(flags & regex_constants::format_literal)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   583
   {
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   584
      return re_detail::copy(p1, p2, out);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   585
   }
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   586
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   587
   re_detail::basic_regex_formatter<
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   588
      OutputIterator, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   589
      match_results<Iterator, Alloc>, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   590
      traits > f(out, m, t);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   591
   return f.format(p1, p2, flags);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   592
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   593
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   594
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   595
} // namespace re_detail
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   596
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   597
template <class OutputIterator, class Iterator, class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   598
OutputIterator regex_format(OutputIterator out,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   599
                          const match_results<Iterator>& m,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   600
                          const charT* fmt,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   601
                          match_flag_type flags = format_all
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   602
                         )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   603
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   604
   re_detail::trivial_format_traits<charT> traits;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   605
   return re_detail::regex_format_imp(out, m, fmt, fmt + traits.length(fmt), flags, traits);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   606
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   607
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   608
template <class OutputIterator, class Iterator, class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   609
OutputIterator regex_format(OutputIterator out,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   610
                          const match_results<Iterator>& m,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   611
                          const std::basic_string<charT>& fmt,
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   612
                          match_flag_type flags = format_all
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   613
                         )
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   614
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   615
   re_detail::trivial_format_traits<charT> traits;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   616
   return re_detail::regex_format_imp(out, m, fmt.data(), fmt.data() + fmt.size(), flags, traits);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   617
}  
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   618
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   619
template <class Iterator, class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   620
std::basic_string<charT> regex_format(const match_results<Iterator>& m, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   621
                                      const charT* fmt, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   622
                                      match_flag_type flags = format_all)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   623
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   624
   std::basic_string<charT> result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   625
   re_detail::string_out_iterator<std::basic_string<charT> > i(result);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   626
   re_detail::trivial_format_traits<charT> traits;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   627
   re_detail::regex_format_imp(i, m, fmt, fmt + traits.length(fmt), flags, traits);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   628
   return result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   629
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   630
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   631
template <class Iterator, class charT>
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   632
std::basic_string<charT> regex_format(const match_results<Iterator>& m, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   633
                                      const std::basic_string<charT>& fmt, 
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   634
                                      match_flag_type flags = format_all)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   635
{
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   636
   std::basic_string<charT> result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   637
   re_detail::string_out_iterator<std::basic_string<charT> > i(result);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   638
   re_detail::trivial_format_traits<charT> traits;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   639
   re_detail::regex_format_imp(i, m, fmt.data(), fmt.data() + fmt.size(), flags, traits);
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   640
   return result;
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   641
}
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   642
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   643
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   644
#pragma warning(push)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   645
#pragma warning(disable: 4103)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   646
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   647
#ifdef BOOST_HAS_ABI_HEADERS
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   648
#  include BOOST_ABI_SUFFIX
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   649
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   650
#ifdef BOOST_MSVC
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   651
#pragma warning(pop)
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   652
#endif
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   653
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   654
} // namespace boost
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   655
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   656
#endif  // BOOST_REGEX_FORMAT_HPP
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   657
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   658
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   659
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   660
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   661
6d08f4a05d93 add deprecated files
jjkang
parents:
diff changeset
   662