You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2010/06/15 16:11:05 UTC
svn commit: r954899 - in /commons/proper/cli/trunk/src:
java/org/apache/commons/cli/HelpFormatter.java
test/org/apache/commons/cli/HelpFormatterTest.java
Author: ebourg
Date: Tue Jun 15 14:11:04 2010
New Revision: 954899
URL: http://svn.apache.org/viewvc?rev=954899&view=rev
Log:
Added a parameter in HelpFormatter to specify the separator displayed between a long option and its value (CLI-169)
Modified:
commons/proper/cli/trunk/src/java/org/apache/commons/cli/HelpFormatter.java
commons/proper/cli/trunk/src/test/org/apache/commons/cli/HelpFormatterTest.java
Modified: commons/proper/cli/trunk/src/java/org/apache/commons/cli/HelpFormatter.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/java/org/apache/commons/cli/HelpFormatter.java?rev=954899&r1=954898&r2=954899&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/java/org/apache/commons/cli/HelpFormatter.java (original)
+++ commons/proper/cli/trunk/src/java/org/apache/commons/cli/HelpFormatter.java Tue Jun 15 14:11:04 2010
@@ -24,9 +24,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
-import java.util.StringTokenizer;
-import java.io.InputStream;
-import java.io.ByteArrayOutputStream;
/**
* A formatter of help messages for the current command line options
@@ -60,6 +57,9 @@ public class HelpFormatter
/** default prefix for long Option */
public static final String DEFAULT_LONG_OPT_PREFIX = "--";
+ /** default separator displayed between a long Option and its value */
+ public static final String DEFAULT_LONG_OPT_SEPARATOR = " ";
+
/** default name for an argument */
public static final String DEFAULT_ARG_NAME = "arg";
@@ -122,6 +122,9 @@ public class HelpFormatter
*/
public String defaultLongOptPrefix = DEFAULT_LONG_OPT_PREFIX;
+ /** The separator displayed between the long option and its value. */
+ private String longOptSeparator = DEFAULT_LONG_OPT_SEPARATOR;
+
/**
* the name of the argument
*
@@ -278,6 +281,30 @@ public class HelpFormatter
}
/**
+ * Set the separator displayed between a long option and its value.
+ * Ensure that the separator specified is supported by the parser used,
+ * typically ' ' or '='.
+ *
+ * @param longOptSeparator the separator, typically ' ' or '='.
+ * @since 1.3
+ */
+ public void setLongOptSeparator(String longOptSeparator)
+ {
+ this.longOptSeparator = longOptSeparator;
+ }
+
+ /**
+ * Returns the separator displayed between a long option and its value.
+ *
+ * @return the separator
+ * @since 1.3
+ */
+ public String getLongOptSeparator()
+ {
+ return longOptSeparator;
+ }
+
+ /**
* Sets the 'argName'.
*
* @param name the new value of 'argName'
@@ -500,13 +527,12 @@ public class HelpFormatter
}
/**
- * <p>Prints the usage statement for the specified application.</p>
+ * Prints the usage statement for the specified application.
*
* @param pw The PrintWriter to print the usage statement
* @param width The number of characters to display per line
* @param app The application name
* @param options The command line Options
- *
*/
public void printUsage(PrintWriter pw, int width, String app, Options options)
{
@@ -607,7 +633,7 @@ public class HelpFormatter
* @param option the Option to append
* @param required whether the Option is required or not
*/
- private static void appendOption(final StringBuffer buff, final Option option, final boolean required)
+ private void appendOption(final StringBuffer buff, final Option option, final boolean required)
{
if (!required)
{
@@ -626,7 +652,8 @@ public class HelpFormatter
// if the Option has a value
if (option.hasArg() && option.hasArgName())
{
- buff.append(" <").append(option.getArgName()).append(">");
+ buff.append(option.getOpt() == null ? longOptSeparator : " ");
+ buff.append("<").append(option.getArgName()).append(">");
}
// if the Option is not a required option
@@ -652,8 +679,8 @@ public class HelpFormatter
}
/**
- * <p>Print the help for the specified Options to the specified writer,
- * using the specified width, left padding and description padding.</p>
+ * Print the help for the specified Options to the specified writer,
+ * using the specified width, left padding and description padding.
*
* @param pw The printWriter to write the help to
* @param width The number of characters to display per line
@@ -756,7 +783,8 @@ public class HelpFormatter
{
if (option.hasArgName())
{
- optBuf.append(" <").append(option.getArgName()).append(">");
+ optBuf.append(option.hasLongOpt() ? longOptSeparator : " ");
+ optBuf.append("<").append(option.getArgName()).append(">");
}
else
{
Modified: commons/proper/cli/trunk/src/test/org/apache/commons/cli/HelpFormatterTest.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/test/org/apache/commons/cli/HelpFormatterTest.java?rev=954899&r1=954898&r2=954899&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/test/org/apache/commons/cli/HelpFormatterTest.java (original)
+++ commons/proper/cli/trunk/src/test/org/apache/commons/cli/HelpFormatterTest.java Tue Jun 15 14:11:04 2010
@@ -451,4 +451,46 @@ public class HelpFormatterTest extends T
,out.toString());
}
+ public void testHelpWithLongOptSeparator() throws Exception
+ {
+ Options options = new Options();
+ options.addOption( "f", true, "the file" );
+ options.addOption(OptionBuilder.withLongOpt("size").withDescription("the size").hasArg().withArgName("SIZE").create('s'));
+ options.addOption(OptionBuilder.withLongOpt("age").withDescription("the age").hasArg().create());
+
+ HelpFormatter formatter = new HelpFormatter();
+ assertEquals(HelpFormatter.DEFAULT_LONG_OPT_SEPARATOR, formatter.getLongOptSeparator());
+ formatter.setLongOptSeparator("=");
+ assertEquals("=", formatter.getLongOptSeparator());
+
+ StringWriter out = new StringWriter();
+
+ formatter.printHelp(new PrintWriter(out), 80, "create", "header", options, 2, 2, "footer");
+
+ assertEquals(
+ "usage: create" + EOL +
+ "header" + EOL +
+ " --age=<arg> the age" + EOL +
+ " -f <arg> the file" + EOL +
+ " -s,--size=<SIZE> the size" + EOL +
+ "footer" + EOL,
+ out.toString());
+ }
+
+ public void testUsageWithLongOptSeparator() throws Exception
+ {
+ Options options = new Options();
+ options.addOption( "f", true, "the file" );
+ options.addOption(OptionBuilder.withLongOpt("size").withDescription("the size").hasArg().withArgName("SIZE").create('s'));
+ options.addOption(OptionBuilder.withLongOpt("age").withDescription("the age").hasArg().create());
+
+ HelpFormatter formatter = new HelpFormatter();
+ formatter.setLongOptSeparator("=");
+
+ StringWriter out = new StringWriter();
+
+ formatter.printUsage(new PrintWriter(out), 80, "create", options);
+
+ assertEquals("usage: create [--age=<arg>] [-f <arg>] [-s <SIZE>]", out.toString().trim());
+ }
}