blob: da4dfb3fb751ba33305c11388055e5b7965b323f (
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
;;; 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)
)
title)))
(defun wiki-engine-oddmuse-fetch (wiki-site title)
(let ((wiki-site-info (alist-get wiki-site wiki-sites)))
(cl-assert (eq (plist-get wiki-site-info :engine) 'oddmuse))
(wiki-fetch-url
(format "%s?action=download;id=%s"
(plist-get wiki-site-info :base-url)
title)
(lambda ()
(wiki-mode)
(setq-local wiki-site wiki-site)
)
title)))
(defun wiki-engine-moinmoin-fetch (wiki-site title)
(let ((wiki-site-info (alist-get wiki-site wiki-sites)))
(cl-assert (eq (plist-get wiki-site-info :engine) 'moinmoin))
(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)
)
title)))
(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
|