You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
(define-module (bible-tools) |
|
#:use-module (srfi srfi-1) |
|
#:use-module (srfi srfi-98) |
|
#:use-module (rnrs io ports) |
|
#:use-module (rnrs bytevectors) |
|
#:export (mapcan |
|
get-bible |
|
string->bible |
|
book |
|
chapter |
|
verse |
|
text |
|
get-book |
|
get-chapter |
|
get-verse |
|
with-bible)) |
|
|
|
(define (mapcan f l) (apply append (map f l))) |
|
(define (make-bible-path name) |
|
(string-append (get-environment-variable "HOME") "/.bible/" name ".tsv")) |
|
(define (get-bible name) |
|
(call-with-input-file (make-bible-path name) (compose utf8->string get-bytevector-all))) |
|
|
|
(define (string->verse string) |
|
(string-split string #\tab)) |
|
|
|
(define (string->bible string) |
|
(map string->verse |
|
(filter (lambda (str) (not (string=? str ""))) |
|
(string-split string #\newline)))) |
|
|
|
(define book car) |
|
(define chapter cadddr) |
|
(define verse (compose cadddr cdr)) |
|
(define text (compose cadddr cddr)) |
|
|
|
(define (get-num bible query part) |
|
(filter (lambda (v) (= query (string->number (part v)))) bible)) |
|
(define (get-book book-name bible) |
|
(filter (lambda (v) (string=? book-name (book v))) bible)) |
|
(define (get-chapter chapter-number book) |
|
(get-num book chapter-number chapter)) |
|
(define (get-verse verse-number chapter) |
|
(get-num chapter verse-number verse)) |
|
|
|
(define (with-bible b f) |
|
(when (procedure? f) |
|
(f (string->bible (get-bible b)))))
|
|
|