X-Git-Url: https://git.jsancho.org/?p=guile-click.git;a=blobdiff_plain;f=click%2Futil.scm;h=827a4a9b2e12885fa179317b56dbdfe5d2334638;hp=65ad8627e12579b5a8d072638d0db43ed3b65e33;hb=487cd0d4c6c0ee9681cc132e5316ded7fc5dd0f7;hpb=7bb66a7166059976c81aef6e76f205c14b45cc45 diff --git a/click/util.scm b/click/util.scm index 65ad862..827a4a9 100644 --- a/click/util.scm +++ b/click/util.scm @@ -21,14 +21,12 @@ #:use-module (click constant) #:export (getopt-long-option-spec option-property - program-name - %program-name)) + option-type + program-name)) -(define %program-name (make-fluid "guile")) -(define (program-name) - (fluid-ref %program-name)) (define (getopt-long-option-spec option-spec) + "Transform click option spec into getopt-long format" (map (lambda (option) (cons (car option) (cons (list 'value (not (option-property option 'flag))) @@ -37,8 +35,37 @@ (cdr option))))) option-spec)) + (define* (option-property option property-name #:optional (default #f)) + "Return the option property with a given name" (let ((property (assq property-name (cdr option)))) (if property (cadr property) default))) + + +(define program-name (make-parameter #f)) + + +;; Types +(define TYPE-TEXT + `((description . "TEXT") + (convert . ,identity))) +(define TYPE-INTEGER + `((description . "INTEGER") + (convert . ,string->number))) +(define TYPE-NUMBER + `((description . "NUMBER") + (convert . ,string->number))) + +(define (option-type option) + "Return allowed type for the value in the option" + (let ((default (option-property option 'default))) + (cond ((not default) + TYPE-TEXT) + ((integer? default) + TYPE-INTEGER) + ((number? default) + TYPE-NUMBER) + (else + TYPE-TEXT))))