@@ -16,15 +16,22 @@ public static Result<IEnumerable<Token>, Error> Tokenize(
16
16
IEnumerable < string > arguments ,
17
17
Func < string , NameLookupResult > nameLookup )
18
18
{
19
- return GetoptTokenizer . Tokenize ( arguments , nameLookup , ignoreUnknownArguments : false , allowDashDash : true , posixlyCorrect : false ) ;
19
+ return GetoptTokenizer . Tokenize (
20
+ arguments ,
21
+ nameLookup ,
22
+ ignoreUnknownArguments : false ,
23
+ allowDashDash : true ,
24
+ posixlyCorrect : false ,
25
+ optionsParseMode : OptionsParseMode . Default ) ;
20
26
}
21
27
22
28
public static Result < IEnumerable < Token > , Error > Tokenize (
23
29
IEnumerable < string > arguments ,
24
30
Func < string , NameLookupResult > nameLookup ,
25
31
bool ignoreUnknownArguments ,
26
32
bool allowDashDash ,
27
- bool posixlyCorrect )
33
+ bool posixlyCorrect ,
34
+ OptionsParseMode optionsParseMode )
28
35
{
29
36
var errors = new List < Error > ( ) ;
30
37
Action < string > onBadFormatToken = arg => errors . Add ( new BadFormatTokenError ( arg ) ) ;
@@ -70,11 +77,31 @@ public static Result<IEnumerable<Token>, Error> Tokenize(
70
77
break ;
71
78
72
79
case string arg when arg . StartsWith ( "--" ) :
80
+
81
+ if ( optionsParseMode == OptionsParseMode . SingleDashOnly )
82
+ {
83
+ onBadFormatToken ( arg ) ;
84
+ continue ;
85
+ }
86
+
73
87
tokens . AddRange ( TokenizeLongName ( arg , nameLookup , onBadFormatToken , onUnknownOption , onConsumeNext ) ) ;
74
88
break ;
75
89
76
90
case string arg when arg . StartsWith ( "-" ) :
77
- tokens . AddRange ( TokenizeShortName ( arg , nameLookup , onUnknownOption , onConsumeNext ) ) ;
91
+ switch ( optionsParseMode )
92
+ {
93
+ case OptionsParseMode . Default :
94
+ tokens . AddRange ( TokenizeShortName ( arg , nameLookup , onUnknownOption , onConsumeNext ) ) ;
95
+ break ;
96
+
97
+ case OptionsParseMode . SingleOrDoubleDash :
98
+ case OptionsParseMode . SingleDashOnly :
99
+ tokens . AddRange ( TokenizeLongName ( arg , nameLookup , onBadFormatToken , onUnknownOption , onConsumeNext , dashCount : 1 ) ) ;
100
+ break ;
101
+
102
+ default :
103
+ throw new ArgumentOutOfRangeException ( nameof ( optionsParseMode ) , optionsParseMode , null ) ;
104
+ }
78
105
break ;
79
106
80
107
case string arg :
@@ -126,12 +153,23 @@ public static Func<
126
153
StringComparer nameComparer ,
127
154
bool ignoreUnknownArguments ,
128
155
bool enableDashDash ,
129
- bool posixlyCorrect )
156
+ bool posixlyCorrect ,
157
+ OptionsParseMode optionsParseMode )
130
158
{
131
159
return ( arguments , optionSpecs ) =>
132
160
{
133
- var tokens = GetoptTokenizer . Tokenize ( arguments , name => NameLookup . Contains ( name , optionSpecs , nameComparer ) , ignoreUnknownArguments , enableDashDash , posixlyCorrect ) ;
134
- var explodedTokens = GetoptTokenizer . ExplodeOptionList ( tokens , name => NameLookup . HavingSeparator ( name , optionSpecs , nameComparer ) ) ;
161
+ var tokens = GetoptTokenizer . Tokenize (
162
+ arguments ,
163
+ name => NameLookup . Contains ( name , optionSpecs , nameComparer ) ,
164
+ ignoreUnknownArguments ,
165
+ enableDashDash ,
166
+ posixlyCorrect ,
167
+ optionsParseMode ) ;
168
+
169
+ var explodedTokens = GetoptTokenizer . ExplodeOptionList (
170
+ tokens ,
171
+ name => NameLookup . HavingSeparator ( name , optionSpecs , nameComparer ) ) ;
172
+
135
173
return explodedTokens ;
136
174
} ;
137
175
}
@@ -190,9 +228,10 @@ private static IEnumerable<Token> TokenizeLongName(
190
228
Func < string , NameLookupResult > nameLookup ,
191
229
Action < string > onBadFormatToken ,
192
230
Action < string > onUnknownOption ,
193
- Action < int > onConsumeNext )
231
+ Action < int > onConsumeNext ,
232
+ int dashCount = 2 )
194
233
{
195
- string [ ] parts = arg . Substring ( 2 ) . Split ( new char [ ] { '=' } , 2 ) ;
234
+ string [ ] parts = arg . Substring ( dashCount ) . Split ( new char [ ] { '=' } , 2 ) ;
196
235
string name = parts [ 0 ] ;
197
236
string value = ( parts . Length > 1 ) ? parts [ 1 ] : null ;
198
237
// A parameter like "--stringvalue=" is acceptable, and makes stringvalue be the empty string
0 commit comments