|
1 | 1 | /* |
2 | | - * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//cli/src/java/org/apache/commons/cli/GnuParser.java,v 1.8 2002/08/26 20:15:02 jkeyes Exp $ |
3 | | - * $Revision: 1.8 $ |
4 | | - * $Date: 2002/08/26 20:15:02 $ |
| 2 | + * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//cli/src/java/org/apache/commons/cli/GnuParser.java,v 1.9 2002/08/31 17:53:11 jkeyes Exp $ |
| 3 | + * $Revision: 1.9 $ |
| 4 | + * $Date: 2002/08/31 17:53:11 $ |
5 | 5 | * |
6 | 6 | * ==================================================================== |
7 | 7 | * |
|
64 | 64 | import java.util.ArrayList; |
65 | 65 | import java.util.Collection; |
66 | 66 | import java.util.Iterator; |
67 | | -import java.util.Map; |
68 | | -import java.util.Iterator; |
69 | 67 |
|
70 | 68 | /** |
71 | 69 | * The class GnuParser provides an implementation of the |
72 | 70 | * {@link Parser#flatten(Options,String[],boolean) flatten} method. |
73 | 71 | * |
74 | 72 | * @author John Keyes (jbjk at mac.com) |
75 | 73 | * @see Parser |
76 | | - * @version $Revision: 1.8 $ |
| 74 | + * @version $Revision: 1.9 $ |
77 | 75 | */ |
78 | 76 | public class GnuParser extends Parser { |
79 | 77 |
|
@@ -106,21 +104,83 @@ protected String[] flatten( Options options, |
106 | 104 | boolean stopAtNonOption ) |
107 | 105 | { |
108 | 106 | init(); |
| 107 | + boolean eatTheRest = false; |
| 108 | + Option currentOption = null; |
| 109 | + |
109 | 110 | for( int i = 0; i < arguments.length; i++ ) { |
110 | | - Option option = options.getOption( arguments[i] ); |
111 | | - try { |
112 | | - Option specialOption = options.getOption( arguments[i].substring(0,2) ); |
113 | | - if( specialOption != null && option == null ) { |
114 | | - tokens.add( arguments[i].substring(0,2) ); |
115 | | - tokens.add( arguments[i].substring(2) ); |
| 111 | + if( "--".equals( arguments[i] ) ) { |
| 112 | + eatTheRest = true; |
| 113 | + tokens.add( "--" ); |
| 114 | + } |
| 115 | + else if ( "-".equals( arguments[i] ) ) { |
| 116 | + tokens.add( "-" ); |
| 117 | + } |
| 118 | + else if( arguments[i].startsWith( "-" ) ) { |
| 119 | + Option option = options.getOption( arguments[i] ); |
| 120 | + |
| 121 | + // this is not an Option |
| 122 | + if( option == null ) { |
| 123 | + // handle special properties Option |
| 124 | + Option specialOption = options.getOption( arguments[i].substring(0,2) ); |
| 125 | + if( specialOption != null ) { |
| 126 | + tokens.add( arguments[i].substring(0,2) ); |
| 127 | + tokens.add( arguments[i].substring(2) ); |
| 128 | + } |
| 129 | + else if( stopAtNonOption ) { |
| 130 | + eatTheRest = true; |
| 131 | + tokens.add( arguments[i] ); |
| 132 | + } |
| 133 | + else { |
| 134 | + tokens.add( arguments[i] ); |
| 135 | + } |
116 | 136 | } |
117 | 137 | else { |
118 | | - tokens.add( arguments[i] ); |
| 138 | + currentOption = option; |
| 139 | + // special option |
| 140 | + Option specialOption = options.getOption( arguments[i].substring(0,2) ); |
| 141 | + if( specialOption != null && option == null ) { |
| 142 | + tokens.add( arguments[i].substring(0,2) ); |
| 143 | + tokens.add( arguments[i].substring(2) ); |
| 144 | + } |
| 145 | + else if( currentOption != null && currentOption.hasArg() ) { |
| 146 | + if( currentOption.hasArg() ) { |
| 147 | + tokens.add( arguments[i] ); |
| 148 | + currentOption= null; |
| 149 | + } |
| 150 | + else if ( currentOption.hasArgs() ) { |
| 151 | + tokens.add( arguments[i] ); |
| 152 | + } |
| 153 | + else if ( stopAtNonOption ) { |
| 154 | + eatTheRest = true; |
| 155 | + tokens.add( "--" ); |
| 156 | + tokens.add( arguments[i] ); |
| 157 | + } |
| 158 | + else { |
| 159 | + tokens.add( arguments[i] ); |
| 160 | + } |
| 161 | + } |
| 162 | + else if (currentOption != null ) { |
| 163 | + tokens.add( arguments[i] ); |
| 164 | + } |
| 165 | + else if ( stopAtNonOption ) { |
| 166 | + eatTheRest = true; |
| 167 | + tokens.add( "--" ); |
| 168 | + tokens.add( arguments[i] ); |
| 169 | + } |
| 170 | + else { |
| 171 | + tokens.add( arguments[i] ); |
| 172 | + } |
119 | 173 | } |
120 | 174 | } |
121 | | - catch( IndexOutOfBoundsException exp ) { |
| 175 | + else { |
122 | 176 | tokens.add( arguments[i] ); |
123 | 177 | } |
| 178 | + |
| 179 | + if( eatTheRest ) { |
| 180 | + for( i++; i < arguments.length; i++ ) { |
| 181 | + tokens.add( arguments[i] ); |
| 182 | + } |
| 183 | + } |
124 | 184 | } |
125 | 185 | return (String[])tokens.toArray( new String[] {} ); |
126 | 186 | } |
|
0 commit comments