Add support for named and/or subexpressions with indexes > 99 in conditional format expressions.

[SVN r52873]
This commit is contained in:
John Maddock
2009-05-10 09:14:46 +00:00
parent f310162a85
commit 9d18ba1151
34 changed files with 409 additions and 194 deletions

View File

@ -581,9 +581,35 @@ void basic_regex_formatter<OutputIterator, Results, traits>::format_conditional(
put(static_cast<char_type>('?'));
return;
}
std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
int v = m_traits.toi(m_position, m_position + len, 10);
int v;
if(*m_position == '{')
{
const char_type* base = m_position;
++m_position;
v = m_traits.toi(m_position, m_end, 10);
if(v < 0)
{
// Try a named subexpression:
while((m_position != m_end) && (*m_position != '}'))
++m_position;
v = m_results.named_subexpression_index(base + 1, m_position);
}
if((v < 0) || (*m_position != '}'))
{
m_position = base;
// oops trailing '?':
put(static_cast<char_type>('?'));
return;
}
// Skip trailing '}':
++m_position;
}
else
{
std::ptrdiff_t len = ::boost::re_detail::distance(m_position, m_end);
len = (std::min)(static_cast<std::ptrdiff_t>(2), len);
v = m_traits.toi(m_position, m_position + len, 10);
}
if(v < 0)
{
// oops not a number: