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.
 

44 lines
2.0 KiB

(in-package #:cl-bible.chapter)
(defclass chapter ()
((%verses :initarg :verses
:reader verses)))
(defgeneric chapter-to-clog (chapter parent))
(defgeneric book/chapter-window (canvas))
(defgeneric translations-drop-down (div display chapter drop-down))
(defgeneric display-chapter-or-book (canvas chapter))
(defgeneric load-chapter (canvas book chapter))
(defgeneric load-position (canvas pos))
(defmethod chapter-to-clog ((chapter chapter) (parent clog:clog-obj))
(labels ((verse-to-clog (verse)
(create-p parent
:content (concatenate 'string
(if (string= (v:vnumber verse) "1")
(format nil "<b>~A ~A:</b><br/>"
(v:bname verse)
(v:chapter verse))
"")
(v:verse-to-string verse)))))
(mapcar #'verse-to-clog (verses chapter))))
(defmethod book/chapter-window (canvas)
(create-div (create-web-content (create-web-main canvas))))
(defmethod display-chapter-or-book (canvas (chapter chapter))
(chapter-to-clog chapter (book/chapter-window canvas)))
(defmethod load-chapter (canvas (book string) (chapter string))
(let* ((bk (s:find-book d:*bible* book))
(verses (if (find #\- chapter)
(loop :for chap :in (uiop:split-string chapter :separator '(#\-))
:append (s:find-chapter bk chap))
(s:find-chapter bk chapter))))
(display-chapter-or-book canvas
(make-instance 'chapter :verses verses))))
(defmethod load-position ((canvas clog:clog-body) (pos string))
(display-chapter-or-book canvas
(make-instance 'chapter
:verses (s:find-verse d:*bible* (s:parse-position pos)))))