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
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)))))
|
|
|