[X2Go-Commits] [x2goclient] 02/02: help.cpp: complete pretty printer function.
git-admin at x2go.org
git-admin at x2go.org
Wed Apr 22 09:31:51 CEST 2015
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch bugfix/help-cmd
in repository x2goclient.
commit 6f55b84e55f78785b26a0b72d32b73250e19a7f5
Author: Mihai Moldovan <ionic at ionic.de>
Date: Wed Apr 22 09:31:37 2015 +0200
help.cpp: complete pretty printer function.
---
debian/changelog | 1 +
src/help.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index ddbc5d0..59502eb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -263,6 +263,7 @@ x2goclient (4.0.4.0-0x2go1) UNRELEASED; urgency=low
- help.cpp: populate pretty_print: fetch max length of params.
- help.cpp: get terminal window sizes on UNIX-based and Windows operating
systems.
+ - help.cpp: complete pretty printer function.
[ Fernando Pedemonte ]
* New upstream release (4.0.4.0):
diff --git a/src/help.cpp b/src/help.cpp
index 831ad63..8ef5811 100644
--- a/src/help.cpp
+++ b/src/help.cpp
@@ -95,7 +95,7 @@ void help::pretty_print (help::data_t data) {
/* Iterate over all parameter options and get max width. */
for (help::params_t::const_iterator it = data.second.constBegin (); it != data.second.constEnd (); ++it) {
- max_len = std::max (max_len, (*it).first.length ());
+ max_len = std::max (max_len, (*it).first.size ());
}
std::size_t terminal_cols = 0;
@@ -115,8 +115,69 @@ void help::pretty_print (help::data_t data) {
#endif
for (help::params_t::const_iterator it = data.second.constBegin (); it != data.second.constEnd (); ++it) {
+ std::size_t indent = (max_len - (*it).first.size ()) + 4;
out << " ";
out << (*it).first;
- out << QString (" ").repeated (max_len - (*it.length) + 4);
+ out << QString (" ").repeated (indent);
+
+ indent += 2;
+ std::ptrdiff_t remaining = 0;
+ std::size_t cur_len = (*it).second.size ();
+ if (0 != terminal_cols) {
+ remaining = terminal_cols - indent;
+
+ /* Ran out of space? That's bad... print a newline and don't use any indentation level. */
+ if (0 > remaining) {
+ out << "\n";
+ remaining = terminal_cols;
+ indent = 0;
+ }
+
+ QString working_copy ((*it).second);
+
+ do {
+ cur_len = working_copy.size ();
+
+ /* Fits onto the current line. Great! */
+ if (remaining > cur_len) {
+ out << working_copy;
+ }
+ else {
+ /* Try to find the next split point. */
+ std::ptrdiff_t split_point_white = working_copy.lastIndexOf (" ", remaining);
+ std::ptrdiff_t split_point_hyphen = working_copy.lastIndexOf ("-", remaining);
+ std::ptrdiff_t split_point = std::max (split_point_white, split_point_hyphen);
+
+ 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. */
+ out << working_copy.left (split_point);
+
+ /* If we split at a hyphen, don't lose it. */
+ if (working_copy.at (split_point).compare ("-") == 0) {
+ out << "-"
+ }
+
+ working_copy = working_copy.mid (split_point);
+
+ /* Do the next chunk, if there are remaining characters. */
+ if (!working_copy.isEmpty ()) {
+ out << "\n"
+ out << QString (" ").repeated (indent);
+ }
+ }
+ }
+ } while (!working_copy.isEmpty ());
+ }
+ else {
+ /* No idea what the terminal size is. Just print it all onto one line. */
+ out << (*it).second;
+ }
+
+ out << "\n";
}
}
--
Alioth's /srv/git/code.x2go.org/x2goclient.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goclient.git
More information about the x2go-commits
mailing list