aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wiki-engine.el46
-rw-r--r--wiki-markup.el1
-rw-r--r--wiki-utils.el60
-rw-r--r--wiki.el1
4 files changed, 107 insertions, 1 deletions
diff --git a/wiki-engine.el b/wiki-engine.el
new file mode 100644
index 0000000..a2fcaef
--- /dev/null
+++ b/wiki-engine.el
@@ -0,0 +1,46 @@
+;;; 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-markup)
+
+(defvar-local wiki-engine-host "https://en.wikipedia.org"
+ "The host of the current wiki engine instance.")
+
+(defvar-local wiki-engine-path "/wiki/"
+ "The path to the current wiki engine instance.")
+
+(defun wiki-engine-mediawiki-fetch (title)
+ (interactive "sFetch wiki title: ")
+ (wiki-fetch-url
+ (format "%s%s%s?action=raw"
+ wiki-engine-host wiki-engine-path title))
+ (wiki-mode))
+
+
+
+(provide 'wiki-engine)
+;;; wiki-engine.el ends here
diff --git a/wiki-markup.el b/wiki-markup.el
index 45bc740..0675c44 100644
--- a/wiki-markup.el
+++ b/wiki-markup.el
@@ -118,4 +118,3 @@
(provide 'wiki-markup)
;;; wiki-markup.el ends here
-
diff --git a/wiki-utils.el b/wiki-utils.el
new file mode 100644
index 0000000..80680b7
--- /dev/null
+++ b/wiki-utils.el
@@ -0,0 +1,60 @@
+;;; wiki-utils.el -- wiki utility functions -*- 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:
+
+;; wiki utility functions.
+
+;;; Code:
+(defvar wiki-download-dir "~/Downloads")
+
+(defun wiki-fetch-url (url)
+ "Fetch url and returns the buffer."
+ (interactive "sURL: ")
+ (let ((file-name (expand-file-name (wiki-make-file-name-from-url url)
+ wiki-download-dir)))
+ (url-retrieve url 'wiki-fetch-url-save-and-switch (list file-name)))
+ )
+
+(defun wiki-fetch-url-save-and-switch (status file-name)
+ (unless (plist-get status :error)
+ (wiki-delete-http-header)
+ (write-file file-name)
+ (let ((coding-system-for-read 'utf-8))
+ (revert-buffer t t))
+ (switch-to-buffer (current-buffer))))
+
+(defun wiki-delete-http-header ()
+ (delete-region (point-min) (progn (wiki-skip-http-header) (point))))
+
+(defun wiki-skip-http-header ()
+ (goto-char (point-min))
+ (re-search-forward "\r?\n\r?\n"))
+
+(defun wiki-make-file-name-from-url (url)
+ (file-name-nondirectory
+ (directory-file-name
+ (car (url-path-and-query (url-generic-parse-url
+ (url-unhex-string url)))))))
+
+(provide 'wiki-utils)
+;;; wiki-utils.el ends here
diff --git a/wiki.el b/wiki.el
index 5780a60..5165ab5 100644
--- a/wiki.el
+++ b/wiki.el
@@ -27,6 +27,7 @@
;;; Code:
(require 'wiki-markup)
+(require 'wiki-engine)
(provide 'wiki)
;;; wiki.el ends here