vala-mode.el
author Luke Hoersten <Luke@Hoersten.org>
Sat, 04 Dec 2010 13:21:20 -0600
changeset 30 5aa1ceff049d
parent 22 a7906973ceb5
permissions -rw-r--r--
Started using eshell with TERM=emacs for bash colors.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     1
;;; vala-mode.el --- Vala mode derived mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     2
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     3
;; Author:     2005 Dylan R. E. Moonfire
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     4
;;	       2008 Étienne BERSAC
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     5
;; Maintainer: Étienne BERSAC <[email protected]>
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     6
;; Created:    2008 May the 4th
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     7
;; Modified:   May 2008
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     8
;; Version:    0.1
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
     9
;; Keywords:   vala languages oop
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    10
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    11
;; This program is free software; you can redistribute it and/or modify
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    12
;; it under the terms of the GNU General Public License as published by
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    13
;; the Free Software Foundation; either version 2 of the License, or
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    14
;; (at your option) any later version.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    15
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    16
;; This program is distributed in the hope that it will be useful,
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    17
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    18
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    19
;; GNU General Public License for more details.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    20
;; 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    21
;; You should have received a copy of the GNU General Public License
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    22
;; along with this program; see the file COPYING.  If not, write to
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    23
;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    24
;; Boston, MA 02111-1307, USA.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    25
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    26
;;; Commentary:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    27
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    28
;;    See http://live.gnome.org/Vala for details about Vala language.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    29
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    30
;;    This is a separate mode to implement the Vala constructs and
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    31
;;    font-locking. It is mostly the csharp-mode from
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    32
;;    http://mfgames.com/linux/csharp-mode with vala specific keywords
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    33
;;    and filename suffixes.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    34
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    35
;;    Note: The interface used in this file requires CC Mode 5.30 or
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    36
;;    later.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    37
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    38
;;; .emacs (don't put in (require 'vala-mode))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    39
;; (autoload 'vala-mode "vala-mode" "Major mode for editing Vala code." t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    40
;; (setq auto-mode-alist
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    41
;;    (append '(("\\.vala$" . vala-mode)) auto-mode-alist))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    42
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    43
;;; Versions:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    44
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    45
;;	0.1	: Initial version based on csharp-mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    46
;;
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    47
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    48
;; This is a copy of the function in cc-mode which is used to handle
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    49
;; the eval-when-compile which is needed during other times.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    50
(defun c-filter-ops (ops opgroup-filter op-filter &optional xlate)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    51
  ;; See cc-langs.el, a direct copy.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    52
  (unless (listp (car-safe ops))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    53
    (setq ops (list ops)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    54
  (cond ((eq opgroup-filter t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    55
	 (setq opgroup-filter (lambda (opgroup) t)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    56
	((not (functionp opgroup-filter))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    57
	 (setq opgroup-filter `(lambda (opgroup)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    58
				 (memq opgroup ',opgroup-filter)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    59
  (cond ((eq op-filter t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    60
	 (setq op-filter (lambda (op) t)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    61
	((stringp op-filter)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    62
	 (setq op-filter `(lambda (op)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    63
			    (string-match ,op-filter op)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    64
  (unless xlate
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    65
    (setq xlate 'identity))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    66
  (c-with-syntax-table (c-lang-const c-mode-syntax-table)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    67
    (delete-duplicates
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    68
     (mapcan (lambda (opgroup)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    69
	       (when (if (symbolp (car opgroup))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    70
			 (when (funcall opgroup-filter (car opgroup))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    71
			   (setq opgroup (cdr opgroup))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    72
			   t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    73
		       t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    74
		 (mapcan (lambda (op)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    75
			   (when (funcall op-filter op)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    76
			     (let ((res (funcall xlate op)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    77
			       (if (listp res) res (list res)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    78
			 opgroup)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    79
	     ops)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    80
     :test 'equal)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    81
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    82
;; This inserts the bulk of the code.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    83
(require 'cc-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    84
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    85
;; These are only required at compile time to get the sources for the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    86
;; language constants.  (The cc-fonts require and the font-lock
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    87
;; related constants could additionally be put inside an
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    88
;; (eval-after-load "font-lock" ...) but then some trickery is
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    89
;; necessary to get them compiled.)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    90
(eval-when-compile
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    91
  (let ((load-path
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    92
	 (if (and (boundp 'byte-compile-dest-file)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    93
		  (stringp byte-compile-dest-file))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    94
	     (cons (file-name-directory byte-compile-dest-file) load-path)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    95
	   load-path)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    96
    (load "cc-mode" nil t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    97
    (load "cc-fonts" nil t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    98
    (load "cc-langs" nil t)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
    99
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   100
(eval-and-compile
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   101
  ;; Make our mode known to the language constant system.  Use Java
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   102
  ;; mode as the fallback for the constants we don't change here.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   103
  ;; This needs to be done also at compile time since the language
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   104
  ;; constants are evaluated then.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   105
  (c-add-language 'vala-mode 'java-mode))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   106
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   107
;; Java uses a series of regexes to change the font-lock for class
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   108
;; references. The problem comes in because Java uses Pascal (leading
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   109
;; space in names, SomeClass) for class and package names, but
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   110
;; Camel-casing (initial lowercase, upper case in words,
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   111
;; i.e. someVariable) for variables.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   112
;;(error (byte-compile-dest-file))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   113
;;(error (c-get-current-file))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   114
(c-lang-defconst c-opt-after-id-concat-key
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   115
  vala (if (c-lang-const c-opt-identifier-concat-key)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   116
	   (c-lang-const c-symbol-start)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   117
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   118
(c-lang-defconst c-basic-matchers-before
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   119
  vala `(
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   120
;;;; Font-lock the attributes by searching for the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   121
;;;; appropriate regex and marking it as TODO.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   122
	 ;;,`(,(concat "\\(" vala-attribute-regex "\\)")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   123
	 ;;   0 font-lock-function-name-face)	   
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   124
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   125
	 ;; Put a warning face on the opener of unclosed strings that
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   126
	 ;; can't span lines.  Later font
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   127
	 ;; lock packages have a `font-lock-syntactic-face-function' for
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   128
	 ;; this, but it doesn't give the control we want since any
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   129
	 ;; fontification done inside the function will be
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   130
	 ;; unconditionally overridden.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   131
	 ,(c-make-font-lock-search-function
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   132
	   ;; Match a char before the string starter to make
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   133
	   ;; `c-skip-comments-and-strings' work correctly.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   134
	   (concat ".\\(" c-string-limit-regexp "\\)")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   135
	   '((c-font-lock-invalid-string)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   136
	   
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   137
	 ;; Fontify keyword constants.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   138
	 ,@(when (c-lang-const c-constant-kwds)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   139
	     (let ((re (c-make-keywords-re nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   140
			 (c-lang-const c-constant-kwds))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   141
	       `((eval . (list ,(concat "\\<\\(" re "\\)\\>")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   142
			       1 c-constant-face-name)))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   143
	   
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   144
	 ;; Fontify all keywords except the primitive types.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   145
	 ,`(,(concat "\\<" (c-lang-const c-regular-keywords-regexp))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   146
	    1 font-lock-keyword-face)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   147
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   148
	 ;; Fontify leading identifiers in fully
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   149
	 ;; qualified names like "Foo.Bar".
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   150
	 ,@(when (c-lang-const c-opt-identifier-concat-key)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   151
	     `((,(byte-compile
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   152
		  `(lambda (limit)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   153
		     (while (re-search-forward
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   154
			     ,(concat "\\(\\<" ; 1
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   155
				      "\\(" (c-lang-const c-symbol-key)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   156
				      "\\)" ; 2
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   157
				      "[ \t\n\r\f\v]*"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   158
				      (c-lang-const
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   159
				       c-opt-identifier-concat-key)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   160
				      "[ \t\n\r\f\v]*"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   161
				      "\\)"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   162
				      "\\("
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   163
				      (c-lang-const
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   164
				       c-opt-after-id-concat-key)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   165
				      "\\)")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   166
			     limit t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   167
		       (unless (progn
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   168
				 (goto-char (match-beginning 0))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   169
				 (c-skip-comments-and-strings limit))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   170
			 (or (get-text-property (match-beginning 2) 'face)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   171
			     (c-put-font-lock-face (match-beginning 2)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   172
						   (match-end 2)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   173
						   c-reference-face-name))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   174
			 (goto-char (match-end 1)))))))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   175
	 ))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   176
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   177
;; Vala does not allow a leading qualifier operator. It also doesn't
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   178
;; allow the ".*" construct of Java. So, we redo this regex without
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   179
;; the "\\|\\*" regex.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   180
(c-lang-defconst c-identifier-key
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   181
  vala (concat "\\(" (c-lang-const c-symbol-key) "\\)" ; 1
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   182
	       (concat "\\("
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   183
		       "[ \t\n\r\f\v]*"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   184
		       (c-lang-const c-opt-identifier-concat-key)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   185
		       "[ \t\n\r\f\v]*"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   186
		       (concat "\\("
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   187
			       "\\(" (c-lang-const c-symbol-key) "\\)"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   188
			       "\\)")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   189
		       "\\)*")))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   190
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   191
;; Vala has a few rules that are slightly different than Java for
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   192
;; operators. This also removed the Java's "super" and replaces it
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   193
;; with the Vala's "base".
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   194
(c-lang-defconst c-operators
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   195
  vala `((prefix "base")))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   196
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   197
;; Vala directives ?
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   198
;; (c-lang-defconst c-opt-cpp-prefix
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   199
;;   csharp "^\\s *#.*")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   200
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   201
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   202
;; Vala uses the following assignment operators
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   203
(c-lang-defconst c-assignment-operators
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   204
  vala '("=" "*=" "/=" "%=" "+=" "-=" ">>=" "<<="
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   205
	 "&=" "^=" "|=" "++" "--"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   206
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   207
;; This defines the primative types for Vala
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   208
(c-lang-defconst c-primitive-type-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   209
  vala '("void" "char" "int" "float" "double" "string"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   210
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   211
;; The keywords that define that the following is a type, such as a
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   212
;; class definition.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   213
(c-lang-defconst c-type-prefix-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   214
  vala '("class" "interface" "struct" "enum" "signal"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   215
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   216
;; Type modifier keywords. They appear anywhere in types, but modifiy
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   217
;; instead create one.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   218
(c-lang-defconst c-type-modifier-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   219
  vala '("const"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   220
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   221
;; Structures that are similiar to classes.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   222
(c-lang-defconst c-class-decl-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   223
  vala '("class" "interface"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   224
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   225
;; The various modifiers used for class and method descriptions.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   226
(c-lang-defconst c-modifier-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   227
  vala '("public" "partial" "private" "const" "abstract"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   228
	 "protected" "ref" "in" "out" "static" "virtual"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   229
	 "override" "params" "internal" "weak" "owned"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   230
	 "unowned"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   231
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   232
;; We don't use the protection level stuff because it breaks the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   233
;; method indenting. Not sure why, though.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   234
(c-lang-defconst c-protection-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   235
  vala nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   236
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   237
;; Define the keywords that can have something following after them.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   238
(c-lang-defconst c-type-list-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   239
  vala '("struct" "class" "interface" "is" "as"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   240
	 "delegate" "event" "set" "get" "add" "remove"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   241
	 "callback" "signal" "var" "default"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   242
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   243
;; This allows the classes after the : in the class declartion to be
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   244
;; fontified. 
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   245
(c-lang-defconst c-typeless-decl-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   246
  vala '(":"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   247
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   248
;; Sets up the enum to handle the list properly
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   249
(c-lang-defconst c-brace-list-decl-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   250
  vala '("enum" "errordomain"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   251
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   252
;; We need to remove Java's package keyword
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   253
(c-lang-defconst c-ref-list-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   254
  vala '("using" "namespace" "construct"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   255
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   256
;; Follow-on blocks that don't require a brace
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   257
(c-lang-defconst c-block-stmt-2-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   258
  vala '("for" "if" "switch" "while" "catch" "foreach" "lock"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   259
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   260
;; Statements that break out of braces
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   261
(c-lang-defconst c-simple-stmt-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   262
  vala '("return" "continue" "break" "throw"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   263
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   264
;; Statements that allow a label
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   265
;; TODO?
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   266
(c-lang-defconst c-before-label-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   267
  vala nil)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   268
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   269
;; Constant keywords
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   270
(c-lang-defconst c-constant-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   271
  vala '("true" "false" "null"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   272
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   273
;; Keywords that start "primary expressions."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   274
(c-lang-defconst c-primary-expr-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   275
  vala '("this" "base"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   276
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   277
;; We need to treat namespace as an outer block to class indenting
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   278
;; works properly.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   279
(c-lang-defconst c-other-block-decl-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   280
  vala '("namespace"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   281
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   282
;; We need to include the "in" for the foreach
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   283
(c-lang-defconst c-other-kwds
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   284
  vala '("in" "sizeof" "typeof"))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   285
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   286
(require 'cc-awk)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   287
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   288
(c-lang-defconst c-at-vsemi-p-fn
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   289
  vala 'c-awk-at-vsemi-p)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   290
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   291
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   292
(defcustom vala-font-lock-extra-types nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   293
  "*List of extra types (aside from the type keywords) to recognize in Vala mode.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   294
Each list item should be a regexp matching a single identifier.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   295
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   296
(defconst vala-font-lock-keywords-1 (c-lang-const c-matchers-1 vala)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   297
  "Minimal highlighting for Vala mode.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   298
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   299
(defconst vala-font-lock-keywords-2 (c-lang-const c-matchers-2 vala)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   300
  "Fast normal highlighting for Vala mode.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   301
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   302
(defconst vala-font-lock-keywords-3 (c-lang-const c-matchers-3 vala)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   303
  "Accurate normal highlighting for Vala mode.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   304
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   305
(defvar vala-font-lock-keywords vala-font-lock-keywords-3
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   306
  "Default expressions to highlight in Vala mode.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   307
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   308
(defvar vala-mode-syntax-table
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   309
  nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   310
  "Syntax table used in vala-mode buffers.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   311
(or vala-mode-syntax-table
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   312
    (setq vala-mode-syntax-table
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   313
	  (funcall (c-lang-const c-make-mode-syntax-table vala))))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   314
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   315
(defvar vala-mode-abbrev-table nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   316
  "Abbreviation table used in vala-mode buffers.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   317
(c-define-abbrev-table 'vala-mode-abbrev-table
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   318
  ;; Keywords that if they occur first on a line
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   319
  ;; might alter the syntactic context, and which
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   320
  ;; therefore should trig reindentation when
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   321
  ;; they are completed.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   322
  '(("else" "else" c-electric-continued-statement 0)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   323
    ("while" "while" c-electric-continued-statement 0)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   324
    ("catch" "catch" c-electric-continued-statement 0)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   325
    ("finally" "finally" c-electric-continued-statement 0)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   326
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   327
(defvar vala-mode-map (let ((map (c-make-inherited-keymap)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   328
			;; Add bindings which are only useful for Vala
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   329
			map)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   330
  "Keymap used in vala-mode buffers.")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   331
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   332
;;(easy-menu-define vala-menu vala-mode-map "Vala Mode Commands"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   333
;;		  ;; Can use `vala' as the language for `c-mode-menu'
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   334
;;		  ;; since its definition covers any language.  In
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   335
;;		  ;; this case the language is used to adapt to the
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   336
;;		  ;; nonexistence of a cpp pass and thus removing some
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   337
;;		  ;; irrelevant menu alternatives.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   338
;;		  (cons "Vala" (c-lang-const c-mode-menu vala)))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   339
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   340
;;; Autoload mode trigger
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   341
(add-to-list 'auto-mode-alist '("\\.vala$" . vala-mode))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   342
(add-to-list 'auto-mode-alist '("\\.vapi$" . vala-mode))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   343
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   344
;; Custom variables
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   345
(defcustom vala-mode-hook nil
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   346
  "*Hook called by `vala-mode'."
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   347
  :type 'hook
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   348
  :group 'c)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   349
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   350
;;; The entry point into the mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   351
;;;###autoload
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   352
(defun vala-mode ()
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   353
  "Major mode for editing Vala code.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   354
This is a simple example of a separate mode derived from CC Mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   355
to support a language with syntax similar to
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   356
C#/C/C++/ObjC/Java/IDL/Pike.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   357
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   358
The hook `c-mode-common-hook' is run with no args at mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   359
initialization, then `vala-mode-hook'.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   360
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   361
Key bindings:
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   362
\\{vala-mode-map}"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   363
  (interactive)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   364
  (kill-all-local-variables)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   365
  (c-initialize-cc-mode t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   366
  (set-syntax-table vala-mode-syntax-table)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   367
  (setq major-mode 'vala-mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   368
	mode-name "Vala"
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   369
	local-abbrev-table vala-mode-abbrev-table
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   370
	abbrev-mode t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   371
  (use-local-map c-mode-map)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   372
  ;; `c-init-language-vars' is a macro that is expanded at compile
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   373
  ;; time to a large `setq' with all the language variables and their
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   374
  ;; customized values for our language.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   375
  (c-init-language-vars vala-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   376
  ;; `c-common-init' initializes most of the components of a CC Mode
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   377
  ;; buffer, including setup of the mode menu, font-lock, etc.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   378
  ;; There's also a lower level routine `c-basic-common-init' that
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   379
  ;; only makes the necessary initialization to get the syntactic
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   380
  ;; analysis and similar things working.
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   381
  (c-common-init 'vala-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   382
  ;;(easy-menu-add vala-menu)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   383
  (c-set-style "linux")
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   384
  (setq indent-tabs-mode t)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   385
  (setq c-basic-offset 4)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   386
  (setq tab-width 4)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   387
  (c-toggle-auto-newline -1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   388
  (c-toggle-hungry-state -1)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   389
  (run-hooks 'c-mode-common-hook)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   390
  (run-hooks 'vala-mode-hook)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   391
  (c-update-modeline))
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   392
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   393
(provide 'vala-mode)
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   394
a7906973ceb5 Added some old files.
Luke Hoersten <Luke@Hoersten.org>
parents:
diff changeset
   395
;;; vala-mode.el ends here