| 1 | ; A (rather minimal) major mode for Emacs to edit Django templates |
|---|
| 2 | ; by Antonio Cavedoni <http://cavedoni.com/> |
|---|
| 3 | ; |
|---|
| 4 | ; Hacked together following instructions from the awesome: |
|---|
| 5 | ; http://two-wugs.net/emacs/mode-tutorial.html |
|---|
| 6 | ; |
|---|
| 7 | ; Acknowledgements: |
|---|
| 8 | ; |
|---|
| 9 | ; - Patrick Quinn <http://www.patrickquinn.net/> |
|---|
| 10 | ; for the font-locking patch for HTML syntax |
|---|
| 11 | ; |
|---|
| 12 | ; - Alessandro Guido |
|---|
| 13 | ; for the sgml-mode include patch |
|---|
| 14 | ; |
|---|
| 15 | ; - Michael Demmer |
|---|
| 16 | ; for the regexp order issue |
|---|
| 17 | |
|---|
| 18 | (require 'sgml-mode) |
|---|
| 19 | |
|---|
| 20 | (defvar django-mode-hook nil) |
|---|
| 21 | |
|---|
| 22 | (defvar django-mode-map |
|---|
| 23 | (let ((django-mode-map (make-keymap))) |
|---|
| 24 | (define-key django-mode-map "\C-j" 'newline-and-indent) |
|---|
| 25 | django-mode-map) |
|---|
| 26 | "Keymap for Django major mode") |
|---|
| 27 | |
|---|
| 28 | (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . django-mode)) |
|---|
| 29 | |
|---|
| 30 | (defconst django-font-lock-keywords-1 |
|---|
| 31 | (list |
|---|
| 32 | '("{% ?comment ?%}\\(\n?.*?\\)+?{% ?endcomment ?%}" . font-lock-comment-face) |
|---|
| 33 | '("{% ?\\(\\(end\\)?\\(extends\\|for\\|cycle\\|filter\\|firstof\\|debug\\|if\\(changed\\|equal\\|notequal\\|\\)\\|include\\|load\\|now\\|regroup\\|spaceless\\|ssi\\|templatetag\\|widthratio\\|block\\)\\) ?.*? ?%}" . 1) |
|---|
| 34 | '("{{ ?\\(.*?\\) ?}}" . (1 font-lock-variable-name-face)) |
|---|
| 35 | '("{%\\|\\%}\\|{{\\|}}" . font-lock-builtin-face) |
|---|
| 36 | "Minimal highlighting expressions for Django mode")) |
|---|
| 37 | |
|---|
| 38 | (defvar django-font-lock-keywords |
|---|
| 39 | (append sgml-font-lock-keywords django-font-lock-keywords-1) |
|---|
| 40 | "Default highlighting expressions for Django mode") |
|---|
| 41 | |
|---|
| 42 | (defvar django-mode-syntax-table |
|---|
| 43 | (let ((django-mode-syntax-table (make-syntax-table))) |
|---|
| 44 | django-mode-syntax-table) |
|---|
| 45 | "Syntax table for django-mode") |
|---|
| 46 | |
|---|
| 47 | (defun django-mode () |
|---|
| 48 | "Major mode for editing Django templates" |
|---|
| 49 | (interactive) |
|---|
| 50 | (kill-all-local-variables) |
|---|
| 51 | (set-syntax-table django-mode-syntax-table) |
|---|
| 52 | (use-local-map django-mode-map) |
|---|
| 53 | (html-mode) |
|---|
| 54 | (set (make-local-variable 'font-lock-defaults) '(django-font-lock-keywords)) |
|---|
| 55 | (setq major-mode 'django-mode) |
|---|
| 56 | (setq mode-name "Django") |
|---|
| 57 | (run-hooks 'django-mode-hook)) |
|---|
| 58 | |
|---|
| 59 | (provide 'django-mode) |
|---|