;;;; cl-bible.lisp (in-package #:cl-bible.data) (defun init-bible (&optional (bible "mng")) (mapcar #'v:string-to-verse (uiop:read-file-lines (asdf:system-relative-pathname "cl-bible" (format nil "resources/~A.tsv" bible))))) (defun load-bible (filename) (v:from-sexp (read-from-string (uiop:read-file-string (uiop:native-namestring filename))))) (defvar *mng*) (defvar *vul*) (defvar *grb*) (defvar *kjv*) (defvar *bible*) (defun load-bibles () (ensure-directories-exist (uiop:native-namestring "~/.bible/")) (if (uiop:file-exists-p (uiop:native-namestring "~/.bible/menge.sexp")) (progn (setf *mng* (load-bible "~/.bible/menge.sexp")) (setf *vul* (load-bible "~/.bible/vulgata.sexp")) (setf *grb* (load-bible "~/.bible/greek.sexp")) (setf *kjv* (load-bible "~/.bible/kjv.sexp"))) (progn (setf *mng* (init-bible "mng")) (setf *kjv* (init-bible "kjv")) (setf *vul* (init-bible "vul")) (setf *grb* (init-bible "grb"))))) (load-bibles) (defun update-bible (str) (let ((bibles `(("mng" . ,*mng*) ("kjv" . ,*kjv*) ("vul" . ,*vul*) ("grb" . ,*grb*)))) (setf *bible* (cdr (assoc str bibles :test #'string=))))) (defun persist-bible (bible filename) (with-open-file (file (uiop:native-namestring (concatenate 'string "~/.bible/" filename ".sexp")) :direction :output :if-exists :overwrite :if-does-not-exist :create) (print (v:to-sexp bible) file))) (defun persist () (let ((bibles (list *mng* *vul* *grb* *kjv*)) (files '("menge" "vulgata" "greek" "kjv"))) (ensure-directories-exist (uiop:native-namestring "~/.bible/")) (mapcar #'persist-bible bibles files)))