This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient. commit bf9294c223e2ed31dfd3571d4d1a1fe8c2bda1d2 Author: Mihai Moldovan <ionic@ionic.de> Date: Fri Apr 24 00:37:20 2015 +0200 help.{cpp,h}: provide string splitting logic as separate split_long_line() function. Use this in pretty_print(). --- debian/changelog | 2 ++ src/help.cpp | 62 ++++++++++++++++++++++++++++-------------------------- src/help.h | 13 ++++++++++++ 3 files changed, 47 insertions(+), 30 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7bb0bce..dbe7eaf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -303,6 +303,8 @@ x2goclient (4.0.4.0-0x2go1) UNRELEASED; urgency=low - helpdialog.cpp: lower font size to have more space for text. - ui/helpdialog.ui: almost double the window size. - help.cpp: typo fix for --git-info. + - help.{cpp,h}: provide string splitting logic as separate + split_long_line() function. Use this in pretty_print(). [ Fernando Pedemonte ] * New upstream release (4.0.4.0): diff --git a/src/help.cpp b/src/help.cpp index bd0a4a0..78bef9e 100644 --- a/src/help.cpp +++ b/src/help.cpp @@ -167,6 +167,24 @@ QString help::pretty_print () { return (help::pretty_print (help::build_data ())); } +help::string_split_t help::split_long_line (QString &line, std::ptrdiff_t max_length) { + string_split_t ret (line, ""); + + if (line.size () > max_length) { + /* Try to find the next split point. */ + std::ptrdiff_t split_point = line.lastIndexOf (" ", max_length - 1); + + /* Only care for valid split points. */ + if (0 <= split_point) { + x2goDebug << "Split onto " << line.left (split_point) << " and new part " << line.mid (split_point + 1); + ret.first = line.left (split_point); + ret.second = line.mid (split_point + 1); + } + } + + return (ret); +} + QString help::pretty_print (help::data_t data) { QString ret = ""; QTextStream out (&ret); @@ -238,36 +256,20 @@ QString help::pretty_print (help::data_t data) { cur_len = working_copy.size (); x2goDebug << "Trying to fit a (remaining) description " << cur_len << " characters wide." << endl; - /* Fits onto the current line. Great! */ - if (remaining > static_cast<std::ptrdiff_t> (cur_len)) { - x2goDebug << "Fit onto the current line. Done." << endl; - out << working_copy; - working_copy = ""; - } - else { - /* Try to find the next split point. */ - std::ptrdiff_t split_point = working_copy.lastIndexOf (" ", remaining - 1); - - if (-1 == split_point) { - /* No split point available. Just print it out and hope for better times... */ - out << working_copy; - working_copy = ""; - } - else { - /* Yay, we can split. */ - x2goDebug << "Split onto " << working_copy.left (split_point); - out << working_copy.left (split_point); - - x2goDebug << " and new part " << working_copy.mid (split_point + 1); - working_copy = working_copy.mid (split_point + 1); - - /* Do the next chunk, if there are remaining characters. */ - if (!working_copy.isEmpty ()) { - out << "\n"; - indent = terminal_cols - remaining; - out << QString (" ").repeated (indent); - } - } + string_split_t string_split = split_long_line (working_copy, remaining); + working_copy = string_split.first; + + /* Print potentially splitted line. */ + out << working_copy; + + /* Continue with next chunk. */ + working_copy = string_split.second;; + + /* Print whitespace if the remainder string is non-empty. */ + if (!working_copy.isEmpty ()) { + out << "\n"; + indent = terminal_cols - remaining; + out << QString (" ").repeated (indent); } } } diff --git a/src/help.h b/src/help.h index 69852b3..b6bfb21 100644 --- a/src/help.h +++ b/src/help.h @@ -23,12 +23,14 @@ #include <QPair> #include <QStringList> #include <QTextStream> +#include <cstddef> namespace help { typedef QStringList prelude_t; typedef QPair<QString, QString> params_elem_t; typedef QList<params_elem_t> params_t; typedef QPair<prelude_t, params_t> data_t; + typedef QPair<QString, QString> string_split_t; /* Builds a prelude_t object. Values are hardcoded here. */ prelude_t build_prelude (); @@ -43,6 +45,17 @@ namespace help { prelude_t cleanup_prelude (prelude_t prelude); params_t cleanup_params (params_t params); + /* + * Splits a string into two component. + * The first component is at most max_length (or 200) characters long. + * The string is split on the nearest space surrounding max_length + * (or max_length itself.) + * Caveat: if the string length is less than max_length, no splitting + * is performed. + * In that case, the second component is empty. + */ + string_split_t split_long_line (QString &line, std::ptrdiff_t max_length = 200); + /* Prints a help_data_t structure. */ QString pretty_print (); QString pretty_print (data_t data); -- Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git