[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