|
|
@@ -89,7 +89,7 @@
|
|
|
(defalias 'bible-dom-text (if (fboundp 'dom-inner-text) 'dom-inner-text 'dom-text))
|
|
|
(defalias 'bible-dom-texts (if (fboundp 'dom-inner-text) 'dom-inner-text 'dom-texts))
|
|
|
|
|
|
-;;;; Configuration Variables
|
|
|
+;;;; Customization Variables
|
|
|
|
|
|
(defgroup bible nil
|
|
|
"Settings for `bible'."
|
|
|
@@ -105,7 +105,6 @@
|
|
|
:local nil
|
|
|
:group 'bible)
|
|
|
|
|
|
-
|
|
|
(defcustom bible-commentary
|
|
|
"Clarke"
|
|
|
"Customize default commentary module for Diatheke to query.
|
|
|
@@ -208,20 +207,7 @@ See `bible--display-lemma-hebrew'."
|
|
|
:local nil
|
|
|
:group 'bible)
|
|
|
|
|
|
-;;;; Variable definitions
|
|
|
-
|
|
|
-(defvar bible--text-buffers nil
|
|
|
- "List of Bible text buffers.")
|
|
|
-
|
|
|
-(defvar bible--commentary-buffers nil
|
|
|
- "List of commentary buffers.")
|
|
|
-
|
|
|
-(defvar bible--synced-buffers nil
|
|
|
- "List of buffers that are synchronized so that navigation in one applies
|
|
|
-to all of them.")
|
|
|
-
|
|
|
-(defvar-local bible--synced-p nil
|
|
|
- "Is this buffer syncronized?")
|
|
|
+;;;; Mode line formats for different kinds of buffers.
|
|
|
|
|
|
(defvar bible-mode-line-format
|
|
|
'("%e" mode-line-front-space
|
|
|
@@ -231,6 +217,7 @@ to all of them.")
|
|
|
bible--current-book-name
|
|
|
" " (:eval (number-to-string bible--current-chapter))
|
|
|
" " (:eval (if bible--synced-p "Sync" ""))
|
|
|
+ (:eval (when bible-search-range (concat " <" bible-search-range ">")))
|
|
|
" " mode-line-modes mode-line-misc-info
|
|
|
mode-line-end-spaces)
|
|
|
"Mode line format for bible buffers.")
|
|
|
@@ -238,14 +225,257 @@ to all of them.")
|
|
|
(defvar bible-search-mode-line-format
|
|
|
'("%e" mode-line-front-space
|
|
|
mode-line-frame-identification mode-line-buffer-identification " "
|
|
|
- bible-text " " bible-search-word " "
|
|
|
+ bible-search-text-this-query " " bible-search-word-this-query " "
|
|
|
+ (:eval (when bible-search-range-this-query (concat "<" bible-search-range-this-query "> ")))
|
|
|
+ (:eval (number-to-string bible-search-matches)) " matches"
|
|
|
+ " " mode-line-modes mode-line-misc-info
|
|
|
+ mode-line-end-spaces)
|
|
|
+ "Mode line format for bible search buffers.")
|
|
|
+
|
|
|
+(defvar bible-term-mode-line-format
|
|
|
+ '("%e" mode-line-front-space
|
|
|
+ mode-line-frame-identification mode-line-buffer-identification " "
|
|
|
+ bible-search-text-this-query " " bible-search-word-this-query " "
|
|
|
+ (:eval (when bible-search-range-this-query (concat "<" bible-search-range-this-query "> ")))
|
|
|
(:eval (number-to-string bible-search-matches)) " matches"
|
|
|
" " mode-line-modes mode-line-misc-info
|
|
|
mode-line-end-spaces)
|
|
|
"Mode line format for bible search buffers.")
|
|
|
|
|
|
+;;;; Modes
|
|
|
+
|
|
|
+(define-derived-mode bible special-mode "Bible"
|
|
|
+ "Mode for reading the Bible.
|
|
|
+\\{bible-map}"
|
|
|
+ (buffer-disable-undo)
|
|
|
+ (font-lock-mode t)
|
|
|
+ (use-local-map bible-map)
|
|
|
+ (setq-local mode-line-format bible-mode-line-format)
|
|
|
+ (setq buffer-read-only t)
|
|
|
+ (visual-line-mode t))
|
|
|
+
|
|
|
+(define-derived-mode bible-search-mode special-mode "Bible Search"
|
|
|
+ "Mode for performing Bible searches.
|
|
|
+\\{bible-search-mode-map}"
|
|
|
+ (buffer-disable-undo)
|
|
|
+ (font-lock-mode t)
|
|
|
+ (use-local-map bible-search-mode-map)
|
|
|
+ (setq-local mode-line-format bible-search-mode-line-format)
|
|
|
+ (setq buffer-read-only t)
|
|
|
+ (visual-line-mode t))
|
|
|
+
|
|
|
+
|
|
|
+(define-derived-mode bible-term-mode special-mode "Bible Term"
|
|
|
+ "Mode for researching terms in the Bible.
|
|
|
+\\{bible-term-mode-map}"
|
|
|
+ (buffer-disable-undo)
|
|
|
+ (font-lock-mode t)
|
|
|
+ (use-local-map bible-term-mode-map)
|
|
|
+ (setq buffer-read-only t)
|
|
|
+ (visual-line-mode t))
|
|
|
+
|
|
|
+(define-derived-mode bible-term-hebrew-mode bible-term-mode "Bible Term (Hebrew)"
|
|
|
+ "Mode for researching Hebrew terms in the Bible.
|
|
|
+\\{bible-term-hebrew-mode-map}")
|
|
|
+
|
|
|
+(define-derived-mode bible-term-greek-mode bible-term-mode "Bible Term (Greek)"
|
|
|
+ "Mode for researching Greek terms in the Bible.
|
|
|
+\\{bible-term-greek-mode-map}")
|
|
|
+
|
|
|
+
|
|
|
+(define-derived-mode bible-text-select-mode special-mode "Select Module"
|
|
|
+ (buffer-disable-undo)
|
|
|
+ (font-lock-mode t)
|
|
|
+ (setq buffer-read-only t))
|
|
|
+
|
|
|
+
|
|
|
+;;;; Keymaps
|
|
|
+
|
|
|
+;; N.B. Bible Menu items appear in reverse order of their definition
|
|
|
+;; below
|
|
|
+
|
|
|
+(defconst bible-map (make-sparse-keymap)
|
|
|
+ "Keymap for bible.")
|
|
|
+(define-key bible-map [menu-bar bible]
|
|
|
+ (cons "Bible" (make-sparse-keymap "Bible")))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible toggle-debug]
|
|
|
+ '("Toggle debug-on-error" . toggle-debug-on-error))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible display-diatheke]
|
|
|
+ '("Toggle diatheke display" . bible-toggle-display-diatheke))
|
|
|
+
|
|
|
+(defvar-local bible-debugme nil
|
|
|
+ "Make text show up as XML when set.")
|
|
|
+
|
|
|
+(define-key bible-map "d" 'bible-toggle-display-xml)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible display-xml]
|
|
|
+ '("Toggle XML Display" . bible-toggle-display-xml))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible sep]
|
|
|
+ '(menu-item '"--"))
|
|
|
+
|
|
|
+;;;;; Misc key bindings
|
|
|
+
|
|
|
+(define-key bible-map "T" 'bible-select-text)
|
|
|
+(define-key bible-map "C" 'bible-select-commentary)
|
|
|
+(define-key bible-map "w" 'bible-toggle-word-study)
|
|
|
+(define-key bible-map "l" 'bible-toggle-red-letter)
|
|
|
+
|
|
|
+(define-key bible-map "z" 'text-scale-adjust)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible zoom-text]
|
|
|
+ '("Zoom Text" . text-scale-adjust))
|
|
|
+
|
|
|
+(define-key bible-map "x" 'bible-split-display)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible split-display]
|
|
|
+ '("Split Display" . bible-split-display))
|
|
|
+
|
|
|
+(define-key bible-map "S" 'bible-toggle-buffer-sync)
|
|
|
+(define-key bible-map [menu-bar bible sync]
|
|
|
+ '("Toggle Synchronize Buffer" . bible-toggle-buffer-sync))
|
|
|
+
|
|
|
+;;;;; Navigation
|
|
|
+
|
|
|
+(define-key bible-map "p" 'bible-previous-chapter)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible previous-chapter]
|
|
|
+ '("Previous Chapter" . bible-previous-chapter))
|
|
|
+
|
|
|
+(define-key bible-map "n" 'bible-next-chapter)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible next-chapter]
|
|
|
+ '("Next Chapter" . bible-next-chapter))
|
|
|
+
|
|
|
+(define-key bible-map (kbd "TAB") 'bible-next-word)
|
|
|
+(define-key bible-map (kbd "M-<tab>") 'bible-previous-word)
|
|
|
+
|
|
|
+;;;;; Direct jump
|
|
|
+
|
|
|
+(define-key bible-map "c" 'bible-select-chapter)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible select-chapter]
|
|
|
+ '("Select Chapter" . bible-select-chapter))
|
|
|
+
|
|
|
+(define-key bible-map "b" 'bible-select-book)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible select-book]
|
|
|
+ '("Select Book" . bible-select-book))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible sep]
|
|
|
+ '(menu-item '"--"))
|
|
|
+
|
|
|
+;; Deal with visual-line-mode navigation.
|
|
|
+(define-key bible-map "\C-n" 'next-logical-line)
|
|
|
+(define-key bible-map "\C-p" 'previous-logical-line)
|
|
|
+
|
|
|
+;;;;; Search
|
|
|
+
|
|
|
+(define-key bible-map "/" 'bible-search)
|
|
|
+(define-key bible-map "s" 'bible-search)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible search]
|
|
|
+ '("Search" . bible-search))
|
|
|
+
|
|
|
+(define-key bible-map "r" 'bible-set-search-range)
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible range]
|
|
|
+ '("Set Search Range" . bible-set-search-range))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible sepp]
|
|
|
+ '(menu-item '"--"))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible toggle-text-direction]
|
|
|
+ '("Toggle text direction (for Hebrew display)" . bible-toggle-text-direction))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible toggle-tooltip-display]
|
|
|
+ '("Toggle Tooltip Display" . bible-toggle-tooltips))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible sepp]
|
|
|
+ '(menu-item '"--"))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible select-biblical-commentary]
|
|
|
+ '("Select Commentary" . bible-display-available-commentaries))
|
|
|
+
|
|
|
+(define-key bible-map
|
|
|
+ [menu-bar bible select-biblical-text]
|
|
|
+ '("Select Text" . bible-display-available-texts))
|
|
|
+
|
|
|
+(defconst bible-search-mode-map (make-keymap))
|
|
|
+(define-key bible-search-mode-map "s" 'bible-search)
|
|
|
+(define-key bible-search-mode-map "w" 'bible-toggle-word-study)
|
|
|
+(define-key bible-search-mode-map "n" 'bible-next-search-item)
|
|
|
+(define-key bible-search-mode-map "p" 'bible-previous-search-item)
|
|
|
+(define-key bible-search-mode-map (kbd "RET") 'bible-search-mode-follow-verse)
|
|
|
+(define-key bible-search-mode-map [mouse-1] 'bible-search-mode-follow-verse)
|
|
|
+
|
|
|
+;;;;; Term mode keymaps
|
|
|
+
|
|
|
+(defconst bible-term-mode-map (make-sparse-keymap))
|
|
|
+(define-key bible-term-mode-map "z" 'text-scale-adjust)
|
|
|
+(define-key bible-term-mode-map [mouse-1] 'bible-search-mode-follow-xref)
|
|
|
+
|
|
|
+(defconst bible-greek-keymap (make-sparse-keymap))
|
|
|
+(define-key bible-greek-keymap (kbd "RET") 'bible--display-greek)
|
|
|
+(define-key bible-greek-keymap [mouse-1] 'bible--display-greek)
|
|
|
+
|
|
|
+(defconst bible-hebrew-keymap (make-sparse-keymap))
|
|
|
+(define-key bible-hebrew-keymap (kbd "RET") 'bible--display-hebrew)
|
|
|
+(define-key bible-hebrew-keymap [mouse-1] 'bible--display-hebrew)
|
|
|
+
|
|
|
+(defconst bible-lemma-keymap (make-sparse-keymap))
|
|
|
+(define-key bible-lemma-keymap (kbd "RET")
|
|
|
+ (lambda ()
|
|
|
+ (interactive)))
|
|
|
+
|
|
|
+;; Not used. Not really sure what to do here or if it's useful to do anything.
|
|
|
+(defconst bible-morph-keymap (make-sparse-keymap))
|
|
|
+(define-key bible-morph-keymap (kbd "RET")
|
|
|
+ (lambda ()
|
|
|
+ (interactive)
|
|
|
+;; (let ((thing (thing-at-point 'word)))
|
|
|
+;; (message "thing at point: %s" thing)
|
|
|
+;; (message "morph property %s" (get-text-property 0 'field thing))
|
|
|
+ ))
|
|
|
+
|
|
|
+;;;;; Module choice keymaps.
|
|
|
+(defconst bible-text-map (make-keymap))
|
|
|
+(define-key bible-text-map [mouse-1] 'bible-pick-module)
|
|
|
+(define-key bible-text-map (kbd "RET") 'bible-pick-module)
|
|
|
+
|
|
|
+
|
|
|
+;;;; Variable definitions
|
|
|
+
|
|
|
(defconst bible--verse-regexp "\\(I \\|1 \\|II \\|2 \\|III \\|3 \\)??[a-zA-Z]+?[ \t\n][0-9]+[:][0-9]+")
|
|
|
|
|
|
+;; Don't know how to get footnotes and scripture cross references yet.
|
|
|
+;;(defconst bible-diatheke-filter-options " afilmnsvw")
|
|
|
+(defconst bible-diatheke-filter-options " almnvw")
|
|
|
+
|
|
|
+(defvar bible--text-buffers nil
|
|
|
+ "List of Bible text buffers.")
|
|
|
+
|
|
|
+(defvar bible--commentary-buffers nil
|
|
|
+ "List of commentary buffers.")
|
|
|
+
|
|
|
+(defvar bible--synced-buffers nil
|
|
|
+ "List of buffers that are synchronized so that navigation in one applies
|
|
|
+to all of them.")
|
|
|
+
|
|
|
+(defvar-local bible--synced-p nil
|
|
|
+ "Is this buffer syncronized?")
|
|
|
+
|
|
|
(defvar bible--texts (lazy-completion-table bible--texts bible--list-biblical-texts))
|
|
|
(defvar bible--commentaries (lazy-completion-table bible--commentaries bible--list-biblical-commentaries))
|
|
|
|
|
|
@@ -362,8 +592,6 @@ to all of them.")
|
|
|
("Rev" . "Revelation of John") ("Re" . "Revelation of John"))
|
|
|
"A-list of abbreviations for Bible books.")
|
|
|
|
|
|
-
|
|
|
-
|
|
|
;;;;; Book / chapter
|
|
|
|
|
|
(defvar-local bible--current-book (assoc "Genesis" bible--books)
|
|
|
@@ -379,134 +607,82 @@ to all of them.")
|
|
|
(defvar-local bible-query nil
|
|
|
"Search query associated with the buffer.")
|
|
|
|
|
|
-(defvar-local bible-search-mode "phrase"
|
|
|
- "Search mode: either `lucene', `phrase', `regex' or `multiword'.")
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-(defvar bible-search-range nil)
|
|
|
-
|
|
|
-;;;;; Lexemes / morphemes
|
|
|
-
|
|
|
-(defvar-local bible-has-lexemes nil
|
|
|
- "Set if the module being displayed has lexical entries availabile.")
|
|
|
-
|
|
|
-(defvar-local bible-has-morphemes nil
|
|
|
- "Set if the module being displayed has morphemes availabile.")
|
|
|
-
|
|
|
-;;;; Keymaps
|
|
|
-
|
|
|
-;; N.B. Bible Menu items appear in reverse order of their definition
|
|
|
-;; below
|
|
|
-
|
|
|
-(defconst bible-map (make-sparse-keymap)
|
|
|
- "Keymap for bible.")
|
|
|
-(define-key bible-map [menu-bar bible]
|
|
|
- (cons "Bible" (make-sparse-keymap "Bible")))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible toggle-debug]
|
|
|
- '("Toggle debug-on-error" . toggle-debug-on-error))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible display-diatheke]
|
|
|
- '("Toggle diatheke display" . bible-toggle-display-diatheke))
|
|
|
-
|
|
|
-(defvar-local bible-debugme nil
|
|
|
- "Make text show up as XML when set.")
|
|
|
-
|
|
|
-(define-key bible-map "d" 'bible-toggle-display-xml)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible display-xml]
|
|
|
- '("Toggle XML Display" . bible-toggle-display-xml))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible sep]
|
|
|
- '(menu-item '"--"))
|
|
|
-
|
|
|
-;;;;; Misc key bindings
|
|
|
-
|
|
|
-(define-key bible-map "T" 'bible-select-text)
|
|
|
-(define-key bible-map "C" 'bible-select-commentary)
|
|
|
-(define-key bible-map "w" 'bible-toggle-word-study)
|
|
|
-(define-key bible-map "l" 'bible-toggle-red-letter)
|
|
|
-
|
|
|
-(define-key bible-map "z" 'text-scale-adjust)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible zoom-text]
|
|
|
- '("Zoom Text" . text-scale-adjust))
|
|
|
-
|
|
|
-(define-key bible-map "x" 'bible-split-display)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible split-display]
|
|
|
- '("Split Display" . bible-split-display))
|
|
|
-
|
|
|
-(define-key bible-map "S" 'bible-toggle-buffer-sync)
|
|
|
-(define-key bible-map [menu-bar bible sync]
|
|
|
- '("Toggle Synchronize Buffer" . bible-toggle-buffer-sync))
|
|
|
-
|
|
|
-;;;;; Navigation
|
|
|
+(defvar-local bible-search-mode "phrase"
|
|
|
+ "Search mode: either `lucene', `phrase', `regex' or `multiword'.")
|
|
|
|
|
|
-(define-key bible-map "p" 'bible-previous-chapter)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible previous-chapter]
|
|
|
- '("Previous Chapter" . bible-previous-chapter))
|
|
|
+(defvar bible-search-range nil)
|
|
|
|
|
|
-(define-key bible-map "n" 'bible-next-chapter)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible next-chapter]
|
|
|
- '("Next Chapter" . bible-next-chapter))
|
|
|
+;;;;; Lexemes / morphemes
|
|
|
|
|
|
-(define-key bible-map (kbd "TAB") 'bible-next-word)
|
|
|
-(define-key bible-map (kbd "M-<tab>") 'bible-previous-word)
|
|
|
+(defvar-local bible-has-lexemes nil
|
|
|
+ "Set if the module being displayed has lexical entries availabile.")
|
|
|
|
|
|
-;;;;; Direct jump
|
|
|
+(defvar-local bible-has-morphemes nil
|
|
|
+ "Set if the module being displayed has morphemes availabile.")
|
|
|
|
|
|
-(define-key bible-map "c" 'bible-select-chapter)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible select-chapter]
|
|
|
- '("Select Chapter" . bible-select-chapter))
|
|
|
+(defvar-local bible-text-direction 'left-to-right)
|
|
|
|
|
|
-(define-key bible-map "b" 'bible-select-book)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible select-book]
|
|
|
- '("Select Book" . bible-select-book))
|
|
|
+(defvar bible-use-tooltips t)
|
|
|
+(setq tooltip-delay 1)
|
|
|
+(setq tooltip-short-delay .5)
|
|
|
+(setq use-system-tooltips nil)
|
|
|
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible sep]
|
|
|
- '(menu-item '"--"))
|
|
|
+(defvar-local bible-search-query nil
|
|
|
+ "Query used in toggles (word study and red letter).")
|
|
|
|
|
|
-;; Deal with visual-line-mode navigation.
|
|
|
-(define-key bible-map "\C-n" 'next-logical-line)
|
|
|
-(define-key bible-map "\C-p" 'previous-logical-line)
|
|
|
+(defvar-local bible-chapter-title nil
|
|
|
+ "Text preceding start of chapter.
|
|
|
+Mostly in Psalms, like `Of David' or the like.")
|
|
|
|
|
|
-;;;;; Search
|
|
|
+(defvar-local bible-level "0"
|
|
|
+ "Used by some modules for indentation and line breaks.")
|
|
|
|
|
|
-(define-key bible-map "/" 'bible-search)
|
|
|
-(define-key bible-map "s" 'bible-search)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible search]
|
|
|
- '("Search" . bible-search))
|
|
|
+;;;; Greek and Hebrew lexeme and morpheme tooltip rendering.
|
|
|
|
|
|
-(define-key bible-map "r" 'bible-set-search-range)
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible range]
|
|
|
- '("Set Search Range" . bible-set-search-range))
|
|
|
+;;;;; Hash tables for Lexical definitions.
|
|
|
+(defvar bible-hash-greek (make-hash-table :test 'equal :size 10000))
|
|
|
+(defvar bible-hash-hebrew (make-hash-table :test 'equal :size 10000))
|
|
|
|
|
|
-(defconst bible-search-mode-map (make-keymap))
|
|
|
-(define-key bible-search-mode-map "s" 'bible-search)
|
|
|
-(define-key bible-search-mode-map "w" 'bible-toggle-word-study)
|
|
|
-(define-key bible-search-mode-map "n" 'bible-next-search-item)
|
|
|
-(define-key bible-search-mode-map "p" 'bible-previous-search-item)
|
|
|
-(define-key bible-search-mode-map (kbd "RET") 'bible-search-mode-follow-verse)
|
|
|
-(define-key bible-search-mode-map [mouse-1] 'bible-search-mode-follow-verse)
|
|
|
+;;;;; Hash tables for tooltips.
|
|
|
+(defvar lex-hash (make-hash-table :test 'equal :size 10000))
|
|
|
+(defvar morph-hash (make-hash-table :test 'equal :size 10000))
|
|
|
+
|
|
|
+(defvar bible-outline-strings
|
|
|
+ '(;;(". ." . ".")
|
|
|
+ (" I. ." . "\nI.")
|
|
|
+ (" II. ." . " II.")
|
|
|
+ (" III. ." . " III.")
|
|
|
+ (" IV. ." . " IV.")
|
|
|
+ (" V. ." . " V.")
|
|
|
+ ("1. ." . "\n 1.")
|
|
|
+ ("2. ." . "2.")
|
|
|
+ ("3. ." . "3.")
|
|
|
+ ("4. ." . "4.")
|
|
|
+ ("5. ." . "5.")
|
|
|
+ ("6. ." . "6.")
|
|
|
+ ("7. ." . "7.")
|
|
|
+ ("8. ." . "8.")
|
|
|
+ ("9. ." . "9.")
|
|
|
+ ("a. ." . "\n a.")
|
|
|
+ ("(a)." . "\n (a).")
|
|
|
+ ("b. ." . " b.")
|
|
|
+ ("c. ." . " c.")
|
|
|
+ ("d. ." . " d.")
|
|
|
+ ("e. ." . " e.")
|
|
|
+ ("f. ." . " f.")
|
|
|
+ ("g. ." . " g.")
|
|
|
+ ("h. ." . " h.")
|
|
|
+ (" . " . ". ")
|
|
|
+ ("\n\n" . "\n")))
|
|
|
|
|
|
-;;;;; Term display
|
|
|
+;;;;; Variables for mode-line-format for search buffers.
|
|
|
+(defvar-local bible-search-word-this-query "")
|
|
|
+(defvar-local bible-search-text-this-query "")
|
|
|
+(defvar-local bible-search-range-this-query nil)
|
|
|
+(defvar-local bible-search-matches 0)
|
|
|
|
|
|
-(defconst bible-term-mode-map (make-sparse-keymap))
|
|
|
-(define-key bible-term-mode-map "z" 'text-scale-adjust)
|
|
|
-(define-key bible-term-mode-map [mouse-1] 'bible-search-mode-follow-xref)
|
|
|
|
|
|
+;;;;; Keymap helpers
|
|
|
|
|
|
(defun bible-toggle-display-diatheke ()
|
|
|
"Toggle diatheke args display."
|
|
|
@@ -530,8 +706,6 @@ to all of them.")
|
|
|
(setq-local bible-debugme (not bible-debugme))
|
|
|
(bible--display))
|
|
|
|
|
|
-(defvar-local bible-text-direction 'left-to-right)
|
|
|
-
|
|
|
(defun bible-toggle-text-direction ()
|
|
|
"Switch between left-to-right and right-to-left text direction."
|
|
|
(interactive)
|
|
|
@@ -540,17 +714,6 @@ to all of them.")
|
|
|
(setq-local bible-text-direction 'left-to-right))
|
|
|
(setq-local bidi-paragraph-direction bible-text-direction))
|
|
|
|
|
|
-(defvar-local bible-search-query nil
|
|
|
- "Query used in toggles (word study and red letter).")
|
|
|
-
|
|
|
-(defvar bible-use-tooltips t)
|
|
|
-(setq tooltip-delay 1)
|
|
|
-(setq tooltip-short-delay .5)
|
|
|
-(setq use-system-tooltips nil)
|
|
|
-
|
|
|
-;;(setq tooltip-mode -1)
|
|
|
-;;(setq tooltip-resize-echo-area t)
|
|
|
-
|
|
|
(defun bible-toggle-tooltips ()
|
|
|
"Toggle use of tooltips to display lexical/morphological items."
|
|
|
(interactive)
|
|
|
@@ -560,30 +723,6 @@ to all of them.")
|
|
|
(setq bible-show-diatheke-exec (and bible-show-diatheke-exec bible-use-tooltips)) ; Don't conflict with echo area
|
|
|
(message ""))
|
|
|
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible sepp]
|
|
|
- '(menu-item '"--"))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible toggle-text-direction]
|
|
|
- '("Toggle text direction (for Hebrew display)" . bible-toggle-text-direction))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible toggle-tooltip-display]
|
|
|
- '("Toggle Tooltip Display" . bible-toggle-tooltips))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible sepp]
|
|
|
- '(menu-item '"--"))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible select-biblical-commentary]
|
|
|
- '("Select Commentary" . bible-display-available-commentaries))
|
|
|
-
|
|
|
-(define-key bible-map
|
|
|
- [menu-bar bible select-biblical-text]
|
|
|
- '("Select Text" . bible-display-available-texts))
|
|
|
-
|
|
|
;;;; Terms
|
|
|
|
|
|
(defun bible--display-greek ()
|
|
|
@@ -594,10 +733,6 @@ This command is run by clicking on text, not directly by the user."
|
|
|
;; Remove "strong:G" prefix
|
|
|
(bible-term-greek (replace-regexp-in-string "strong:G" "" item))))
|
|
|
|
|
|
-(defconst bible-greek-keymap (make-sparse-keymap))
|
|
|
-(define-key bible-greek-keymap (kbd "RET") 'bible--display-greek)
|
|
|
-(define-key bible-greek-keymap [mouse-1] 'bible--display-greek)
|
|
|
-
|
|
|
(defun bible--display-hebrew ()
|
|
|
"Display Hebrew term.
|
|
|
This command is run by clicking on text, not directly by the user."
|
|
|
@@ -606,68 +741,6 @@ This command is run by clicking on text, not directly by the user."
|
|
|
;; Remove "strong:H" prefix and any alphabetic suffixes.
|
|
|
(bible-term-hebrew (replace-regexp-in-string "strong:H" "" item))))
|
|
|
|
|
|
-(defconst bible-hebrew-keymap (make-sparse-keymap))
|
|
|
-(define-key bible-hebrew-keymap (kbd "RET") 'bible--display-hebrew)
|
|
|
-(define-key bible-hebrew-keymap [mouse-1] 'bible--display-hebrew)
|
|
|
-
|
|
|
-(defconst bible-lemma-keymap (make-sparse-keymap))
|
|
|
-(define-key bible-lemma-keymap (kbd "RET")
|
|
|
- (lambda ()
|
|
|
- (interactive)))
|
|
|
-
|
|
|
-;; Not used. Not really sure what to do here or if it's useful to do anything.
|
|
|
-(defconst bible-morph-keymap (make-sparse-keymap))
|
|
|
-(define-key bible-morph-keymap (kbd "RET")
|
|
|
- (lambda ()
|
|
|
- (interactive)
|
|
|
-;; (let ((thing (thing-at-point 'word)))
|
|
|
-;; (message "thing at point: %s" thing)
|
|
|
-;; (message "morph property %s" (get-text-property 0 'field thing))
|
|
|
- ))
|
|
|
-
|
|
|
-;;;; Modes
|
|
|
-
|
|
|
-(define-derived-mode bible special-mode "Bible"
|
|
|
- "Mode for reading the Bible.
|
|
|
-\\{bible-map}"
|
|
|
- (buffer-disable-undo)
|
|
|
- (font-lock-mode t)
|
|
|
- (use-local-map bible-map)
|
|
|
- (setq buffer-read-only t)
|
|
|
- (visual-line-mode t))
|
|
|
-
|
|
|
-(define-derived-mode bible-search-mode special-mode "Bible Search"
|
|
|
- "Mode for performing Bible searches.
|
|
|
-\\{bible-search-mode-map}"
|
|
|
- (buffer-disable-undo)
|
|
|
- (font-lock-mode t)
|
|
|
- (use-local-map bible-search-mode-map)
|
|
|
- (setq buffer-read-only t)
|
|
|
- (visual-line-mode t))
|
|
|
-
|
|
|
-
|
|
|
-(define-derived-mode bible-term-mode special-mode "Bible Term"
|
|
|
- "Mode for researching terms in the Bible.
|
|
|
-\\{bible-term-mode-map}"
|
|
|
- (buffer-disable-undo)
|
|
|
- (font-lock-mode t)
|
|
|
- (use-local-map bible-term-mode-map)
|
|
|
- (setq buffer-read-only t)
|
|
|
- (visual-line-mode t))
|
|
|
-
|
|
|
-(define-derived-mode bible-term-hebrew-mode bible-term-mode "Bible Term (Hebrew)"
|
|
|
- "Mode for researching Hebrew terms in the Bible.
|
|
|
-\\{bible-term-hebrew-mode-map}")
|
|
|
-
|
|
|
-(define-derived-mode bible-term-greek-mode bible-term-mode "Bible Term (Greek)"
|
|
|
- "Mode for researching Greek terms in the Bible.
|
|
|
-\\{bible-term-greek-mode-map}")
|
|
|
-
|
|
|
-
|
|
|
-(define-derived-mode bible-text-select-mode special-mode "Select Module"
|
|
|
- (buffer-disable-undo)
|
|
|
- (font-lock-mode t)
|
|
|
- (setq buffer-read-only t))
|
|
|
|
|
|
;;;; Functions
|
|
|
|
|
|
@@ -682,7 +755,6 @@ specifies the module to use."
|
|
|
(interactive)
|
|
|
(with-current-buffer (get-buffer-create (generate-new-buffer-name "*bible*"))
|
|
|
(bible)
|
|
|
- (setq-local mode-line-format bible-mode-line-format)
|
|
|
(when module (setq-default bible-text module))
|
|
|
(setq-local bible-text (default-value 'bible-text))
|
|
|
(bible--set-location
|
|
|
@@ -907,9 +979,6 @@ Handle abbreviations."
|
|
|
|
|
|
;;;;;; Support (internal)
|
|
|
|
|
|
-;; Don't know how to get footnotes and scripture cross references yet.
|
|
|
-;;(defconst bible-diatheke-filter-options " afilmnsvw")
|
|
|
-(defconst bible-diatheke-filter-options " almnvw")
|
|
|
|
|
|
(defun bible--exec-diatheke (query &optional filter format module)
|
|
|
"Execute `diatheke' with specified QUERY options.
|
|
|
@@ -947,22 +1016,6 @@ MODULE is the text module to use and defaults to the current module."
|
|
|
(apply #'call-process args))
|
|
|
(buffer-string)))
|
|
|
|
|
|
-(defvar-local bible-chapter-title nil
|
|
|
- "Text preceding start of chapter.
|
|
|
-Mostly in Psalms, like `Of David' or the like.")
|
|
|
-
|
|
|
-(defvar-local bible-level "0"
|
|
|
- "Used by some modules for indentation and line breaks.")
|
|
|
-
|
|
|
-;;;; Greek and Hebrew lexeme and morpheme tooltip rendering.
|
|
|
-
|
|
|
-;;;;; Hash tables for Lexical definitions.
|
|
|
-(defvar bible-hash-greek (make-hash-table :test 'equal :size 10000))
|
|
|
-(defvar bible-hash-hebrew (make-hash-table :test 'equal :size 10000))
|
|
|
-
|
|
|
-;;;;; Hash tables for tooltips.
|
|
|
-(defvar lex-hash (make-hash-table :test 'equal :size 10000))
|
|
|
-(defvar morph-hash (make-hash-table :test 'equal :size 10000))
|
|
|
|
|
|
;; Use HTMLHREF format with diatheke, post-process to render html.
|
|
|
(defun bible--morph-query (query module)
|
|
|
@@ -1039,35 +1092,6 @@ them to the <bookname> <chapter>:<verse> format."
|
|
|
(insert verse-ref-string))))))
|
|
|
|
|
|
|
|
|
-(defvar bible-outline-strings
|
|
|
- '(;;(". ." . ".")
|
|
|
- (" I. ." . "\nI.")
|
|
|
- (" II. ." . " II.")
|
|
|
- (" III. ." . " III.")
|
|
|
- (" IV. ." . " IV.")
|
|
|
- (" V. ." . " V.")
|
|
|
- ("1. ." . "\n 1.")
|
|
|
- ("2. ." . "2.")
|
|
|
- ("3. ." . "3.")
|
|
|
- ("4. ." . "4.")
|
|
|
- ("5. ." . "5.")
|
|
|
- ("6. ." . "6.")
|
|
|
- ("7. ." . "7.")
|
|
|
- ("8. ." . "8.")
|
|
|
- ("9. ." . "9.")
|
|
|
- ("a. ." . "\n a.")
|
|
|
- ("(a)." . "\n (a).")
|
|
|
- ("b. ." . " b.")
|
|
|
- ("c. ." . " c.")
|
|
|
- ("d. ." . " d.")
|
|
|
- ("e. ." . " e.")
|
|
|
- ("f. ." . " f.")
|
|
|
- ("g. ." . " g.")
|
|
|
- ("h. ." . " h.")
|
|
|
- (" . " . ". ")
|
|
|
- ("\n\n" . "\n")))
|
|
|
-
|
|
|
-
|
|
|
(defun bible--cleanup-lex-text (lex-text)
|
|
|
"Reformat tooltip text LEX-TEXT so tooltips look nice."
|
|
|
(dolist (outline-string bible-outline-strings)
|
|
|
@@ -1574,10 +1598,6 @@ If optional argument VERSE is supplied, set cursor at verse."
|
|
|
(bible--get-biblical-modules) ; Make sure the lists are fresh.
|
|
|
bible--commentaries)
|
|
|
|
|
|
-(defconst bible-text-map (make-keymap))
|
|
|
-(define-key bible-text-map [mouse-1] 'bible-pick-module)
|
|
|
-(define-key bible-text-map (kbd "RET") 'bible-pick-module)
|
|
|
-
|
|
|
|
|
|
(defun bible-display-available-texts ()
|
|
|
"Display available modules, allow user to select."
|
|
|
@@ -1628,9 +1648,6 @@ If optional argument VERSE is supplied, set cursor at verse."
|
|
|
|
|
|
;;;; Bible Searching
|
|
|
|
|
|
-(defvar-local bible-search-word "")
|
|
|
-(defvar-local bible-search-module "")
|
|
|
-(defvar-local bible-search-matches 0)
|
|
|
|
|
|
(defun bible--open-search (query searchmode module)
|
|
|
"Open a search buffer of QUERY using SEARCHMODE in module MODULE."
|
|
|
@@ -1645,8 +1662,10 @@ If optional argument VERSE is supplied, set cursor at verse."
|
|
|
(with-current-buffer (get-buffer-create (concat "*bible-search*"))
|
|
|
(bible-search-mode)
|
|
|
(bible--display-search results module)
|
|
|
- (setq-local bible-search-word query
|
|
|
- bible-search-module module)
|
|
|
+ (setq-local bible-search-word-this-query query
|
|
|
+ bible-search-text-this-query module
|
|
|
+ bible-search-range-this-query bible-search-range)
|
|
|
+;; (setq-local mode-line-format bible-search-mode-line-format)
|
|
|
(pop-to-buffer (current-buffer) nil t)))))
|
|
|
|
|
|
(defun bible--display-search (results module)
|
|
|
@@ -1657,7 +1676,6 @@ If optional argument VERSE is supplied, set cursor at verse."
|
|
|
(query-verses "")
|
|
|
(buffer-read-only nil))
|
|
|
;; (message "display-search %s" module)
|
|
|
- (setq-local mode-line-format bible-search-mode-line-format)
|
|
|
(setq-default bible-text module)
|
|
|
(erase-buffer)
|
|
|
(while match
|
|
|
@@ -1692,8 +1710,6 @@ If optional argument VERSE is supplied, set cursor at verse."
|
|
|
(while (re-search-forward (concat "^.*" module ".*$") nil t)
|
|
|
(replace-match "")))
|
|
|
(setq mode-name "Bible Search ")
|
|
|
- (when bible-search-range
|
|
|
- (setq mode-name (concat mode-name " <" bible-search-range ">")))
|
|
|
(setq-local bible-search-matches (length verses))))
|
|
|
|
|
|
|