aboutsummaryrefslogtreecommitdiff
path: root/wiki-engine.el
diff options
context:
space:
mode:
Diffstat (limited to 'wiki-engine.el')
-rw-r--r--wiki-engine.el49
1 files changed, 34 insertions, 15 deletions
diff --git a/wiki-engine.el b/wiki-engine.el
index a9f65d5..f878c30 100644
--- a/wiki-engine.el
+++ b/wiki-engine.el
@@ -26,22 +26,41 @@
;;; Code:
(require 'wiki-utils)
+(require 'wiki-markup)
-(defun wiki-make-wikilink-url (title))
-
-(defun wiki-engine-mediawiki-fetch (base-url title fetcher)
- "Fetch a mediawiki entry describing TITLE."
- (wiki-fetch-url
- (format "%s%s?action=raw" base-url title)
- (lambda ()
- (wiki-mode)
- (setq-local wiki-fetcher fetcher)
- )))
-
-(defun wiki-wikipedia-fetch (title)
- (interactive "sFetch wiki title: ")
- (wiki-engine-mediawiki-fetch "https://en.wikipedia.org/wiki/" title
- 'wiki-wikipedia-fetch))
+(defun wiki-engine-mediawiki-fetch (wiki-site title)
+ "Fetch a mediawiki entry describing TITLE.
+
+The site name is passed as a symbol WIKI-SITE."
+ (let ((wiki-site-info (alist-get wiki-site wiki-sites)))
+ (cl-assert (eq (plist-get wiki-site-info :engine) 'mediawiki))
+ (wiki-fetch-url
+ (format "%s%s?action=raw"
+ (plist-get wiki-site-info :base-url)
+ title)
+ (lambda ()
+ (wiki-mode)
+ (setq-local wiki-site wiki-site)
+ ))))
+
+(defun wiki-engine-fetcher (wiki-site-info)
+ (intern (format "wiki-engine-%s-fetch"
+ (plist-get wiki-site-info :engine))))
+
+(defmacro defun-wiki-fetchers ()
+ (cons 'progn
+ (mapcar
+ (lambda (pair)
+ (pcase-let ((`(,id . ,info) pair))
+ `(defun ,(wiki-site-fetcher id) (title)
+ (interactive ,(format "sFetch title for %s: "
+ (plist-get info :display-name)))
+ (,(wiki-engine-fetcher info) ',id title))))
+ (seq-filter #'cdr
+ wiki-sites)
+ )))
+
+(defun-wiki-fetchers)
(provide 'wiki-engine)
;;; wiki-engine.el ends here