aboutsummaryrefslogtreecommitdiff
path: root/args.hxx
diff options
context:
space:
mode:
authorPavel Belikov <pavel.fuchs.belikov@gmail.com>2017-11-14 21:33:31 +0300
committerPavel Belikov <pavel.fuchs.belikov@gmail.com>2017-11-14 22:31:06 +0300
commit01955238036ac546ba1e488546101f65d213f4dd (patch)
tree924b4d0f14c2e7f28a8cab616b244b00c61326dc /args.hxx
parentadd more HelpParams for options (diff)
downloadargs.hxx-01955238036ac546ba1e488546101f65d213f4dd.tar.xz
add leading whitespace support in Wrap
Diffstat (limited to 'args.hxx')
-rw-r--r--args.hxx39
1 files changed, 25 insertions, 14 deletions
diff --git a/args.hxx b/args.hxx
index 655ef12..a381435 100644
--- a/args.hxx
+++ b/args.hxx
@@ -114,37 +114,48 @@ namespace args
std::istringstream stream(in);
std::vector<std::string> output;
- std::ostringstream line;
- std::string::size_type linesize = 0;
+ std::string line;
+ bool empty = true;
+
+ for (char c : in)
+ {
+ if (!isspace(c))
+ {
+ break;
+ }
+ line += c;
+ }
+
while (stream)
{
std::string item;
stream >> item;
auto itemsize = Glyphs(item);
- if ((linesize + 1 + itemsize) > currentwidth)
+ if ((line.length() + 1 + itemsize) > currentwidth)
{
- if (linesize > 0)
+ if (!empty)
{
- output.push_back(line.str());
- line.str(std::string());
- linesize = 0;
+ output.push_back(line);
+ line.clear();
+ empty = true;
currentwidth = width;
}
}
if (itemsize > 0)
{
- if (linesize)
+ if (!empty)
{
- ++linesize;
- line << " ";
+ line += ' ';
}
- line << item;
- linesize += itemsize;
+
+ line += item;
+ empty = false;
}
}
- if (linesize > 0)
+
+ if (!empty)
{
- output.push_back(line.str());
+ output.push_back(line);
}
return output;
}