aboutsummaryrefslogtreecommitdiff
path: root/wiki-engine.el
blob: f878c3022d44abf937cefb48a2c187e99a7f685d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
;;; wiki-engine.el -- client to wiki engines -*- lexical-binding: t -*-

;; Copyright (C) 2023 Free Software Foundation.

;; Author: Yuchen Pei <id@ypei.org>
;; Package-Requires: ((emacs "28.2"))

;; This file is part of wiki.el.

;; wiki.el is free software: you can redistribute it and/or modify it under
;; the terms of the GNU Affero General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; wiki.el is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General
;; Public License for more details.

;; You should have received a copy of the GNU Affero General Public
;; License along with wiki.el.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; client to wiki engines, wiki server software.

;;; Code:
(require 'wiki-utils)
(require 'wiki-markup)

(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