Signed-off-by: Maxime Leroy <maxime.leroy76@gmail.com>
# Add new aliases for this option
fun add_aliases(names: String...) do names.add_all(names)
# Add new aliases for this option
fun add_aliases(names: String...) do names.add_all(names)
# An help text for this option with default settings
redef fun to_s do return pretty(2)
# An help text for this option with default settings
redef fun to_s do return pretty(2)
# A pretty print for this help
fun pretty(off: Int): String
do
# A pretty print for this help
fun pretty(off: Int): String
do
+# Not really an option. Just add a line of text when displaying the usage
class OptionText
super Option
init(text: String) do super(text, null, null)
class OptionText
super Option
init(text: String) do super(text, null, null)
redef fun to_s do return helptext
end
redef fun to_s do return helptext
end
+# A boolean option, `true` when present, `false` if not
class OptionBool
super Option
redef type VALUE: Bool
class OptionBool
super Option
redef type VALUE: Bool
+# A count option. Count the number of time this option is present
class OptionCount
super Option
redef type VALUE: Int
class OptionCount
super Option
redef type VALUE: Int
+# An option with a String as parameter
class OptionString
super OptionParameter
redef type VALUE: nullable String
class OptionString
super OptionParameter
redef type VALUE: nullable String
redef fun convert(str) do return str
end
redef fun convert(str) do return str
end
+# An option with an enum as parameter
+# In the code, declaring an option enum (-e) with an enum like `["zero", "one", "two"]
+# In the command line, typing `myprog -e one` is giving 1 as value
class OptionEnum
super OptionParameter
redef type VALUE: Int
class OptionEnum
super OptionParameter
redef type VALUE: Int
+# An option with an Int as parameter
class OptionInt
super OptionParameter
redef type VALUE: Int
init(help: String, default: Int, names: String...) do super(help, default, names)
class OptionInt
super OptionParameter
redef type VALUE: Int
init(help: String, default: Int, names: String...) do super(help, default, names)
redef fun convert(str) do return str.to_i
end
redef fun convert(str) do return str.to_i
end
+# An option with a Float as parameter
class OptionFloat
super OptionParameter
redef type VALUE: Float
init(help: String, default: Float, names: String...) do super(help, default, names)
class OptionFloat
super OptionParameter
redef type VALUE: Float
init(help: String, default: Float, names: String...) do super(help, default, names)
redef fun convert(str) do return str.to_f
end
redef fun convert(str) do return str.to_f
end
+# An option with an array as parameter
+# `myprog -optA arg1 -optA arg2` is giving an Array `["arg1", "arg2"]`
class OptionArray
super OptionParameter
redef type VALUE: Array[String]
class OptionArray
super OptionParameter
redef type VALUE: Array[String]
+# Context where the options process
+ # Options present in the context
var options: Array[Option]
var options: Array[Option]
+
+ # Rest of the options after `parse` is called
+
+ # Errors found in the context after parsing
var errors: Array[String]
private var optmap: Map[String, Option]
var errors: Array[String]
private var optmap: Map[String, Option]
+
+ init
+ do
+ options = new Array[Option]
+ optmap = new HashMap[String, Option]
+ rest = new Array[String]
+ errors = new Array[String]
+ end
+
+ # Add one or more options to the context
+ fun add_option(opts: Option...) do
+ options.add_all(opts)
+ end
+
+ # Display all the options available
fun usage
do
var lmax = 1
fun usage
do
var lmax = 1
- # Parse ans assign options everywhere is the argument list
+ # Parse and assign options everywhere in the argument list
fun parse(argv: Collection[String])
do
var it = argv.iterator
parse_intern(it)
end
fun parse(argv: Collection[String])
do
var it = argv.iterator
parse_intern(it)
end
+ # Parse the command line
+ # FIXME: avoir crashing on a command line like : `myprog -foo` (more than one letter after a single `-`)
protected fun parse_intern(it: Iterator[String])
do
var parseargs = true
protected fun parse_intern(it: Iterator[String])
do
var parseargs = true
- fun add_option(opts: Option...)
- do
- for opt in opts do
- options.add(opt)
- end
- end
-
- init
- do
- options = new Array[Option]
- optmap = new HashMap[String, Option]
- rest = new Array[String]
- errors = new Array[String]
- end
-
private fun build
do
for o in options do
private fun build
do
for o in options do
fun get_errors: Array[String]
do
var errors: Array[String] = new Array[String]
fun get_errors: Array[String]
do
var errors: Array[String] = new Array[String]
for o in options do
for e in o.errors do
errors.add(e)
end
end
for o in options do
for e in o.errors do
errors.add(e)
end
end