From b2416995f4c1c29a3caf192c01193ae012857431 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 24 Jul 2023 11:56:38 +1000 Subject: Make mediawiki the default engine --- wiki-engine.el | 26 +++++++++++++++++++------- wiki-utils.el | 14 -------------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/wiki-engine.el b/wiki-engine.el index 8f666ef..dd72ce4 100644 --- a/wiki-engine.el +++ b/wiki-engine.el @@ -29,6 +29,10 @@ (require 'wiki-utils) (require 'wiki-markup) +;; TODO: make this a defcustom +(defvar wiki-default-engine 'mediawiki + "The default wiki engine, when one is not supplied.") + (defun wiki-engine-html-url (site title) "Return the url of the html webpage of TITLE on SITE." (format "%s%s" (plist-get (alist-get site wiki-sites) :base-url) @@ -74,10 +78,14 @@ And switch to the corresponding buffer." (_ (kill-buffer))) (wiki-save-string-and-switch to-insert title dir))) +(defun wiki-compute-engine (site-info) + "Return :engine of SITE-INFO, or the default engine." + (or (plist-get site-info :engine) wiki-default-engine)) + (defun wiki-engine-wiki-url (site title) "Construct the url to fetch wiki of TITLE from SITE." (let* ((site-info (alist-get site wiki-sites)) - (engine (plist-get site-info :engine)) + (engine (wiki-compute-engine site-info)) (base-url (plist-get site-info :base-url))) (pcase engine ('mediawiki (format "%s%s?action=raw" base-url title)) @@ -92,7 +100,7 @@ If the site has a `local' engine, \"fetch\" locally. Otherwise, if `wiki-fetch-prefer-local' is non-nil, try fetching locally, and if the title cannot be found locally, fetch remotely." (when (string-empty-p title) (setq title "Main Page")) - (let* ((engine (plist-get (alist-get site-id wiki-sites) :engine)) + (let* ((engine (wiki-compute-engine (alist-get site-id wiki-sites))) (found-local (when (or wiki-fetch-prefer-local (eq engine 'local)) (wiki-find-file title (wiki-locate-dir site-id) @@ -108,10 +116,16 @@ and if the title cannot be found locally, fetch remotely." (setq-local wiki-site site-id wiki-title title)))))) +(defun wiki-engine-mediawiki-api-wiki (base-url title) + (wiki-url-fetch-json + (format + "%sapi.php?action=query&format=json&titles=%s&prop=revisions&rvprop=content&rvslots=main" + base-url title))) + (defun wiki-engine-mediawiki-api-fetch (site-id title) "Fetch TITLE from site with SITE-ID using mediawiki api." (when (string-empty-p title) (setq title "Main Page")) - (let* ((engine (plist-get (alist-get site-id wiki-sites) :engine)) + (let* ((engine (wiki-compute-engine (alist-get site-id wiki-sites))) (base-url (plist-get (alist-get site-id wiki-sites) :base-url)) (found-local (when (or wiki-fetch-prefer-local (eq engine 'local)) @@ -132,10 +146,8 @@ and if the title cannot be found locally, fetch remotely." 'pages (alist-get 'query (wiki-url-fetch-json - (format - "%sapi.php?action=query&titles=%s&prop=revisions&rvprop=content&rvslots=main&format=json" - base-url - title) + (wiki-engine-mediawiki-api-wiki + base-url title) )))))) 0)))) title diff --git a/wiki-utils.el b/wiki-utils.el index 61357d2..8408a4c 100644 --- a/wiki-utils.el +++ b/wiki-utils.el @@ -63,7 +63,6 @@ Assuming the current buffer to be a `url-retrieve' response buffer." (defvar wiki-sites '((local) (archwiki :base-url "https://wiki.archlinux.org/title/" - :engine mediawiki :display-name "ArchWiki") (debian-wiki :base-url "https://wiki.debian.org/" :engine moinmoin @@ -72,31 +71,24 @@ Assuming the current buffer to be a `url-retrieve' response buffer." :engine oddmuse :display-name "EmacsWiki") (esp :base-url "https://wiki.endsoftwarepatents.org/wiki/" - :engine mediawiki :display-name "ESP Wiki") (fandom-recipes :base-url "https://recipes.fandom.com/wiki/" - :engine mediawiki :display-name "Fandom Recipes Wiki") (fsd :base-url "https://directory.fsf.org/wiki/" - :engine mediawiki :display-name "Free Software Directory") (haskell-wiki :base-url "https://wiki.haskell.org/" - :engine mediawiki :display-name "Haskell Wiki") (libreplanet :base-url "https://libreplanet.org/wiki/" - :engine mediawiki :display-name "Libreplanet Wiki") (oddmuse :base-url "https://oddmuse.org/wiki/" :engine oddmuse :display-name "Oddmuse") (parabolawiki :base-url "https://wiki.parabola.nu/" - :engine mediawiki :display-name "ParabolaWiki") (python-wiki :base-url "https://wiki.python.org/moin/" :engine moinmoin :display-name "Python Wiki") (termux-wiki :base-url "https://wiki.termux.com/wiki/" - :engine mediawiki :display-name "Termux Wiki") (ubuntu-wiki :base-url "https://wiki.ubuntu.com/" :engine moinmoin @@ -106,23 +98,17 @@ Assuming the current buffer to be a `url-retrieve' response buffer." :engine moinmoin :display-name "Ubuntu Community Help Wiki") (wikihow :base-url "https://www.wikihow.com/" - :engine mediawiki :display-name "wikiHow" :fetcher wiki-engine-mediawiki-api-fetch) (wikiindex :base-url "https://wikiindex.org/" - :engine mediawiki :display-name "WikiIndex") (wikipedia-en :base-url "https://en.wikipedia.org/wiki/" - :engine mediawiki :display-name "Wikipedia EN") (wikipedia-zh :base-url "https://zh.wikipedia.org/wiki/" - :engine mediawiki :display-name "Wikipedia ZH") (wikivoyage-en :base-url "https://en.wikivoyage.org/wiki/" - :engine mediawiki :display-name "Wikivoyage EN") (wiktionary-en :base-url "https://en.wiktionary.org/wiki/" - :engine mediawiki :display-name "Wiktionary EN") ) "Alist of wiki sites. -- cgit v1.2.3