Skip to content
This repository was archived by the owner on Apr 22, 2020. It is now read-only.

Commit 9d85b05

Browse files
author
mikesamuel@gmail.com
committed
issue 180 : MUMPS mode courtesy Chris Harris
1 parent cabca35 commit 9d85b05

3 files changed

Lines changed: 179 additions & 2 deletions

File tree

CHANGES.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,10 @@ <h2>29 March 2011</h2>
153153
</ul>
154154
<h2>4 February 2013</h2>
155155
<ul>
156-
<li>Language handlers for Dart, Erlang, TCL, R.</li>
157-
<li>Bug fix: VB REM style comments</li>
156+
<li>Language handlers for Dart, Erlang, Mumps, TCL, R, S.</li>
157+
<li>Bug fix: VB REM style comments.</li>
158158
<li>Bug fix: CSS color literals / ID selector confusion.</li>
159+
<li>Bug fix: IE8 line breaks.</li>
159160
</ul>
160161
</body>
161162
</html>

src/lang-mumps.js

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
// Copyright (C) 2011 Kitware Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
16+
17+
/**
18+
* @fileoverview
19+
* Registers a language handler for MUMPS.
20+
*
21+
*
22+
* To use, include prettify.js and this file in your HTML page.
23+
* Then put your code in an HTML tag like
24+
* <pre class="prettyprint lang-mumps">(my SQL code)</pre>
25+
*
26+
* Commands, intrinsic functions and variables taken from ISO/IEC 11756:1999(E)
27+
*
28+
* @author chris.harris@kitware.com
29+
*
30+
* Known issues:
31+
*
32+
* - Currently can't distinguish between keywords and local or global variables having the same name
33+
* for exampe SET IF="IF?"
34+
* - m file are already used for MatLab hence using mumps.
35+
*/
36+
37+
(function () {
38+
39+
40+
var commands = 'B|BREAK|' +
41+
'C|CLOSE|' +
42+
'D|DO|' +
43+
'E|ELSE|' +
44+
'F|FOR|' +
45+
'G|GOTO|' +
46+
'H|HALT|' +
47+
'H|HANG|' +
48+
'I|IF|' +
49+
'J|JOB|' +
50+
'K|KILL|' +
51+
'L|LOCK|' +
52+
'M|MERGE|' +
53+
'N|NEW|' +
54+
'O|OPEN|' +
55+
'Q|QUIT|' +
56+
'R|READ|' +
57+
'S|SET|' +
58+
'TC|TCOMMIT|' +
59+
'TRE|TRESTART|' +
60+
'TRO|TROLLBACK|' +
61+
'TS|TSTART|' +
62+
'U|USE|' +
63+
'V|VIEW|' +
64+
'W|WRITE|' +
65+
'X|XECUTE';
66+
67+
var intrinsicVariables = 'D|DEVICE|' +
68+
'EC|ECODE|' +
69+
'ES|ESTACK|' +
70+
'ET|ETRAP|' +
71+
'H|HOROLOG|' +
72+
'I|IO|' +
73+
'J|JOB|' +
74+
'K|KEY|' +
75+
'P|PRINCIPAL|' +
76+
'Q|QUIT|' +
77+
'ST|STACK|' +
78+
'S|STORAGE|' +
79+
'SY|SYSTEM|' +
80+
'T|TEST|' +
81+
'TL|TLEVEL|' +
82+
'TR|TRESTART|' +
83+
'X|' +
84+
'Y|' +
85+
'Z[A-Z]*|';
86+
87+
var intrinsicFunctions = 'A|ASCII|' +
88+
'C|CHAR|' +
89+
'D|DATA|' +
90+
'E|EXTRACT|' +
91+
'F|FIND|' +
92+
'FN|FNUMBER|' +
93+
'G|GET|' +
94+
'J|JUSTIFY|' +
95+
'L|LENGTH|' +
96+
'NA|NAME|' +
97+
'O|ORDER|' +
98+
'P|PIECE|' +
99+
'QL|QLENGTH|' +
100+
'QS|QSUBSCRIPT|' +
101+
'Q|QUERY|' +
102+
'R|RANDOM|' +
103+
'RE|REVERSE|' +
104+
'S|SELECT|' +
105+
'ST|STACK|' +
106+
'T|TEXT|' +
107+
'TR|TRANSLATE|' +
108+
'V|VIEW|' *
109+
'Z[A-Z]*|';
110+
111+
var intrinsic = intrinsicVariables + intrinsicFunctions;
112+
113+
114+
var shortcutStylePatterns = [
115+
// Whitespace
116+
[PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
117+
// A double or single quoted, possibly multi-line, string.
118+
[PR['PR_STRING'], /^(?:"(?:[^"]|\\.)*")/, null, '"']
119+
];
120+
121+
var fallthroughStylePatterns = [
122+
// A line comment that starts with ;
123+
[PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'],
124+
// Add intrinsic variables and functions as declarations, there not really but it mean
125+
// they will hilighted differently from commands.
126+
[PR['PR_DECLARATION'], new RegExp('^(?:\\$(?:' + intrinsic + '))\\b', 'i'), null],
127+
// Add commands as keywords
128+
[PR['PR_KEYWORD'], new RegExp('^(?:[^\\$]' + commands + ')\\b', 'i'), null],
129+
// A number is a decimal real literal or in scientific notation.
130+
[PR['PR_LITERAL'],
131+
/^[+-]?(?:(?:\.\d+|\d+(?:\.\d*)?)(?:E[+\-]?\d+)?)/i],
132+
// An identifier
133+
[PR['PR_PLAIN'], /^[a-z][a-zA-Z0-9]*/i],
134+
// Exclude $ % and ^
135+
[PR['PR_PUNCTUATION'], /^[^\w\t\n\r\xA0\"\$;%\^]|_/]
136+
];
137+
// Can't use m as its already used for MatLab
138+
PR.registerLangHandler(PR.createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns), ['mumps']);
139+
})();

tests/prettify_test_2.html

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"lang-clj.js",
1313
"lang-lisp.js",
1414
"lang-xq.js",
15+
"lang-mumps.js",
1516
"lang-n.js",
1617
"lang-r.js",
1718
"lang-tcl.js",
@@ -714,6 +715,25 @@ <h1>R, S language support</h1>
714715
`foo123 +!"bar'baz` <- 2 + 2
715716
</pre>
716717

718+
<h1>MUMPS</h1>
719+
<pre class="prettyprint lang-mumps" id="mumps">
720+
HDR ; -- prt/display header
721+
N X,I
722+
I '$D(VALMHDR) X:$G(VALM("HDR"))]"" VALM("HDR")
723+
; -- prt hdr line
724+
W:'$D(VALMPG1) @IOF K VALMPG1
725+
W:VALMCC $C(13)_IOUON_$C(13)_IOINHI_$C(13) ; -- turn on undln/hi
726+
I $E(IOST,1,2)="C-" D IOXY^VALM4(0,0) ; -- position cursor
727+
W $E(VALM("TITLE"),1,30) ; -- prt title
728+
W:VALMCC IOINORM,IOUON ; -- turn off hi
729+
W $J("",30-$L(VALM("TITLE"))) ; -- fill in w/blanks
730+
I $E(IOST,1,2)="C-" W $C(13) D IOXY^VALM4(30,0) ; -- position cursor
731+
W $J("",((VALMWD-80)/2)),$$HTE^XLFDT($H,1),$J("",10+((VALMWD-80)/2)),"Page: ",$J(VALMPGE,4)," of ",$J($$PAGE^VALM4(VALMCNT,VALM("LINES")),4)_$S($D(VALMORE):"+",1:" ") ; -- prt rest of hdr
732+
W:VALMCC IOUOFF I $E(IOST,1,2)="C-" D IOXY^VALM4(0,0) ; -- turn off undln
733+
F I=1:1:VALM("TM")-3 W !,$S('$D(VALMHDR(I)):"",$L(VALMHDR(I))>(VALMWD-1):$$EXTRACT^VALM4($G(VALMHDR(I))),1:VALMHDR(I)) ; -- prt hdr
734+
Q
735+
</pre>
736+
717737
<script type="text/javascript">
718738
/**
719739
* maps ids of rewritten code to the expected output.
@@ -1347,6 +1367,23 @@ <h1>R, S language support</h1>
13471367
'\n' +
13481368
'`END`COM## Backtick strings`END`PLN\n' +
13491369
'`END`STR`foo123 +!"bar\'baz``END`PLN `END`PUN&lt;-`END`PLN `END`LIT2`END`PLN `END`PUN+`END`PLN `END`LIT2`END'
1370+
),
1371+
mumps: (
1372+
'`PLNHDR `END`COM; -- prt/display header`END`PLN\n' +
1373+
' `END`KWDN`END`PLN `END`KWDX`END`PUN,`END`KWDI`END`PLN\n' +
1374+
' `END`KWDI`END`PLN `END`PUN\'`END`DEC$D`END`PUN(`END`PLNVALMHDR`END`PUN)`END`PLN `END`KWDX`END`PUN:`END`DEC$G`END`PUN(`END`PLNVALM`END`PUN(`END`STR"HDR"`END`PUN))]`END`STR""`END`PLN VALM`END`PUN(`END`STR"HDR"`END`PUN)`END`PLN\n' +
1375+
' `END`COM; -- prt hdr line`END`PLN\n' +
1376+
' `END`KWDW`END`PUN:\'`END`DEC$D`END`PUN(`END`PLNVALMPG1`END`PUN)`END`PLN `END`PUN@`END`PLNIOF `END`KWDK`END`PLN VALMPG1\n' +
1377+
' `END`KWDW`END`PUN:`END`PLNVALMCC `END`DEC$C`END`PUN(`END`LIT13`END`PUN)_`END`PLNIOUON`END`PUN_`END`DEC$C`END`PUN(`END`LIT13`END`PUN)_`END`PLNIOINHI`END`PUN_`END`DEC$C`END`PUN(`END`LIT13`END`PUN)`END`PLN `END`COM; -- turn on undln/hi`END`PLN\n' +
1378+
' `END`KWDI`END`PLN `END`DEC$E`END`PUN(`END`PLNIOST`END`PUN,`END`LIT1`END`PUN,`END`LIT2`END`PUN)=`END`STR"C-"`END`PLN `END`KWDD`END`PLN IOXY^VALM4`END`PUN(`END`LIT0`END`PUN,`END`LIT0`END`PUN)`END`PLN `END`COM; -- position cursor`END`PLN\n' +
1379+
' `END`KWDW`END`PLN `END`DEC$E`END`PUN(`END`PLNVALM`END`PUN(`END`STR"TITLE"`END`PUN),`END`LIT1`END`PUN,`END`LIT30`END`PUN)`END`PLN `END`COM; -- prt title`END`PLN\n' +
1380+
' `END`KWDW`END`PUN:`END`PLNVALMCC IOINORM`END`PUN,`END`PLNIOUON `END`COM; -- turn off hi`END`PLN\n' +
1381+
' `END`KWDW`END`PLN `END`DEC$J`END`PUN(`END`STR""`END`PUN,`END`LIT30`END`PUN-`END`DEC$L`END`PUN(`END`PLNVALM`END`PUN(`END`STR"TITLE"`END`PUN)))`END`PLN `END`COM; -- fill in w/blanks`END`PLN\n' +
1382+
' `END`KWDI`END`PLN `END`DEC$E`END`PUN(`END`PLNIOST`END`PUN,`END`LIT1`END`PUN,`END`LIT2`END`PUN)=`END`STR"C-"`END`PLN `END`KWDW`END`PLN `END`DEC$C`END`PUN(`END`LIT13`END`PUN)`END`PLN `END`KWDD`END`PLN IOXY^VALM4`END`PUN(`END`LIT30`END`PUN,`END`LIT0`END`PUN)`END`PLN `END`COM; -- position cursor`END`PLN\n' +
1383+
' `END`KWDW`END`PLN `END`DEC$J`END`PUN(`END`STR""`END`PUN,((`END`PLNVALMWD`END`LIT-80`END`PUN)/`END`LIT2`END`PUN)),`END`PLN$$HTE^XLFDT`END`PUN(`END`DEC$H`END`PUN,`END`LIT1`END`PUN),`END`DEC$J`END`PUN(`END`STR""`END`PUN,`END`LIT10`END`PUN+((`END`PLNVALMWD`END`LIT-80`END`PUN)/`END`LIT2`END`PUN)),`END`STR"Page: "`END`PUN,`END`DEC$J`END`PUN(`END`PLNVALMPGE`END`PUN,`END`LIT4`END`PUN),`END`STR" of "`END`PUN,`END`DEC$J`END`PUN(`END`PLN$$PAGE^VALM4`END`PUN(`END`PLNVALMCNT`END`PUN,`END`PLNVALM`END`PUN(`END`STR"LINES"`END`PUN)),`END`LIT4`END`PUN)_`END`DEC$S`END`PUN(`END`DEC$D`END`PUN(`END`PLNVALMORE`END`PUN):`END`STR"+"`END`PUN,`END`LIT1`END`PUN:`END`STR" "`END`PUN)`END`PLN `END`COM; -- prt rest of hdr`END`PLN\n' +
1384+
' `END`KWDW`END`PUN:`END`PLNVALMCC IOUOFF `END`KWDI`END`PLN `END`DEC$E`END`PUN(`END`PLNIOST`END`PUN,`END`LIT1`END`PUN,`END`LIT2`END`PUN)=`END`STR"C-"`END`PLN `END`KWDD`END`PLN IOXY^VALM4`END`PUN(`END`LIT0`END`PUN,`END`LIT0`END`PUN)`END`PLN `END`COM; -- turn off undln`END`PLN\n' +
1385+
' `END`KWDF`END`PLN `END`KWDI`END`PUN=`END`LIT1`END`PUN:`END`LIT1`END`PUN:`END`PLNVALM`END`PUN(`END`STR"TM"`END`PUN)`END`LIT-3`END`PLN `END`KWDW`END`PLN `END`PUN!,`END`DEC$S`END`PUN(\'`END`DEC$D`END`PUN(`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN)):`END`STR""`END`PUN,`END`DEC$L`END`PUN(`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN))&gt;(`END`PLNVALMWD`END`LIT-1`END`PUN):`END`PLN$`END`DEC$EXTRACT`END`PLN^VALM4`END`PUN(`END`DEC$G`END`PUN(`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN))),`END`LIT1`END`PUN:`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN))`END`PLN `END`COM; -- prt hdr`END`PLN\n' +
1386+
' `END`KWDQ`END'
13501387
)
13511388
};
13521389
</script>

0 commit comments

Comments
 (0)