summaryrefslogtreecommitdiffstats
path: root/emacs.d/nxhtml/related/wikipedia-mode.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs.d/nxhtml/related/wikipedia-mode.el')
-rw-r--r--emacs.d/nxhtml/related/wikipedia-mode.el2296
1 files changed, 0 insertions, 2296 deletions
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 <cyd at stupidchicken com>
-;; Maintainer: Uwe Brauer <oub at mat.ucm.es>
-;; 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 <math> 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 "\\(</?\\)"
- (regexp-opt wikipedia-simple-tags t) "\\(>\\)")
- '(1 font-lock-builtin-face t t)
- '(2 font-lock-function-name-face t t)
- '(3 font-lock-builtin-face t t))
- (list (concat "\\(</?\\)"
- (regexp-opt wikipedia-complex-tags t)
- "\\(\\(?: \\(?:[^\"'/><]\\|\"[^\"]*\"\\|'[^']*'\\)*\\)?\\)\\(>\\)")
- '(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 "<math>\\(\\(\n?.\\)*\\)</math>"
- '(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-end-skip) " *--\\([ \n]*>\\)?")
- (set (make-local-variable 'comment-start) "<!-- ")
- (set (make-local-variable 'comment-end) " -->")
- (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 "\\(?:<onlyinclude>\\|</onlyinclude>\\|<noinclude>.*</noinclude>\\)" 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 "<nowiki>" "</nowiki>"))
-
-
-
-(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].
-\\<wikipedia-draft-mode-map> 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.
-
-