void config_file_iterator::Impl::substitute_macros( cstring& where ) { m_post_subst_line.clear(); cstring::size_type pos; while( (pos = where.find( m_macro_ref_begin )) != cstring::npos ) { m_post_subst_line.append( where.begin(), pos ); where.trim_left( where.begin() + pos + m_macro_ref_begin.size() ); pos = where.find( m_macro_ref_end ); BOOST_RT_PARAM_VALIDATE_LOGIC( pos != cstring::npos, BOOST_RT_PARAM_LITERAL( "incomplete macro reference" ) ); cstring value = *get_macro_value( where.substr( 0, pos ), false ); m_post_subst_line.append( value.begin(), value.size() ); where.trim_left( where.begin() + pos + m_macro_ref_end.size() ); } if( !m_post_subst_line.empty() ) { m_post_subst_line.append( where.begin(), where.size() ); where = m_post_subst_line; } }