⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftl.el

📁 freemaker安装软件
💻 EL
字号:
;;; ftl.el --- fontify velocity template language code;; Modified from vtl mode by Brian Leonard <brian@brainslug.org>;; Maintainer: marvin.greenberg@acm.org;; Keywords: extensions;; Created: 2003-03-13;; Version 0.1;;; Commentary:;;;;;; Known bugs!:;;;;;; Hilighting of strings with escaped quotes will be erroneously terminated at the escaped quote.;;; Strings are fontified everywhere, not just in interpolations and directives;;; An occurrence of '>' within a string or expression in a directive or interpolation;;;   will incorrectly terminate highlighting.;;; An occurrence of '}' within a string argument to a method in an interpolation;;;   will incorrectly terminate highlighting for the interpolation.;;;;; One useful way to enable this minor mode is to put the following in your;; .emacs, assuming you save this in your home directory also:;;      (load-file "~/ftl.el");;      (autoload 'turn-on-ftl-mode "ftl" nil t);;      (add-hook 'html-mode-hook 'turn-on-ftl-mode t t);;      (add-hook 'xml-mode-hook 'turn-on-ftl-mode t t);;      (add-hook 'text-mode-hook 'turn-on-ftl-mode t t);;;;  Also this might be useful;;;;   (setq auto-mode-alist (cons (cons "\\.ftl$" 'ftl-mode) auto-mode-alist));;; Code:(require 'font-lock)(require 'cl)(defgroup ftl nil  "Fontifies FTL code.  see http://freemarker.org"  :group 'ftl  :group 'font-lock  :group 'extensions);;;###autoload(defcustom ftl-mode nil  "*If non-nil, fontify ftl code"  :type 'boolean) (make-variable-buffer-local 'ftl-mode) ;;;###autoload(defcustom ftl-minor-mode-string " FTL"  "*String to display in mode line when FTL Mode is enabled."  :type 'string  :group 'ftl);;;###autoload(defun turn-on-ftl-mode ()  "Unequivocally turn on ftl-mode (see variable documentation)."  (interactive)  (font-lock-mode 1)  (ftl-mode 1));; Put minor mode string on the global minor-mode-alist.;;;###autoload(cond ((fboundp 'add-minor-mode)       (add-minor-mode 'ftl-mode 'ftl-minor-mode-string))      ((assq 'ftl-mode (default-value 'minor-mode-alist)))      (t       (setq-default minor-mode-alist                     (append (default-value 'minor-mode-alist)                             '((ftl-mode ftl-minor-mode-string))))));;;###autoload(defun ftl-mode (&optional prefix)  "Toggle FTL Mode.If called interactively with no prefix argument, toggle current conditionof the mode.If called with a positive or negative prefix argument, enable or disablethe mode, respectively."  (interactive "P")  (setq ftl-mode	(if prefix	    (>= (prefix-numeric-value prefix) 0)	  (not ftl-mode)))  (cond (ftl-mode	 ;; first, grab default	 (font-lock-mode 0)	 (font-lock-set-defaults)	 ;; add ftl regexps	 (setq font-lock-keywords	       (let ((new-keywords		      (cond ((null font-lock-keywords)			     ftl-keywords)			    (t			     (list* (car font-lock-keywords)				    (append (cdr font-lock-keywords)					    ftl-keywords))))))		 new-keywords))	 ;; and restart font-lock	 (font-lock-mode 1)	 (font-lock-fontify-buffer))	(t	 ;; reset to major mode's defaults	 (font-lock-mode 0)	 (font-lock-set-defaults)	 (font-lock-mode 1)	 (font-lock-fontify-buffer)))	   (and (interactive-p)       (if ftl-mode           (message "ftl-mode is enabled")         (message "ftl-mode is disabled")))  ftl-mode);; tried complex, now try simple(setq ftl-keywords  (let       (       (directive (concat "[<][/]?#\\(assign\\|if\\|elseif\\|else\\|foreach\\|"                          "list\\|break\\|import\\|include\\|noparse\\|compress\\|"                          "escape\\|noescape\\|global\\|local\\|setting\\|"                          "switch\\|case\\|call\\|break\\|"			  "nested\\|return\\|flush\\|stop\\|macro\\|ftl\\|"                          "t\\|lt\\|rt\\)"                          "[^a-zA-Z][^>]*[>]"))       (directive-noargs (concat "[<][/]?#\\(assign\\|if\\|elseif\\|else\\|foreach\\|"                          "list\\|break\\|import\\|include\\|noparse\\|compress\\|"                          "escape\\|noescape\\|global\\|local\\|setting\\|"                          "switch\\|case\\|call\\|break\\|"			  "nested\\|return\\|flush\\|stop\\|macro\\|ftl\\|"                          "t\\|lt\\|rt\\)"                          "[>]"))       (invalid-directive "\\([<][/]?#[a-zA-Z][a-zA-Z_0-9]*\\)[^>]*\\([>]\\)")       (user-directive "[<][/]?@[a-zA-Z_][a-zA-Z0-9_]*[^>]*[>]")       (interpolation-all  "[#$][{][^}]+[}]")       (string  "[\"][^\"]*[\"]")       (sq-string  "[\'][^\']*[\']")       (comment "[<]#--[^>]*--[>]"))    (list     (list user-directive '(0 font-lock-function-name-face t))     (list invalid-directive '(1 font-lock-warning-face t))     (list invalid-directive '(2 font-lock-warning-face t))     (list directive '(0 font-lock-keyword-face t))     (list directive-noargs '(0 font-lock-keyword-face t))     (list interpolation-all '(0 font-lock-type-face t))     (list string    '(0 font-lock-string-face t))     (list sq-string    '(0 font-lock-string-face t))     (list comment   '(0 font-lock-comment-face t)))));; This was an attempt to get more granularity, e.g. anything ;; name[(]args[)] would hilight as a function in interpolations or user directives;; Anything name would highlight as a variable name in interpolations or user directives;; Syntax in interpolations (.(),+- etc.) would highlight as a differnet face.;; But I couldn't figure out how to get "recursive" highlights (like a method as an;; argument to a method...) to match a regex properly...  But I have some ideas...;;;; (defvar ftl-keywords;;   (let ;;       (;;        (directive (concat "\\([<][/]?#\\(assign\\|if\\|elseif\\|else\\|foreach\\|";;                           "list\\|break\\|import\\|noparse\\|compress\\|";;                           "escape\\|noescape\\|global\\|local\\|setting\\|";;                           "switch\\|case\\|default\\|break\\|";; 			  "nested\\|return\\|flush\\|stop\\|macro\\ftl\\|";;                           "t\\|lt\\|rt";;                           ")[^>]*[>]\\)"));;        (user-directive "\\([<][/]?@[a-zA-Z][a-zA-Z0-9_]*[^>]*[>]\\)");;        (interpolation-all     "\\(\\$[{][^}]+[}]\\)");;        (interpolation-names   "\\$[{]\\(?\\([:alpha:][_[:alnum:]]*\\)[(),. ]*\\)[}]");;        (interpolation-methods "\\$[{]\\(?\\([:alpha:][_[:alnum:]]*\\)[(][^(}]\\)*[}]");;        (interpolation-syntax  "\\$[{]\\(?[^(),.\"']*\\([.,()\"']\\)\\)*[}]");;        (string  "\\(\"[^\"]*\"\\)");;        (comment "\\([<]#--[^>]*--[>]\\)"));;     (list;;      (list interpolation-all '(1 font-lock-type-face t));;      (list interpolation-names '(1 font-lock-variable-name-face t));;      (list interpolation-methods '(1 font-lock-function-face t));;      (list interpolation-syntax '(1 font-lock-warning-face t));;      (list user-directive '(0 font-lock-function-name-face t));;      (list directive '(0 font-lock-keyword-face t));;      (list string    '(1 font-lock-string-face t));;      (list comment   '(0 font-lock-comment-face t)))))(provide 'ftl)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -