[
https://issues.apache.org/jira/browse/CLI-151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12590028#action_12590028
]
J. Lewis Muir commented on CLI-151:
-----------------------------------
I have observed this same problem.
I'm not sure the suggested fix to {{findWrapPos}} is correct. When I tried it,
the {{testFindWrapPos}} test case failed with
{noformat}
[junit] wrap position 2 expected:<-1> but was:<16>
[junit] junit.framework.AssertionFailedError:
[junit] wrap position 2 expected:<-1> but was:<16>
[junit] at org.apache.commons.cli.HelpFormatterTest.testFindWrapPos(
[junit] HelpFormatterTest.java:62)
{noformat}
I think the problem is actually in {{HelpFormatter.renderWrappedText}}
({{HelpFormatter.java}} line 812). It calls {{findWrapPos}} with a start
position of {{nextLineTabStop}}, but that's not right; it should be a start
position of 0.
The line wrapping works for me after making this correction. I will attach a
patch containing this fix as well as an addition to the test cases to validate
it.
> 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: CLI-1.x
> Reporter: Dan Armbrust
> Fix For: 1.2
>
>
> 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.