///////////////////////////////////////////////////////////////////////////////
// Name: wx/private/wordwrap.h
// Purpose: Simple helper for string word wrapping.
// Author: Vadim Zeitlin
// Created: 2024-11-22
// Copyright: (c) 2024 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PRIVATE_WORDWRAP_H_
#define _WX_PRIVATE_WORDWRAP_H_
#include "wx/string.h"
#include <vector>
// ----------------------------------------------------------------------------
// wxWordWrap helper for wxCmdLineParser
// ----------------------------------------------------------------------------
inline std::vector<wxString> wxWordWrap(const wxString& text, int widthMax)
{
std::vector<wxString> lines;
wxString line;
int lastSpace = -1; // No space in the current line yet.
for ( auto ch : text )
{
// Always honour explicit line breaks.
if ( ch == '\n' )
{
lines.push_back(line);
line.clear();
lastSpace = -1;
}
else
{
const int lineLength = line.length();
if ( lineLength == widthMax )
{
// Can't continue this line.
if ( lastSpace == -1 )
{
// No space in the line, just break it.
lines.push_back(line);
line.clear();
}
else
{
// Break at the last space.
lines.push_back(line.substr(0, lastSpace));
// Also skip all the spaces following it, we don't want to
// start the new line with spaces.
while ( lastSpace < lineLength && line[lastSpace] == ' ' )
lastSpace++;
line = line.substr(lastSpace);
lastSpace = -1;
}
}
else
{
if ( ch == ' ' )
lastSpace = line.length();
}
line += ch;
}
}
if ( !line.empty() )
lines.push_back(line);
return lines;
}
#endif // _WX_PRIVATE_WORDWRAP_H_