|
@@ -1,213 +0,0 @@
|
|
|
-;;; jinja.el --- Jinja mode highlighting
|
|
|
-;;
|
|
|
-;; Author: Georg Brandl
|
|
|
-;; Copyright: (c) 2009 by the Jinja Team
|
|
|
-;; Last modified: 2008-05-22 23:04 by gbr
|
|
|
-;;
|
|
|
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
-;;
|
|
|
-;;; Commentary:
|
|
|
-;;
|
|
|
-;; Mostly ripped off django-mode by Lennart Borgman.
|
|
|
-;;
|
|
|
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
-;;
|
|
|
-;; 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:
|
|
|
-
|
|
|
-(defconst jinja-font-lock-keywords
|
|
|
- (list
|
|
|
-; (cons (rx "{% comment %}" (submatch (0+ anything))
|
|
|
-; "{% endcomment %}") (list 1 font-lock-comment-face))
|
|
|
- '("{# ?\\(.*?\\) ?#}" . (1 font-lock-comment-face))
|
|
|
- '("{%-?\\|-?%}\\|{{\\|}}" . font-lock-preprocessor-face)
|
|
|
- '("{#\\|#}" . font-lock-comment-delimiter-face)
|
|
|
- ;; first word in a block is a command
|
|
|
- '("{%-?[ \t\n]*\\([a-zA-Z_]+\\)" . (1 font-lock-keyword-face))
|
|
|
- ;; variables
|
|
|
- '("\\({{ ?\\)\\([^|]*?\\)\\(|.*?\\)? ?}}" . (1 font-lock-variable-name-face))
|
|
|
- ;; keywords and builtins
|
|
|
- (cons (rx word-start
|
|
|
- (or "in" "as" "recursive" "not" "and" "or" "if" "else"
|
|
|
- "import" "with" "without" "context")
|
|
|
- word-end)
|
|
|
- font-lock-keyword-face)
|
|
|
- (cons (rx word-start
|
|
|
- (or "true" "false" "none" "loop" "self" "super")
|
|
|
- word-end)
|
|
|
- font-lock-builtin-face)
|
|
|
- ;; tests
|
|
|
- '("\\(is\\)[ \t]*\\(not\\)[ \t]*\\([a-zA-Z_]+\\)"
|
|
|
- (1 font-lock-keyword-face) (2 font-lock-keyword-face)
|
|
|
- (3 font-lock-function-name-face))
|
|
|
- ;; builtin filters
|
|
|
- (cons (rx
|
|
|
- "|" (* space)
|
|
|
- (submatch
|
|
|
- (or "abs" "batch" "capitalize" "capture" "center" "count" "default"
|
|
|
- "dformat" "dictsort" "e" "escape" "filesizeformat" "first"
|
|
|
- "float" "format" "getattribute" "getitem" "groupby" "indent"
|
|
|
- "int" "join" "jsonencode" "last" "length" "lower" "markdown"
|
|
|
- "pprint" "random" "replace" "reverse" "round" "rst" "slice"
|
|
|
- "sort" "string" "striptags" "sum" "textile" "title" "trim"
|
|
|
- "truncate" "upper" "urlencode" "urlize" "wordcount" "wordwrap"
|
|
|
- "xmlattr")))
|
|
|
- (list 1 font-lock-builtin-face))
|
|
|
- )
|
|
|
- "Minimal highlighting expressions for Jinja mode")
|
|
|
-
|
|
|
-(define-derived-mode jinja-mode nil "Jinja"
|
|
|
- "Simple Jinja mode for use with `mumamo-mode'.
|
|
|
-This mode only provides syntax highlighting."
|
|
|
- ;;(set (make-local-variable 'comment-start) "{#")
|
|
|
- ;;(set (make-local-variable 'comment-end) "#}")
|
|
|
- (setq font-lock-defaults '(jinja-font-lock-keywords)))
|
|
|
-
|
|
|
-;; mumamo stuff
|
|
|
-
|
|
|
-(when (require 'mumamo nil t)
|
|
|
-
|
|
|
- (defun mumamo-chunk-jinja3(pos min max)
|
|
|
- "Find {# ... #}. Return range and `jinja-mode'.
|
|
|
-See `mumamo-find-possible-chunk' for POS, MIN and MAX."
|
|
|
- (mumamo-find-possible-chunk pos min max
|
|
|
- 'mumamo-search-bw-exc-start-jinja3
|
|
|
- 'mumamo-search-bw-exc-end-jinja3
|
|
|
- 'mumamo-search-fw-exc-start-jinja3
|
|
|
- 'mumamo-search-fw-exc-end-jinja3))
|
|
|
-
|
|
|
- (defun mumamo-chunk-ambari_jinja2(pos min max)
|
|
|
- "Find {{ ... }}. Return range and `jinja-mode'.
|
|
|
-See `mumamo-find-possible-chunk' for POS, MIN and MAX."
|
|
|
- (mumamo-find-possible-chunk pos min max
|
|
|
- 'mumamo-search-bw-exc-start-ambari_jinja2
|
|
|
- 'mumamo-search-bw-exc-end-ambari_jinja2
|
|
|
- 'mumamo-search-fw-exc-start-ambari_jinja2
|
|
|
- 'mumamo-search-fw-exc-end-ambari_jinja2))
|
|
|
-
|
|
|
- (defun mumamo-chunk-jinja (pos min max)
|
|
|
- "Find {% ... %}. Return range and `jinja-mode'.
|
|
|
-See `mumamo-find-possible-chunk' for POS, MIN and MAX."
|
|
|
- (mumamo-find-possible-chunk pos min max
|
|
|
- 'mumamo-search-bw-exc-start-jinja
|
|
|
- 'mumamo-search-bw-exc-end-jinja
|
|
|
- 'mumamo-search-fw-exc-start-jinja
|
|
|
- 'mumamo-search-fw-exc-end-jinja))
|
|
|
-
|
|
|
- (defun mumamo-search-bw-exc-start-jinja (pos min)
|
|
|
- "Helper for `mumamo-chunk-jinja'.
|
|
|
-POS is where to start search and MIN is where to stop."
|
|
|
- (let ((exc-start (mumamo-chunk-start-bw-str-inc pos min "{%")))
|
|
|
- (and exc-start
|
|
|
- (<= exc-start pos)
|
|
|
- (cons exc-start 'jinja-mode))))
|
|
|
-
|
|
|
- (defun mumamo-search-bw-exc-start-ambari_jinja2(pos min)
|
|
|
- "Helper for `mumamo-chunk-ambari_jinja2'.
|
|
|
-POS is where to start search and MIN is where to stop."
|
|
|
- (let ((exc-start (mumamo-chunk-start-bw-str-inc pos min "{{")))
|
|
|
- (and exc-start
|
|
|
- (<= exc-start pos)
|
|
|
- (cons exc-start 'jinja-mode))))
|
|
|
-
|
|
|
- (defun mumamo-search-bw-exc-start-jinja3(pos min)
|
|
|
- "Helper for `mumamo-chunk-jinja3'.
|
|
|
-POS is where to start search and MIN is where to stop."
|
|
|
- (let ((exc-start (mumamo-chunk-start-bw-str-inc pos min "{#")))
|
|
|
- (and exc-start
|
|
|
- (<= exc-start pos)
|
|
|
- (cons exc-start 'jinja-mode))))
|
|
|
-
|
|
|
- (defun mumamo-search-bw-exc-end-jinja (pos min)
|
|
|
- "Helper for `mumamo-chunk-jinja'.
|
|
|
-POS is where to start search and MIN is where to stop."
|
|
|
- (mumamo-chunk-end-bw-str-inc pos min "%}"))
|
|
|
-
|
|
|
- (defun mumamo-search-bw-exc-end-ambari_jinja2(pos min)
|
|
|
- "Helper for `mumamo-chunk-ambari_jinja2'.
|
|
|
-POS is where to start search and MIN is where to stop."
|
|
|
- (mumamo-chunk-end-bw-str-inc pos min "}}"))
|
|
|
-
|
|
|
- (defun mumamo-search-bw-exc-end-jinja3(pos min)
|
|
|
- "Helper for `mumamo-chunk-jinja3'.
|
|
|
-POS is where to start search and MIN is where to stop."
|
|
|
- (mumamo-chunk-end-bw-str-inc pos min "#}"))
|
|
|
-
|
|
|
- (defun mumamo-search-fw-exc-start-jinja (pos max)
|
|
|
- "Helper for `mumamo-chunk-jinja'.
|
|
|
-POS is where to start search and MAX is where to stop."
|
|
|
- (mumamo-chunk-start-fw-str-inc pos max "{%"))
|
|
|
-
|
|
|
- (defun mumamo-search-fw-exc-start-ambari_jinja2(pos max)
|
|
|
- "Helper for `mumamo-chunk-ambari_jinja2'.
|
|
|
-POS is where to start search and MAX is where to stop."
|
|
|
- (mumamo-chunk-start-fw-str-inc pos max "{{"))
|
|
|
-
|
|
|
- (defun mumamo-search-fw-exc-start-jinja3(pos max)
|
|
|
- "Helper for `mumamo-chunk-jinja3'.
|
|
|
-POS is where to start search and MAX is where to stop."
|
|
|
- (mumamo-chunk-start-fw-str-inc pos max "{#"))
|
|
|
-
|
|
|
- (defun mumamo-search-fw-exc-end-jinja (pos max)
|
|
|
- "Helper for `mumamo-chunk-jinja'.
|
|
|
-POS is where to start search and MAX is where to stop."
|
|
|
- (mumamo-chunk-end-fw-str-inc pos max "%}"))
|
|
|
-
|
|
|
- (defun mumamo-search-fw-exc-end-ambari_jinja2(pos max)
|
|
|
- "Helper for `mumamo-chunk-ambari_jinja2'.
|
|
|
-POS is where to start search and MAX is where to stop."
|
|
|
- (mumamo-chunk-end-fw-str-inc pos max "}}"))
|
|
|
-
|
|
|
- (defun mumamo-search-fw-exc-end-jinja3(pos max)
|
|
|
- "Helper for `mumamo-chunk-jinja3'.
|
|
|
-POS is where to start search and MAX is where to stop."
|
|
|
- (mumamo-chunk-end-fw-str-inc pos max "#}"))
|
|
|
-
|
|
|
-;;;###autoload
|
|
|
- (define-mumamo-multi-major-mode jinja-html-mumamo
|
|
|
- "Turn on multiple major modes for Jinja with main mode `html-mode'.
|
|
|
-This also covers inlined style and javascript."
|
|
|
- ("Jinja HTML Family" html-mode
|
|
|
- (mumamo-chunk-jinja
|
|
|
- mumamo-chunk-ambari_jinja2
|
|
|
- mumamo-chunk-jinja3
|
|
|
- mumamo-chunk-inlined-style
|
|
|
- mumamo-chunk-inlined-script
|
|
|
- mumamo-chunk-style=
|
|
|
- mumamo-chunk-onjs=
|
|
|
- )))
|
|
|
-
|
|
|
-;;;###autoload
|
|
|
- (define-mumamo-multi-major-mode jinja-nxhtml-mumamo
|
|
|
- "Turn on multiple major modes for Jinja with main mode `nxhtml-mode'.
|
|
|
-This also covers inlined style and javascript."
|
|
|
- ("Jinja nXhtml Family" nxhtml-mode
|
|
|
- (mumamo-chunk-jinja
|
|
|
- mumamo-chunk-ambari_jinja2
|
|
|
- mumamo-chunk-jinja3
|
|
|
- mumamo-chunk-inlined-style
|
|
|
- mumamo-chunk-inlined-script
|
|
|
- mumamo-chunk-style=
|
|
|
- mumamo-chunk-onjs=
|
|
|
- )))
|
|
|
- )
|
|
|
-
|
|
|
-(provide 'jinja)
|
|
|
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
-;;; jinja.el ends here
|