Download
(provide 'sfst)
(defvar sfst-mode-hook nil)
(defconst sfst-version "0.02" "Version of sfst-mode")
(setq auto-mode-alist
(append '(("\\.s?fst$" . sfst-mode)
) auto-mode-alist))
(defvar sfst-mode-syntax-table
(let ((sfst-mode-syntax-table (make-syntax-table)))
(modify-syntax-entry ?% "<" sfst-mode-syntax-table)
(modify-syntax-entry ?\n ">" sfst-mode-syntax-table)
(modify-syntax-entry ?\\ "\\" sfst-mode-syntax-table)
(modify-syntax-entry ?\" "." sfst-mode-syntax-table)
;; (modify-syntax-entry ?\" "." sfst-mode-syntax-table)
(modify-syntax-entry ?\' "$" sfst-mode-syntax-table)
;; (modify-syntax-entry ?< "\"" sfst-mode-syntax-table)
(modify-syntax-entry ?< "." sfst-mode-syntax-table)
(modify-syntax-entry ?> "." sfst-mode-syntax-table)
(modify-syntax-entry ?{ "(}" sfst-mode-syntax-table)
(modify-syntax-entry ?} "){" sfst-mode-syntax-table)
(modify-syntax-entry ?( "()" sfst-mode-syntax-table)
(modify-syntax-entry ?) ")(" sfst-mode-syntax-table)
(modify-syntax-entry ?[ "(]" sfst-mode-syntax-table)
(modify-syntax-entry ?] ")[" sfst-mode-syntax-table)
sfst-mode-syntax-table)
"Syntax table for sfst-mode")
(defconst sfst-font-lock-keywords
(list
(list "\\(\\\\->\\)\\|\\(\\\\.\\)"
(list 1 'font-lock-function-name-face nil t)
(list 2 'font-lock-unfontify-region-function nil t))
(list "\\(\\<ALPHABET\\>\\)"
(list 1 'font-lock-keyword-face nil t))
(list "\\(?:\\(#include\\)[ \t]+\\)?\\(\"<?.+?>?\"\\)"
(list 1 'font-lock-keyword-face nil t)
(list 2 'font-lock-constant-face nil t))
(list "\\(\\([$#]\\)=?\\(?:\\\\\\$\\|\\\\\\#\\|[^ \n\t]\\)+?\\2\\)"
(list 1 'font-lock-variable-name-face nil t))
(list "\\([_/\\\\^]->\\|[\\^_]?\\(?:<=>?\\|<?=>\\)\\|[:|&!?*+^_]\\|^_\\|||\\|<<\\|__\\)"
(list 1 'font-lock-function-name-face nil t))
(list "\\(<.*?>\\)"
(list 1 'font-lock-type-face nil t))
)
"Expressions to highlight in sfst-mode.")
(defun sfst-font ()
"Set font-lock variables for sfst mode."
(make-local-variable 'font-lock-keywords-case-fold-search)
(setq font-lock-keywords-case-fold-search nil)
(put major-mode 'font-lock-keywords-case-fold-search nil)
(make-local-variable 'font-lock-defaults)
(setq font-lock-defaults '(sfst-font-lock-keywords nil nil)))
(defun sfst-mode ()
"Major mode for editing files describing
finite state transducers to be used with sfst-tools
(Stuttgart Finite State Transducer Tools, see
http://www.ims.uni-stuttgart.de/projekte/gramotron/SOFTWARE/SFST.html)."
(interactive)
(kill-all-local-variables)
(setq major-mode 'sfst-mode)
(setq mode-name "SFST")
(setq parse-sexp-ignore-comments t)
(set-syntax-table sfst-mode-syntax-table)
(make-local-variable 'comment-start)
(setq comment-start "% ")
(make-local-variable 'comment-end)
(setq comment-end "")
(make-local-variable 'comment-start-skip)
(setq comment-start-skip "% *")
(make-local-variable 'completion-ignore-case)
(setq completion-ignore-case nil)
(sfst-font)
(run-hooks 'sfst-mode-hook))