commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan Armbrust (JIRA)" <j...@apache.org>
Subject [jira] Updated: (CLI-151) HelpFormatter wraps incorrectly on every line beyond the first
Date Mon, 18 Feb 2008 22:24:34 GMT

     [ https://issues.apache.org/jira/browse/CLI-151?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Dan Armbrust updated CLI-151:
-----------------------------

    Description: 
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}

  was:
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.

 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;
    }


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


Mime
View raw message