From 697db63180f49a3c33b440cf80eca74d39335826 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sun, 9 Jul 2023 11:34:57 +1000 Subject: Start work on wiki-engine Adding wiki-engine.el, wiki-utils.el --- wiki-engine.el | 46 ++++++++++++++++++++++++++++++++++++++++++++ wiki-markup.el | 1 - wiki-utils.el | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wiki.el | 1 + 4 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 wiki-engine.el create mode 100644 wiki-utils.el 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 +;; 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 . + +;;; 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 +;; 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 . + +;;; 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 -- cgit v1.2.3