From fe1374efae651f914636fd0575f877837136f0d5 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sun, 9 Jul 2023 22:37:52 +1000 Subject: Browsing and navigating with various wiki engines --- wiki-engine.el | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) (limited to 'wiki-engine.el') 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 -- cgit v1.2.3