David Megginson wrote:
> Great.  Let me know when you have time to port it from vim to an
> editor.

:)

There's already a nasal-mode.el, actually.  It's attached; it's
previously been hidden in the source tarball on the nasal project
website.

It mostly works.  I did it by taking a chainsaw to awk-mode with a
blindfold on, and trying to avoid changing the stuff that confused me.
Elisp just isn't my thing. :)

Andy

;; nasal-mode.el
;;
;; A major mode for writing Nasal code.
;; Copyright (C) 2003 Andrew Ross
;;
;; Based very closely on awk-mode.el as shipped with GNU Emacs 21.2
;; Copyright (C) 1988,94,96,2000  Free Software Foundation, Inc.
;;
;; It should be sufficient to drop this into your Emacs site-lisp
;; directory (/usr/share/emacs/site-lisp on most linux distributions)
;; and add a line:
;;
;; (require 'nasal-mode)
;;
;; ...to your .emacs file.  All files with a .nas extension should
;; then be associated with nasal mode automatically.  I am *not* an
;; elisp hacker, though, so YMMV.
;;

(defvar nasal-mode-syntax-table nil "Syntax table in use in Nasal-mode buffers.")
(if nasal-mode-syntax-table ()
  (setq nasal-mode-syntax-table (make-syntax-table))
  ; Operator characters are "punctuation"
  (modify-syntax-entry ?!  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?*  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?+  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?-  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?/  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?~  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?:  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?.  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?,  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?\; "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?=  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?<  "."  nasal-mode-syntax-table)
  (modify-syntax-entry ?>  "."  nasal-mode-syntax-table)
  ; Underscores are allowed as "symbol constituent"
  (modify-syntax-entry ?_  "_"  nasal-mode-syntax-table)
  ; Backslash escapes; pound sign starts comments that newlines end.
  (modify-syntax-entry ?\\ "\\" nasal-mode-syntax-table)
  (modify-syntax-entry ?\# "<"  nasal-mode-syntax-table)
  (modify-syntax-entry ?\n ">"  nasal-mode-syntax-table)
  ; Square brackets act as parenthesis
  (modify-syntax-entry ?\[ "(]"  nasal-mode-syntax-table)
  (modify-syntax-entry ?]  ")"  nasal-mode-syntax-table))

(defconst nasal-font-lock-keywords
  (eval-when-compile
    (list
     (cons (regexp-opt '("parents" "me" "arg") 'words)
           'font-lock-variable-name-face)

     (regexp-opt '("and" "or" "nil" "if" "elsif" "else" "for" "foreach"
                   "while" "return" "break" "continue" "func") 'words)

     (list (regexp-opt '("size" "keys" "append" "pop" "int" "streq" "substr"
                         "contains" "typeof") 'words)
           1 'font-lock-builtin-face)
     ))
  "Nasal-specific syntax to be hilighted.")

(define-derived-mode nasal-mode c-mode "Nasal"
  "Major mode for editing Nasal code.
This is a C mode variant customized for Nasal's syntax.  It shares most of
C mode's features.  Turning on Nasal mode runs `nasal-mode-hook'."
  (set (make-local-variable 'paragraph-start) (concat "$\\|" page-delimiter))
  (set (make-local-variable 'paragraph-separate) paragraph-start)
  (set (make-local-variable 'comment-start) "# ")
  (set (make-local-variable 'comment-end) "")
  (set (make-local-variable 'comment-start-skip) "#+ *")
  (setq font-lock-defaults '(nasal-font-lock-keywords nil nil ((?_ . "w")))))

(provide 'nasal-mode)

;; Set us up to load by default for .nas files
(setq auto-mode-alist (append '(("\\.nas$" . nasal-mode))
                              auto-mode-alist))
_______________________________________________
Flightgear-devel mailing list
[EMAIL PROTECTED]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel

Reply via email to