Implemented basic syntax highlighting.
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*~
|
||||
\#*
|
||||
140
krl-mode.el
Normal file
140
krl-mode.el
Normal file
@@ -0,0 +1,140 @@
|
||||
(defvar krl-mode-hook nil)
|
||||
(defvar krl-mode-map
|
||||
(let ((map (make-keymap)))
|
||||
(define-key map "\C-j" 'newline-and-indent)
|
||||
map)
|
||||
"Keymap for KRL major mode")
|
||||
|
||||
(add-to-list 'auto-mode-alist '("\\.src\\'" . krl-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.dat\\'" . krl-mode))
|
||||
(add-to-list 'auto-mode-alist '("\\.sub\\'" . krl-mode))
|
||||
|
||||
(defconst krl-keywords
|
||||
'(
|
||||
"DEF"
|
||||
"END"
|
||||
"DEFDAT"
|
||||
"ENDDAT"
|
||||
"DEFFCT"
|
||||
"ENDFCT"
|
||||
"DECL"
|
||||
"RETURN"
|
||||
"FOR"
|
||||
"TO"
|
||||
"ENDFOR"
|
||||
"WHILE"
|
||||
"ENDWHILE"
|
||||
"IF"
|
||||
"THEN"
|
||||
"ELSE"
|
||||
"ENDIF"
|
||||
"SWITCH"
|
||||
"CASE"
|
||||
"ENDSWITCH"
|
||||
"LOOP"
|
||||
"ENUM"
|
||||
"NOT"
|
||||
"AND"
|
||||
"OR"
|
||||
"EXOR"
|
||||
"B_NOT"
|
||||
"B_AND"
|
||||
"B_OR"
|
||||
"B_EXOR"
|
||||
"INTERRUPT"
|
||||
"WHEN"
|
||||
"DO"
|
||||
; TODO: Add more stuff.
|
||||
))
|
||||
|
||||
(defconst krl-warning-keywords
|
||||
'(
|
||||
"HALT"
|
||||
"BRAKE"
|
||||
"EXIT"
|
||||
"WAIT"
|
||||
))
|
||||
|
||||
(defconst krl-types
|
||||
'(
|
||||
"CHAR"
|
||||
"INT"
|
||||
"REAL"
|
||||
"AXIS"
|
||||
"E6AXIS"
|
||||
"POS"
|
||||
"E6POS"
|
||||
))
|
||||
|
||||
(defconst krl-constants
|
||||
'(
|
||||
"TRUE"
|
||||
"FALSE"
|
||||
"$NULLFRAME"
|
||||
"$ROBROOT"
|
||||
))
|
||||
|
||||
(defconst krl-builtins
|
||||
'(
|
||||
; Motion
|
||||
"BAS"
|
||||
"PTP"
|
||||
"PTP_REL"
|
||||
"LIN"
|
||||
"CIRC"
|
||||
; Num functions
|
||||
"ABS"
|
||||
"SQRT"
|
||||
"SIN"
|
||||
"COS"
|
||||
"TAN"
|
||||
"ACOS"
|
||||
"ATAN2"
|
||||
; String functions
|
||||
"StrDeclLen"
|
||||
"StrLen"
|
||||
"StrClear"
|
||||
"StrAdd"
|
||||
"StrFind"
|
||||
"StrComp"
|
||||
"StrCopy"
|
||||
"SWRITE"
|
||||
"SREAD"
|
||||
; Magic
|
||||
"CWRITE"
|
||||
"CREAD"
|
||||
))
|
||||
|
||||
(defconst krl-font-lock-keywords
|
||||
(list
|
||||
(cons (concat "\\<" (regexp-opt krl-keywords t) "\\>") 'font-lock-keyword-face)
|
||||
(cons (concat "\\<" (regexp-opt krl-types t) "\\>") 'font-lock-type-face)
|
||||
(cons (concat "\\<" (regexp-opt krl-warning-keywords t) "\\>") 'font-lock-warning-face)
|
||||
(cons (concat "\\<" (regexp-opt krl-constants t) "\\>") 'font-lock-constant-face)
|
||||
'("\\(#\\w*\\)" . font-lock-constant-face) ; Enum constants
|
||||
(cons (concat "\\<" (regexp-opt krl-builtins t) "\\>") 'font-lock-builtin-face)
|
||||
'("\\($\\w*\\)" . font-lock-variable-name-face) ; System variables
|
||||
)
|
||||
"Highlighting expressions for KRL mode")
|
||||
|
||||
(defvar krl-mode-syntax-table
|
||||
(let ((st (make-syntax-table)))
|
||||
(modify-syntax-entry ?_ "w" st)
|
||||
(modify-syntax-entry ?\; "<" st)
|
||||
(modify-syntax-entry ?& "<" st)
|
||||
(modify-syntax-entry ?\n ">" st)
|
||||
st)
|
||||
"Syntax table for krl-mode")
|
||||
|
||||
(defun krl-mode ()
|
||||
"Major mode for editing KRL files"
|
||||
(interactive)
|
||||
(kill-all-local-variables)
|
||||
(set-syntax-table krl-mode-syntax-table)
|
||||
(use-local-map krl-mode-map)
|
||||
(set (make-local-variable 'font-lock-defaults) '(krl-font-lock-keywords))
|
||||
(setq major-mode 'krl-mode)
|
||||
(setq mode-name "KRL")
|
||||
(run-hooks 'krl-mode-hook))
|
||||
|
||||
(provide 'krl-mode)
|
||||
Reference in New Issue
Block a user