1 |
;;; pspp-mode-el -- Major mode for editing PSPP files |
;;; pspp-mode-el -- Major mode for editing PSPP files |
2 |
|
|
3 |
|
;; Copyright (C) 2005 Free Software Foundation |
4 |
;; Author: John Darrington <john@darrington.wattle.id.au> |
;; Author: John Darrington <john@darrington.wattle.id.au> |
5 |
;; Created: 05 March 2005 |
;; Created: 05 March 2005 |
6 |
;; Keywords: PSPP major-mode |
;; Keywords: PSPP major-mode |
7 |
|
|
8 |
;; Copyright (C) 2005 John Darrington |
|
9 |
;; |
|
10 |
;; Based on the example wpdl-mode.el by Scott Borton |
;; Based on the example wpdl-mode.el by Scott Borton |
11 |
;; Author: Scott Andrew Borton <scott@pp.htv.fi> |
;; Author: Scott Andrew Borton <scott@pp.htv.fi> |
12 |
|
|
38 |
(add-to-list 'auto-mode-alist '("\\.sps\\'" . pspp-mode)) |
(add-to-list 'auto-mode-alist '("\\.sps\\'" . pspp-mode)) |
39 |
|
|
40 |
|
|
41 |
(defun pspp-data-block () |
(defun pspp-data-block-p () |
42 |
"Returns t if current line is inside a data block." |
"Returns t if current line is inside a data block." |
43 |
(interactive) |
(save-excursion |
44 |
|
(let ( |
45 |
(let ( |
(pspp-end-of-block-found nil) |
46 |
(end-data-found nil) |
(pspp-start-of-block-found nil) |
|
(begin-data-found nil) |
|
|
(inside-block nil) |
|
|
) |
|
|
|
|
|
(save-excursion |
|
|
(beginning-of-line) |
|
|
(while (not (or (bobp) end-data-found) ) |
|
|
|
|
|
(if (looking-at "^[ \t]*END +DATA\.") |
|
|
(setq end-data-found t) |
|
47 |
) |
) |
48 |
|
(beginning-of-line) |
49 |
|
(while (not (or |
50 |
|
(or (bobp) pspp-end-of-block-found ) |
51 |
|
pspp-start-of-block-found |
52 |
|
) |
53 |
|
) |
54 |
|
(set 'pspp-end-of-block-found (looking-at "^[ \t]*END[\t ]+DATA\.")) |
55 |
|
(set 'pspp-start-of-block-found (looking-at "^[ \t]*BEGIN[\t ]+DATA")) |
56 |
(forward-line -1) |
(forward-line -1) |
|
|
|
|
(if (looking-at "^[ \t]*BEGIN +DATA\.") |
|
|
(setq begin-data-found t) |
|
|
) |
|
|
|
|
57 |
) |
) |
58 |
|
|
59 |
|
(and pspp-start-of-block-found (not pspp-end-of-block-found)) |
60 |
) |
) |
|
|
|
|
(setq inside-block (and begin-data-found (not end-data-found))) |
|
|
|
|
|
inside-block |
|
61 |
) |
) |
|
|
|
62 |
) |
) |
63 |
|
|
64 |
|
(defconst pspp-indent-width |
65 |
|
2 |
66 |
|
"size of indent" |
67 |
|
) |
68 |
|
|
69 |
|
|
70 |
|
(defconst pspp-indenters |
71 |
|
(concat "^[\t ]*" |
72 |
|
(regexp-opt '("DO" |
73 |
|
"BEGIN" |
74 |
|
"LOOP" |
75 |
|
"INPUT") t) |
76 |
|
"[\t ]+") |
77 |
|
"constructs which cause indentation" |
78 |
|
) |
79 |
|
|
80 |
|
|
81 |
|
(defconst pspp-unindenters |
82 |
|
(concat "^[\t ]*END[\t ]+" |
83 |
|
(regexp-opt '("IF" |
84 |
|
"DATA" |
85 |
|
"LOOP" |
86 |
|
"REPEAT" |
87 |
|
"INPUT") t) |
88 |
|
"[\t ]*") |
89 |
|
|
90 |
|
;; Note that "END CASE" and "END FILE" do not unindent. |
91 |
|
|
92 |
|
"constructs which cause end of indentation" |
93 |
|
) |
94 |
|
|
95 |
|
|
96 |
|
|
97 |
(defun pspp-indent-line () |
(defun pspp-indent-line () |
98 |
"Indent current line as PSPP code." |
"Indent current line as PSPP code." |
99 |
(interactive) |
|
100 |
(beginning-of-line) |
(beginning-of-line) |
101 |
(let ( |
(let ( |
102 |
(verbatim nil) |
(verbatim nil) |
103 |
(the-indent 0) ; Default indent to column 0 |
(the-indent 0) ; Default indent to column 0 |
104 |
|
(case-fold-search t) |
105 |
) |
) |
106 |
|
|
107 |
(if (bobp) |
(if (bobp) |
121 |
(while (and blank-line (not (bobp))) |
(while (and blank-line (not (bobp))) |
122 |
(forward-line -1) |
(forward-line -1) |
123 |
|
|
124 |
(if (and (not (pspp-data-block)) (not (looking-at "^[ \t]*$"))) |
(if (and (not (pspp-data-block-p)) (not (looking-at "^[ \t]*$"))) |
125 |
(progn |
(progn |
126 |
(setq blank-line nil) |
(setq blank-line nil) |
127 |
|
|
128 |
(if (not (looking-at ".*\\.[ \t]*$")) |
(if (not (looking-at ".*\\.[ \t]*$")) |
129 |
(setq within-command t) |
(setq within-command t) |
130 |
) |
) |
131 |
) |
) |
132 |
|
) |
133 |
) |
) |
134 |
|
) |
135 |
|
|
136 |
|
|
137 |
|
;; If we're not at the start of a new command, then add an indent. |
138 |
|
(if within-command |
139 |
|
(set 'the-indent (+ 1 the-indent)) |
140 |
|
) |
141 |
|
) |
142 |
|
|
143 |
|
|
144 |
|
;; Set the indentation according to the DO - END blocks |
145 |
|
(save-excursion |
146 |
|
(beginning-of-line) |
147 |
|
(while (not (bobp)) |
148 |
|
(beginning-of-line) |
149 |
|
(if (not (pspp-comment-p)) |
150 |
|
(cond |
151 |
|
( |
152 |
|
(save-excursion |
153 |
|
(forward-line -1) |
154 |
|
(looking-at pspp-indenters) |
155 |
|
) |
156 |
|
(set 'the-indent (+ the-indent 1) ) |
157 |
|
) |
158 |
|
|
159 |
|
( (looking-at pspp-unindenters) |
160 |
|
(set 'the-indent (- the-indent 1) ) |
161 |
|
) |
162 |
|
) |
163 |
) |
) |
164 |
|
(forward-line -1) |
165 |
(if within-command (setq the-indent 8) ) |
) |
166 |
) |
) |
167 |
|
|
168 |
|
(save-excursion |
169 |
|
(beginning-of-line) |
170 |
|
(if (looking-at "^[\t ]*ELSE") |
171 |
|
(set 'the-indent (- the-indent 1))) |
172 |
) |
) |
173 |
|
|
174 |
(if (not (pspp-data-block)) (indent-line-to the-indent)) |
;; Stuff in the data-blocks should be untouched |
175 |
)) |
(if (not (pspp-data-block-p)) (indent-line-to (* pspp-indent-width the-indent))) |
176 |
|
) |
177 |
|
) |
178 |
|
|
179 |
|
|
180 |
|
(defun pspp-comment-start-line-p () |
181 |
|
"Returns t if the current line is the first line of a comment, nil otherwise" |
182 |
|
(beginning-of-line) |
183 |
|
(or (looking-at "^\*") |
184 |
|
(looking-at "^[\t ]*COMMENT[\t ]") |
185 |
|
) |
186 |
|
) |
187 |
|
|
188 |
|
|
189 |
|
(defun pspp-comment-end-line-p () |
190 |
|
"Returns t if the current line is the candidate for the last line of a comment, nil otherwise" |
191 |
|
(beginning-of-line) |
192 |
|
(looking-at ".*\\.[\t ]*$") |
193 |
|
) |
194 |
|
|
195 |
|
|
196 |
|
|
197 |
|
(defun pspp-comment-p () |
198 |
|
"Returns t if point is in a comment. Nil otherwise." |
199 |
|
(if (pspp-data-block-p) |
200 |
|
nil |
201 |
|
(let ( |
202 |
|
(pspp-comment-start-found nil) |
203 |
|
(pspp-comment-end-found nil) |
204 |
|
(pspp-single-line-comment nil) |
205 |
|
(lines 1) |
206 |
|
) |
207 |
|
(save-excursion |
208 |
|
(end-of-line) |
209 |
|
(while (and (>= lines 0) |
210 |
|
(not pspp-comment-start-found) |
211 |
|
(not pspp-comment-end-found) |
212 |
|
) |
213 |
|
(beginning-of-line) |
214 |
|
(if (pspp-comment-start-line-p) (set 'pspp-comment-start-found t)) |
215 |
|
(if (bobp) |
216 |
|
(set 'pspp-comment-end-found nil) |
217 |
|
(save-excursion |
218 |
|
(forward-line -1) |
219 |
|
(if (pspp-comment-end-line-p) (set 'pspp-comment-end-found t)) |
220 |
|
) |
221 |
|
) |
222 |
|
(set 'lines (forward-line -1)) |
223 |
|
) |
224 |
|
) |
225 |
|
|
226 |
|
(save-excursion |
227 |
|
(set 'pspp-single-line-comment (and |
228 |
|
(pspp-comment-start-line-p) |
229 |
|
(pspp-comment-end-line-p))) |
230 |
|
) |
231 |
|
|
232 |
|
|
233 |
|
(or pspp-single-line-comment |
234 |
|
(and pspp-comment-start-found (not pspp-comment-end-found))) |
235 |
|
) |
236 |
|
) |
237 |
|
) |
238 |
|
|
239 |
(defvar pspp-mode-syntax-table |
(defvar pspp-mode-syntax-table |
240 |
(let ( |
(let ( |
241 |
(x-pspp-mode-syntax-table (make-syntax-table)) |
(x-pspp-mode-syntax-table (make-syntax-table)) |
242 |
) |
) |
243 |
|
|
244 |
(modify-syntax-entry ?_ "w" x-pspp-mode-syntax-table) |
;; Special chars allowed in variables |
245 |
(modify-syntax-entry ?. "w" x-pspp-mode-syntax-table) |
(modify-syntax-entry ?# "w" x-pspp-mode-syntax-table) |
246 |
(modify-syntax-entry ?\" "|" x-pspp-mode-syntax-table) |
(modify-syntax-entry ?@ "w" x-pspp-mode-syntax-table) |
247 |
(modify-syntax-entry ?\' "|" x-pspp-mode-syntax-table) |
(modify-syntax-entry ?$ "w" x-pspp-mode-syntax-table) |
248 |
|
|
249 |
;; Comment definitions |
;; Comment syntax |
250 |
(modify-syntax-entry ?* "<\n" x-pspp-mode-syntax-table) |
;; This is incomplete, because: |
251 |
|
;; a) Comments can also be given by COMMENT |
252 |
;; (modify-syntax-entry ?\n "- 1" x-pspp-mode-syntax-table) |
;; b) The sequence .\n* is interpreted incorrectly. |
253 |
;; (modify-syntax-entry ?* ". 2" x-pspp-mode-syntax-table) |
|
254 |
|
(modify-syntax-entry ?* ". 2" x-pspp-mode-syntax-table) |
255 |
(modify-syntax-entry ?\n ">*" x-pspp-mode-syntax-table) |
(modify-syntax-entry ?. ". 3" x-pspp-mode-syntax-table) |
256 |
|
(modify-syntax-entry ?\n "- 41" x-pspp-mode-syntax-table) |
257 |
|
|
258 |
|
|
259 |
|
;; String delimiters |
260 |
|
(modify-syntax-entry ?' "\"" x-pspp-mode-syntax-table) |
261 |
|
(modify-syntax-entry ?" "\"" x-pspp-mode-syntax-table) |
262 |
|
|
263 |
x-pspp-mode-syntax-table) |
x-pspp-mode-syntax-table) |
264 |
|
|
265 |
"Syntax table for pspp-mode") |
"Syntax table for pspp-mode") |
266 |
|
|
267 |
|
|
268 |
|
(defconst pspp-font-lock-keywords |
269 |
|
(list |
270 |
|
|
271 |
|
(cons (concat "\\<" |
272 |
|
(regexp-opt '( |
273 |
|
"END DATA" |
274 |
|
"ACF" |
275 |
|
"ADD FILES" |
276 |
|
"ADD VALUE LABELS" |
277 |
|
"AGGREGATE" |
278 |
|
"ANOVA" |
279 |
|
"APPLY DICTIONARY" |
280 |
|
"AREG" |
281 |
|
"ARIMA" |
282 |
|
"AUTORECODE" |
283 |
|
"BEGIN DATA" |
284 |
|
"BREAK" |
285 |
|
"CASEPLOT" |
286 |
|
"CASESTOVARS" |
287 |
|
"CCF" |
288 |
|
"CLEAR TRANSFORMATIONS" |
289 |
|
"CLUSTER" |
290 |
|
"COMPUTE" |
291 |
|
"CONJOINT" |
292 |
|
"CORRELATIONS" |
293 |
|
"COXREG" |
294 |
|
"COUNT" |
295 |
|
"CREATE" |
296 |
|
"CROSSTABS" |
297 |
|
"CURVEFIT" |
298 |
|
"DATA LIST" |
299 |
|
"DATE" |
300 |
|
"DEBUG CASEFILE" |
301 |
|
"DEBUG EVALUATE" |
302 |
|
"DEBUG MOMENTS" |
303 |
|
"DEBUG POOL" |
304 |
|
"DELETE VARIABLES" |
305 |
|
"DESCRIPTIVES" |
306 |
|
"DISCRIMINANT" |
307 |
|
"DISPLAY" |
308 |
|
"DOCUMENT" |
309 |
|
"DO IF" |
310 |
|
"DO REPEAT" |
311 |
|
"DROP DOCUMENTS" |
312 |
|
"ECHO" |
313 |
|
"EDIT" |
314 |
|
"ELSE" |
315 |
|
"ELSE IF" |
316 |
|
"END CASE" |
317 |
|
"END FILE" |
318 |
|
"END FILE TYPE" |
319 |
|
"END IF" |
320 |
|
"END INPUT PROGRAM" |
321 |
|
"END LOOP" |
322 |
|
"END REPEAT" |
323 |
|
"ERASE" |
324 |
|
"EXAMINE" |
325 |
|
"EXECUTE" |
326 |
|
"EXIT" |
327 |
|
"EXPORT" |
328 |
|
"FACTOR" |
329 |
|
"FILE HANDLE" |
330 |
|
"FILE LABEL" |
331 |
|
"FILE TYPE" |
332 |
|
"FILTER" |
333 |
|
"FINISH" |
334 |
|
"FIT" |
335 |
|
"FLIP" |
336 |
|
"FORMATS" |
337 |
|
"FREQUENCIES" |
338 |
|
"GENLOG" |
339 |
|
"GET" |
340 |
|
"GET TRANSLATE" |
341 |
|
"GLM" |
342 |
|
"GRAPH" |
343 |
|
"HILOGLINEAR" |
344 |
|
"HOST" |
345 |
|
"IF" |
346 |
|
"IGRAPH" |
347 |
|
"IMPORT" |
348 |
|
"INCLUDE" |
349 |
|
"INFO" |
350 |
|
"INPUT MATRIX" |
351 |
|
"INPUT PROGRAM" |
352 |
|
"KEYED DATA LIST" |
353 |
|
"LEAVE" |
354 |
|
"LIST" |
355 |
|
"LOGLINEAR" |
356 |
|
"LOGISITIC REGRESSION" |
357 |
|
"LOOP" |
358 |
|
"MATCH FILES" |
359 |
|
"MATRIX DATA" |
360 |
|
"MCONVERT" |
361 |
|
"MEANS" |
362 |
|
"MISSING VALUES" |
363 |
|
"MODIFY VARS" |
364 |
|
"MULT RESPONSE" |
365 |
|
"MVA" |
366 |
|
"NEW FILE" |
367 |
|
"N" |
368 |
|
"N OF CASES" |
369 |
|
"NLR" |
370 |
|
"NONPAR CORR" |
371 |
|
"NPAR TESTS" |
372 |
|
"NUMBERED" |
373 |
|
"NUMERIC" |
374 |
|
"OLAP CUBES" |
375 |
|
"OMS" |
376 |
|
"ONEWAY" |
377 |
|
"ORTHOPLAN" |
378 |
|
"PACF" |
379 |
|
"PARTIAL CORR" |
380 |
|
"PEARSON CORRELATIONS" |
381 |
|
"PERMISSIONS" |
382 |
|
"PLOT" |
383 |
|
"POINT" |
384 |
|
"PPLOT" |
385 |
|
"PREDICT" |
386 |
|
"PRESERVE" |
387 |
|
"PRINT EJECT" |
388 |
|
"PRINT" |
389 |
|
"PRINT FORMATS" |
390 |
|
"PRINT SPACE" |
391 |
|
"PROCEDURE OUTPUT" |
392 |
|
"PROCESS IF" |
393 |
|
"PROXIMITIES" |
394 |
|
"Q" |
395 |
|
"QUICK CLUSTER" |
396 |
|
"QUIT" |
397 |
|
"RANK" |
398 |
|
"RECODE" |
399 |
|
"RECORD TYPE" |
400 |
|
"REFORMAT" |
401 |
|
"REGRESSION" |
402 |
|
"RENAME VARIABLES" |
403 |
|
"REPEATING DATA" |
404 |
|
"REPORT" |
405 |
|
"REREAD" |
406 |
|
"RESTORE" |
407 |
|
"RMV" |
408 |
|
"SAMPLE" |
409 |
|
"SAVE" |
410 |
|
"SAVE TRANSLATE" |
411 |
|
"SCRIPT" |
412 |
|
"SELECT IF" |
413 |
|
"SET" |
414 |
|
"SHOW" |
415 |
|
"SORT CASES" |
416 |
|
"SORT" |
417 |
|
"SPCHART" |
418 |
|
"SPLIT FILE" |
419 |
|
"STRING" |
420 |
|
"SUBTITLE" |
421 |
|
"SUMMARIZE" |
422 |
|
"SURVIVAL" |
423 |
|
"SYSFILE INFO" |
424 |
|
"TEMPORARY" |
425 |
|
"TITLE" |
426 |
|
"TSET" |
427 |
|
"TSHOW" |
428 |
|
"TSPLOT" |
429 |
|
"T-TEST" |
430 |
|
"UNIANOVA" |
431 |
|
"UNNUMBERED" |
432 |
|
"UPDATE" |
433 |
|
"USE" |
434 |
|
"VALUE LABELS" |
435 |
|
"VARIABLE ALIGNMENT" |
436 |
|
"VARIABLE LABELS" |
437 |
|
"VARIABLE LEVEL" |
438 |
|
"VARIABLE WIDTH" |
439 |
|
"VARSTOCASES" |
440 |
|
"VECTOR" |
441 |
|
"VERIFY" |
442 |
|
"WEIGHT" |
443 |
|
"WRITE" |
444 |
|
"WRITE FORMATS" |
445 |
|
"XSAVE") t) "\\>" ) |
446 |
|
'font-lock-builtin-face) |
447 |
|
|
448 |
|
(cons |
449 |
|
(concat "\\<" (regexp-opt '( |
450 |
|
"ALL" "AND" "BY" "EQ" "GE" "GT" "LE" "LT" |
451 |
|
"NE" "NOT" "OR" "TO" "WITH" |
452 |
|
) t ) "\\>") 'font-lock-keyword-face) |
453 |
|
|
454 |
|
|
455 |
|
(cons |
456 |
|
(concat "\\<" |
457 |
|
(regexp-opt '( |
458 |
|
"ABS" |
459 |
|
"ACOS" |
460 |
|
"ANY" |
461 |
|
"ANY" |
462 |
|
"ARCOS" |
463 |
|
"ARSIN" |
464 |
|
"ARTAN" |
465 |
|
"ASIN" |
466 |
|
"ATAN" |
467 |
|
"CDF.BERNOULLI" |
468 |
|
"CDF.BETA" |
469 |
|
"CDF.BINOM" |
470 |
|
"CDF.BVNOR" |
471 |
|
"CDF.CAUCHY" |
472 |
|
"CDF.CHISQ" |
473 |
|
"CDF.EXP" |
474 |
|
"CDF.F" |
475 |
|
"CDF.GAMMA" |
476 |
|
"CDF.GEOM" |
477 |
|
"CDF.HALFNRM" |
478 |
|
"CDF.HYPER" |
479 |
|
"CDF.IGAUSS" |
480 |
|
"CDF.LAPLACE" |
481 |
|
"CDF.LNORMAL" |
482 |
|
"CDF.LOGISTIC" |
483 |
|
"CDF.NEGBIN" |
484 |
|
"CDF.NORMAL" |
485 |
|
"CDF.PARETO" |
486 |
|
"CDF.POISSON" |
487 |
|
"CDF.RAYLEIGH" |
488 |
|
"CDF.SMOD" |
489 |
|
"CDF.SRANGE" |
490 |
|
"CDF.T" |
491 |
|
"CDF.T1G" |
492 |
|
"CDF.T2G" |
493 |
|
"CDF.UNIFORM" |
494 |
|
"CDF.WEIBULL" |
495 |
|
"CDFNORM" |
496 |
|
"CFVAR" |
497 |
|
"CONCAT" |
498 |
|
"COS" |
499 |
|
"CTIME.DAYS" |
500 |
|
"CTIME.HOURS" |
501 |
|
"CTIME.MINUTES" |
502 |
|
"CTIME.SECONDS" |
503 |
|
"DATE.DMY" |
504 |
|
"DATE.MDY" |
505 |
|
"DATE.MOYR" |
506 |
|
"DATE.QYR" |
507 |
|
"DATE.WKYR" |
508 |
|
"DATE.YRDAY" |
509 |
|
"EXP" |
510 |
|
"IDF.BETA" |
511 |
|
"IDF.CAUCHY" |
512 |
|
"IDF.CHISQ" |
513 |
|
"IDF.EXP" |
514 |
|
"IDF.F" |
515 |
|
"IDF.GAMMA" |
516 |
|
"IDF.HALFNRM" |
517 |
|
"IDF.IGAUSS" |
518 |
|
"IDF.LAPLACE" |
519 |
|
"IDF.LNORMAL" |
520 |
|
"IDF.LOGISTIC" |
521 |
|
"IDF.NORMAL" |
522 |
|
"IDF.PARETO" |
523 |
|
"IDF.RAYLEIGH" |
524 |
|
"IDF.SMOD" |
525 |
|
"IDF.SRANGE" |
526 |
|
"IDF.T" |
527 |
|
"IDF.T1G" |
528 |
|
"IDF.T2G" |
529 |
|
"IDF.UNIFORM" |
530 |
|
"IDF.WEIBULL" |
531 |
|
"INDEX" |
532 |
|
"INDEX" |
533 |
|
"LAG" |
534 |
|
"LAG" |
535 |
|
"LAG" |
536 |
|
"LAG" |
537 |
|
"LENGTH" |
538 |
|
"LG10" |
539 |
|
"LN" |
540 |
|
"LNGAMMA" |
541 |
|
"LOWER" |
542 |
|
"LPAD" |
543 |
|
"LPAD" |
544 |
|
"LTRIM" |
545 |
|
"LTRIM" |
546 |
|
"MAX" |
547 |
|
"MAX" |
548 |
|
"MBLEN.BYTE" |
549 |
|
"MEAN" |
550 |
|
"MIN" |
551 |
|
"MIN" |
552 |
|
"MISSING" |
553 |
|
"MOD" |
554 |
|
"MOD10" |
555 |
|
"NCDF.BETA" |
556 |
|
"NCDF.CHISQ" |
557 |
|
"NCDF.F" |
558 |
|
"NCDF.T" |
559 |
|
"NMISS" |
560 |
|
"NORMAL" |
561 |
|
"NPDF.BETA" |
562 |
|
"NPDF.CHISQ" |
563 |
|
"NPDF.F" |
564 |
|
"NPDF.T" |
565 |
|
"NUMBER" |
566 |
|
"NVALID" |
567 |
|
"PDF.BERNOULLI" |
568 |
|
"PDF.BETA" |
569 |
|
"PDF.BINOM" |
570 |
|
"PDF.BVNOR" |
571 |
|
"PDF.CAUCHY" |
572 |
|
"PDF.CHISQ" |
573 |
|
"PDF.EXP" |
574 |
|
"PDF.F" |
575 |
|
"PDF.GAMMA" |
576 |
|
"PDF.GEOM" |
577 |
|
"PDF.HALFNRM" |
578 |
|
"PDF.HYPER" |
579 |
|
"PDF.IGAUSS" |
580 |
|
"PDF.LANDAU" |
581 |
|
"PDF.LAPLACE" |
582 |
|
"PDF.LNORMAL" |
583 |
|
"PDF.LOG" |
584 |
|
"PDF.LOGISTIC" |
585 |
|
"PDF.NEGBIN" |
586 |
|
"PDF.NORMAL" |
587 |
|
"PDF.NTAIL" |
588 |
|
"PDF.PARETO" |
589 |
|
"PDF.POISSON" |
590 |
|
"PDF.RAYLEIGH" |
591 |
|
"PDF.RTAIL" |
592 |
|
"PDF.T" |
593 |
|
"PDF.T1G" |
594 |
|
"PDF.T2G" |
595 |
|
"PDF.UNIFORM" |
596 |
|
"PDF.WEIBULL" |
597 |
|
"PDF.XPOWER" |
598 |
|
"PROBIT" |
599 |
|
"RANGE" |
600 |
|
"RANGE" |
601 |
|
"RINDEX" |
602 |
|
"RINDEX" |
603 |
|
"RND" |
604 |
|
"RPAD" |
605 |
|
"RPAD" |
606 |
|
"RTRIM" |
607 |
|
"RTRIM" |
608 |
|
"RV.BERNOULLI" |
609 |
|
"RV.BETA" |
610 |
|
"RV.BINOM" |
611 |
|
"RV.CAUCHY" |
612 |
|
"RV.CHISQ" |
613 |
|
"RV.EXP" |
614 |
|
"RV.F" |
615 |
|
"RV.GAMMA" |
616 |
|
"RV.GEOM" |
617 |
|
"RV.HALFNRM" |
618 |
|
"RV.HYPER" |
619 |
|
"RV.IGAUSS" |
620 |
|
"RV.LANDAU" |
621 |
|
"RV.LAPLACE" |
622 |
|
"RV.LEVY" |
623 |
|
"RV.LNORMAL" |
624 |
|
"RV.LOG" |
625 |
|
"RV.LOGISTIC" |
626 |
|
"RV.LVSKEW" |
627 |
|
"RV.NEGBIN" |
628 |
|
"RV.NORMAL" |
629 |
|
"RV.NTAIL" |
630 |
|
"RV.PARETO" |
631 |
|
"RV.POISSON" |
632 |
|
"RV.RAYLEIGH" |
633 |
|
"RV.RTAIL" |
634 |
|
"RV.T" |
635 |
|
"RV.T1G" |
636 |
|
"RV.T2G" |
637 |
|
"RV.UNIFORM" |
638 |
|
"RV.WEIBULL" |
639 |
|
"RV.XPOWER" |
640 |
|
"SD" |
641 |
|
"SIG.CHISQ" |
642 |
|
"SIG.F" |
643 |
|
"SIN" |
644 |
|
"SQRT" |
645 |
|
"STRING" |
646 |
|
"SUBSTR" |
647 |
|
"SUBSTR" |
648 |
|
"SUM" |
649 |
|
"SYSMIS" |
650 |
|
"SYSMIS" |
651 |
|
"TAN" |
652 |
|
"TIME.DAYS" |
653 |
|
"TIME.HMS" |
654 |
|
"TRUNC" |
655 |
|
"UNIFORM" |
656 |
|
"UPCASE" |
657 |
|
"VALUE" |
658 |
|
"VARIANCE" |
659 |
|
"XDATE.DATE" |
660 |
|
"XDATE.HOUR" |
661 |
|
"XDATE.JDAY" |
662 |
|
"XDATE.MDAY" |
663 |
|
"XDATE.MINUTE" |
664 |
|
"XDATE.MONTH" |
665 |
|
"XDATE.QUARTER" |
666 |
|
"XDATE.SECOND" |
667 |
|
"XDATE.TDAY" |
668 |
|
"XDATE.TIME" |
669 |
|
"XDATE.WEEK" |
670 |
|
"XDATE.WKDAY" |
671 |
|
"XDATE.YEAR" |
672 |
|
"YRMODA" ) |
673 |
|
t) "\\>" ) 'font-lock-function-name-face) |
674 |
|
|
675 |
|
'( "\\<[#$@a-zA-Z][a-zA-Z0-9_]*\\>" . font-lock-variable-name-face) |
676 |
|
|
677 |
|
|
678 |
|
|
679 |
|
) |
680 |
|
"Highlighting expressions for PSPP mode.") |
681 |
|
|
682 |
|
|
683 |
(defun pspp-mode () |
(defun pspp-mode () |
684 |
(interactive) |
(interactive) |
685 |
(kill-all-local-variables) |
(kill-all-local-variables) |
686 |
(use-local-map pspp-mode-map) |
(use-local-map pspp-mode-map) |
687 |
(set-syntax-table pspp-mode-syntax-table) |
(set-syntax-table pspp-mode-syntax-table) |
688 |
(setq comment-start "* ") |
|
689 |
|
(set (make-local-variable 'font-lock-keywords-case-fold-search) t) |
690 |
|
(set (make-local-variable 'font-lock-defaults) '(pspp-font-lock-keywords)) |
691 |
|
|
692 |
;; Register our indentation function |
;; Register our indentation function |
693 |
|
|
694 |
(set (make-local-variable 'indent-line-function) 'pspp-indent-line) |
(set (make-local-variable 'indent-line-function) 'pspp-indent-line) |
695 |
|
|
696 |
|
(set (make-local-variable 'compile-command) |
697 |
|
(concat "pspp " |
698 |
|
buffer-file-name |
699 |
|
)) |
700 |
|
|
701 |
(setq major-mode 'pspp-mode) |
(setq major-mode 'pspp-mode) |
702 |
(setq mode-name "PSPP") |
(setq mode-name "PSPP") |
703 |
(run-hooks 'pspp-mode-hook)) |
(run-hooks 'pspp-mode-hook)) |