[KSS-checkins] r46806 - kukit/kukit.js/trunk/utils
jvloothuis at codespeak.net
jvloothuis at codespeak.net
Fri Sep 21 22:39:23 CEST 2007
Author: jvloothuis
Date: Fri Sep 21 22:39:22 2007
New Revision: 46806
Added:
kukit/kukit.js/trunk/utils/kss-mode.el
Log:
Added Emacs mode for KSS
Added: kukit/kukit.js/trunk/utils/kss-mode.el
==============================================================================
--- (empty file)
+++ kukit/kukit.js/trunk/utils/kss-mode.el Fri Sep 21 22:39:22 2007
@@ -0,0 +1,117 @@
+;;; kss.el --- KSS major mode
+
+;; Copyright (C) 2001 Free Software Foundation, Inc.
+
+;; Author: Jeroen Vloothuis
+;; Keywords: extensions
+
+;; This file 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 file 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., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This mode adds support for KSS (Kinetic Style Sheets).
+
+;;
+
+;;; Code:
+
+(defvar kss-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map [foo] 'kss-do-foo)
+ map)
+ "Keymap for `kss-mode'.")
+
+(defvar kss-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ (modify-syntax-entry ?* ". 23")
+ (modify-syntax-entry ?/ ". 14")
+ st)
+ "Syntax table for `kss-mode'.")
+
+(defvar kss-font-lock-keywords
+ `(
+ ;; CSS selectors
+ ("^\\([#_[:alnum:]][^:]+\\):[[:alnum:]-]+[[:blank:]]*{"
+ (1 font-lock-constant-face))
+
+ ;; Events
+ (":\\([[:alnum:]-]+\\)[[:blank:]]*{"
+ (1 font-lock-type-face))
+
+ ;; Event parameters
+ ("\\(evt-[[:alnum:]-]+\\):"
+ (1 font-lock-type-face))
+
+ ;; KSS keywords
+ (,(concat (regexp-opt
+ '("action-client" "action-server"
+ "evt-load-initial" "evt-timeout-delay"
+ "evt-timeout-repeat") t) ":")
+ (1 font-lock-keyword-face))
+ )
+ "Keyword highlighting specification for `kss-mode'.")
+
+;; (defvar kss-imenu-generic-expression
+;; ...)
+
+;; (defvar kss-outline-regexp
+;; ...)
+
+;;;###autoload
+(define-derived-mode kss-mode fundamental-mode "KSS"
+ "A major mode for editing KSS files."
+ :syntax-table kss-mode-syntax-table
+
+ (setq comment-start "/* "
+ comment-end " */"
+ comment-start-skip "/\\*[ \n\t]+")
+
+ (set (make-local-variable 'comment-start) "/* ")
+ (set (make-local-variable 'comment-end) " */")
+ (set (make-local-variable 'comment-start-skip) "/\\*[ \n\t]+")
+
+ (set (make-local-variable 'font-lock-defaults)
+ '(kss-font-lock-keywords))
+ (set (make-local-variable 'indent-line-function) 'kss-indent-line)
+;; (set (make-local-variable 'imenu-generic-expression)
+;; kss-imenu-generic-expression)
+;; (set (make-local-variable 'outline-regexp) kss-outline-regexp)
+)
+
+;;; Indentation
+
+(defun kss-indent-line ()
+ "Indent current line of KSS code."
+ (interactive)
+ (indent-line-to
+ (save-excursion
+ (setq column (kss-calculate-indentation)))))
+
+
+(defun kss-calculate-indentation ()
+ "Return the column to which the current line should be indented."
+ (forward-line -1)
+
+ (cond ((re-search-forward "{[[:blank:]]*"
+ (+ (line-end-position) 1) t) 4)
+ ((looking-at "[[:blank:]]*}[[:blank:]]*$") 0)
+ ((equal (point-min) (point)) 0)
+ (t (kss-calculate-indentation))))
+
+
+(provide 'kss-mode)
+;;; kss.el ends here
+
More information about the Kukit-checkins
mailing list