[
https://issues.apache.org/jira/browse/CLI-151?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Emmanuel Bourg updated CLI-151:
-------------------------------
Component/s: (was: CLI-1.x)
Help formatter
> HelpFormatter wraps incorrectly on every line beyond the first
> --------------------------------------------------------------
>
> Key: CLI-151
> URL: https://issues.apache.org/jira/browse/CLI-151
> Project: Commons CLI
> Issue Type: Bug
> Components: Help formatter
> Reporter: Dan Armbrust
> Fix For: 1.2
>
> Attachments: fix-wrapping.patch
>
>
> The method findWrapPos(...) in the HelpFormatter is a couple of bugs in the
> way that it deals with the "startPos" variable. This causes it to format
> every line beyond the first line by "startPos" to many characters, beyond the
> specified width.
> To see this, create an option with a long description, and then use the help
> formatter to print it. The first line will be the correct length. The 2nd,
> 3rd, etc lines will all be too long.
> I don't have a patch (sorry) - but here is a corrected version of the method.
> I fixed it in two places - both were using "width + startPos" when they
> should have been using width.
> {code}
> protected int findWrapPos(String text, int width, int startPos)
> {
> int pos = -1;
> // the line ends before the max wrap pos or a new line char found
> if (((pos = text.indexOf('\n', startPos)) != -1 && pos <= width)
> || ((pos = text.indexOf('\t', startPos)) != -1 && pos <= width))
> {
> return pos+1;
> }
> else if ((width) >= text.length())
> {
> return -1;
> }
> // look for the last whitespace character before startPos+width
> pos = width;
> char c;
> while ((pos >= startPos) && ((c = text.charAt(pos)) != ' ')
> && (c != '\n') && (c != '\r'))
> {
> --pos;
> }
> // if we found it - just return
> if (pos > startPos)
> {
> return pos;
> }
>
> // must look for the first whitespace chearacter after startPos
> // + width
> pos = startPos + width;
> while ((pos <= text.length()) && ((c = text.charAt(pos)) != ' ')
> && (c != '\n') && (c != '\r'))
> {
> ++pos;
> }
> return (pos == text.length()) ? (-1) : pos;
> }
> {code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.