[GIT] ppl/ppl(master): Added a new helper function for the wrapping of lines.

Module: ppl/ppl Branch: master Commit: aca3e12a7959550abe459bafdffc0dab09fa65f2 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=aca3e12a79595...
Author: Roberto Bagnara bagnara@cs.unipr.it Date: Sat Mar 21 21:36:38 2009 +0100
Added a new helper function for the wrapping of lines.
---
src/pretty_print.cc | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/pretty_print.hh | 23 +++++++++++++++++++++ 2 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/src/pretty_print.cc b/src/pretty_print.cc index fbcdfb9..697f5e6 100644 --- a/src/pretty_print.cc +++ b/src/pretty_print.cc @@ -184,6 +184,62 @@ size_t wrap(Write_Function& wfunc, return written; }
+void +wrap(std::string& dst, const std::string& src_string, + unsigned indent_depth, + unsigned preferred_first_line_length, + unsigned preferred_line_length) { + dst.clear(); + const char *src = src_string.c_str(); + for (int line = 0; ; ++line) { + int linelen = (line == 0 + ? preferred_first_line_length + : preferred_line_length); + int last_comma = -1; + int last_space = -1; + int split_pos = -1; + int i; + for (i = 0; i <= linelen; ++i) { + if (src[i] == '\0' || src[i] == '\n') { + split_pos = i; + break; + } + if (src[i] == ',' && i < linelen) + last_comma = i; + if (isspace(src[i]) && (i == 0 || !isspace(src[i-1]))) + last_space = i; + } + if (split_pos < 0) { + if (last_comma >= 0) + split_pos = last_comma + 1; + else if (last_space >= 0) + split_pos = last_space; + else { + for ( ; src[i]; ++i) { + if (src[i] == ',') { + ++i; + break; + } + if (isspace(src[i])) + break; + } + split_pos = i; + } + } + if (split_pos > 0 && line > 0 && indent_depth > 0) + dst.append(indent_depth, ' '); + dst.append(src, split_pos); + src += split_pos; + if (isspace(*src)) + ++src; + while (*src == ' ') + ++src; + if (*src == '\0') + break; + dst.push_back('\n'); + } +} + } // namespace IO_Operators
} // namespace Parma_Polyhedra_Library diff --git a/src/pretty_print.hh b/src/pretty_print.hh index 1156d85..de8aa57 100644 --- a/src/pretty_print.hh +++ b/src/pretty_print.hh @@ -138,6 +138,29 @@ c_pretty_print(const T& o, write_function wfunc, void* data, unsigned preferred_first_line_length, unsigned preferred_line_length);
+//! Helper function for the wrapping of lines. +/*! + \param dst + The destination string. + + \param src + The source string holding the lines to wrap. + + \param indent_depth + The indentation depth. + + \param preferred_first_line_length + The preferred length for the first line of text. + + \param preferred_line_length + The preferred length for all the lines but the first one. +*/ +void +wrap(std::string& dst, const std::string& src_string, + unsigned indent_depth, + unsigned preferred_first_line_length, + unsigned preferred_line_length); + } // namespace IO_Operators
} // namespace Parma_Polyhedra_Library
participants (1)
-
Roberto Bagnara