| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | module.exports = function (hljs) {  var KEYWORDS = {    'keyword':      'abort acronym acronyms alias all and assign binary card diag display ' +      'else eq file files for free ge gt if integer le loop lt maximizing ' +      'minimizing model models ne negative no not option options or ord ' +      'positive prod put putpage puttl repeat sameas semicont semiint smax ' +      'smin solve sos1 sos2 sum system table then until using while xor yes',    'literal': 'eps inf na',    'built-in':      'abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy ' +      'cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact ' +      'floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max ' +      'min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power ' +      'randBinomial randLinear randTriangle round rPower sigmoid sign ' +      'signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt ' +      'tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp ' +      'bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt ' +      'rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear ' +      'jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion ' +      'handleCollect handleDelete handleStatus handleSubmit heapFree ' +      'heapLimit heapSize jobHandle jobKill jobStatus jobTerminate ' +      'licenseLevel licenseStatus maxExecError sleep timeClose timeComp ' +      'timeElapsed timeExec timeStart'  };  var PARAMS = {    className: 'params',    begin: /\(/, end: /\)/,    excludeBegin: true,    excludeEnd: true,  };  var SYMBOLS = {    className: 'symbol',    variants: [      {begin: /\=[lgenxc]=/},      {begin: /\$/},    ]  };  var QSTR = { // One-line quoted comment string    className: 'comment',    variants: [      {begin: '\'', end: '\''},      {begin: '"', end: '"'},    ],    illegal: '\\n',    contains: [hljs.BACKSLASH_ESCAPE]  };  var ASSIGNMENT = {    begin: '/',    end: '/',    keywords: KEYWORDS,    contains: [      QSTR,      hljs.C_LINE_COMMENT_MODE,      hljs.C_BLOCK_COMMENT_MODE,      hljs.QUOTE_STRING_MODE,      hljs.APOS_STRING_MODE,      hljs.C_NUMBER_MODE,    ],  };  var DESCTEXT = { // Parameter/set/variable description text    begin: /[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,    excludeBegin: true,    end: '$',    endsWithParent: true,    contains: [      QSTR,      ASSIGNMENT,      {        className: 'comment',        begin: /([ ]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,        relevance: 0      },    ],  };  return {    aliases: ['gms'],    case_insensitive: true,    keywords: KEYWORDS,    contains: [      hljs.COMMENT(/^\$ontext/, /^\$offtext/),      {        className: 'meta',        begin: '^\\$[a-z0-9]+',        end: '$',        returnBegin: true,        contains: [          {            className: 'meta-keyword',            begin: '^\\$[a-z0-9]+',          }        ]      },      hljs.COMMENT('^\\*', '$'),      hljs.C_LINE_COMMENT_MODE,      hljs.C_BLOCK_COMMENT_MODE,      hljs.QUOTE_STRING_MODE,      hljs.APOS_STRING_MODE,      // Declarations      {        beginKeywords:          'set sets parameter parameters variable variables ' +          'scalar scalars equation equations',        end: ';',        contains: [          hljs.COMMENT('^\\*', '$'),          hljs.C_LINE_COMMENT_MODE,          hljs.C_BLOCK_COMMENT_MODE,          hljs.QUOTE_STRING_MODE,          hljs.APOS_STRING_MODE,          ASSIGNMENT,          DESCTEXT,        ]      },      { // table environment        beginKeywords: 'table',        end: ';',        returnBegin: true,        contains: [          { // table header row            beginKeywords: 'table',            end: '$',            contains: [DESCTEXT],          },          hljs.COMMENT('^\\*', '$'),          hljs.C_LINE_COMMENT_MODE,          hljs.C_BLOCK_COMMENT_MODE,          hljs.QUOTE_STRING_MODE,          hljs.APOS_STRING_MODE,          hljs.C_NUMBER_MODE,          // Table does not contain DESCTEXT or ASSIGNMENT        ]      },      // Function definitions      {        className: 'function',        begin: /^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,        returnBegin: true,        contains: [              { // Function title                className: 'title',                begin: /^[a-z0-9_]+/,              },              PARAMS,              SYMBOLS,            ],      },      hljs.C_NUMBER_MODE,      SYMBOLS,    ]  };};
 |