From 0d342f0aee3f2f800e486c0051dabe718a7b2841 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Wed, 23 Mar 2011 11:14:27 +0100 Subject: I don't like nxhtml --- emacs.d/nxhtml/related/wikipedia-mode.el | 2296 ------------------------------ 1 file changed, 2296 deletions(-) delete mode 100644 emacs.d/nxhtml/related/wikipedia-mode.el (limited to 'emacs.d/nxhtml/related/wikipedia-mode.el') diff --git a/emacs.d/nxhtml/related/wikipedia-mode.el b/emacs.d/nxhtml/related/wikipedia-mode.el deleted file mode 100644 index c219e19..0000000 --- a/emacs.d/nxhtml/related/wikipedia-mode.el +++ /dev/null @@ -1,2296 +0,0 @@ -;;; wikipedia-mode.el --- Mode for editing Wikipedia articles off-line -;; Copyright (C) 2003, 2004, 2006 Chong Yidong, Uwe Brauer - -;; Author: Chong Yidong -;; Maintainer: Uwe Brauer -;; Version: 0.51 -;; Keywords: wiki -;; $Id: wikipedia-mode.el,v 1.5 2006/05/30 15:16:45 oub Exp oub $ - - -;; This file is not part of GNU Emacs. - -;;{{{ GPL2 - -;; This file is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 2 of -;; the License, or (at your option) any later version. - -;; This file 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 General Public License for more details. - -;; You should have received a copy of the GNU General Public -;; License along with GNU Emacs; if not, write to the Free -;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, -;; MA 02111-1307 USA - -;;}}} - -;;; Commentary: - -;; This is `wikipedia-mode', a major mode for editing articles written -;; in the markup language used by Wikipedia, the free on-line -;; encyclopedia (http://www.wikipedia.org). It is intended to work -;; with GNU Emacs 21.x, and Xemacs 21.4.x. See below for details. - -;; wikipedia mode can be found also at: -;; http://en.wikipedia.org/wiki/Wikipedia:Wikipedia-mode.el - -;;{{{ INSTALLING WIKIPEDIA-MODE - -;; Installing wikipedia-mode -;; ========================= -;; -;; Save wikipedia-mode.el in a convenient directory, preferably in -;; your `load-path'. Add the following to your `user-init-file': -;; -;; (autoload 'wikipedia-mode -;; "wikipedia-mode.el" -;; "Major mode for editing documents in Wikipedia markup." t) -;; -;; If you did not save wikipedia-mode.el in your `load-path', you must -;; use the full pathname. On MS Windows, use forward slashes (/) -;; rather than back slashes (\) to indicate the directory, e.g.: -;; -;; (autoload 'wikipedia-mode -;; "C:/Documents and Settings/USERNAME/.emacs.d/Wikipedia-mode.el" -;; "Major mode for editing documents in Wikipedia markup." t) -;; -;; If you want to associate filenames ending in ".wiki" with -;; wikipedia-mode, add the following to your init file: -;; -;; (setq auto-mode-alist -;; (cons '("\\.wiki\\'" . wikipedia-mode) auto-mode-alist)) - -;;}}} - -;;{{{ REQUIREMENTS - -;; This is not a real requirements but I highly recommend to use -;; outline-magic written by Carsten Dominik. If you don't want to use it -;; you have to comment out the relevant reference to outline magic. -;; It can be found at -;; http://www.astro.uva.nl/~dominik/Tools/outline-magic.el - - - - -;;}}} - -;;{{{ RECOMMENDATIONS INSTALLING LONGLINES-MODE - -;; Installing longlines-mode -;; ========================= -;; -;; If you are using Emacs 22 or later longlines-mode is included so -;; please skip this section! -;; -;; Wikipedia articles don't use newline characters to break paragraphs -;; into lines, so each paragraph looks like a super-long line to -;; Emacs. To let Emacs handle "soft word wrapping", you need to -;; download a third-party package, longlines-mode. -;; -;; Download longlines.el, saving into your `load-path': -;; -;; http://www.emacswiki.org/elisp/longlines.el -;; -;; Add the following to your `user-init-file': -;; -;; (autoload 'longlines-mode "longlines.el" -;; "Minor mode for editing long lines." t) -;; -;; -;; WARNING: if you insert text from one file in wikipedia-mode to -;; another file in wikipedia-mode I strongly recommend, to turn -;; longlines-mode off, before the copying! - -;;}}} - -;;{{{ RECOMMENDATIONS INSTALLING PABBREV-MODE - -;; Installing pabbrev-mode -;; ========================= -;; -;; You may find pabbrev.el useful, which can be found at -;; http://www.russet.org.uk/download/emacs/pabbrev.el - - -;;}}} - -;;{{{ Xemacs or (GNU) Emacs - -;; Xemacs or (GNU) Emacs -;; ===================== -;; Usually that is a question of taste. However almost all wikipedia -;; articles nowadays use UTF8 coding, so the question which of the -;; Macsen to use, boils down to which degree UTF8 support is -;; implemented (no mule Xemacs is ruled out). While Xemacs has the -;; better font support, the UTF8 support still is not complete and -;; hence at the time being it is sad for the maintainer (a long time -;; Xemacs user) to recommend NOT to use Xemacs, even not 21.5.x, which -;; has a much better implemented UTF8 coding engine. That might -;; however change in the foreseeable future.... -;; WARNING: at least for me in Debian testing/unstable Emacs does not -;; ship all fonts necessary for a flawless editing of UTF8 files. For -;; example you can chose Greek input, write Greek text, but then when -;; you close and open the file again, the Greek symbol are not -;; displayed but you see empty blocks. The reason seems that emacs -;; chooses for the input fonts other fonts as for the display (don't -;; ask me). However for installing the (ugly) UTF8 compatible fonts -;; from ..... solved that problem. - - -;;}}} - -;;{{{ INSTALLING EE-HELPER or MOZEX - -;; Installing the helper programs. -;; ========================= -;; Helper Programs: MozEx and EE-HELPER. There are three possibilities -;; in order to use Emacs as an external editor -;; -;; (1) Firefox add-on It's All Text: Recommended. The elisp -;; library its-all-text.el makes it easier to use this. -;; -;; PROS: Easy to intall, supported. (You need to add Emacs -;; client as the editor.) Can be used for editing other -;; text fields with Emacs too. -;; -;; (2) EE-HELPER: This is perl script which will communicate with -;; the wikipedia server. However that sometimes be slow. - -;; PROS: if the editor supports UTF8, then ee-helper will -;; pass the coding flawlessly. -;; -;; CONTRA: the problem with this script is that it directly -;; communicates with the wikipedia site and does not -;; warn you about simultaneous editing. Use it with -;; care!!! Moreover section editing is not implemented. - -;; (3) MozEx: this is a Java-script which allows to communicate -;; Mozilla (or Firefox) directly with Emacs. - -;; PROS: After finishing editing you use the wikipedia -;; software to submit your changes and not the script, -;; so you are warned about possible conflicting editing. -;; -;; CONTRA: the official version does not support UTF8, -;; however there is now a new semi official version which -;; does support UTF8. - -;; Installing It's All Text -;; ======================== -;; -;; Go to the home page and follow the instructions there: -;; -;; https://addons.mozilla.org/en-US/firefox/addon/4125 -;; -;; Then open It's All Text preferences from the Firefox Add-ons page -;; and choose emacsclient as your editor (emacsclientw.exe on -;; Windows). - -;; Installing ee-helper -;; ==================== -;; -;; Download the perl script from -;; -;; http://meta.wikimedia.org/wiki/Help:External_editors -;; -;; and follow the instructions. configure the .ee-ini file. chance in -;; your personal wikipedia-mode-map account setting the editing -;; functions: activate the `external editor' option. - -;; Installing MozEx -;; ================ -;; -;; If your web browser is Mozilla or Firefox, take a look at the MozEx -;; extension, which allows you to call Emacs for editing text boxes: -;; -;; http://mozex.mozdev.org/development.html -;; -;; See also -;; -;; http://www.emacswiki.org/cgi-bin/wiki/FireFox -;; -;; If you mostly use MozEx to edit Wikipedia articles, it might be -;; worthwhile to tell Emacs to enter wikipedia-mode whenever it is -;; called by MozEx. Just add this to your `user-init-file': -;; -;; (add-to-list 'auto-mode-alist '("mozex.\\.*" . wikipedia-mode)) - -;; Recall: you have to click on edit (either edit article or edit -;; section), then use mouse3 (or shift f10), then select -;; mozex, then edit textarea: Edit-->mouse3-->mozex-->Edit -;; Textarea. After editing, you have to _click_ on the -;; text in the browser otherwise Mozilla will ignore your -;; typing. - -;;}}} - -;;{{{ NEWS - - -;; NEWS -;; ================================== -;; (1) Font setting has changed. -;; (2) Some makeup formats have been added: italics, bold, strong -;; emphasise, links. -;; (3) outline-cycle from Carsten Dominiks outline-magic has been -;; added. -;; (4) "Draft", "send" and "reply" (for discussion pages) -;; abilities 'based' on ideas of John Wigleys remember.el: see -;; the functions wikipedia-draft-* -;; RATIONALE: This comes handy in 2 situations -;; 1. You are editing articles which various authors (this I -;; think is the usual case), you then want not to submit -;; your edit immediately but want to copy it somewhere and -;; to continue later. You can use the following functions -;; for doing that: -;; wikipedia-draft-buffer \C-c\C-b -;; wikipedia-draft-region \C-c\C-r -;; then the buffer/region will be appended to the -;; wikipedia-draft-data-file (default is -;; "~/Wiki/discussions/draft.wiki", which you can visit via -;; wikipedia-draft-view-draft) and it will be -;; surrounded by the ^L marks in order to set a page. -;; moreover on top on that a section header == will be -;; inserted, which consists of the Word Draft, a subject -;; you are asked for and a date stamp. -;; -;; Another possibility consists in using the function -;; wikipedia-draft, bound to \C-c \C-m then a new buffer -;; will opened already in wikipedia mode. You edit and then -;; either can send the content of the buffer to the -;; wikipedia-draft-data-file in the same manner as -;; described above using the function -;; wikipedia-draft-buffer (bound to \C-c\C-k) -;; -;; BACK: In order to copy/send the content of temporary -;; buffer or of a page in the wikipedia-draft-data-file -;; back in to your wikipedia file, use the function -;; `wikipedia-send-to-mozex'. You -;; will be asked to which buffer to copy your text! -;; -;; -;; 2. You want to reply in a discussion page to a specific -;; contribution, you can use either the function -;; -;; \\[wikipedia-reply-at-point-simple] bound to [(meta shift r)] -;; which inserts a newline, a hline, and the signature of -;; the author. Or can use -;; \\[wikipedia-draft-reply] bound [(meta r)] -;; which does the same as wikipedia-reply-at-point-simple -;; but in a temporary draft buffer. -;; -;; BACK: In order to copy/send the content of that buffer -;; back in to your wikipedia file, use the function -;; \\[wikipedia-send-to-mozex] bound to "\C-c\C-c". You -;; will be asked to which buffer to copy your text! If -;; you want a copy to be send to your draft file, use -;; the variable wikipedia-draft-send-archive -;; - -;;}}} - -;;{{{ NEW FUNCTIONS AND VARIABLES - - -;; VERSION 0.4 -;;================== -;; NEW FUNCTIONS -;; ------------------ -;; wikipedia-insert-enumerate -;; wikipedia-insert-itemize -;; wikipedia-insert-strong-emphasis (renamed to wikipedia-insert-bold-italic) -;; wikipedia-insert-bold -;; wikipedia-insert-italics -;; wikipedia-insert-header -;; wikipedia-insert-link-wiki -;; wikipedia-turn-on-outline-minor-mode -;; wikipedia-insert-signature -;; wikipedia-insert-hline -;; wikipedia-unfill-paragraph-or-region -;; wikipedia-start-paragraph -;; wikipedia-hardlines -;; wikipedia-outline-magic-keys -;; wikipedia-enhance-indent -;; wikipedia-yank-prefix -;; wikipedia-simple-outline-promote -;; wikipedia-simple-outline-demote -;; wikipedia-next-long-line -;; wikipedia-unfill-paragraph -;; wikipedia-rename-buffer -;; wikipedia-draft -;; wikipedia-draft-buffer-desc -;; wikipedia-draft-append-to-file -;; wikipedia-draft-page -;; wikipedia-draft-region (&optional beg end) -;; wikipedia-draft-buffer -;; wikipedia-draft-clipboard -;; wikipedia-draft-mode -;; wikipedia-draft-view-draft -;; wikipedia-mark-section -;; wikipedia-activate-region -;; wikipedia-copy-page-to-register -;; wikipedia-insert-page-to-register -;; wikipedia-send-to-mozex (target-buffer) -;; wikipedia-reply-at-point-simple -;; wikipedia-draft-reply -;; wikipedia-insert-quotation-with-signature -;; wikipedia-insert-quotation - -;; NEW VARIABLES -;;--------------------- -;; wikipedia-enumerate-with-terminate-paragraph -;; wikipedia-draft-buffer "*Wikipedia-Draft*" -;; wikipedia-draft-mode-map -;; wikipedia-draft-mode-hook -;; wikipedia-draft-register ?R -;; wikipedia-draft-filter-functions -;; wikipedia-draft-handler-functions '(wikipedia-draft-append-to-file) -;; wikipedia-draft-data-file "~/Wiki/discussions/draft.wiki" -;; wikipedia-draft-leader-text "== " -;; wikipedia-draft-page ?S -;; wikipedia-draft-send-archive -;; wikipedia-reply-with-quote - - -;; VERSION 0.5 -;;==================================== -;; NEW FUNCTIONS -;; ------------------------------------ -;; wikipedia-insert-audio -;; wikipedia-insert-image -;; wikipedia-insert-link-www (renamed to wikipedia-insert-link-external) -;; wikipedia-insert-user -;; wikipedia-mark-signature -;; wikipedia-outline-cycle -;; wikipedia-reply-at-signature -;; wikipedia-terminate-paragraph-and-indent -;; wikipedia-yank-prefix - -;; NEW VARIABLES (defvar, defcustom, defconst) -;; ---------------------- -;; wikipedia-reply-with-hline -;; wikipedia-user-simplify-signature -;; wikipedia-english-or-german -;; wikipedia-draft-reply-register ?M -;; wikipedia-mode-version - -;; VERSION 0.51 -;;==================================== -;; -;; - Now requires Emacs 22 or higher. -;; - Cleaned the code in various ways. -;; - Removed wikipedia-english-or-german -;; - Removed some private stuff -;; - Simplified some key bindings. -;; - Changed some key bindings to those used in org-mode. -;; - Added wikipedia-lang etc -;; - Added support for templates -;; - Adjusted header end after inserting heading/promoting/demoting -;; - Removed some functions that are already supported by outline.el -;; - Changed wikipedia-mode menus -;; - Added support for bullets and numbering - -;;}}} - -;;{{{ TODO - -;; Todo -;; ---- - - -;; * Implement TeX highlighting in environment -;; * Implement (La)TeX input syntax, following the ideas of CDlatex.el -;; * Make outline-cycle work correctly -;; * wikipedia-reply-at-point-simple should use regexp! - -;;}}} - - - -;;; Code: - -(require 'org) - -(defconst wikipedia-mode-version (concat "0." (substring "$Revision: 1.5 $" 13 14)) - "$Id: wikipedia-mode.el,v 1.5 2006/05/30 15:16:45 oub Exp oub $ - -Report bugs to: Uwe Brauer oub at mat.ucm.es") - -;;{{{ LANGS - -;; (defvar wikipedia-english-or-german t -;; "*Variable in order to set the english (t) or german (nil) environment.") - -(require 'tutorial) ;; for lang strings - -(defvar wikipedia-lang "English") - -(defvar wikipedia-langs-added nil) -;;(defconst xlang-strings nil) - -(unless wikipedia-langs-added - (defun add-lang-strings (lang new-strings) - (let ((lang-rec (assoc lang lang-strings))) - (if lang-rec - (dolist (str new-strings) - (nconc (cdr lang-rec) (list str))) - (setq lang-rec (cons lang new-strings)) - (add-to-list 'lang-strings lang-rec)))) - - (add-lang-strings "English" - '( - (wikip-username-prompt . "Name of user: ") - (wikip-image-mark . "[[Image:") - (wikip-media-mark . "[[Media:") - (wikip-utc . "(UTC)") - (wikip-user-mark . "[[User:") - )) - (add-lang-strings "Deutsch" - '( - (wikip-username-prompt . "Name des Benutzers: ") - (wikip-image-mark . "[[Bild:") - (wikip-media-mark . "[[Bild:") - (wikip-utc . "(CET)") - (wikip-user-mark . "[[Benutzer:") - )) - (setq wikipedia-langs-added t)) - -;;}}} - -;;{{{ TAGS - -(defvar wikipedia-simple-tags - '("b" "big" "blockquote" "br" "caption" "code" "center" "cite" "del" - "dfn" "dl" "em" "i" "ins" "kbd" "math" "nowiki" "ol" "pre" "samp" - "small" "strike" "strong" "sub" "sup" "tt" "u" "ul" "var") - "Tags that do not accept arguments.") - -(defvar wikipedia-complex-tags - '("a" "div" "font" "table" "td" "th" "tr") - "Tags that accept arguments.") - -(defvar wikipedia-url-protocols - '("ftp" "gopher" "http" "https" "mailto" "news") - "Valid protocols for URLs in Wikipedia articles.") - -;;}}} - -;;{{{ FACES - -(defvar font-wikipedia-sedate-face 'font-wikipedia-sedate-face - "Face to use for Wikipedia minor keywords.") - -(defvar font-wikipedia-italic-face 'font-wikipedia-italic-face - "Face to use for Wikipedia italics.") -(defvar font-wikipedia-bold-face 'font-wikipedia-bold-face - "Face to use for Wikipedia bolds.") -(defvar font-wikipedia-math-face 'font-wikipedia-math-face - "Face to use for Wikipedia math environments.") -(defvar font-wikipedia-string-face 'font-wikipedia-string-face - "Face to use for strings. This is set by Font Wikipedia.") -(defvar font-wikipedia-verbatim-face 'font-wikipedia-verbatim-face - "Face to use for text in verbatim macros or environments.") - - - - -(defface font-wikipedia-bold-face - (let ((font (cond ((assq :inherit custom-face-attributes) '(:inherit bold)) - ((assq :weight custom-face-attributes) '(:weight bold)) - (t '(:bold t))))) - `((((class grayscale) (background light)) - (:foreground "DimGray" ,@font)) - (((class grayscale) (background dark)) - (:foreground "LightGray" ,@font)) - (((class color) (background light)) - (:foreground "DarkOliveGreen" ,@font)) - (((class color) (background dark)) - (:foreground "OliveDrab" ,@font)) - (t (,@font)))) - "Face used to highlight text to be typeset in bold." - :group 'font-wikipedia-highlighting-faces) - -(defface font-wikipedia-italic-face - (let ((font (cond ((assq :inherit custom-face-attributes) '(:inherit italic)) - ((assq :slant custom-face-attributes) '(:slant italic)) - (t '(:italic t))))) - `((((class grayscale) (background light)) - (:foreground "DimGray" ,@font)) - (((class grayscale) (background dark)) - (:foreground "LightGray" ,@font)) - (((class color) (background light)) - (:foreground "DarkOliveGreen" ,@font)) - (((class color) (background dark)) - (:foreground "OliveDrab" ,@font)) - (t (,@font)))) - "Face used to highlight text to be typeset in italic." - :group 'font-wikipedia-highlighting-faces) - -(defface font-wikipedia-math-face - (let ((font (cond ((assq :inherit custom-face-attributes) - '(:inherit underline)) - (t '(:underline t))))) - `((((class grayscale) (background light)) - (:foreground "DimGray" ,@font)) - (((class grayscale) (background dark)) - (:foreground "LightGray" ,@font)) - (((class color) (background light)) - (:foreground "SaddleBrown")) - (((class color) (background dark)) - (:foreground "burlywood")) - (t (,@font)))) - "Face used to highlight math." - :group 'font-wikipedia-highlighting-faces) - -(defface font-wikipedia-sedate-face - '((((class grayscale) (background light)) (:foreground "DimGray")) - (((class grayscale) (background dark)) (:foreground "LightGray")) - (((class color) (background light)) (:foreground "DimGray")) - (((class color) (background dark)) (:foreground "LightGray")) -;;;(t (:underline t)) - ) - "Face used to highlight sedate stuff." - :group 'font-wikipedia-highlighting-faces) - -(defface font-wikipedia-string-face - (let ((font (cond ((assq :inherit custom-face-attributes) '(:inherit italic)) - ((assq :slant custom-face-attributes) '(:slant italic)) - (t '(:italic t))))) - `((((type tty) (class color)) - (:foreground "green")) - (((class grayscale) (background light)) - (:foreground "DimGray" ,@font)) - (((class grayscale) (background dark)) - (:foreground "LightGray" ,@font)) - (((class color) (background light)) - (:foreground "RosyBrown")) - (((class color) (background dark)) - (:foreground "LightSalmon")) - (t (,@font)))) - "Face used to highlight strings." - :group 'font-wikipedia-highlighting-faces) - -(defface font-wikipedia-warning-face - (let ((font (cond ((assq :inherit custom-face-attributes) '(:inherit bold)) - ((assq :weight custom-face-attributes) '(:weight bold)) - (t '(:bold t))))) - `((((class grayscale)(background light)) - (:foreground "DimGray" ,@font)) - (((class grayscale)(background dark)) - (:foreground "LightGray" ,@font)) - (((class color)(background light)) - (:foreground "red" ,@font)) - (((class color)(background dark)) - (:foreground "red" ,@font)) - (t (,@font)))) - "Face for important keywords." - :group 'font-wikipedia-highlighting-faces) - -(defface font-wikipedia-verbatim-face - (let ((font (if (and (assq :inherit custom-face-attributes) - (if (featurep 'xemacs) - (find-face 'fixed-pitch) - (facep 'fixed-pitch))) - '(:inherit fixed-pitch) - '(:family "courier")))) - `((((class grayscale) (background light)) - (:foreground "DimGray" ,@font)) - (((class grayscale) (background dark)) - (:foreground "LightGray" ,@font)) - (((class color) (background light)) - (:foreground "SaddleBrown" ,@font)) - (((class color) (background dark)) - (:foreground "burlywood" ,@font)) - (t (,@font)))) - "Face used to highlight TeX verbatim environments." - :group 'font-wikipedia-highlighting-faces) - - -(defvar wikipedia-font-lock-keywords - (list - - ;; Apostrophe-style text markup - (cons "''''\\([^']\\|[^']'\\)*?\\(''''\\|\n\n\\)" - 'font-lock-builtin-face) - (cons "'''\\([^']\\|[^']'\\)*?\\('''\\|\n\n\\)" - ; 'font-lock-builtin-face) - 'font-wikipedia-bold-face) - (cons "''\\([^']\\|[^']'\\)*?\\(''\\|\n\n\\)" - 'font-wikipedia-italic-face) - - ;; Headers and dividers - (list "^\\(==+\\)\\(.*\\)\\(\\1\\)" - '(1 font-lock-builtin-face) - ; '(2 wikipedia-header-face) - '(2 font-wikipedia-sedate-face) - '(3 font-lock-builtin-face)) - (cons "^-----*" 'font-lock-builtin-face) - - ;; Bare URLs and ISBNs - (cons (concat "\\(^\\| \\)" (regexp-opt wikipedia-url-protocols t) - "://[-A-Za-z0-9._\/~%+&#?!=()@]+") - 'font-lock-variable-name-face) - (cons "\\(^\\| \\)ISBN [-0-9A-Z]+" 'font-lock-variable-name-face) - - ;; Colon indentation, lists, definitions, and tables - (cons "^\\(:+\\|[*#]+\\||[}-]?\\|{|\\)" 'font-lock-builtin-face) - - (list "^\\(;\\)\\([^:\n]*\\)\\(:?\\)" - '(1 font-lock-builtin-face) - '(2 font-lock-keyword-face) - '(3 font-lock-builtin-face)) - - - - ;; Tags and comments - - (list (concat "\\(\\)") - '(1 font-lock-builtin-face t t) - '(2 font-lock-function-name-face t t) - '(3 font-lock-builtin-face t t)) - (list (concat "\\(<]\\|\"[^\"]*\"\\|'[^']*'\\)*\\)?\\)\\(>\\)") - '(1 font-lock-builtin-face t t) - '(2 font-lock-function-name-face t t) - '(3 font-lock-keyword-face t t) - '(4 font-lock-builtin-face t t)) - (cons (concat "") - '(0 font-lock-comment-face t t)) - - - - ;; External Links - - (list (concat "\\(\\[\\)\\(\\(?:" - (regexp-opt wikipedia-url-protocols) - "\\)://[-A-Za-z0-9._\/~%-+&#?!=()@]+\\)\\(\\(?: [^]\n]*\\)?\\)\\(\\]\\)") - '(1 font-lock-builtin-face t t) - '(2 font-lock-variable-name-face t t) - '(3 font-lock-keyword-face t t) - '(4 font-lock-builtin-face t t)) - - - - - ;; Wiki links - '("\\(\\[\\[\\)\\([^]\n|]*\\)\\(|?\\)\\([^]\n]*\\)\\(\\]\\]\\)" - (1 font-lock-builtin-face t t) - (2 font-lock-variable-name-face t t) - (3 font-lock-builtin-face t t) - (4 font-lock-keyword-face t t) - (5 font-lock-builtin-face t t)) - - ;; Wiki variables - '("\\({{\\)\\(.+?\\)\\(}}\\)" - (1 font-lock-builtin-face t t) - (2 font-lock-variable-name-face t t) - (3 font-lock-builtin-face t t)) - - ;; Character entity references - (cons "&#?[a-zA-Z0-9]+;" '(0 font-lock-type-face t t)) - - ;; Preformatted text - (cons "^ .*$" '(0 font-lock-constant-face t t)) - - ;; Math environment (uniform highlight only, no TeX markup) - (list "\\(\\(\n?.\\)*\\)" - '(1 font-lock-keyword-face t t)))) - - ; ) - -;;}}} - -;;{{{ Menu and header stuff - -(defvar wikipedia-imenu-generic-expression - ;;(list '(nil "^==+ *\\(.*[^\n=]\\)==+" 1)) - (list '(nil "^=+ *\\(.*[^\n=]\\)=+" 1)) - "Imenu expression for `wikipedia-mode'. See `imenu-generic-expression'.") - -;; (defun wikipedia-next-header () -;; "Move point to the end of the next section header." -;; (interactive) -;; (let ((oldpoint (point))) -;; (end-of-line) -;; (if (re-search-forward "\\(^==+\\).*\\1" (point-max) t) -;; (beginning-of-line) -;; (goto-char oldpoint) -;; (message "No section headers after point.")))) - -;; (defun wikipedia-prev-header () -;; "Move point to the start of the previous section header." -;; (interactive) -;; (unless (re-search-backward "\\(^==+\\).*\\1" (point-min) t) -;; (message "No section headers before point."))) - -;;}}} - -;;{{{ Paragraph terminate and filling stuff (Chong) - -(defun wikipedia-terminate-paragraph () ;Version:1.58 - "New list item or paragraph. -In a list, start a new list item. In a paragraph, start a new -paragraph. - -If the current paragraph is colon indented, the new paragraph -will be indented in the same way." - (interactive) - (let (indent-chars) - (save-excursion - (beginning-of-line) - (while (cond ((looking-at "^$") nil) - ((looking-at "^\\(\\(?: \\|:+\\|[#*]+\\) *\\)") - (setq indent-chars (match-string 1)) nil) - ((eq (point) (point-min)) nil) - ((progn (forward-line -1) t))) - t)) - (newline) (if (not indent-chars) (newline) - (insert indent-chars)))) - -(defun wikipedia-terminate-paragraph-and-indent () - "New list item or paragraph, ignore *,#. -In a list, start a new list item. In a paragraph, start a new -paragraph but *,# will be ignored. - -If the current paragraph is colon ; indented, the new paragraph -will be indented in the same way." - (interactive) - (let (indent-chars) - (save-excursion - (beginning-of-line) - (while (cond ((looking-at "^$") nil) - ((looking-at "^\\(\\(?: \\|:+\\) *\\)") - (setq indent-chars (match-string 1)) nil) - ((eq (point) (point-min)) nil) - ((progn (forward-line -1) t))) - t)) - (newline) (if (not indent-chars) (newline) - (insert indent-chars)))) - - -(defun wikipedia-link-fill-nobreak-p () - "Function for `fill-nobreak-predicate'. -When filling, don't break the line for preformatted (fixed-width) -text or inside a Wiki link." - (save-excursion - (let ((pos (point))) - (or (eq (char-after (line-beginning-position)) ? ) - (if (re-search-backward "\\[\\[" (line-beginning-position) t) - ;; Break if the link is really really long. - ;; You often get this with captioned images. - (null (or (> (- pos (point)) fill-column) - (re-search-forward "\\]\\]" pos t)))))))) - -(defun wikipedia-fill-article () - "Fill the entire article." - (interactive) - (save-excursion - (fill-region (point-min) (point-max)))) - -(defun wikipedia-unfill-article () - "Unfill article. -Undo filling, deleting stand-alone newlines (newlines that do not -end paragraphs, list entries, etc.)" - (interactive) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward ".\\(\n\\)\\([^# *;:|!\n]\\|----\\)" nil t) - (replace-match " " nil nil nil 1))) - (message "Stand-alone newlines deleted")) - - -(defun wikipedia-unfill-paragraph-with-newline (&optional justifyp) - (interactive "P") - (let ((before (point))) ;Version:1.3 - (save-excursion - (forward-paragraph) - (or (bolp) (newline 1)) - (let ((end (point)) - (start (progn (backward-paragraph) (point)))) - (goto-char before) - (while (re-search-forward ".\\(\n\\)\\([^# *;:|!\n]\\|----\\)" nil t) - (replace-match " " nil nil nil 1)))))) - ; (message "Stand-alone newlines IN PARAGRAPH deleted")) - -(defun wikipedia-unfill-region () - "Unfill region. -Undo filling, deleting stand-alone newlines (newlines that do not -end paragraphs, list entries, etc.) see also the function -\\[wikipedia-unfill-paragraph-or-region] and the even simpler -function \\[wikipedia-unfill-paragraph-simple]." - (interactive) - (save-excursion - (narrow-to-region (point) (mark)) - (goto-char (point-min)) - (while (re-search-forward ".\\(\n\\)\\([^# *;:|!\n]\\|----\\)" nil t) - (replace-match " " nil nil nil 1))) - (message "Stand-alone newlines deleted") - (widen)) - -;;}}} - -;;{{{ Main function wikipedia mode (using define-derived mode) - -;;{{{ KEY SETTING -;; (defvar wikipedia-outline-map -;; (let ((map (make-sparse-keymap))) -;; (define-key map [(down)] 'outline-next-visible-heading) -;; (define-key map [(up)] 'outline-previous-visible-heading) -;; (define-key map "n" 'outline-next-visible-heading) -;; (define-key map "p" 'outline-previous-visible-heading) -;; (define-key map "f" 'outline-forward-same-level) -;; (define-key map "b" 'outline-backward-same-level) -;; (define-key map "u" 'outline-up-heading) -;; (define-key map "/" 'org-occur) -;; (define-key map "\C-c\C-n" 'outline-next-visible-heading) -;; (define-key map "\C-c\C-p" 'outline-previous-visible-heading) -;; (define-key map "\C-c\C-f" 'outline-forward-same-level) -;; (define-key map "\C-c\C-b" 'outline-backward-same-level) -;; (define-key map "\C-c\C-u" 'outline-up-heading) -;; map)) - - -(defvar wikipedia-mode-map - (let ((map (make-sparse-keymap))) - ;;(define-key map "\M-n" 'wikipedia-next-header) - (define-key map "\C-c\C-n" 'wikipedia-next-long-line) - ;; (define-key map "\M-p" 'wikipedia-prev-header) - ;; (define-key map [(meta down)] 'wikipedia-next-header) - ;; (define-key map [(meta up)] 'wikipedia-prev-header) - (define-key map "\C-j" 'wikipedia-terminate-paragraph) - ;;(define-key map "RET" 'wikipedia-newline) - (define-key map [(shift return)] 'wikipedia-newline) - - ;;(define-key mm [separator-format] '("--")) -;; (define-key mm [outline] -;; '("Toggle Outline Mode..." . outline-minor-mode)) - ;;(define-key mm [separator-edit-structure] '("--")) - - - ;; Use some mnemonic - ;;(define-key map "\C-c\C-q" 'wikipedia-unfill-article) - (define-key map "\C-c\M-qua" 'wikipedia-unfill-article) - ;;(define-key map "\C-c\M-q" 'wikipedia-fill-article) - (define-key map "\C-c\M-qfa" 'wikipedia-fill-article) - ;;(define-key map "\M-u" 'wikipedia-unfill-paragraph-or-region) - (define-key map "\C-c\M-qur" 'wikipedia-unfill-paragraph-or-region) - ;;(define-key map "\C-c\C-u" 'wikipedia-unfill-paragraph-simple) - (define-key map "\C-c\M-qup" 'wikipedia-unfill-paragraph-simple) - - (define-key map "\C-c\C-fs" 'wikipedia-insert-bold-italic) - (define-key map "\C-c\C-fb" 'wikipedia-insert-bold) ;Version:1.3 - (define-key map "\C-c\C-fi" 'wikipedia-insert-italics) - (define-key map "\C-c\C-fn" 'wikipedia-insert-nowiki) - - (define-key map "\C-c\C-ts" 'wikipedia-insert-signature) - (define-key map "\C-c\C-tt" 'wikipedia-insert-template) - (define-key map "\C-c\C-tu" 'wikipedia-insert-user) - ;;(define-key map "\C-c\C-fq" 'wikipedia-insert-quotation) - ;;(define-key map "\C-c\C-fh" 'wikipedia-insert-header) - (define-key map "\C-c\C-fr" 'wikipedia-insert-hline) ;Version:1.30 - (define-key map "\C-c\C-li" 'wikipedia-insert-link-wiki) - (define-key map "\C-c\C-le" 'wikipedia-insert-link-external) - - ;; Breaks key binding conventions: - ;;(define-key map [(meta f7)] 'wikipedia-draft) - ;;(define-key map [(meta f8)] 'wikipedia-reply-at-point-simple) - ;;(define-key map [(meta f9)] 'wikipedia-draft-view-draft) - - (define-key map "\C-c\C-r" 'wikipedia-reply-at-point-simple) - - ;; Breaks key binding conventions: - ;;(define-key map "\C-cr" 'wikipedia-draft-region) - - (define-key map [(meta r)] 'wikipedia-draft-reply) - (define-key map "\C-c\C-m" 'wikipedia-draft) ;Version:1.25 - (define-key map "\C-c\C-b" 'wikipedia-draft-region) - (define-key map "\C-c\C-d" 'wikipedia-draft-buffer) - (define-key map "\C-c\C-k" 'wikipedia-draft-buffer) - (define-key map "\C-c\C-p" 'wikipedia-draft-copy-page-to-register) ;Version:1.39 - ;; (define-key map "\C-c\C-c" 'wikipedia-draft-send-to-mozex) - (define-key map "\C-c\C-s" 'wikipedia-draft-yank-page-to-register) - - (define-key map [(control meta prior)] 'wikipedia-enhance-indent) - (define-key map [(control meta next)] 'wikipedia-yank-prefix) - (define-key map [(meta return)] 'wikipedia-insert-enumerate) - (define-key map [(meta control return)] 'wikipedia-insert-enumerate-nonewline) - ;; private setting - ;; This is bound to C-j by default: - ;;(define-key map [(shift return)] 'newline-and-indent) ;Version:1.24 - (define-key map "\C-\\" 'wikipedia-insert-itemize) ;Version:1.28 - (define-key map [(control return)] 'wikipedia-insert-itemize) - - ;; The next three breaks Emacs key binding conventions, are they really necessary? - ;;(define-key map "\C-ca" 'auto-capitalize-mode) - ;;(define-key map "\C-ci" 'set-input-method) - ;;(define-key map "\C-ct" 'toggle-input-method) ;Version:1.23 - - (define-key map [(shift tab)] 'org-shifttab) - (define-key map [backtab] 'org-shifttab) - (define-key map [tab] 'org-cycle) - - map)) - -(defvar wikipedia-org-menu nil) -;; From org.el: -(easy-menu-define wikipedia-org-menu wikipedia-mode-map "Wikipedia menu" - '("Wikipedia" - ("Show/Hide" - ["Cycle Visibility" org-cycle (or (bobp) (outline-on-heading-p))] - ["Cycle Global Visibility" org-shifttab] - ["Sparse Tree" org-occur t] - ["Reveal Context" org-reveal t] - ["Show All" show-all t] - "--" - ["Subtree to indirect buffer" org-tree-to-indirect-buffer t]) - "--" - ["New Heading" outline-insert-heading t] - ("Navigate Headings" - ["Up" outline-up-heading t] - ["Next" outline-next-visible-heading t] - ["Previous" outline-previous-visible-heading t] - ["Next Same Level" outline-forward-same-level t] - ["Previous Same Level" outline-backward-same-level t] - "--" - ["Jump" org-goto t]) - ("Edit Structure" - ["Move Subtree Up" outline-move-subtree-up] - ["Move Subtree Down" outline-move-subtree-down] - "--" - ["Copy Subtree" org-copy-special] - ["Cut Subtree" org-cut-special] - ["Paste Subtree" org-paste-special] - "--" - ["Promote Heading" wikipedia-simple-outline-promote] - ["Promote Subtree" outline-promote] - ["Demote Heading" wikipedia-simple-outline-demote] - ["Demote Subtree" outline-demote]) - ("Filling" - ["Unfill article" wikipedia-unfill-article] - ["Fill article" wikipedia-fill-article]) - "--" - ("Format" - ["Horizontal line" wikipedia-insert-hline] - "--" - ["Indent Paragraph" wikipedia-indent-paragraph] - ["Deindent Paragraph" wikipedia-deindent-paragraph] - "--" - ["Insert No Wiki Formatting" wikipedia-insert-nowiki] - ["Bold-Italic" wikipedia-insert-bold-italic] - ["Italic" wikipedia-insert-italics] - ["Bold" wikipedia-insert-bold] - "--" - ("Insert" - ("Templates" - ["Site Specific Template" wikipedia-insert-template] - ["Signature" wikipedia-insert-signature] - ) - ("Links" - ["External Link" wikipedia-insert-link-external] - ["Internal Wiki Link" wikipedia-insert-link-wiki] - ) - ("Bullets and numbering" - ["Bullet" wikipedia-insert-bullet] - ["Numbering" wikipedia-insert-numbering] - ) - )) - )) -;;}}} - - -;;;###autoload -;;{{{ Main function wikipedia-mode - -(define-derived-mode wikipedia-mode outline-mode "Wikipedia" - "Major mode for editing wikimedia style wikis. -Major mode for editing articles written in the markup language -used by Wikipedia, the free on-line -encyclopedia (see URL `http://www.wikipedia.org'). - -There are several ways to use wikipedia-mode: - -- You can simply cut and paste articles between Emacs and your - web browser's text box. -- If you are using Firefox you can use the It's All Text add-on - for Firefox. -- You can use MozEx, a Mozilla/Firefox web browser extension that - allows you to call Emacs from a text - box (see URL `http://mozex.mozdev.org/'). -- Another way is to use the PERL script ee-helper, which allows - you to up and download wiki texts. - -Wikipedia articles are usually unfilled: newline characters are not -used for breaking paragraphs into lines. Unfortunately, Emacs does not -handle word wrapping yet. As a workaround, wikipedia-mode turns on -longlines-mode automatically. In case something goes wrong, the -following commands may come in handy: - -\\[wikipedia-fill-article] fills the buffer. -\\[wikipedia-unfill-article] unfills the buffer. -Be warned that function can be dead slow, better use wikipedia-unfill-paragraph-or-region. -\\[wikipedia-unfill-paragraph-or-region] unfills the paragraph -\\[wikipedia-unfill-paragraph-simple] doehe same but simpler. - - - -The following commands put in markup structures. - -\\[wikipedia-insert-bold-italic] bold+italic -\\[wikipedia-insert-bold] bold text -\\[wikipedia-insert-italics] italics -\\[wikipedia-insert-nowiki] no wiki markup -\\[wikipedia-insert-link-wiki] inserts a link - -The following commands are also defined: -\\[wikipedia-insert-user] inserts user name -\\[wikipedia-insert-signature] inserts ~~~~ -\\[wikipedia-insert-enumerate] inserts enumerate type structures -\\[wikipedia-insert-itemize] inserts itemize type structures -\\[wikipedia-insert-hline] inserts a hline - -The draft functionality -\\[wikipedia-draft] -\\[wikipedia-draft-region] -\\[wikipedia-draft-view-draft] -\\[wikipedia-draft-page] -\\[wikipedia-draft-buffer] - -Replying and sending functionality -\\[wikipedia-reply-at-point-simple] -\\[wikipedia-draft-reply] - - -The register functionality -\\[wikipedia-copy-page-to-register] -\\[defun wikipedia-insert-page-to-register] - - -Some simple editing commands. -\\[wikipedia-enhance-indent] -\\[wikipedia-yank-prefix] -\\[wikipedia-unfill-paragraph-or-region] - - - -\\[wikipedia-terminate-paragraph] starts a new list item or paragraph in a context-aware manner." - - (set (make-local-variable 'adaptive-fill-regexp) "[ ]*") - (set (make-local-variable 'comment-start-skip) "\\(?:\\)?") - (set (make-local-variable 'comment-start) "") - (set (make-local-variable 'paragraph-start) - "\\*\\| \\|#\\|;\\|:\\||\\|!\\|$") - (set (make-local-variable 'sentence-end-double-space) nil) - (set (make-local-variable 'font-lock-multiline) t) - (set (make-local-variable 'font-lock-defaults) - '(wikipedia-font-lock-keywords t nil nil nil)) - (set (make-local-variable 'fill-nobreak-predicate) - 'wikipedia-link-fill-nobreak-p) - (set (make-local-variable 'auto-fill-inhibit-regexp) "^[ *#:|;]") - - ;; Support for outline-minor-mode. No key conflicts, so we'll use - ;; the normal outline-mode prefix. - ;;(set (make-local-variable 'outline-regexp) "==+") - (set (make-local-variable 'outline-regexp) "=+") - ;;(set (make-local-variable 'outline-heading-end-regexp) "=+") ;; For betting fixing - ;; (set (make-local-variable 'outline-regexp) "=+") - ;; (set (make-local-variable 'outline-regexp) ":") - - ;; Fix-me: Why change this?? Should not the user do this globally instead? - ;;(set (make-local-variable 'outline-minor-mode-prefix) "\C-c\C-o") - - ;; Fix-mde For longlines-mode??: - (set (make-local-variable 'auto-fill-inhibit-regexp) "^[ *#:|;]") - - ;: From org.el: - ;; Get rid of Outline menus, they are not needed - ;; Need to do this here because define-derived-mode sets up - ;; the keymap so late. Still, it is a waste to call this each time - ;; we switch another buffer into org-mode. - (if (featurep 'xemacs) - (when (boundp 'outline-mode-menu-heading) - ;; Assume this is Greg's port, it used easymenu - (easy-menu-remove outline-mode-menu-heading) - (easy-menu-remove outline-mode-menu-show) - (easy-menu-remove outline-mode-menu-hide)) - (define-key wikipedia-mode-map [menu-bar headings] 'undefined) - (define-key wikipedia-mode-map [menu-bar hide] 'undefined) - (define-key wikipedia-mode-map [menu-bar show] 'undefined)) - - (easy-menu-add wikipedia-org-menu) - - ;; Turn on the Imenu automatically. -;; (when menu-bar-mode -;; (set (make-local-variable 'imenu-generic-expression) -;; wikipedia-imenu-generic-expression) -;; (imenu-add-to-menubar "TOC")) - - (modify-syntax-entry ?< "(>" wikipedia-mode-syntax-table) - (modify-syntax-entry ?> ")<" wikipedia-mode-syntax-table) - - ;;}}} - - ;;; This is the wrong way to do it, see add-hook: - ;; (make-local-variable 'change-major-mode-hook) - - ;; Check if our version of outline.el has the new header hooks: - (require 'outline) - (when (boundp 'outline-demote-hook) - (add-hook 'outline-demote-hook 'wikipedia-outline-insert-heading-f nil t) - (add-hook 'outline-promote-hook 'wikipedia-outline-insert-heading-f nil t) - (add-hook 'outline-insert-heading-hook 'wikipedia-outline-insert-heading-f nil t) - ) - ) - -(defun wikipedia-outline-insert-heading-f () - (insert " ") - (backward-char) - (wikipedia-adjust-header-end)) - -;; wikipedia-mode ends here -;;}}} - -;;{{{ longlines-mode - -(defun wikipedia-turn-on-longlines () ;Version:1.58 - "Turn on longlines-mode if it is defined." - (if (functionp 'longlines-mode) - (longlines-mode 1))) - -(defcustom wikipedia-use-longlines-mode nil - "Turn on longlines-mode' if non-nil. -Unfortunately there are some bugs in `longlines-mode' so turning -it on is an option currently." - :type 'boolean - :set (lambda (sym val) - (set-default sym val) - (if val - (add-hook 'wikipedia-mode-hook 'wikipedia-turn-on-longlines) - (remove-hook 'wikipedia-mode-hook 'wikipedia-turn-on-longlines))) - :group 'wikipedia) - -;;}}} - -;; New formating stuff for inserting simple formating structures such - -;;{{{ Insert makeup and templates - -(defvar wikipedia-enumerate-with-terminate-paragraph nil - "*Before insert enumerate/itemize do \\[wikipedia-terminate-paragraph].") - -(defun wikipedia-region-active-p () - (or (and (boundp 'zmacs-region-active-p) zmacs-region-active-p) - (and (boundp 'transient-mark-mode) transient-mark-mode mark-active))) - -(defun wikipedia-insert-around-region (before after) - (if (wikipedia-region-active-p) - (save-excursion - (let ((beginning (region-beginning)) - (end (region-end)) - (check (= (string-to-char before) ?'))) - ;; When we are inserting ' do not mix them: - (if (or (not check) - (not (memq ?' - (append (buffer-substring-no-properties - beginning end) nil)))) - (progn - (goto-char end) - (insert after) - (goto-char beginning) - (insert before)) - (message "Sorry, the region already contains the char '.") - ))) - (insert before) - (insert after) - (backward-char (length after)))) - -(defun wikipedia-insert-enumerate () - "Insert enumerated items. -Format depends on `wikipedia-enumerate-with-terminate-paragraph'. -Note however that `wikipedia-terminate-paragraph' does not work -very well will longlines-mode." - (interactive) - (if wikipedia-enumerate-with-terminate-paragraph - (progn - (wikipedia-terminate-paragraph) - (insert "#")) - (newline nil) - (insert ":#"))) - - - - - -(defun wikipedia-insert-itemize () - "Insert not enumerated items. -Format depends on `wikipedia-enumerate-with-terminate-paragraph'. -Note however that the `wikipedia-terminate-paragraph' does not -work very well will longlines-mode." - (interactive) - (if wikipedia-enumerate-with-terminate-paragraph - (progn - (wikipedia-terminate-paragraph) - (insert "*")) - (newline nil) - (insert ":*"))) - - -(defun wikipedia-insert-bold-italic () - "Insert strong emphasis. -Uses four apostrophes (e.g. ''''FOO''''.) When mark is active, surrounds region." - (interactive) - (wikipedia-insert-around-region "''''" "''''")) - - -(defun wikipedia-insert-bold () - "Insert bold. -Uses three apostrophes (e.g. '''FOO'''.) When mark is active, -surrounds region." - (interactive) - (wikipedia-insert-around-region "'''" "'''")) - - -(defun wikipedia-insert-italics () - "Insert italics. -Uses two apostrophes (e.g. ''FOO''.) When mark is active, -surrounds region." - (interactive) - (wikipedia-insert-around-region "''" "''")) - -(defun wikipedia-indent-paragraph () - (interactive) - (backward-paragraph) - ) -(defun wikipedia-deindent-paragraph () - (interactive) - ) -;;}}} -;;{{{ Templates - -;; http://en.wikipedia.org/wiki/Template:Quotation -;; http://en.wikipedia.org/wiki/Help:A_quick_guide_to_templates -(defvar wikipedia-site nil) -(make-variable-buffer-local 'wikipedia-site) -(defvar wikipedia-site-history nil) - -(defcustom wikipedia-templates nil - "Templates for different wikis." - :type '(repeat (list - (string :tag "Wiki site") - (repeat - (list - (string :tag "Template name") - (string :tag "Template code"))))) - :group 'wikipedia) - -(defun wikipedia-insert-template () - "Prompts for a template and inserts it." - (interactive) - (let* ((t-name-code (wikipedia-get-template)) - (t-name (car t-name-code)) - ;; Ask how to insert: - (choices '("Evaluate when page is created" - "Substitute when saving this source page" - "Show template when page is fetched" - "Insert template itself")) - (hist (copy-sequence choices)) - (default (car choices)) - (choice (completing-read - "How do you want to insert the template? " - choices - nil - t - default - (cons 'hist 1)))) -;; (lwarn 't :warning "t-name=%s" t-name) -;; (lwarn 't :warning "choice=%s" choice) -;; (lwarn 't :warning "0=%s" (nth 0 choices)) -;; (lwarn 't :warning "1=%s" (nth 1 choices)) -;; (lwarn 't :warning "2=%s" (nth 2 choices)) - (cond - ((string= choice (nth 0 choices)) - ;;(lwarn 't :warning "evaluate=>%s" (concat "{{" t-name "}}")) - (insert "{{" t-name "}}") - ) - ((string= choice (nth 1 choices)) - ;;(lwarn 't :warning "subst=>%s" (concat "{{subst:" t-name "}}")) - (insert "{{subst:" t-name "}}") - ) - ((string= choice (nth 2 choices)) - ;;(lwarn 't :warning "raw=>%s" (concat "{{msgnw:" t-name "}}")) - (insert "{{msgnw:" t-name "}}") - ) - ((string= choice (nth 3 choices)) - (insert (cdr t-name-code)) - )))) - -(defun wikipedia-get-template () - (let* ((sites (mapcar (lambda (t-sites) - (car t-sites)) - wikipedia-templates)) - (hist (copy-sequence sites)) - (default-site wikipedia-site) - (histpos (if (not default-site) - 1 - (catch 'pos - (let ((n 0)) - (dolist (elt sites) - (setq n (1+ n)) - (when (string= default-site elt) - (throw 'pos n))))))) - (site (if (= 1 (length sites)) - (car sites) - (completing-read "Wiki site: " - sites - nil - t - default-site - (cons 'hist histpos)))) - (s-t (assoc site wikipedia-templates)) - (templates (car (cdr s-t))) - (t-names (mapcar (lambda (t-for-site) - ;;(lwarn 't :warning "t-for-site=%s" t-for-site) - (car t-for-site)) - templates)) - (t-name (wikipedia-get-template-name site templates)) - (code (car (cdr (assoc t-name templates)))) - ) - (setq wikipedia-site site) -;; (lwarn 't :warning "site=%s" site) -;; (lwarn 't :warning "s-t=%s" s-t) -;; (lwarn 't :warning "templates=%s" templates) -;; (lwarn 't :warning "t-names=%s" t-names) -;; (lwarn 't :warning "t-name=%s" t-name) -;; (lwarn 't :warning "code=%s" code) - (cons t-name code))) - -(defun wikipedia-get-template-name (site templates) - "" - (let* ((prompt "Template: ") - (minibuffer-local-must-match-map (copy-keymap minibuffer-local-must-match-map)) - (hist (mapcar (lambda (elt) - (car elt)) - templates)) - (desc-fun (lambda () - (let ((s (minibuffer-contents-no-properties))) - (when (< 0 (length s)) - (wikipedia-describe-template s site templates))))) - (up-fun (lambda () (interactive) - (previous-history-element 1) - (funcall desc-fun))) - (down-fun (lambda () (interactive) - (next-history-element 1) - (funcall desc-fun))) - (default nil) - (histpos (if (not default) 1)) - (default-name (if default - default - (car (nth (1- histpos) templates)))) - (tpl-name nil) - ) - (define-key minibuffer-local-must-match-map [up] up-fun) - (define-key minibuffer-local-must-match-map [down] down-fun) - (save-window-excursion - (wikipedia-describe-template default-name site templates) - (setq tpl-name (completing-read prompt - templates - nil ; predicate - t ; require-match - default-name ;; initial-input - (cons 'hist histpos) ;; hist - ))) - (when (= 0 (length tpl-name)) - (error "No template name given")) - (let ((tpl (assoc tpl-name templates))) - (unless tpl - (error "There is no template named %s for site %s" tpl-name site)) - ;;(lwarn 't :warning "tpl=%s" tpl) - ) - tpl-name)) - -(defun wikipedia-describe-template (name site templates) - (let ((tpl-rec (assoc name templates))) - (with-output-to-temp-buffer (help-buffer) - (with-current-buffer (help-buffer) - (help-setup-xref (list #'wikipedia-describe-template name site templates) (interactive-p)) - (let ((inhibit-read-only t) - start end - here - (tpl (assoc name templates))) - ;;(insert (format "%S\n\n" family)) - (insert (format "%s - a wiki template for site %s" name site)) - (insert "\n\n") - (setq start (point)) - (insert (cadr tpl)) - (setq end (point)) - (with-no-warnings (print-help-return-message)) - ;;(put-text-property start end 'face 'highlight) - (goto-char start) - (setq here (point)) - (while (re-search-forward "\\(?:\\|\\|.*\\)" end t) - (put-text-property here (match-beginning 0) 'face 'highlight) - (setq here (point)) - ) - (put-text-property (point) end 'face 'highlight) - ))))) - -(defun wikipedia-insert-nowiki () - "Mark the region as 'nowiki'. -When mark is active, surrounds region." - (interactive) - (wikipedia-insert-around-region "" "")) - - - -(defun wikipedia-insert-user () - "Prompt for a user name, insert [[User:foo]]" - (interactive) - (let ((user (read-string (get-lang-string wikipedia-lang 'wikip-username-prompt))) - (user-mark (get-lang-string wikipedia-lang 'wikip-user-mark))) - (insert (concat user-mark user "|" user "]]")))) - -(defun wikipedia-insert-signature () ;Version:1.4 - "Insert \"~~~~\". -This will be shown as your user identity when showing the page." - (interactive) - (insert "~~~~")) - - - -(defun wikipedia-insert-reply-prefix () ;Version:1.60 - "Quotation box of the form {{Quotation}}{{}}. When mark is active, -surrounds region." - (interactive) - (beginning-of-line 1) - (search-forward "[[") - (backward-char 2) - (mark-sexp 1) - (copy-to-register wikipedia-draft-reply-register (region-beginning) (region-end) nil) - (end-of-line 1) - (wikipedia-terminate-paragraph) - (beginning-of-line 1) - (kill-line nil) - (insert "----") - (newline 1) - (yank) - (insert ":'''Re: ") - (insert-register wikipedia-draft-reply-register 1) - (insert "''' ") - (end-of-line 1)) - -;; (defun wikipedia-insert-header () -;; "Insert subheader via == (e.g. == FOO ==.)" -;; (interactive) -;; (unless (bolp) -;; (beginning-of-line)) -;; (insert "== ") -;; (end-of-line) -;; (insert " ==") -;; (backward-char 3)) - -(defvar wikipedia-link-wiki-history nil) - -(defun wikipedia-insert-link-wiki () - "Insert link via [[ (e.g. [[FOO]].) When mark is active, surround region." - (interactive) - (if (wikipedia-region-active-p) - (wikipedia-insert-around-region "[[" "]]") - (let* ((link (read-string "Wiki link: " nil wikipedia-link-wiki-history)) - (name (read-string "Name (optional): "))) - (insert "[[" link) - (when (< 0 (length name)) - (insert "|" name)) - (insert "]]")))) - -(defun wikipedia-insert-link-external () - "Insert link via [[ (e.g. [http://FOO].) When mark is active, surround region." - (interactive) - (if (wikipedia-region-active-p) - (wikipedia-insert-around-region "[" "]") - (let* ((choices '("Plain" "Footnote" "Named")) - (hist (copy-sequence choices)) - (style (completing-read - "Link style: " ; prompt - choices ; collection - nil ; predicate - t ; requite-match - "Plain" ; initial-input - (cons 'hist 1) ; hist - )) - (url (read-string "URL: ")) - name) - ;;(lwarn 't :warning "style=%s" style) - (cond - ((string= style "Plain") - (insert url)) - ((string= style "Footnote") - (insert "[" url "]")) - ((string= style "Named") - (let ((name (read-string "Link name: "))) - (insert "[" url) - (when (< 0 (length name)) - (insert " " name)) - (insert "]"))) - (t - (error "Internal error, bad style=%s" style)))))) - - -(defun wikipedia-insert-image () - "Insert link image, e.g. [[Image:FOO]]. -When mark is active, surround region." - (interactive) - (let ((img-mark (get-lang-string wikipedia-lang 'wikip-image-mark))) - (wikipedia-insert-around-region img-mark "]]"))) - -(defun wikipedia-insert-audio () - "Insert audio link, e.g. [[Media:FOO]]. -When mark is active, surround region." - (interactive) - (let ((aud-mark (get-lang-string wikipedia-lang 'wikip-audio-mark))) - (wikipedia-insert-around-region aud-mark "]]"))) - - - - -;; (defun wikipedia-turn-on-outline-minor-mode () -;; "Turn on outline minor mode." -;; ;;(interactive) -;; (outline-minor-mode nil)) - - - - - - -(defun wikipedia-insert-hline () ;Version:1.29 - "Insert \"----\" " - (interactive) - (end-of-line) - (insert hard-newline "----" hard-newline)) - -(defun wikipedia-newline (&optional arg) - "Insert newline and check for bullets and numbering." - (interactive "*P") - (let ((here (point)) - (line-type nil)) - (beginning-of-line) - (when (eq ?* (char-after)) - (setq line-type 'bullet)) - (when (eq ?# (char-after)) - (setq line-type 'numbered)) - (if (and line-type - (looking-at ".\\s-*$")) - (progn - (delete-region (match-beginning 0) (match-end 0)) - (newline arg)) - (goto-char here) - (newline arg) - (cond - ((eq line-type 'bullet) - (insert "* ")) - ((eq line-type 'numbered) - (insert "# ")))))) - -;;}}} - -;;{{{ bullets and numbering - -;; Fix-me: Seems like this and my newline stuff already was there ... ;-) -(defun wikipedia-insert-bullet () - "Insert a bullet." - (interactive) - (end-of-line) - (newline) - (insert "* ")) - -(defun wikipedia-insert-numbering () - "Insert numbering." - (interactive) - (end-of-line) - (newline) - (insert "# ")) - -;;}}} - -;;{{{ filling and longline - -(defun wikipedia-unfill-paragraph-or-region () ;Version:1.7 - "Unfill region. -This function does NOT explicitly search for \"soft newlines\" as -does wikipedia-unfill-region." - (interactive) - (when use-hard-newlines - ;; (backward-paragraph 1) - ;; (next-line 1) - (beginning-of-line 1) - (set-fill-prefix) - ;; Fix-me: The use of make-local-variable here looks incorrect, - ;; use lexical binding instead: -;; (set (make-local-variable 'use-hard-newlines) nil) -;; (set (make-local-variable 'sentence-end-double-space) t) -;; (set (make-local-variable 'paragraph-start) "[   \n ]") - (let ((use-hard-newlines nil) - (sentence-end-double-space t) - (paragraph-start nil)) - (when (featurep 'xemacs) - (let ((fill-column (point-max))) - (fill-paragraph-or-region nil))) - (unless (featurep 'xemacs) - (let ((fill-column (point-max))) - (fill-paragraph nil))))) -;; (set (make-local-variable 'use-hard-newlines) t) -;; (set (make-local-variable 'sentence-end-double-space) nil) -;; (set (make-local-variable 'paragraph-start) "\\*\\| \\|#\\|;\\|:\\||\\|!\\|$")) - (unless use-hard-newlines - ;; (backward-paragraph 1) - ;; (next-line 1) - (beginning-of-line 1) - (set-fill-prefix) -;; (set (make-local-variable 'sentence-end-double-space) t) -;; (set (make-local-variable 'paragraph-start) - (let ((sentence-end-double-space t) - (paragraph-start nil)) - (when (featurep 'xemacs) - (let ((fill-column (point-max))) - (fill-paragraph-or-region nil))) - (unless (featurep 'xemacs) - (let ((fill-column (point-max))) - (fill-paragraph nil)))) -;; (set (make-local-variable 'sentence-end-double-space) nil) -;; (set (make-local-variable 'paragraph-start) "\\*\\| \\|#\\|;\\|:\\||\\|!\\|$") - )) - - - - -;; (defun wikipedia-start-paragraph () -;; (interactive) -;; (set (make-local-variable 'paragraph-start) -;; "\\*\\| \\|#\\|;\\|:\\||\\|!\\|$")) - -;; Use function use-hard-newlines instead: -;; (defun wikipedia-hardlines () -;; "Set use-hard-newlines to NIL." -;; (interactive) -;; (setq use-hard-newlines nil)) - -;; from emacs wiki -(defun wikipedia-next-long-line () - "Move forward to the next long line with column-width greater - than `fill-column'. - - TODO: When function reaches end of buffer, save-excursion to - starting point. - Generalise to make `previous-long-line'." - (interactive) - ;; global-variable: fill-column - (if (= (forward-line) 0) - (let ((line-length - (save-excursion - (end-of-line) - (current-column)))) - (if (<= line-length fill-column) - (wikipedia-next-long-line) - (message "Long line found"))) - ;; Stop, end of buffer reached. - (error "Long line not found"))) - - -(defun wikipedia-unfill-paragraph-simple () - "A very simple function for unfilling a paragraph." - (interactive) - (if (functionp 'filladapt-mode) - (filladapt-mode nil)) - (let ((fill-column (point-max))) - (fill-paragraph nil) - (if (functionp 'filladapt-mode) - (filladapt-mode nil)))) - -;;}}} - -;;{{{ outline and outline-magic stuff - -;;(add-hook 'wikipedia-mode-hook 'wikipedia-turn-on-outline-minor-mode) -;;(remove-hook 'wikipedia-mode-hook 'wikipedia-turn-on-outline-minor-mode) - -(defun wikipedia-outline-cycle () - (interactive) - (if (functionp 'outline-cycle) - (outline-cycle))) - -;; Fix-me: Unfortunately outline maybe does not take care of the -;; heading endings when promoting and demoting (I have submitted a bug -;; report for this and hooks will be added). To work around this we -;; defadvice outline-demote/promote: - -(require 'outline) -(unless (boundp 'outline-demote-hook) - - (defadvice outline-demote (after wikipedia-outline-demote-advice - (&optional which)) - "Adjust heading after demote." - (unless which - (wikipedia-adjust-header-end))) - - (defadvice outline-promote (after wikipedia-outline-promote-advice - (&optional which)) - "Adjust heading after promote." - (unless which - (wikipedia-adjust-header-end))) - - (defadvice outline-insert-heading (after wikipedia-outline-insert-heading-advice - ()) - "Adjust heading after insert new heading." - (wikipedia-adjust-header-end)) - - ) - -(defun wikipedia-adjust-header-end () - (when (eq major-mode 'wikipedia-mode) - (let ((here (point)) - (end-pos (line-end-position)) - bgn-mark - bgn-len - end-mark - end-len - ) - (beginning-of-line) - (when (looking-at outline-regexp) - (setq bgn-mark (match-string-no-properties 0)) - (setq bgn-len (length bgn-mark)) - (end-of-line) - (if (looking-back outline-regexp nil t) - (when (progn - (setq end-mark (match-string-no-properties 0)) - (setq end-len (length end-mark)) - (/= end-len bgn-len)) - (replace-match bgn-mark)) - (insert bgn-mark))) - ;;(lwarn 't :warning "bgn-len=%s, end-len=%s" bgn-len end-len) - (goto-char here)))) - - - -;;(add-hook 'outline-minor-mode-hook 'wikipedia-outline-magic-keys) -(add-hook 'wikipedia-mode-hook 'wikipedia-outline-magic-keys) - -(defun wikipedia-outline-magic-keys () - (interactive) - (unless (featurep 'xemacs) - (local-set-key [(shift iso-lefttab)] 'wikipedia-outline-cycle)) - (local-set-key [iso-left-tab] 'wikipedia-outline-cycle) - ;;(local-set-key [(meta left)] 'outline-promote) - (local-set-key [(meta shift left)] 'outline-promote) - ;;(local-set-key [(meta right)] 'outline-demote) - (local-set-key [(meta shift right)] 'outline-demote) - ;;(local-set-key [(control left)] 'wikipedia-simple-outline-promote) - (local-set-key [(meta left)] 'wikipedia-simple-outline-promote) - ;;(local-set-key [(control right)] 'wikipedia-simple-outline-demote) - (local-set-key [(meta right)] 'wikipedia-simple-outline-demote) - (local-set-key [(shift return)] 'newline-and-indent) - ;;(local-set-key [(control up)] 'outline-move-subtree-up) - (local-set-key [(meta shift up)] 'outline-move-subtree-up) - ;;(local-set-key [(control down)] 'outline-move-subtree-down)) - (local-set-key [(meta shift down)] 'outline-move-subtree-down)) - -(defun wikipedia-enhance-indent () ;Version:1.26 - (interactive) - (string-rectangle (region-beginning) (region-end) ":")) - -(defun wikipedia-yank-prefix () ;Version:1.26 - (interactive) - (string-rectangle (region-beginning) (region-end) ":")) - -;; modification for outline-magic - -(defun wikipedia-simple-outline-promote () - "Function simple deletes \"=\" and the end and the beginning of line, -does not promote the whole tree!" - (interactive) - (save-excursion - (progn - (beginning-of-line 1) - (search-forward "=") - (delete-char 1 nil) - (end-of-line 1) - (search-backward "=") - (delete-char 1 nil)))) - -(defun wikipedia-simple-outline-demote () - "Function simple adds \"=\" and the end and the beginning of line, -does not promote the whole tree!" - (interactive) - (save-excursion - (progn - (beginning-of-line 1) - (search-forward "=") - (insert "=") - (end-of-line 1) - (search-backward "=") - (insert "=")))) - - -(defun wikipedia-rename-buffer () ;Version:1.5 - "Make sure that the option UNIQUE is used." - (interactive) - (rename-buffer (read-string "Name of new buffer (unique): " ) 1)) - -;;}}} - -;;{{{ wikipedia drafts functionality: `stolen' from remember.el: - -(defgroup wikipedia-draft nil - "A mode to wikipedia-draft information." - :group 'data) - -;;; User Variables: - -(defcustom wikipedia-draft-mode-hook nil - "*Functions run upon entering wikipedia-draft-mode." - :type 'hook - :group 'wikipedia-draft) - -(defcustom wikipedia-draft-register ?R - "The register in which the window configuration is stored." - :type 'character - :group 'wikipedia-draft) - -(defcustom wikipedia-draft-filter-functions nil - "*Functions run to filter wikipedia-draft data. -All functions are run in the wikipedia-draft buffer." - :type 'hook - :group 'wikipedia-draft) - -(defcustom wikipedia-draft-handler-functions '(wikipedia-draft-append-to-file) - "*Functions run to process wikipedia-draft data. -Each function is called with the current buffer narrowed to what the -user wants wikipedia-drafted. -If any function returns non-nil, the data is assumed to have been -recorded somewhere by that function. " - :type 'hook - :group 'wikipedia-draft) - -(defcustom wikipedia-draft-data-file "~/Wiki/discussions/draft.wiki" - "*The file in which to store the wikipedia drafts." - :type 'file - :group 'wikipedia-draft) - -(defcustom wikipedia-draft-reply-register ?M - "The register in which the window configuration is stored." - :type 'character - :group 'wikipedia-draft) - -(defcustom wikipedia-draft-page ?S ;Version:1.37 - "The register in which the a page of the wiki draft file is stored." - :type 'character - :group 'wikipedia-draft) - - -(defcustom wikipedia-draft-leader-text "== " - "*The text used to begin each wikipedia-draft item." - :type 'string - :group 'wikipedia-draft) - - -;;; Internal Variables: - -(defvar wikipedia-draft-buffer "*Wikipedia-Draft*" - "The name of the wikipedia-draft (temporary) data entry buffer.") - -;;; User Functions: - -;;;###autoload -(defun wikipedia-draft () - "Open a temporary buffer in wikipedia mode for editing an - wikipedia draft, which an arbitrary piece of data. After - finishing the editing either use \\[wikipedia-draft-buffer] to - send the data into the wikipedia-draft-data-file, or send the - buffer using `wikipedia-draft-send-to-mozex' and insert it later - into a wikipedia article." - (interactive) - (window-configuration-to-register wikipedia-draft-register) - (let ((buf (get-buffer-create wikipedia-draft-buffer))) - (switch-to-buffer-other-window buf) - (wikipedia-mode) - (message " C-c C-k sends to draft file, C-c C-c sends to org buffer."))) - - - - - -(defsubst wikipedia-draft-time-to-seconds (time) - "Convert TIME to a floating point number." - (+ (* (car time) 65536.0) - (cadr time) - (/ (or (car (cdr (cdr time))) 0) 1000000.0))) - -(defsubst wikipedia-draft-mail-date (&optional rfc822-p) - "Return a simple date. Nothing fancy." - (if rfc822-p - (format-time-string "%a, %e %b %Y %T %z" (current-time)) - (format-time-string "%c" (current-time)))) - -(defun wikipedia-draft-buffer-desc () - "Using the first line of the current buffer, create a short description." - (buffer-substring (point-min) - (save-excursion - (goto-char (point-min)) - (end-of-line) - (if (> (- (point) (point-min)) 60) - (goto-char (+ (point-min) 60))) - (point)))) - - -;; Wikipedia-Drafting to plain files: - - -(defun wikipedia-draft-append-to-file () - "Add a header together with a subject to the text and add it to the -draft file. It might be better if longlines-mode is off." - (let ((text (buffer-string)) - (desc (wikipedia-draft-buffer-desc))) - (with-temp-buffer - (insert "\n\n") - (insert wikipedia-draft-leader-text) - (insert "Draft: ") ;Version:1.39 - (insert (read-string "Enter Subject: ")) - (insert " ") - (insert (current-time-string)) - (insert " ") - (insert wikipedia-draft-leader-text) - (insert "\n\n") ;Version:1.27 - (insert " ") - (insert "\n\n") - (insert text) - (insert "\n") - (insert " ") - (insert "\n") - (if (not (bolp)) - (insert "\n\n")) - (if (find-buffer-visiting wikipedia-draft-data-file) - (let ((wikipedia-draft-text (buffer-string))) - (set-buffer (get-file-buffer wikipedia-draft-data-file)) - (save-excursion - (goto-char (point-max)) - (insert "\n") - (insert wikipedia-draft-text) - (insert "\n") - (save-buffer))) - (append-to-file (point-min) (point-max) wikipedia-draft-data-file))))) - - -(setq wikipedia-draft-handler-functions 'wikipedia-draft-append-to-file) - - -(custom-add-option 'wikipedia-draft-handler-functions 'wikipedia-draft-append-to-file) - -;;;###autoload -(defun wikipedia-draft-page () ;Version:1.32 - (interactive) - (mark-page) - (copy-region-as-kill (region-beginning) (region-end)) - (wikipedia-draft) - (yank nil)) - - -(defun wikipedia-draft-region (&optional beg end) - "Wikipedia-Draft the data from BEG to END. -If called from within the wikipedia-draft buffer, BEG and END are ignored, -and the entire buffer will be wikipedia-drafted. If called from any other -buffer, that region, plus any context information specific to that -region, will be wikipedia-drafted." - (interactive) - (let ((b (or beg (min (point) (or (mark) (point-min))))) - (e (or end (max (point) (or (mark) (point-max)))))) - (save-restriction - (narrow-to-region b e) - (run-hook-with-args-until-success 'wikipedia-draft-handler-functions) - (when (equal wikipedia-draft-buffer (buffer-name)) - (kill-buffer (current-buffer)) - (jump-to-register wikipedia-draft-register))))) - -;; -;;;###autoload -(defun wikipedia-draft-buffer () - "Wikipedia-draft-buffer sends the contents of the current (temporary) -buffer to the wikipedia-draft-buffer, see the variable -wikipedia-draft-data-file." - (interactive) - (wikipedia-draft-region (point-min) (point-max))) - -(defun wikipedia-draft-clipboard () - "Wikipedia-Draft the contents of the current clipboard. -Most useful for wikipedia-drafting things from Netscape or other X Windows -application." - (interactive) - (with-temp-buffer - (insert (x-get-clipboard)) - (run-hook-with-args-until-success 'wikipedia-draft-handler-functions))) - -;;;###autoload - - -;;; Internal Functions: -(defvar wikipedia-draft-send-archive t ;Version:1.56 - "*Archive the reply.") - -(defvar wikipedia-draft-mode-map - (let ((m (make-sparse-keymap))) - (define-key m "\C-c\C-k" 'wikipedia-draft-buffer) - (define-key m "\C-c\C-d" 'wikipedia-draft-buffer) - m)) - -(defun wikipedia-draft-mode () - "Major mode for output from \\[wikipedia-draft]. -\\ This buffer is used to collect data that -you want wikipedia-draft. Just hit \\[wikipedia-draft-region] when -you're done entering, and it will go ahead and file the data for -latter retrieval, and possible indexing. -\\{wikipedia-draft-mode-map}" - (interactive) - (kill-all-local-variables) - (indented-text-mode) - (use-local-map wikipedia-draft-mode-map) - (setq major-mode 'wikipedia-draft-mode - mode-name "Wikipedia-Draft") - (run-hooks 'wikipedia-draft-mode-hook)) - - -(defun wikipedia-draft-view-draft () - (interactive) - "Simple shortcut to visit the file, which contains the wikipedia drafts." - (find-file wikipedia-draft-data-file)) - -;;}}} - -;;{{{ functions for marking regions - -(defun wikipedia-mark-section () ;Version:1.36 - "Set mark at end of current logical section, and point at top." - (interactive) - (re-search-forward (concat "== " "[a-z,A-z \t]*" - " ==")) - (re-search-backward "^") - (set-mark (point)) - (re-search-backward (concat "== " "[a-z,A-z \t]*" - " ")) - (wikipedia-activate-region)) - -(defun wikipedia-mark-signature () ;Version:1.36 - "Set mark at end of current logical section, and point at top." - (interactive) - (re-search-forward "]]") ;;[[ ]] - (re-search-backward "^") - (set-mark (point)) - (re-search-backward "[[") - (wikipedia-activate-region)) - -(when (featurep 'xemacs) - (fset 'wikipedia-activate-region (symbol-function 'zmacs-activate-region))) - -(unless (featurep 'xemacs) - (defun wikipedia-activate-region () - nil)) - -;;}}} - -;;{{{ `reply' and `send' functions - -(defun wikipedia-draft-copy-page-to-register () ;Version:1.47 - "Copy a page via the wikipedia-draft-register." - (interactive) - (save-excursion - (narrow-to-page nil) - (copy-to-register wikipedia-draft-page (point-min) (point-max) nil) - (message "draft page copied to wikipedia register wikipedia-draft-page.") - (widen))) - - ;aux function -(defun wikipedia-draft-yank-page-to-register () ;Version:1.50 - "Insert a page via the wikipedia-draft-register." - (interactive) - (insert-register wikipedia-draft-page nil)) - - - -(defun wikipedia-draft-send-to-mozex (target-buffer) ;Version:1.56 - "Copy the current page from the wikipedia draft file to - TARGET-BUFFER, this buffer is named something like mozex.textarea. -Check the variable wikipedia-draft-send-archive. If it is t, then -additionally the text will be archived in the draft.wiki file. Check -longlines-mode, it might be better if it is set off." - (interactive "bTarget buffer: ") - (let ((src-buf (current-buffer))) - (wikipedia-draft-copy-page-to-register) - (switch-to-buffer target-buffer) - (end-of-line 1) - (newline 1) - (wikipedia-draft-yank-page-to-register) - (message "The page has been sent (copied) to the mozex file!") - (switch-to-buffer "*Wikipedia-Draft*") - (when wikipedia-draft-send-archive ;Version:1.56 - (let ((text (buffer-string)) ;Version:1.59 - (desc (wikipedia-draft-buffer-desc))) - (with-temp-buffer - (insert "\n\n") - (insert wikipedia-draft-leader-text) - (insert-register wikipedia-draft-reply-register 1) - (insert " ") - (insert (current-time-string)) - (insert " ") - (insert wikipedia-draft-leader-text) - (insert "\n\n") - (insert " ") - (insert "\n\n") - (insert text) - (insert "\n") - (insert " ") - (insert "\n") - (if (not (bolp)) - (insert "\n\n")) - (if (find-buffer-visiting wikipedia-draft-data-file) - (let ((wikipedia-draft-text (buffer-string))) - (set-buffer (get-file-buffer wikipedia-draft-data-file)) - (save-excursion - (goto-char (point-max)) - (insert "\n") - (insert wikipedia-draft-text) - (insert "\n") - (save-buffer))) - (append-to-file (point-min) (point-max) wikipedia-draft-data-file))))) - (when (equal wikipedia-draft-buffer (buffer-name)) - (kill-buffer (current-buffer))) - (switch-to-buffer target-buffer))) - - -;;Apr_22_2006 -(defvar wikipedia-reply-with-hline nil - "*Whether to use a hline as a header seperator in the reply.") - -(defvar wikipedia-reply-with-quote nil ;Version:1.60 - "*Whether to use a quotation tempalate or not.") - -(defvar wikipedia-user-simplify-signature t - "*Simple varible in order to threat complicated signatures of users, which uses -fonts and other makeup.") - -(defun wikipedia-reply-at-signature () ;Version:1.40 - "Very simple function to add the reply prefix to the signature, -sorrounded by the boldface makeup. You have to set the point BEFORE -the signature, then the functions inserts the following -:'''Re: [[User:foo]]'''." - (interactive) - (beginning-of-line 1) - (search-forward "[[") - (mark-word 3) - (yank) - (end-of-line 1) - (wikipedia-terminate-paragraph) - (insert ":'''Re: ") - (insert "[[") - (yank) - (insert "]]") - (insert "'''")) - - - - -(defun wikipedia-draft-reply () ;Version:1.62 - "Open a temporary buffer in wikipedia mode for editing an wikipedia -draft, with an arbitrary piece of data. After finishing the editing -|]]:either use \"C-c C-k\" \\[wikipedia-draft-buffer] to send the data into -the wikipedia-draft-data-file, or send the buffer \"C-c\C-c\", -\\[wikipedia-draft-send-to-mozex] to the current wikipedia article via -mozex. Check the varibale wikipedia-draft-send-archive." - (interactive) - (wikipedia-reply-at-point-simple) - (beginning-of-line 1) - (kill-line nil) - (save-excursion - (window-configuration-to-register wikipedia-draft-register) - (let ((buf (get-buffer-create wikipedia-draft-buffer))) - (switch-to-buffer-other-window buf) - (wikipedia-mode) - (if (functionp 'pabbrev-mode) - (pabbrev-mode)) - (when (not wikipedia-reply-with-quote) - (when wikipedia-reply-with-hline - (insert "----") - (newline 1)) - (yank) - (end-of-line 1)) - (when wikipedia-reply-with-quote - (insert "{{Quotation|") - (yank) - (insert "'''Re: ") - (insert-register wikipedia-draft-reply-register 1) - (insert "''' |~~~~}}") - (backward-char 7)) - (message " C-c C-k sends to draft, C-c C-c sends to org buffer.")))) - -(defun wikipedia-reply-at-point-simple () ;Version:1.65 - "Reply to posts in discussion forums. -You have to put the region around the signature, then the -functions inserts the following -:'''Re: [[User:foo]]'''." - (interactive) - (beginning-of-line 1) - (search-forward (get-lang-string wikipedia-lang 'wikip-utc)) - (search-backward (get-lang-string wikipedia-lang 'wikip-user-mark)) - (when (not wikipedia-user-simplify-signature) - (mark-word 3)) - (when wikipedia-user-simplify-signature - (mark-word 2)) - (copy-to-register wikipedia-draft-reply-register (region-beginning) (region-end) nil) - (end-of-line 1) - (wikipedia-terminate-paragraph-and-indent) - (insert ":'''Re: ") - (insert-register wikipedia-draft-reply-register 1) - (when wikipedia-user-simplify-signature - (insert "|]]''' ")) - (when (not wikipedia-user-simplify-signature) - (insert "]]''' "))) - -;;}}} - -;;{{{ Optional private stuff: - -;; (defun wikipedia-insert-quotation-with-signature () ;Version:1.60 -;; "Insert quotation with signature. -;; When mark is active, surrounds region." -;; (interactive) -;; (wikipedia-insert-around-region "{{Quotation|" "}}{{~~~~}}")) - -;; (defun wikipedia-insert-quotation () ;Version:1.60 -;; "Insert quotation box. -;; When mark is active, surrounds region." -;; (interactive) -;; ;; Fix-me: This uses a template, is that really always available??? -;; (wikipedia-insert-around-region "{{Quotation|" "}}")) - -;; (define-key wikipedia-mode-map "\C-c\C-fv" 'wikipedia-insert-bible-verse-template) -;; -;; (defun wikipedia-insert-bible-verse-template () -;; "Insert a template for the quotation of bible verses." -;; (interactive) -;; (insert "({{niv|") -;; (let ((name (read-string "Name: "))) -;; (insert (concat name "|")) -;; (let ((verse (read-string "Verse: "))) -;; (insert (concat verse "|" name " " verse "}})"))))) - -;;}}} - -(provide 'wikipedia-mode) -;;; wikipedia-mode.el ends here. - - -- cgit v1.2.3-54-g00ecf