text: // 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.
  
  
  /**
   * @fileoverview
   * Registers a language handler for MUMPS.
   *
   *
   * 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>
   *
   * Commands, intrinsic functions and variables taken from ISO/IEC 11756:1999(E)
   *
   * @author chris.harris@kitware.com
   *
   * Known issues:
   *
   * - 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.
   */
  
  (function () {
  
  
      var 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';
  
      var 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]*|';
  
      var 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]*|';
  
      var intrinsic = intrinsicVariables + intrinsicFunctions;
  
  
      var shortcutStylePatterns = [
          // Whitespace
          [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
          // A double or single quoted, possibly multi-line, string.
          [PR['PR_STRING'], /^(?:"(?:[^"]|\\.)*")/, null, '"']
      ];
  
      var fallthroughStylePatterns = [
          // A line comment that starts with ;
          [PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'],
          // Add intrinsic variables and functions as declarations, there not really but it mean
          // they will hilighted differently from commands.
          [PR['PR_DECLARATION'], new RegExp('^(?:\\$(?:' + intrinsic + '))\\b', 'i'), null],
          // Add commands as keywords
          [PR['PR_KEYWORD'], new RegExp('^(?:[^\\$]' + commands + ')\\b', 'i'), null],
          // A number is a decimal real literal or in scientific notation.
          [PR['PR_LITERAL'],
              /^[+-]?(?:(?:\.\d+|\d+(?:\.\d*)?)(?:E[+\-]?\d+)?)/i],
          // An identifier
          [PR['PR_PLAIN'], /^[a-z][a-zA-Z0-9]*/i],
          // Exclude $ % and ^
          [PR['PR_PUNCTUATION'], /^[^\w\t\n\r\xA0\"\$;%\^]|_/]
      ];
  // Can't use m as its already used for MatLab
      PR.registerLangHandler(PR.createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns), ['mumps']);
  })();
  