[ 
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.

Reply via email to