gamnit: make `SpriteSet` public so clients can use its services
[nit.git] / lib / opts.nit
index ffa5954..a7789f8 100644 (file)
@@ -127,7 +127,7 @@ end
 # A count option. Count the number of time this option is present
 class OptionCount
        super Option
-       redef type VALUE: Int
+       redef type VALUE: Int is fixed
 
        # Init a new OptionCount with a `help` message and `names`.
        init(help: String, names: String...) is old_style_init do super(help, 0, names)
@@ -236,7 +236,13 @@ class OptionInt
                super(help, default, names)
        end
 
-       redef fun convert(str) do return str.to_i
+       redef fun convert(str)
+       do
+               if str.is_int then return str.to_i
+
+               errors.add "Expected an integer for option {names.join(", ")}."
+               return 0
+       end
 end
 
 # An option with a Float as parameter
@@ -281,14 +287,12 @@ class OptionContext
        var rest = new Array[String]
 
        # Errors found in the context after parsing
-       var errors = new Array[String]
+       var context_errors = new Array[String]
 
        private var optmap = new HashMap[String, Option]
 
        # Add one or more options to the context
-       fun add_option(opts: Option...) do
-                       options.add_all(opts)
-       end
+       fun add_option(opts: Option...) do options.add_all(opts)
 
        # Display all the options available
        fun usage
@@ -309,9 +313,10 @@ class OptionContext
                end
        end
 
-       # Parse and assign options everywhere in the argument list
-       fun parse(argv: Collection[String])
+       # Parse and assign options in `argv` or `args`
+       fun parse(argv: nullable Collection[String])
        do
+               if argv == null then argv = args
                var it = argv.iterator
                parse_intern(it)
        end
@@ -372,7 +377,7 @@ class OptionContext
 
                for opt in options do
                        if opt.mandatory and not opt.read then
-                               errors.add("Mandatory option {opt.names.join(", ")} not found.")
+                               context_errors.add("Mandatory option {opt.names.join(", ")} not found.")
                        end
                end
        end
@@ -387,10 +392,10 @@ class OptionContext
        end
 
        # Options parsing errors.
-       fun get_errors: Array[String]
+       fun errors: Array[String]
        do
                var errors = new Array[String]
-               errors.add_all(errors)
+               errors.add_all context_errors
                for o in options do
                        for e in o.errors do
                                errors.add(e)