aboutsummaryrefslogtreecommitdiffhomepage
path: root/contrib
diff options
context:
space:
mode:
authorGravatar David Aspinall <da@inf.ed.ac.uk>2010-08-27 11:24:39 +0000
committerGravatar David Aspinall <da@inf.ed.ac.uk>2010-08-27 11:24:39 +0000
commit352c1ac074c78fb861b594a630601f0e80f7b828 (patch)
tree14b915be94676d72957162698e07f619d6615727 /contrib
parent60e44a3b28fe711d28320ab8b6699c1545790bd7 (diff)
Renamed file contrib/mmm/mmm-mason.el, formerly mmm/mmm-mason.el
Diffstat (limited to 'contrib')
-rw-r--r--contrib/mmm/mmm-mason.el176
1 files changed, 176 insertions, 0 deletions
diff --git a/contrib/mmm/mmm-mason.el b/contrib/mmm/mmm-mason.el
new file mode 100644
index 00000000..62f0642a
--- /dev/null
+++ b/contrib/mmm/mmm-mason.el
@@ -0,0 +1,176 @@
+;;; mmm-mason.el --- MMM submode class for Mason components
+
+;; Copyright (C) 2000 by Michael Abraham Shulman
+
+;; Author: Michael Abraham Shulman <viritrilbia@users.sourceforge.net>
+;; Version: $Id$
+
+;;{{{ GPL
+
+;; 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, 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; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;}}}
+
+;;; Commentary:
+
+;; This file contains the definition of an MMM Mode submode class for
+;; editing Mason components. See the file README.Mason for more
+;; details.
+
+;;; Code:
+
+(require 'mmm-compat)
+(require 'mmm-vars)
+(require 'mmm-auto)
+
+;;{{{ Perl Tags
+
+(defvar mmm-mason-perl-tags
+ '("perl" "init" "cleanup" "once" "filter" "shared"
+ "perl_init" "perl_cleanup" "perl_once" "perl_filter"))
+
+(defvar mmm-mason-pseudo-perl-tags
+ '("args" "perl_args" "attr" "flags"))
+
+(defvar mmm-mason-non-perl-tags
+ '("doc" "perl_doc" "text" "perl_text" "def" "perl_def" "method"))
+
+(defvar mmm-mason-perl-tags-regexp
+ (concat "<%" (mmm-regexp-opt mmm-mason-perl-tags t) ">")
+ "Matches tags beginning Mason sections containing Perl code.
+Saves the name of the tag matched.")
+
+(defvar mmm-mason-pseudo-perl-tags-regexp
+ (concat "<%" (mmm-regexp-opt mmm-mason-pseudo-perl-tags t) ">")
+ "Match tags beginning Mason sections that look like Perl but aren't.
+Saves the name of the tag matched.")
+
+(defvar mmm-mason-tag-names-regexp
+ (regexp-opt (append mmm-mason-perl-tags mmm-mason-non-perl-tags) t)
+ "Matches any Mason tag name after the \"<%\". Used to verify that a
+\"<%\" sequence starts an inline section.")
+
+(defun mmm-mason-verify-inline ()
+ (not (looking-at mmm-mason-tag-names-regexp)))
+
+;;}}}
+;;{{{ Add Classes
+
+(mmm-add-group
+ 'mason
+ `((mason-text
+ :submode nil
+ :front "<%text>"
+ :back "</%text>"
+ :insert ((?t mason-<%text> nil @ "<%text>" @ "\n"
+ _ "\n" @ "</%text>" @)))
+ (mason-doc
+ :submode text-mode
+ :face mmm-comment-submode-face
+ :front "<%doc>"
+ :back "</%doc>"
+ :face nil
+ :insert ((?d mason-<%doc> nil @ "<%doc>" @ "\n"
+ _ "\n" @ "</%doc>" @)))
+ (mason-perl
+ :submode perl
+ :match-face (("<%perl>" . mmm-code-submode-face)
+ ("<%init>" . mmm-init-submode-face)
+ ("<%cleanup>" . mmm-cleanup-submode-face)
+ ("<%once>" . mmm-init-submode-face)
+ ("<%filter>" . mmm-special-submode-face)
+ ("<%shared>" . mmm-init-submode-face))
+ :front ,mmm-mason-perl-tags-regexp
+ :back "</%~1>"
+ :save-matches 1
+ :match-name "~1"
+ :save-name 1
+ :insert ((?, mason-<%TAG> "Perl section: " @ "<%" str ">" @
+ ";\n" _ "\n" @ "</%" str ">" @)
+ (?< mason-<%TAG> ?, . nil)
+ (?p mason-<%perl> ?, . "perl")
+ (?i mason-<%init> ?, . "init")
+ (?c mason-<%cleanup> ?, . "cleanup")
+ (?o mason-<%once> ?, . "once")
+ (?l mason-<%filter> ?, . "filter")
+ (?s mason-<%shared> ?, . "shared")))
+ (mason-pseudo-perl
+ :submode perl
+ :face mmm-declaration-submode-face
+ :front ,mmm-mason-pseudo-perl-tags-regexp
+ :back "</%~1>"
+ :save-matches 1
+ :insert ((?. mason-pseudo-<%TAG> "Pseudo-perl section: " @ "<%" str ">" @
+ "\n" _ "\n" @ "</%" str ">" @)
+ (?> mason-pseudo-<%TAG> ?, . nil)
+ (?a mason-<%args> ?. . "args")
+ (?f mason-<%flags> ?. . "flags")
+ (?r mason-<%attr> ?. . "attr")))
+ (mason-inline
+ :submode perl
+ :face mmm-output-submode-face
+ :front "<%"
+ :front-verify mmm-mason-verify-inline
+ :back "%>"
+ :insert ((?% mason-<%-%> nil @ "<%" @ " " _ " " @ "%>" @)
+ (?5 mason-<%-%> ?% . nil)))
+ (mason-call
+ :submode perl
+ :face mmm-special-submode-face
+ :front "<&"
+ :back "&>"
+ :insert ((?& mason-<&-&> nil @ "<&" @ " " _ " " @ "&>" @)
+ (?7 mason-<&-&> ?% . nil)))
+ (mason-one-line-comment
+ :submode text-mode
+ :face mmm-comment-submode-face
+ :front "^%#"
+ :back "\n"
+ :insert ((?# mason-%-comment nil (mmm-mason-start-line)
+ @ "%" @ "# " _ @ '(mmm-mason-end-line) "\n" @)
+ (?3 mason-%-comment ?# . nil)))
+ (mason-one-line
+ :submode perl
+ :face mmm-code-submode-face
+ :front "^%"
+ :back "\n"
+ :insert ((return mason-%-line nil (mmm-mason-start-line)
+ @ "%" @ " " _ @ '(mmm-mason-end-line) "\n" @)))))
+
+;;}}}
+;;{{{ One-line Sections
+
+(defun mmm-mason-start-line ()
+ (if (bolp)
+ ""
+ "\n"))
+
+(defun mmm-mason-end-line ()
+ (if (eolp)
+ (delete-char 1)))
+
+;;}}}
+;;{{{ Set Mode Line
+
+(defun mmm-mason-set-mode-line ()
+ (setq mmm-buffer-mode-display-name "Mason"))
+(add-hook 'mmm-mason-class-hook 'mmm-mason-set-mode-line)
+
+;;}}}
+
+(provide 'mmm-mason)
+
+;;; mmm-mason.el ends here \ No newline at end of file