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
	 Tommy Olofsson
					Tommy Olofsson