This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/wenv/emacs/logtalk.el
pmoura f26a3b6ca9 Logtalk 2.15.5 files.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@955 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
2003-12-30 13:33:51 +00:00

252 lines
8.6 KiB
EmacsLisp

;; logtalk.el -- font lock support for Logtalk (http://www.logtalk.org/)
;; Copyright (C) 2003 Paulo Moura
;; Author: Paulo Moura
;; Creation date: November 15, 2003
;; Last modification date: December 16, 2003
;; Version: 0.4
;; Installation:
;;
;; Add the following lines in your Emacs init file, for example
;; your ~/.emacs file.
;;
;; (add-hook 'logtalk-mode-hook 'my-logtalk-mode-hook)
;;
;; (defun my-logtalk-mode-hook ()
;; (cond (window-system
;; (require 'logtalk-font-lock)
;; (turn-on-font-lock))))
;;
;; (setq font-lock-maximum-decoration t)
;;
;; (autoload 'logtalk-mode "logtalk" "Major mode for editing Logtalk programs." t)
;; (setq auto-mode-alist (cons '("\\.lgt\\'" . logtalk-mode) auto-mode-alist))
;; setup
(defvar logtalk-mode-version "0.2"
"Logtalk mode version number")
(defvar logtalk-mode-hook nil)
(defvar logtalk-mode-map nil)
(if logtalk-mode-map nil
(setq logtalk-mode-map (make-keymap)))
;; syntax highlighting
(defvar logtalk-font-lock-keywords nil)
;; syntax table
(defvar logtalk-mode-syntax-table
(let ((logtalk-mode-syntax-table (make-syntax-table)))
(modify-syntax-entry ?_ "w" logtalk-mode-syntax-table)
(modify-syntax-entry ?_ "_" logtalk-mode-syntax-table)
(modify-syntax-entry ?/ ". 14b" logtalk-mode-syntax-table)
(modify-syntax-entry ?* ". 23b" logtalk-mode-syntax-table)
(modify-syntax-entry ?% "<" logtalk-mode-syntax-table)
(modify-syntax-entry ?\n ">" logtalk-mode-syntax-table)
logtalk-mode-syntax-table)
"Syntax table for logtalk-mode")
;; create logtalk font-lock-faces
(make-face 'logtalk-directive-face)
(set-face-foreground 'logtalk-directive-face "brown")
(make-face 'logtalk-built-in-predicate-face)
(set-face-foreground 'logtalk-built-in-predicate-face "darkmagenta")
(make-face 'logtalk-built-in-method-face)
(set-face-foreground 'logtalk-built-in-method-face "darkmagenta")
(make-face 'logtalk-message-operator-face)
(set-face-foreground 'logtalk-message-operator-face "blue")
(make-face 'logtalk-string-face)
(set-face-foreground 'logtalk-string-face "firebrick")
(make-face 'logtalk-number-face)
(set-face-foreground 'logtalk-number-face "blue")
(make-face 'logtalk-comment-face)
(set-face-foreground 'logtalk-comment-face "forest green")
;; set the font-lock-comment-face to the logtalk-comment-face
(setq font-lock-comment-face 'logtalk-comment-face)
;; set the font-lock-string-face to the logtalk-string-face
(setq font-lock-string-face 'logtalk-string-face)
(setq logtalk-font-lock-strings
'(
("\\(\"\\([^\n\"]\\|\\\\\"\\)*\"\\)" 1 'logtalk-string-face)
("\\(^\\|[^0-9]\\)\\('\\([^\n']\\|\\\\'\\)*'\\)" 2 'logtalk-string-face)
))
(setq logtalk-font-lock-directives
'(
("\\(\\(end_\\(?:category\\|object\\|protocol\\)\\)\\)\\([\.]\\)" 1 'logtalk-directive-face)
("\\(category\\|object\\|protocol\\)\\([(]\\)" 1 'logtalk-directive-face)
("\\(p\\(?:r\\(?:ivate\\|otected\\)\\|ublic\\)\\)\\([(]\\)" 1 'logtalk-directive-face)
("\\(calls\\|d\\(?:iscontiguous\\|ynamic\\)\\|in\\(?:fo\\|itialization\\)\\|m\\(?:\\(?:etapredicat\\|od\\)e\\)\\|op\\|uses\\)\\([(]\\)" 1 'logtalk-directive-face)
("\\(dynamic\\)\\([\.]\\)" 1 'logtalk-directive-face)
("\\(\\(?:extend\\|i\\(?:mp\\(?:\\(?:lemen\\|or\\)t\\)\\|nstantiate\\)\\|specialize\\)s\\)\\([(]\\)" 1 'logtalk-directive-face)
))
(setq logtalk-font-lock-built-in-methods
'(
("\\(parameter\\|se\\(?:lf\\|nder\\)\\|this\\)\\([(]\\)" 1 'logtalk-built-in-method-face)
("\\(current_predicate\\|predicate_property\\)\\([(]\\)" 1 'logtalk-built-in-method-face)
("\\(a\\(?:bolish\\|ssert[az]\\)\\|clause\\|retract\\(?:all\\)?\\)\\([(]\\)" 1 'logtalk-built-in-method-face)
("\\(bagof\\|f\\(?:\\(?:ind\\|or\\)all\\)\\|setof\\)\\([(]\\)" 1 'logtalk-built-in-method-face)
("\\(after\\|before\\)\\([(]\\)" 1 'logtalk-built-in-method-face)
("\\(phrase\\)\\([(]\\)" 1 'logtalk-built-in-method-face)
))
(setq logtalk-font-lock-built-in-predicates
'(
("\\(current_\\(?:category\\|object\\|protocol\\)\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(create\\(?:_object\\|e_\\(?:category\\|protocol\\)\\)\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(abolish_\\(?:category\\|object\\|protocol\\)\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(\\(?:category\\|object\\|protocol\\)_property\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(extends_\\(?:object\\|protocol\\)\\|i\\(?:mp\\(?:lements_protocol\\|orts_category\\)\\|nstantiates_object\\)\\|specializes_object\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(abolish_events\\|current_event\\|define_events\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(\\(?:curren\\|se\\)t_logtalk_flag\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(logtalk_\\(?:compile\\|load\\|version\\)\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(forall\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(retractall\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
;;
;; control constructs:
;;
("\\(ca\\(?:ll\\|tch\\)\\|throw\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(fail\\|true\\|!\\)" . 'logtalk-built-in-predicate-face)
;;
;; logic and control:
;;
("\\(once\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\\\\\+\\|repeat" . 'logtalk-built-in-predicate-face)
;;
;; term testing:
;;
("\\(atom\\(?:ic\\)?\\|compound\\|float\\|\\(?:intege\\|n\\(?:onva\\|umbe\\)\\|va\\)r\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
;;
;; term comparison:
;;
("==\\|@\\(?:=<\\|>=\\|[<>]\\)\\|\\\\==" . 'logtalk-built-in-predicate-face)
;;
;; term creation and decomposition:
;;
("\\(arg\\|copy_term\\|functor\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("=\\.\\." . 'logtalk-built-in-predicate-face)
;;
;; arithemtic evaluation:
;;
("\\<\\is\\>" . 'logtalk-built-in-predicate-face)
;;
;; arithemtic comparison:
("=:=\\|@\\(?:=<\\|>=\\|[<>]\\)\\|\\\\==" . 'logtalk-built-in-predicate-face)
;;
;; term unification:
;;
("\\\\?=" . 'logtalk-built-in-predicate-face)
;;
;; evaluable functors:
;;
("\\(abs\\|ceiling\\|flo\\(?:at\\(?:_\\(?:\\(?:fractional\\|integer\\)_part\\)\\)?\\|or\\)\\|mod\\|r\\(?:em\\|ound\\)\\|sign\\|truncate\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("//\\|[*+/-]" . 'logtalk-built-in-predicate-face)
("\\([[:blank:]]\\)\\(rem\\|mod\\)\\([[:blank:]]\\)" 2 'logtalk-built-in-predicate-face)
;;
;; other arithemtic functors:
;;
("\\(atan\\|cos\\|exp\\|log\\|s\\(?:in\\|qrt\\)\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\*\\*" 1 'logtalk-built-in-predicate-face)
;;
;; stream selection and control:
;;
("\\(at_end_of_stream\\|c\\(?:lose\\|urrent_\\(?:\\(?:in\\|out\\)put\\)\\)\\|flush_output\\|open\\|s\\(?:et_\\(?:input\\|output\\|stream_position\\)\\|tream_property\\)\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("\\(at_end_of_stream\\)" . 'logtalk-built-in-predicate-face)
;;
;; character input/output:
;;
("\\(get_c\\(?:har\\|ode\\)\\|nl\\|p\\(?:eek_c\\(?:har\\|ode\\)\\|ut_c\\(?:har\\|ode\\)\\)\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
;;
;; byte input/output:
;;
("\\(\\(?:get\\|p\\(?:eek\\|ut\\)\\)_byte\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
;;
;; term input/output:
;;
("\\(c\\(?:har_conversion\\|urrent_\\(?:char_conversion\\|op\\)\\)\\|op\\|read\\(?:_term\\)?\\|write\\(?:_\\(?:canonical\\|term\\)\\|q\\)?\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
;;
;; implementation defined hooks functions:
;;
("\\(\\(?:curren\\|se\\)t_prolog_flag\\|halt\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
("halt" . 'logtalk-built-in-predicate-face)
;;
;; atomic term processing:
;;
("\\(atom_\\(?:c\\(?:hars\\|o\\(?:des\\|ncat\\)\\)\\|length\\)\\|char_code\\|number_c\\(?:\\(?:har\\|ode\\)s\\)\\|sub_atom\\)\\([(]\\)" 1 'logtalk-built-in-predicate-face)
;;
;; bitwise functors:
("/\\\\\\|<<\\|>>\\|\\\\/" . 'logtalk-built-in-predicate-face)
("\\\\" . 'logtalk-built-in-predicate-face)
))
(setq logtalk-font-lock-operators
'(
("::\\|\\^\\^\\|[{}]" . 'logtalk-message-operator-face)
))
(setq logtalk-font-lock-keywords
(append
logtalk-font-lock-strings
logtalk-font-lock-directives
logtalk-font-lock-built-in-methods
logtalk-font-lock-built-in-predicates
logtalk-font-lock-operators
))
;; entry function
(defun logtalk-mode ()
"Major mode for editing Logtalk files"
(interactive)
(kill-all-local-variables)
(setq tab-width 4)
(set-syntax-table logtalk-mode-syntax-table)
(set (make-local-variable 'font-lock-defaults) '(logtalk-font-lock-keywords))
(turn-on-font-lock)
(setq major-mode 'logtalk-mode)
(setq mode-name "Logtalk")
(run-hooks 'logtalk-mode-hook))
(provide 'logtalk-mode)