-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcuf-mode.el
76 lines (60 loc) · 2.33 KB
/
cuf-mode.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
;;; cuf-mode.el --- Major mode for editing CUDA Fortra
;; This file is NOT part of Emacs.
;; Copyright (C) 2011 Lawrence Mitchell <[email protected]>
;; Filename: cuf-mode.el
;; Created: 2011-11-18
;; COPYRIGHT NOTICE
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2 of the
;; License, or (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more
;; details. http://www.gnu.org/copyleft/gpl.html
;;
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If you did not, write to the Free Software
;; Foundation, Inc., 675 Mass Ave., Cambridge, MA 02139, USA.
;;; Commentary:
;; Extra fontification for CUDA Fortran based on f90 support.
;;; Code:
(eval-when-compile
(require 'rx))
(require 'f90)
(defconst cuf-keywords
(rx bow (group (or "threadIdx" "blockIdx" "blockDim"
"gridDim" "shared" "device" "constant"))
eow))
(defconst cuf-procedure-modifiers
(rx bow (group "attributes") eow (0+ space)
"(" (0+ space) bow (group (or "host" "device" "global"))
eow
(0+ space) ")"))
(defconst cuf-device-call
(rx (group "<<<" (0+ space) (+ word)
(0+ (and (0+ space) "," (0+ space) (+ word)))
(0+ space) ">>>")))
(defvar cuf-font-lock-keywords
(append
f90-font-lock-keywords
(list
`(,cuf-procedure-modifiers (1 font-lock-keyword-face) (2 font-lock-constant-face))
`(,cuf-device-call (1 font-lock-constant-face))
`(,cuf-keywords (1 font-lock-keyword-face)))))
(defvar cuf-font-lock-keywords-1
(append
f90-font-lock-keywords-4
(list
`(,cuf-procedure-modifiers (1 font-lock-keyword-face) (2 font-lock-constant-face))
`(,cuf-device-call (1 font-lock-constant-face))
`(,cuf-keywords (1 font-lock-keyword-face)))))
(define-derived-mode cuf-mode f90-mode "CUF"
"Major mode for editing CUDA Fortran."
(set (make-local-variable 'font-lock-defaults)
'((cuf-font-lock-keywords cuf-font-lock-keywords-1)
nil t)))
(provide 'cuf-mode)
;;; cuf-mode.el ends here