|
@@ -26,6 +26,10 @@ enum ConsoleArg {
|
|
A text string parameter with limitation to only accept the specified list values.
|
|
A text string parameter with limitation to only accept the specified list values.
|
|
**/
|
|
**/
|
|
AEnum( values : Array<String> );
|
|
AEnum( values : Array<String> );
|
|
|
|
+ /**
|
|
|
|
+ An array of remaining arguments.
|
|
|
|
+ **/
|
|
|
|
+ AArray(t: ConsoleArg);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -266,7 +270,7 @@ class Console #if !macro extends h2d.Object #end {
|
|
for( a in c.args ) {
|
|
for( a in c.args ) {
|
|
var astr = a.name;
|
|
var astr = a.name;
|
|
switch( a.t ) {
|
|
switch( a.t ) {
|
|
- case AInt, AFloat:
|
|
|
|
|
|
+ case AInt, AFloat, AArray(_):
|
|
astr += ":"+a.t.getName().substr(1);
|
|
astr += ":"+a.t.getName().substr(1);
|
|
case AString:
|
|
case AString:
|
|
// nothing
|
|
// nothing
|
|
@@ -461,8 +465,11 @@ class Console #if !macro extends h2d.Object #end {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- args.push(string);
|
|
|
|
- last = '';
|
|
|
|
|
|
+ last = string;
|
|
|
|
+ if (i < command.length - 1) {
|
|
|
|
+ args.push(string);
|
|
|
|
+ last = '';
|
|
|
|
+ }
|
|
|
|
|
|
skipSpace();
|
|
skipSpace();
|
|
default:
|
|
default:
|
|
@@ -480,55 +487,82 @@ class Console #if !macro extends h2d.Object #end {
|
|
log('Unknown command "${cmdName}"',errorColor);
|
|
log('Unknown command "${cmdName}"',errorColor);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- var vargs = new Array<Dynamic>();
|
|
|
|
- for( i in 0...cmd.args.length ) {
|
|
|
|
- var a = cmd.args[i];
|
|
|
|
- var v = args[i + 1];
|
|
|
|
- if( v == null ) {
|
|
|
|
- if( a.opt ) {
|
|
|
|
- vargs.push(null);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- log('Missing argument ${a.name}',errorColor);
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- switch( a.t ) {
|
|
|
|
|
|
+
|
|
|
|
+ function parseArgument( v : String, t: ConsoleArg, name : String, loneArg = false ): Dynamic {
|
|
|
|
+ switch( t ) {
|
|
case AInt:
|
|
case AInt:
|
|
var i = Std.parseInt(v);
|
|
var i = Std.parseInt(v);
|
|
if( i == null ) {
|
|
if( i == null ) {
|
|
- log('$v should be Int for argument ${a.name}',errorColor);
|
|
|
|
- return;
|
|
|
|
|
|
+ log('$v should be Int for argument $name',errorColor);
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
- vargs.push(i);
|
|
|
|
|
|
+ return i;
|
|
case AFloat:
|
|
case AFloat:
|
|
var f = Std.parseFloat(v);
|
|
var f = Std.parseFloat(v);
|
|
if( Math.isNaN(f) ) {
|
|
if( Math.isNaN(f) ) {
|
|
- log('$v should be Float for argument ${a.name}',errorColor);
|
|
|
|
- return;
|
|
|
|
|
|
+ log('$v should be Float for argument $name',errorColor);
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
- vargs.push(f);
|
|
|
|
|
|
+ return f;
|
|
case ABool:
|
|
case ABool:
|
|
switch( v ) {
|
|
switch( v ) {
|
|
- case "true", "1": vargs.push(true);
|
|
|
|
- case "false", "0": vargs.push(false);
|
|
|
|
|
|
+ case "true", "1": return true;
|
|
|
|
+ case "false", "0": return false;
|
|
default:
|
|
default:
|
|
- log('$v should be Bool for argument ${a.name}',errorColor);
|
|
|
|
- return;
|
|
|
|
|
|
+ log('$v should be Bool for argument $name',errorColor);
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
case AString:
|
|
case AString:
|
|
// if we take a single string, let's pass the whole args (allows spaces)
|
|
// if we take a single string, let's pass the whole args (allows spaces)
|
|
- vargs.push(cmd.args.length == 1 ? StringTools.trim(command.substr(args[0].length)) : v);
|
|
|
|
|
|
+ return loneArg ? StringTools.trim(command.substr(args[0].length)) : v;
|
|
case AEnum(values):
|
|
case AEnum(values):
|
|
var found = false;
|
|
var found = false;
|
|
- for( v2 in values )
|
|
|
|
- if( v == v2 ) {
|
|
|
|
- found = true;
|
|
|
|
- vargs.push(v2);
|
|
|
|
|
|
+ for( v2 in values ) {
|
|
|
|
+ if( v == v2 )
|
|
|
|
+ return v2;
|
|
|
|
+ }
|
|
|
|
+ log('$v should be [${values.join("|")}] for argument $name', errorColor);
|
|
|
|
+ return null;
|
|
|
|
+ case AArray(t):
|
|
|
|
+ log('Cannot have nested arrays for argument $name');
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var vargs = new Array<Dynamic>();
|
|
|
|
+ for( i in 0...cmd.args.length ) {
|
|
|
|
+ var a = cmd.args[i];
|
|
|
|
+ switch( a.t ) {
|
|
|
|
+ case AArray(t):
|
|
|
|
+ if (i != cmd.args.length - 1) {
|
|
|
|
+ log('Array ${a.name} should be last argument',errorColor);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ var arr = [];
|
|
|
|
+ for (j in (i + 1)...args.length) {
|
|
|
|
+ var v = args[j];
|
|
|
|
+ var parsed = parseArgument(v, t, a.name);
|
|
|
|
+ if (parsed == null)
|
|
|
|
+ return;
|
|
|
|
+ arr.push(parsed);
|
|
|
|
+ }
|
|
|
|
+ vargs.push(arr);
|
|
|
|
+ default:
|
|
|
|
+ var v = args[i + 1];
|
|
|
|
+ if( v == null ) {
|
|
|
|
+ if( a.opt ) {
|
|
|
|
+ vargs.push(null);
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
- if( !found ) {
|
|
|
|
- log('$v should be [${values.join("|")}] for argument ${a.name}', errorColor);
|
|
|
|
|
|
+ log('Missing argument ${a.name}',errorColor);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ var parsed = parseArgument(v, a.t, a.name, cmd.args.length == 1);
|
|
|
|
+ if (parsed == null)
|
|
|
|
+ return;
|
|
|
|
+ vargs.push(parsed);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|