#! /usr/bin/env sh exec guile -e '(@ (word-counter) main)' -s "$0" "$@" !# (define-module (word-counter) #:use-module (bible-tools) #:use-module (bible-tools count-words) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:export (main)) (define (show-meta txt) (define (tabs w) (if (< (string-length (car w)) 7) "\t\t" "\t")) (define (to-str w) (string-append (car w) ":" (tabs w) (number->string (cdr w)) "\n")) (for-each (compose display to-str) (count-words (map text txt)))) (define (help) (display "Usage: count-words [book] [-c chapter] [-h] [-v]\n") (display "\t-c chapter count the words in this chapter\n") (display "\t-h display this help message\n") (display "\t-v display the current version\n")) (define (version) (display "count-words v1.0.0\n")) (define (main args) (define flag? (cut member <> args)) (define get (compose cadr flag?)) (define-syntax conf (syntax-rules (else) ((_ (f e)... (else g)) (cond ((flag? f) e)... (else g))))) (with-bible "elb1871" (conf ("-h" (help)) ("-v" (version)) ("-c" (call-with-chapter (cadr args) (get "-c") show-meta)) (else (if (< (length args) 2) (help) (call-with-book (cadr args) show-meta))))))