| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | // CodeMirror, copyright (c) by Marijn Haverbeke and others// Distributed under an MIT license: https://codemirror.net/LICENSE(function(mod) {  if (typeof exports == "object" && typeof module == "object")    mod(require("../../lib/codemirror"));  else if (typeof define == "function" && define.amd)    define(["../../lib/codemirror"], mod);  else    mod(CodeMirror);})(function(CodeMirror) {"use strict";CodeMirror.defineMode("cmake", function () {  var variable_regex = /({)?[a-zA-Z0-9_]+(})?/;  function tokenString(stream, state) {    var current, prev, found_var = false;    while (!stream.eol() && (current = stream.next()) != state.pending) {      if (current === '$' && prev != '\\' && state.pending == '"') {        found_var = true;        break;      }      prev = current;    }    if (found_var) {      stream.backUp(1);    }    if (current == state.pending) {      state.continueString = false;    } else {      state.continueString = true;    }    return "string";  }  function tokenize(stream, state) {    var ch = stream.next();    // Have we found a variable?    if (ch === '$') {      if (stream.match(variable_regex)) {        return 'variable-2';      }      return 'variable';    }    // Should we still be looking for the end of a string?    if (state.continueString) {      // If so, go through the loop again      stream.backUp(1);      return tokenString(stream, state);    }    // Do we just have a function on our hands?    // In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched    if (stream.match(/(\s+)?\w+\(/) || stream.match(/(\s+)?\w+\ \(/)) {      stream.backUp(1);      return 'def';    }    if (ch == "#") {      stream.skipToEnd();      return "comment";    }    // Have we found a string?    if (ch == "'" || ch == '"') {      // Store the type (single or double)      state.pending = ch;      // Perform the looping function to find the end      return tokenString(stream, state);    }    if (ch == '(' || ch == ')') {      return 'bracket';    }    if (ch.match(/[0-9]/)) {      return 'number';    }    stream.eatWhile(/[\w-]/);    return null;  }  return {    startState: function () {      var state = {};      state.inDefinition = false;      state.inInclude = false;      state.continueString = false;      state.pending = false;      return state;    },    token: function (stream, state) {      if (stream.eatSpace()) return null;      return tokenize(stream, state);    }  };});CodeMirror.defineMIME("text/x-cmake", "cmake");});
 |