- (multiple-value-bind (option-list option-type base-name argument)
- (match-option (car pos) options)
- (cond
- (option-list
- (cond
- (argument
- (case (second option-list)
- (:none
- (push base-name errors))
- (t
- (push (cons base-name argument) out-opts))))
- ((null argument)
- (if (and (eq :required (second option-list)) (null (cdr pos)))
- (push base-name errors)
- (if (or (is-short-option (second pos))
- (is-long-option (second pos)))
- (if (eq :required (second option-list))
- (push base-name errors)
- (push (cons base-name (third option-list)) out-args))
- (progn
- (push (cons base-name (second pos)) out-opts)
- (setq pos (cdr pos))))))))
- (t
- (if (or (eq :long option-type)
- (eq :short option-type))
- (push (nth-value 0 (decompose-arg arg option-type)) errors)
- (push arg out-args))))))))))
+ (multiple-value-bind (option-list option-type base-name argument)
+ (match-option (car pos) options)
+ (cond
+ ((and option-list (not (eq option-type :arg)))
+ (cond
+ (argument
+ (case (second option-list)
+ (:none
+ (push base-name errors))
+ (t
+ (push (cons base-name argument) out-opts))))
+ ((null argument)
+ (if (and (eq :required (second option-list)) (null (cdr pos)))
+ (push base-name errors)
+ (if (or (eq :none (second option-list))
+ (is-short-option (second pos))
+ (is-long-option (second pos)))
+ (if (eq :required (second option-list))
+ (push base-name errors)
+ (push (cons base-name (third option-list)) out-opts))
+ (progn
+ (push (cons base-name (second pos)) out-opts)
+ (setq pos (cdr pos))))))))
+ (t
+ (if (or (eq :long option-type)
+ (eq :short option-type))
+ (push (nth-value 0 (decompose-arg arg option-type)) errors)
+ (push arg out-args))))))))))