-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlammps.el
210 lines (186 loc) · 5.01 KB
/
lammps.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
;; LAMMPS auto-mode
;; translation of keyword classes from tools/vim
;; see http://xahlee.org/emacs/elisp_syntax_coloring.html
;; define several keyword classes
(defvar lammps-output
'("log"
"write_restart"
"dump"
"undump"
"thermo"
"thermo_modify"
"thermo_style"
"print")
"LAMMPS output.")
(defvar lammps-read
'("include"
"read"
"read_restart"
"read_data")
"LAMMPS read.")
(defvar lammps-lattice
'("boundary"
"units"
"atom_style"
"lattice"
"region"
"create_box"
"create_atoms"
"dielectric"
"delete_atoms"
"change_box"
"dimension"
"replicate")
"LAMMPS lattice.")
(defvar lammps-define
'("variable"
"group")
"LAMMPS define.")
(defvar lammps-run
'("minimize"
"run")
"LAMMPS run.")
(defvar lammps-setup
'("min_style"
"fix_modify"
"run_style"
"timestep"
"neighbor"
"neigh_modify"
"fix"
"unfix"
"communicate"
"newton"
"nthreads"
"processors"
"reset_timestep")
"LAMMPS setup.")
(defvar lammps-particle
'("pair_coeff"
"pair_style"
"pair_modify"
"mass"
"velocity"
"angle_coeff"
"angle_style"
"atom_modify"
"atom_style"
"bond_coeff"
"bond_style"
"delete_bonds"
"kspace_style"
"kspace_modify"
"dihedral_style"
"dihedral_coeff"
"improper_style"
"improper_coeff")
"LAMMPS particle.")
(defvar lammps-repeat
'("jump"
"next"
"loop")
"LAMMPS repeat.")
(defvar lammps-operator
'("equal"
"add"
"sub"
"mult"
"div")
"LAMMPS operator.")
(defvar lammps-conditional
'("if"
"then"
"elif"
"else")
"LAMMPS conditional.")
(defvar lammps-special
'("EDGE"
"NULL")
"LAMMPS special.")
;; create the regex string for each class of keywords
(defvar lammps-output-regexp (regexp-opt lammps-output 'words))
(defvar lammps-read-regexp (regexp-opt lammps-read 'words))
(defvar lammps-lattice-regexp (regexp-opt lammps-lattice 'words))
(defvar lammps-define-regexp (regexp-opt lammps-define 'words))
(defvar lammps-run-regexp (regexp-opt lammps-run 'words))
(defvar lammps-setup-regexp (regexp-opt lammps-setup 'words))
(defvar lammps-particle-regexp (regexp-opt lammps-particle 'words))
(defvar lammps-repeat-regexp (regexp-opt lammps-repeat 'words))
(defvar lammps-operator-regexp (regexp-opt lammps-operator 'words))
(defvar lammps-conditional-regexp (regexp-opt lammps-conditional 'words))
(defvar lammps-special-regexp (regexp-opt lammps-special 'words))
;; Add some more classes using explicit regexp
(defvar lammps-number-regexp
"\\<[0-9]\\>")
(defvar lammps-float-regexp
"\\<[0-9-+]+.[0-9-+]*\\>")
(defvar lammps-comment-regexp
"#*")
(defvar lammps-variable-regexp
"\\$\\({[a-zA-Z0-9_]+}\\)\\|\\$[A-Za-z]")
;; clear memory
(setq lammps-output nil)
(setq lammps-read nil)
(setq lammps-lattice nil)
(setq lammps-define nil)
(setq lammps-run nil)
(setq lammps-setup nil)
(setq lammps-particle nil)
(setq lammps-repeat nil)
(setq lammps-operator nil)
(setq lammps-conditional nil)
(setq lammps-special nil)
;; create the list for font-lock.
;; each class of keyword is given a particular face
(setq
lammps-font-lock-keywords
`((,lammps-output-regexp . font-lock-function-name-face)
(,lammps-read-regexp . font-lock-preprocessor-face)
(,lammps-lattice-regexp . font-lock-type-face)
(,lammps-define-regexp . font-lock-variable-name-face)
(,lammps-run-regexp . font-lock-keyword-face)
(,lammps-setup-regexp . font-lock-type-face)
(,lammps-particle-regexp . font-lock-type-face)
(,lammps-repeat-regexp . font-lock-string-face)
(,lammps-operator-regexp . font-lock-warning-face)
(,lammps-conditional-regexp . font-lock-builtin-face)
(,lammps-special-regexp . font-lock-constant-face)
(,lammps-float-regexp . font-lock-constant-face)
(,lammps-number-regexp . font-lock-constant-face)
(,lammps-comment-regexp . font-lock-constant-face)
(,lammps-variable-regexp . font-lock-function-name-face)
;; note: order above matters. lammps-variable-regexp¡ goes last because
;; otherwise the keyword ´state¡ in the variable ´state_entry¡
;; would be highlighted.
))
;; define the mode
(define-derived-mode lammps-mode shell-script-mode
"lammps mode"
"Major mode for editing LAMMPS input scripts ..."
;; ...
;; code for syntax highlighting
(setq font-lock-defaults '((lammps-font-lock-keywords)))
;; clear memory
(setq lammps-output-regexp nil)
(setq lammps-read-regexp nil)
(setq lammps-lattice-regexp nil)
(setq lammps-define-regexp nil)
(setq lammps-run-regexp nil)
(setq lammps-setup-regexp nil)
(setq lammps-particle-regexp nil)
(setq lammps-repeat-regexp nil)
(setq lammps-operator-regexp nil)
(setq lammps-conditional-regexp nil)
(setq lammps-special-regexp nil)
(setq lammps-number-regexp nil)
(setq lammps-float-regexp nil)
(setq lammps-comment-regexp nil)
(setq lammps-variable-regexp nil))
;; apply it to specified filename patterns
(setq
auto-mode-alist
(append
auto-mode-alist
'(("in\\." . lammps-mode))
'(("\\.lmp\\'" . lammps-mode))
))