From 94d2fc1815a919734353c942f224db1de4b4fcb8 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Mon, 7 Mar 2011 09:04:49 +0100 Subject: Django, org * Added nxhtml, mostly for django support. * Changed some org settings. --- emacs.d/nxhtml/util/mumamo-aspnet.el | 227 +++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 emacs.d/nxhtml/util/mumamo-aspnet.el (limited to 'emacs.d/nxhtml/util/mumamo-aspnet.el') diff --git a/emacs.d/nxhtml/util/mumamo-aspnet.el b/emacs.d/nxhtml/util/mumamo-aspnet.el new file mode 100644 index 0000000..c6bb2c7 --- /dev/null +++ b/emacs.d/nxhtml/util/mumamo-aspnet.el @@ -0,0 +1,227 @@ +;;; mumamo-aspnet.el --- Support for ASP .Net in `mumamo-mode'. +;; +;;;;; John: Please change here to what you want: +;; Author: John J Foerch (jjfoerch A earthlink O net) +;; Maintainer: +;; Created: ?? +;; Version: == +;; Last-Updated: Wed Dec 12 21:55:11 2007 (3600 +0100) +;; URL: http://OurComments.org/Emacs/Emacs.html +;; Keywords: +;; Compatibility: +;; +;; Features that might be required by this library: +;; +;; None +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; This program 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. +;; +;; This program 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., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. +;; +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;; Support for ASP .Net in `mumamo-mode'. If you want to use VB then +;; you have to get the vb mode that this is written for here: +;; +;; http://www.emacswiki.org/cgi-bin/wiki/VbDotNetMode +;; +;; A C# mode is already included in nXhtml. That is the one that this +;; library has been tested with. +;; +;; +;;; Usage: +;; +;; Put this file in you Emacs `load-path' and add in your .emacs: +;; +;; (eval-after-load 'mumamo +;; (require 'mumamo-aspnet) +;; (mumamo-aspnet-add-me)) +;; +;; A file with the extension .aspx will no be opened with nxhtml-mode +;; as the main major mode and with chunks in csharp-mode etc. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(eval-when-compile (require 'mumamo)) + +;;; + +;; (defun mumamo-aspnet-add-me() +;; "Make mumamo aware of the ASP.Net extension." +;; (add-to-list 'mumamo-chunk-family-list +;; '("ASP.Net nXhtml Family" nxhtml-mode +;; (mumamo-chunk-aspnet +;; mumamo-chunk-aspnet-script +;; mumamo-chunk-inlined-style +;; mumamo-chunk-inlined-script +;; mumamo-chunk-style= +;; mumamo-chunk-onjs= +;; )) +;; t) +;; (add-to-list 'mumamo-chunk-family-list +;; '("ASP.Net XHTML Family" html-mode +;; (mumamo-chunk-aspnet +;; mumamo-chunk-aspnet-script +;; mumamo-chunk-inlined-style +;; mumamo-chunk-inlined-script +;; mumamo-chunk-style= +;; mumamo-chunk-onjs= +;; )) +;; t) + + +;; (add-to-list 'mumamo-filenames-list +;; '("\\.aspx\\'" "ASP.Net nXhtml Family")) +;; ;; Make it SET for current session in Custom. +;; (customize-set-variable 'mumamo-filenames-list mumamo-filenames-list) +;; (customize-set-value 'mumamo-filenames-list mumamo-filenames-list) + +;; ;; this is how to set up mode aliases, should we need them. +;; (add-to-list 'mumamo-major-modes '(csharp-mode csharp-mode)) +;; (add-to-list 'mumamo-major-modes '(vbnet-mode vbnet-mode)) +;; ;; Make it SET for current session in Custom. +;; (customize-set-variable 'mumamo-major-modes mumamo-major-modes) +;; (customize-set-value 'mumamo-major-modes mumamo-major-modes) +;; ) + + +;;; aspnet + +(defvar mumamo-aspnet-page-language-mode-spec nil + "A mumamo mode-spec for the default language of an ASP.Net page. +This is what is set with the directive `@ Page Language' on the +page. + +Internal variable.") +(make-variable-buffer-local 'mumamo-aspnet-page-language-mode-spec) +;;(add-to-list 'mumamo-survive 'mumamo-aspnet-page-language-mode-spec) +(put 'mumamo-aspnet-page-language-mode-spec 'permanent-local t) + +(defconst mumamo-aspnet-language-regex + (rx (0+ (not (any ">"))) + word-start "language" (0+ space) "=" (0+ space) ?\" (submatch (0+ (not (any ?\" ?>)))) ?\" + )) + +(defun mumamo-aspnet-get-page-language-mode-spec () + (or mumamo-aspnet-page-language-mode-spec + (save-excursion + (goto-char (point-min)) + (when (search-forward "<%@ Page") + (let ((case-fold-search t)) + (when (looking-at mumamo-aspnet-language-regex) + (mumamo-aspnet-mode-spec-for-language (match-string 1)))))) + 'fundamental-mode)) + +(defun mumamo-aspnet-get-mode-for-chunk (&optional chunk-type) + (cond ((eq chunk-type 'script) + (mumamo-get-major-mode-substitute + (or (if (looking-at mumamo-aspnet-language-regex) + (mumamo-aspnet-mode-spec-for-language (match-string 1)) + (mumamo-aspnet-get-page-language-mode-spec)) + 'fundamental-mode) + 'fontification)) + ((eq chunk-type 'directive) + 'fundamental-mode) + ;;(t (mumamo-mode-from-modespec + (t (mumamo-get-major-mode-substitute + (mumamo-aspnet-get-page-language-mode-spec) + 'fontification + )))) + + +(defun mumamo-chunk-aspnet(pos min max) + "Find <% ... %>." + (mumamo-find-possible-chunk pos min max + 'mumamo-search-bw-exc-start-aspnet + 'mumamo-search-bw-exc-end-jsp + 'mumamo-search-fw-exc-start-jsp + 'mumamo-search-fw-exc-end-jsp)) + +(defun mumamo-search-bw-exc-start-aspnet(pos min) + ;;(let ((exc-start (mumamo-search-bw-exc-start-str pos min "<%"))) + (let ((exc-start (mumamo-chunk-start-bw-str pos min "<%"))) + (when (and exc-start + (<= exc-start pos)) + (cons exc-start + (mumamo-aspnet-get-mode-for-chunk + (if (eq (char-after exc-start) ?@) + 'directive)))))) + +(defconst mumamo-aspnet-script-tag-start-regex + (rx ""))) + word-start "runat" (0+ space) "=" (0+ space) ?\" "server" ?\" + (0+ (not (any ">"))) + ">" + )) + +(defun mumamo-aspnet-mode-spec-for-language (language) + (let ((language (downcase language))) + (cond ((equal language "c#") 'csharp-mode) + ((equal language "vb") 'vbnet-mode) + (t 'fundamental-mode)))) + +(defun mumamo-search-bw-exc-start-aspnet-script(pos min) + (goto-char (+ pos 7)) + (let ((marker-start (search-backward "...." + (mumamo-find-possible-chunk pos min max + 'mumamo-search-bw-exc-start-aspnet-script + 'mumamo-search-bw-exc-end-inlined-script + 'mumamo-search-fw-exc-start-aspnet-script + 'mumamo-search-fw-exc-end-inlined-script)) + +;; Fix-me: define a multi major mode for asp. Or maybe just drop this +;; file? + +(provide 'mumamo-aspnet) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; mumamo-aspnet.el ends here -- cgit v1.2.3-54-g00ecf