openfoam/applications/test/write-wrapped-string/Test-write-wrapped-string.C
Mark Olesen d7bf2d400d BUG: string wrapping (eg, argList help) truncates character (#2625)
- had an off-by-one in the accounting for some corner caes,
  partly because the logic was a bit convoluted

ENH: improved string wrapping (#2625)

- reworked logic (like a state machine) to handle backtracking
  with fallback of splitting near punctuation characters.

  Still doesn't compete with nroff or TeX, but does avoid long lines
  and many funny splits.  With this change the help for mapFieldsPar
  now like this:

  =====
      Specify the mapping method
      (direct|mapNearest|cellVolumeWeight|
      correctedCellVolumeWeight)
  =====

  Since the list of options is very long without any spaces, it takes
  '|' as the best split point, which definitely reads better
2022-11-18 21:14:22 +01:00

94 lines
2.4 KiB
C

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
Test-write-wrapped-string
Description
Simple tests for wrapped strings
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "stringOps.H"
using namespace Foam;
void print(const std::string& str, std::size_t width, std::size_t indent=0)
{
auto& os = Info();
os << nl
<< "string[" << str.size() << "]" << nl
<< str.c_str() << "<<<<" << nl
<< "indent:" << indent << " width:" << width << endl;
for (size_t i = 0; i < width; ++i)
{
os << '=';
}
os << endl;
stringOps::writeWrapped(os, str, width, indent);
for (size_t i = 0; i < width; ++i)
{
os << '=';
}
os << endl;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::noBanner();
argList::noParallel();
#include "setRootCase.H"
{
string test =
"123456789-12345\n\n"
"6789-12\t"
"xyz3456789-1234 56789-123456789-";
print(test, 10, 4);
}
{
string test = "ABCDEFGHI";
print(test, 10, 4);
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //