diff --git a/third-party/clara/clara.hpp b/third-party/clara/clara.hpp index 5d7f6f4..7ff62e9 100644 --- a/third-party/clara/clara.hpp +++ b/third-party/clara/clara.hpp @@ -66,6 +66,7 @@ namespace clara { namespace TextFlow size_t m_pos = 0; size_t m_len = 0; + size_t m_carriage_return = std::string::npos; bool m_suffix = false; iterator( Column const& column, size_t stringIndex ) @@ -90,7 +91,13 @@ namespace clara { namespace TextFlow m_suffix = false; auto width = m_column.m_width-indent(); - if( line().size() < m_pos + width ) { + while( m_carriage_return != std::string::npos && m_carriage_return < m_pos ) { + m_carriage_return = line().find('\n', m_carriage_return + 1); + } + if ( m_carriage_return != std::string::npos && m_carriage_return < m_pos + width ){ + m_len = m_carriage_return - m_pos; + } + else if( line().size() < m_pos + width ) { m_len = line().size() - m_pos; } else { @@ -119,7 +126,7 @@ namespace clara { namespace TextFlow } public: - explicit iterator( Column const& column ) : m_column( column ) { + explicit iterator( Column const& column ) : m_column( column ), m_carriage_return( line().find('\n') ) { assert( m_column.m_width > m_column.m_indent ); assert( m_column.m_initialIndent == std::string::npos || m_column.m_width > m_column.m_initialIndent ); calcLength();