- update to r240 of google-code-prettify (issue 180 : MUMPS mode courtesy Chris Harris)
diff --git a/src/prettify/lang/LangMumps.java b/src/prettify/lang/LangMumps.java new file mode 100644 index 0000000..ceeee64 --- /dev/null +++ b/src/prettify/lang/LangMumps.java
@@ -0,0 +1,148 @@ +// Copyright (C) 2011 Kitware Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package prettify.lang; + +import prettify.parser.Prettify; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +/** + * This is similar to the lang-mumps.js in JavaScript Prettify. + * <p/> + * All comments are adapted from the JavaScript Prettify. + * <p/> + * <p/> + * To use, include prettify.js and this file in your HTML page. + * Then put your code in an HTML tag like + * <pre class="prettyprint lang-mumps">(my SQL code)</pre> + * <p/> + * Commands, intrinsic functions and variables taken from ISO/IEC 11756:1999(E) + * + * @author chris.harris@kitware.com + * <p/> + * Known issues: + * <p/> + * - Currently can't distinguish between keywords and local or global variables having the same name + * for exampe SET IF="IF?" + * - m file are already used for MatLab hence using mumps. + */ +public class LangMumps extends Lang { + + public LangMumps() { + List<List<Object>> _shortcutStylePatterns = new ArrayList<List<Object>>(); + List<List<Object>> _fallthroughStylePatterns = new ArrayList<List<Object>>(); + + final String commands = "B|BREAK|" + + "C|CLOSE|" + + "D|DO|" + + "E|ELSE|" + + "F|FOR|" + + "G|GOTO|" + + "H|HALT|" + + "H|HANG|" + + "I|IF|" + + "J|JOB|" + + "K|KILL|" + + "L|LOCK|" + + "M|MERGE|" + + "N|NEW|" + + "O|OPEN|" + + "Q|QUIT|" + + "R|READ|" + + "S|SET|" + + "TC|TCOMMIT|" + + "TRE|TRESTART|" + + "TRO|TROLLBACK|" + + "TS|TSTART|" + + "U|USE|" + + "V|VIEW|" + + "W|WRITE|" + + "X|XECUTE"; + + final String intrinsicVariables = "D|DEVICE|" + + "EC|ECODE|" + + "ES|ESTACK|" + + "ET|ETRAP|" + + "H|HOROLOG|" + + "I|IO|" + + "J|JOB|" + + "K|KEY|" + + "P|PRINCIPAL|" + + "Q|QUIT|" + + "ST|STACK|" + + "S|STORAGE|" + + "SY|SYSTEM|" + + "T|TEST|" + + "TL|TLEVEL|" + + "TR|TRESTART|" + + "X|" + + "Y|" + + "Z[A-Z]*|"; + + final String intrinsicFunctions = "A|ASCII|" + + "C|CHAR|" + + "D|DATA|" + + "E|EXTRACT|" + + "F|FIND|" + + "FN|FNUMBER|" + + "G|GET|" + + "J|JUSTIFY|" + + "L|LENGTH|" + + "NA|NAME|" + + "O|ORDER|" + + "P|PIECE|" + + "QL|QLENGTH|" + + "QS|QSUBSCRIPT|" + + "Q|QUERY|" + + "R|RANDOM|" + + "RE|REVERSE|" + + "S|SELECT|" + + "ST|STACK|" + + "T|TEXT|" + + "TR|TRANSLATE|" + + "V|VIEW|" + + "Z[A-Z]*|"; + + final String intrinsic = intrinsicVariables + intrinsicFunctions; + + // Whitespace + _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("^[\t\n\r \\xA0]+"), null, "\t\n\r " + Character.toString((char) 0xA0)})); + // A double or single quoted, possibly multi-line, string. + _shortcutStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_STRING, Pattern.compile("^(?:\"(?:[^\"]|\\\\.)*\")"), null, "\""})); + + // A line comment that starts with ; + _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_COMMENT, Pattern.compile("^;[^\\r\\n]*"), null, ";"})); + // Add intrinsic variables and functions as declarations, there not really but it mean + // they will hilighted differently from commands. + _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_DECLARATION, Pattern.compile("^(?:\\$(?:" + intrinsic + "))\\b", Pattern.CASE_INSENSITIVE), null})); + // Add commands as keywords + _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_KEYWORD, Pattern.compile("^(?:[^\\$]" + commands + ")\\b", Pattern.CASE_INSENSITIVE), null})); + // A number is a decimal real literal or in scientific notation. + _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_LITERAL, Pattern.compile("^[+-]?(?:(?:\\.\\d+|\\d+(?:\\.\\d*)?)(?:E[+\\-]?\\d+)?)", Pattern.CASE_INSENSITIVE)})); + // An identifier + _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PLAIN, Pattern.compile("^[a-z][a-zA-Z0-9]*", Pattern.CASE_INSENSITIVE)})); + // Exclude $ % and ^ + _fallthroughStylePatterns.add(Arrays.asList(new Object[]{Prettify.PR_PUNCTUATION, Pattern.compile("^[^\\w\\t\\n\\r\\xA0\\\"\\$;%\\^]|_")})); + + setShortcutStylePatterns(_shortcutStylePatterns); + setFallthroughStylePatterns(_fallthroughStylePatterns); + } + + public static List<String> getFileExtensions() { + return Arrays.asList(new String[]{"mumps"}); + } +}
diff --git a/test/prettify/PrettifyTest.java b/test/prettify/PrettifyTest.java index 63c34d6..6253447 100644 --- a/test/prettify/PrettifyTest.java +++ b/test/prettify/PrettifyTest.java
@@ -169,6 +169,7 @@ test("tcl", "tcl_lang", false); test("r", "r_lang", false); test("erlang", "erlang", false); + test("mumps", "mumps", false); } /**
diff --git a/test/prettify/PrettifyTest/result/mumps.txt b/test/prettify/PrettifyTest/result/mumps.txt new file mode 100644 index 0000000..a83dcf1 --- /dev/null +++ b/test/prettify/PrettifyTest/result/mumps.txt
@@ -0,0 +1,15 @@ +`PLNHDR `END`COM; -- prt/display header`END`PLN + `END`KWDN`END`PLN `END`KWDX`END`PUN,`END`KWDI`END`PLN + `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 + `END`COM; -- prt hdr line`END`PLN + `END`KWDW`END`PUN:'`END`DEC$D`END`PUN(`END`PLNVALMPG1`END`PUN)`END`PLN `END`PUN@`END`PLNIOF `END`KWDK`END`PLN VALMPG1 + `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 + `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 + `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 + `END`KWDW`END`PUN:`END`PLNVALMCC IOINORM`END`PUN,`END`PLNIOUON `END`COM; -- turn off hi`END`PLN + `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 + `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 + `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 + `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 + `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))>(`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 + `END`KWDQ`END'
diff --git a/test/prettify/PrettifyTest/source/mumps.txt b/test/prettify/PrettifyTest/source/mumps.txt new file mode 100644 index 0000000..25aa0f4 --- /dev/null +++ b/test/prettify/PrettifyTest/source/mumps.txt
@@ -0,0 +1,15 @@ +HDR ; -- prt/display header + N X,I + I '$D(VALMHDR) X:$G(VALM("HDR"))]"" VALM("HDR") + ; -- prt hdr line + W:'$D(VALMPG1) @IOF K VALMPG1 + W:VALMCC $C(13)_IOUON_$C(13)_IOINHI_$C(13) ; -- turn on undln/hi + I $E(IOST,1,2)="C-" D IOXY^VALM4(0,0) ; -- position cursor + W $E(VALM("TITLE"),1,30) ; -- prt title + W:VALMCC IOINORM,IOUON ; -- turn off hi + W $J("",30-$L(VALM("TITLE"))) ; -- fill in w/blanks + I $E(IOST,1,2)="C-" W $C(13) D IOXY^VALM4(30,0) ; -- position cursor + 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 + W:VALMCC IOUOFF I $E(IOST,1,2)="C-" D IOXY^VALM4(0,0) ; -- turn off undln + 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 + Q \ No newline at end of file