You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
3.3 KiB
Racket

4 years ago
#lang debug racket
(require racket/string
4 years ago
"main.rkt"
"kernscore.rkt")
4 years ago
(module+ raco
(define command-name (with-handlers ([exn:fail? (λ (exn) #f)])
(vector-ref (current-command-line-arguments) 0)))
(dispatch command-name))
(module+ main
(println "this is words command"))
(define (dispatch command-name)
(define letters "abcdefghijklmnopqrstuvwxyz")
(define mandatory #false)
(define combo #false)
(define min-size 5)
(define max-size 10)
(define count 20)
4 years ago
(define hide-plurals #true)
(define proper-names #false)
4 years ago
(define title-case #false)
(define uppercase #false)
(define sort-style #false)
(define omit #false)
(define reversed #false)
4 years ago
(command-line
#:program "words"
#:argv (current-command-line-arguments)
#:once-each
[("-l" "--letters") letters-arg
"possible letters (default is a-z)"
(set! letters letters-arg)]
[("-m" "--mandatory") mandatory-arg
"mandatory letters"
(set! mandatory mandatory-arg)]
4 years ago
[("-o" "--omit") omit-arg
"forbidden letters"
(set! omit omit-arg)]
4 years ago
[("-c" "--combo") combo-arg
"mandatory combo"
(set! combo combo-arg)]
[("-n" "--number") count-arg
4 years ago
"max number of results"
(set! count (string->number count-arg))]
4 years ago
[("--min") min-size-arg
4 years ago
"minimum word length"
4 years ago
(set! min-size (string->number min-size-arg))]
[("--max") max-size-arg
4 years ago
"maximum word length"
4 years ago
(set! max-size (string->number max-size-arg))]
[("-s" "--show-plurals")
4 years ago
"show plural words"
(set! hide-plurals #false)]
4 years ago
[("-p" "--proper-names")
4 years ago
"show proper names"
(set! proper-names #true)]
[("--sort") sort-arg
"sort order"
(set! sort-style sort-arg)]
[("-r" "--reverse")
"reverse order"
(set! reversed #true)]
#:once-any
[("-t" "--title-case")
"capitalize first letter"
(set! title-case #true)]
[("-u" "--uppercase")
"capitalize all letters"
(set! uppercase #true)])
(define words (make-words #:letters letters
#:mandatory mandatory
#:omit omit
#:combo combo
#:count count
#:min min-size
#:max max-size
#:hide-plurals hide-plurals
#:proper-names proper-names
4 years ago
#:case (cond
[uppercase 'upper]
[title-case 'title]
[else #false])))
4 years ago
(define-values (sort-key sort-cmp)
(match sort-style
["kernscore" (values kernscore <)]
["alpha" (values values string<=?)]
[_ (values #false #false)]))
(define sorted-words (cond
[sort-key
(sort words sort-cmp #:key sort-key #:cache-keys? #true)]
[else words]))
(displayln (string-join ((if reversed reverse values) sorted-words) "\n")))
4 years ago