inline void write(const string_type & src, string_type & dest) { dest.insert( dest.begin(), src.begin(), src.end() ); }
inline void write(char_array src, string_type & dest ) { const char_type * end = src; for ( ; *end; ++end) {} dest.insert( dest.begin(), src, end); }
void expand_escapes(string_type& s) { for(unsigned int i = 0; i < s.size(); ++i) { if(s[i] == BOOST_RE_STR('\\')) { switch(s[i+1]) { case BOOST_RE_STR('a'): s.erase(s.begin() + i); s[i] = BOOST_RE_STR('\a'); break; case BOOST_RE_STR('b'): s.erase(s.begin() + i); s[i] = BOOST_RE_STR('\b'); break; case BOOST_RE_STR('f'): s.erase(s.begin() + i); s[i] = BOOST_RE_STR('\f'); break; case BOOST_RE_STR('n'): s.erase(s.begin() + i); s[i] = BOOST_RE_STR('\n'); break; case BOOST_RE_STR('r'): s.erase(s.begin() + i); s[i] = BOOST_RE_STR('\r'); break; case BOOST_RE_STR('t'): s.erase(s.begin() + i); s[i] = BOOST_RE_STR('\t'); break; case BOOST_RE_STR('v'): s.erase(s.begin() + i); s[i] = BOOST_RE_STR('\v'); break; default: if( (s[i + 1] >= BOOST_RE_STR('0')) && (s[i + 1] <= BOOST_RE_STR('9')) ) { int val = 0; unsigned int pos = i; ++i; while((i < s.size()) && (s[i] >= BOOST_RE_STR('0')) && (s[i] <= BOOST_RE_STR('9'))) { val *= 10; val += s[i] - BOOST_RE_STR('0'); ++i; } s.erase(s.begin() + pos, s.begin() + i); if(0 == val) { s.insert(s.begin()+pos, ' '); s[pos] = 0; } else s.insert(s.begin() + pos, (string_type::value_type)val); i = pos; } else { s.erase(s.begin() + i); } } } } }