summaryrefslogtreecommitdiffstats
path: root/emacs.d/nxhtml/related/django.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs.d/nxhtml/related/django.el')
-rw-r--r--emacs.d/nxhtml/related/django.el203
1 files changed, 203 insertions, 0 deletions
diff --git a/emacs.d/nxhtml/related/django.el b/emacs.d/nxhtml/related/django.el
new file mode 100644
index 0000000..f592550
--- /dev/null
+++ b/emacs.d/nxhtml/related/django.el
@@ -0,0 +1,203 @@
+;;; django.el ---
+;;
+;; Author: Lennart Borgman (lennart O borgman A gmail O com)
+;; Created: Sun Nov 18 18:29:41 2007
+;; Version: 0.3
+;; Last-Updated: 2008-08-08T13:22:19+0200 Fri
+;; URL:
+;; Keywords:
+;; Compatibility:
+;;
+;; Features that might be required by this library:
+;;
+;; None
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Commentary:
+;;
+;; Simple highlighting for Django for use with mumamo.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Change log:
+;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; 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 2, 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 this program; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
+;; Floor, Boston, MA 02110-1301, USA.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Code:
+
+;; Maybe there are something to get here?
+;; http://github.com/cosmin/emacs-utils/tree/85cc1d2bd447cb9b2fc98e27b5f8780453e5b978/django-html-mode.el
+
+(defconst django-indenting-keywords
+ '("block" "comment" "else"
+ "filter" "for" "if" "ifchanged" "ifequal"
+ "ifnotequal" "spaceless" "with"))
+
+;; (append '(or) django-indenting-keywords)
+(defconst django-font-lock-keywords
+ (list
+ (cons (rx-to-string
+ `(and
+ word-start
+ (or "as" "autoescape" "csrf_token" "cycle" "debug" "extends"
+ "firstof" "in" "include" "load" "now" "regroup" "ssi"
+ "templatetag" "url" "widthratio"
+ (seq
+ (opt "end")
+ ;; (or "autoescape" "block" "comment" "cycle" "debug" "else"
+ ;; "extends" "filter" "firstof" "for" "if" "ifchanged" "ifequal"
+ ;; "ifnotequal" "include" "load" "now" "regroup"
+ ;; "spaceless" "ssi" "templatetag" "url" "widthratio"
+ ;; "with")
+ ,(append '(or) django-indenting-keywords)
+ ))
+ word-end))
+ font-lock-keyword-face)
+ )
+ "Minimal highlighting expressions for Django mode")
+
+(defcustom django-indent-width 2
+ "Indentation width for Django."
+ :type 'integer
+ :group 'django)
+
+(defun django-indent-line ()
+ "Indent current line as Django code.
+Indent like the examples on URL
+`http://docs.djangoproject.com/en/1.1/ref/templates/builtins/'."
+ (save-match-data
+ (let* ((indent-re (rx-to-string `(and word-start
+ ,(append '(or "else") django-indenting-keywords))))
+ (deindent-re (rx-to-string `(and word-start
+ (or "else"
+ (seq
+ "end"
+ ,(append '(or) django-indenting-keywords))))))
+ (here (point-marker))
+ (this-indentation (current-indentation))
+ (this-line-start (progn (beginning-of-line) (point)))
+ (prev-line-start (progn (skip-chars-backward " \t\n\r\f")
+ (beginning-of-line)
+ (when (< (point) this-line-start)
+ (point))))
+ (prev-indentation (if prev-line-start (current-indentation) 0))
+ (shift-in (if (and prev-line-start
+ (re-search-forward indent-re (point-at-eol) t))
+ django-indent-width 0))
+ (shift-out (progn
+ (goto-char this-line-start)
+ (if (re-search-forward deindent-re (point-at-eol) t)
+ (- django-indent-width) 0)))
+ (new-indentation (max 0 (+ prev-indentation shift-in shift-out)))
+ )
+ (goto-char this-line-start)
+ (cond
+ ((> new-indentation this-indentation)
+ (skip-chars-forward " \t")
+ (indent-to new-indentation))
+ ((< new-indentation this-indentation)
+ (back-to-indentation)
+ (delete-region this-line-start (point))
+ (indent-to new-indentation)))
+ (goto-char here))))
+
+;;;###autoload
+(define-derived-mode django-mode nil "Django"
+ "Simple Django mode for use with mumamo.
+This mode only provides syntax highlighting."
+ (set (make-local-variable 'indent-line-function) 'django-indent-line)
+ (setq font-lock-defaults '(django-font-lock-keywords)))
+
+;;; Comments mode
+;; (defconst django-comment-font-lock-keywords
+;; (list
+;; (cons "\\(.*\\)" (list 1 font-lock-comment-face))
+;; ))
+
+;; (defvar django-comment-font-lock-defaults
+;; '(django-comment-font-lock-keywords t t))
+
+;; (define-derived-mode django-comment-mode nil "Django comment"
+;; "For django comment blocks."
+;; (set (make-local-variable 'font-lock-defaults) django-comment-font-lock-defaults))
+
+;;; Variables mode
+
+(defconst django-variable-font-lock-keywords
+ (list
+ ;; Built in filters:
+ (cons (rx
+ "|"
+ (submatch
+ (or "add" "addslashes" "capfirst" "center" "cut"
+ "date" "default" "default_if_none"
+ "dictsort" "dictsortreversed"
+ "divisibleby"
+ "escape"
+ "filesizeformat"
+ "first"
+ "fixampersands"
+ "floatformat"
+ "force_escape"
+ "iriencode"
+ "join"
+ "length" "length_is"
+ "linebreaks" "linebreaksbr" "linenumbers"
+ "ljust"
+ "lower"
+ "make_list"
+ "phone2numeric"
+ "pluralize"
+ "pprint"
+ "random"
+ "removetags"
+ "rjust"
+ "safe" "slice" "slugify" "stringformat" "striptags"
+ "time" "timesince" "timeuntil"
+ "title" "truncatewords" "truncatewords_html"
+ "unordered_list"
+ "upper" "urlencode" "urlize" "urlizetrunc"
+ "wordcount" "wordwrap" "yesno")))
+ (list 1 font-lock-builtin-face))
+ (cons (rx
+ "|"
+ (submatch
+ (0+ (any "a-z"))))
+ (list 1 font-lock-function-name-face))
+ (cons "\\([^|]*\\)" (list 1 font-lock-variable-name-face))
+ ))
+
+(defvar django-variable-font-lock-defaults
+ '(django-variable-font-lock-keywords
+ t t
+ ;; This still gives teh syntax symbol to |, why?
+ ((?| . ". "))
+ ))
+
+(define-derived-mode django-variable-mode nil "Django variable"
+ "For django comment blocks."
+ ;;(modify-syntax-entry ?| ?.)
+ (set (make-local-variable 'font-lock-defaults) django-variable-font-lock-defaults))
+
+(provide 'django)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; django.el ends here