summaryrefslogtreecommitdiffstats
path: root/emacs.d/elisp/muse/muse-regexps.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs.d/elisp/muse/muse-regexps.el')
-rw-r--r--emacs.d/elisp/muse/muse-regexps.el270
1 files changed, 270 insertions, 0 deletions
diff --git a/emacs.d/elisp/muse/muse-regexps.el b/emacs.d/elisp/muse/muse-regexps.el
new file mode 100644
index 0000000..ad3ce3f
--- /dev/null
+++ b/emacs.d/elisp/muse/muse-regexps.el
@@ -0,0 +1,270 @@
+;;; muse-regexps.el --- define regexps used by Muse
+
+;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+;; Free Software Foundation, Inc.
+
+;; This file is part of Emacs Muse. It is not part of GNU Emacs.
+
+;; Emacs Muse 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 3, or (at your
+;; option) any later version.
+
+;; Emacs Muse 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 Emacs Muse; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This file is the part of the Muse project that describes regexps
+;; that are used throughout the project.
+
+;;; Contributors:
+
+;;; Code:
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Muse Regular Expressions
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgroup muse-regexp nil
+ "Regular expressions used in publishing and syntax highlighting."
+ :group 'muse)
+
+;;; Deal with the lack of character classes for regexps in Emacs21 and
+;;; XEmacs
+
+(defcustom muse-regexp-use-character-classes 'undecided
+ "Indicate whether to use extended character classes like [:space:].
+If 'undecided, Muse will use them if your emacs is known to support them.
+
+Emacs 22 and Emacs 21.3.50 are known to support them. XEmacs
+does not support them.
+
+Emacs 21.2 or higher support them, but with enough annoying edge
+cases that the sanest default is to leave them disabled."
+ :type '(choice (const :tag "Yes" t)
+ (const :tag "No" nil)
+ (const :tag "Let Muse decide" undecided))
+ :group 'muse-regexp)
+
+(defvar muse-regexp-emacs-revision
+ (save-match-data
+ (and (string-match "^[0-9]+\\.[0-9]+\\.\\([0-9]+\\)"
+ emacs-version)
+ (match-string 1 emacs-version)
+ (string-to-number (match-string 1 emacs-version))))
+ "The revision number of this version of Emacs.")
+
+(defun muse-extreg-usable-p ()
+ "Return non-nil if extended character classes can be used,
+nil otherwise.
+
+This is used when deciding the initial values of the muse-regexp
+options."
+ (cond
+ ((eq muse-regexp-use-character-classes t)
+ t)
+ ((eq muse-regexp-use-character-classes nil)
+ nil)
+ ((featurep 'xemacs) nil) ; unusable on XEmacs
+ ((> emacs-major-version 21) t) ; usable if > 21
+ ((< emacs-major-version 21) nil)
+ ((< emacs-minor-version 3) nil)
+ ;; don't use if version is of format 21.x
+ ((null muse-regexp-emacs-revision) nil)
+ ;; only trust 21.3.50 or higher
+ ((>= muse-regexp-emacs-revision 50) t)
+ (t nil)))
+
+(defcustom muse-regexp-blank
+ (if (muse-extreg-usable-p)
+ "[:blank:]"
+ " \t")
+ "Regexp to use in place of \"[:blank:]\".
+This should be something that matches spaces and tabs.
+
+It is like a regexp, but should be embeddable inside brackets.
+Muse will detect the appropriate value correctly most of
+the time."
+ :type 'string
+ :options '("[:blank:]" " \t")
+ :group 'muse-regexp)
+
+(defcustom muse-regexp-alnum
+ (if (muse-extreg-usable-p)
+ "[:alnum:]"
+ "A-Za-z0-9")
+ "Regexp to use in place of \"[:alnum:]\".
+This should be something that matches all letters and numbers.
+
+It is like a regexp, but should be embeddable inside brackets.
+muse will detect the appropriate value correctly most of
+the time."
+ :type 'string
+ :options '("[:alnum:]" "A-Za-z0-9")
+ :group 'muse-regexp)
+
+(defcustom muse-regexp-lower
+ (if (muse-extreg-usable-p)
+ "[:lower:]"
+ "a-z")
+ "Regexp to use in place of \"[:lower:]\".
+This should match all lowercase characters.
+
+It is like a regexp, but should be embeddable inside brackets.
+muse will detect the appropriate value correctly most of
+the time."
+ :type 'string
+ :options '("[:lower:]" "a-z")
+ :group 'muse-regexp)
+
+(defcustom muse-regexp-upper
+ (if (muse-extreg-usable-p)
+ "[:upper:]"
+ "A-Z")
+ "Regexp to use in place of \"[:upper:]\".
+This should match all uppercase characters.
+
+It is like a regexp, but should be embeddable inside brackets.
+muse will detect the appropriate value correctly most of
+the time."
+ :type 'string
+ :options '("[:upper:]" "A-Z")
+ :group 'muse-regexp)
+
+;;; Regexps used to define Muse publishing syntax
+
+(defcustom muse-list-item-regexp
+ (concat "^%s\\(\\([^\n" muse-regexp-blank "].*?\\)?::"
+ "\\(?:[" muse-regexp-blank "]+\\|$\\)"
+ "\\|[" muse-regexp-blank "]-[" muse-regexp-blank "]*"
+ "\\|[" muse-regexp-blank "][0-9]+\\.[" muse-regexp-blank "]*\\)")
+ "Regexp used to match the beginning of a list item.
+The '%s' will be replaced with a whitespace regexp when publishing."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-ol-item-regexp (concat "\\`[" muse-regexp-blank "]+[0-9]+\\.")
+ "Regexp used to match an ordered list item."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-ul-item-regexp (concat "\\`[" muse-regexp-blank "]+-")
+ "Regexp used to match an unordered list item."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-dl-term-regexp
+ (concat "[" muse-regexp-blank "]*\\(.+?\\)["
+ muse-regexp-blank "]+::\\(?:[" muse-regexp-blank "]+\\|$\\)")
+ "Regexp used to match a definition list term.
+The first match string must contain the term."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-dl-entry-regexp (concat "\\`[" muse-regexp-blank "]*::")
+ "Regexp used to match a definition list entry."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-table-field-regexp
+ (concat "[" muse-regexp-blank "]+\\(|+\\)\\(?:["
+ muse-regexp-blank "]\\|$\\)")
+ "Regexp used to match table separators when publishing."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-table-line-regexp (concat ".*" muse-table-field-regexp ".*")
+ "Regexp used to match a table line when publishing."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-table-hline-regexp (concat "[" muse-regexp-blank
+ "]*|[-+]+|[" muse-regexp-blank
+ "]*")
+ "Regexp used to match a horizontal separator line in a table."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-table-el-border-regexp (concat "[" muse-regexp-blank "]*"
+ "\\+\\(-*\\+\\)+"
+ "[" muse-regexp-blank "]*")
+ "Regexp used to match the beginning and end of a table.el-style table."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-table-el-line-regexp (concat "[" muse-regexp-blank "]*"
+ "|\\(.*|\\)*"
+ "[" muse-regexp-blank "]*")
+ "Regexp used to match a table line of a table.el-style table."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-tag-regexp
+ (concat "<\\([^/" muse-regexp-blank "\n][^" muse-regexp-blank
+ "</>\n]*\\)\\(\\s-+[^<>]+[^</>\n]\\)?\\(/\\)?>")
+ "A regexp used to find XML-style tags within a buffer when publishing.
+Group 1 should be the tag name, group 2 the properties, and group
+3 the optional immediate ending slash."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-explicit-link-regexp
+ "\\[\\[\\([^][\n]+\\)\\]\\(?:\\[\\([^][\n]+\\)\\]\\)?\\]"
+ "Regexp used to match [[target][description]] links.
+Paren group 1 must match the URL, and paren group 2 the description."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-implicit-link-regexp
+ (concat "\\([^" muse-regexp-blank "\n]+\\)")
+ "Regexp used to match an implicit link.
+An implicit link is the largest block of text to be checked for
+URLs and bare WikiNames by the `muse-link-at-point' function.
+Paren group 1 is the text to be checked.
+
+URLs are checked by default. To get WikiNames, load
+muse-wiki.el.
+
+This is only used when you are using muse-mode.el, but not
+muse-colors.el.
+
+If the above applies, and you want to match things with spaces in
+them, you will have to modify this."
+ :type 'regexp
+ :group 'muse-regexp)
+
+;;; Regexps used to determine file types
+
+(defcustom muse-file-regexp
+ (concat "\\`[~/]\\|\\?\\|/\\'\\|\\."
+ "\\(html?\\|pdf\\|mp3\\|el\\|zip\\|txt\\|tar\\)"
+ "\\(\\.\\(gz\\|bz2\\)\\)?\\'")
+ "A link matching this regexp will be regarded as a link to a file."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(defcustom muse-image-regexp
+ "\\.\\(eps\\|gif\\|jp\\(e?g\\)\\|p\\(bm\\|ng\\)\\|tiff\\|x\\([bp]m\\)\\)\\'"
+ "A link matching this regexp will be published inline as an image.
+For example:
+
+ [[./wife.jpg][A picture of my wife]]
+
+If you omit the description, the alt tag of the resulting HTML
+buffer will be the name of the file."
+ :type 'regexp
+ :group 'muse-regexp)
+
+(provide 'muse-regexps)
+
+;;; muse-regexps.el ends here