| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | // 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('troff', function() {  var words = {};  function tokenBase(stream) {    if (stream.eatSpace()) return null;    var sol = stream.sol();    var ch = stream.next();    if (ch === '\\') {      if (stream.match('fB') || stream.match('fR') || stream.match('fI') ||          stream.match('u')  || stream.match('d')  ||          stream.match('%')  || stream.match('&')) {        return 'string';      }      if (stream.match('m[')) {        stream.skipTo(']');        stream.next();        return 'string';      }      if (stream.match('s+') || stream.match('s-')) {        stream.eatWhile(/[\d-]/);        return 'string';      }      if (stream.match('\(') || stream.match('*\(')) {        stream.eatWhile(/[\w-]/);        return 'string';      }      return 'string';    }    if (sol && (ch === '.' || ch === '\'')) {      if (stream.eat('\\') && stream.eat('\"')) {        stream.skipToEnd();        return 'comment';      }    }    if (sol && ch === '.') {      if (stream.match('B ') || stream.match('I ') || stream.match('R ')) {        return 'attribute';      }      if (stream.match('TH ') || stream.match('SH ') || stream.match('SS ') || stream.match('HP ')) {        stream.skipToEnd();        return 'quote';      }      if ((stream.match(/[A-Z]/) && stream.match(/[A-Z]/)) || (stream.match(/[a-z]/) && stream.match(/[a-z]/))) {        return 'attribute';      }    }    stream.eatWhile(/[\w-]/);    var cur = stream.current();    return words.hasOwnProperty(cur) ? words[cur] : null;  }  function tokenize(stream, state) {    return (state.tokens[0] || tokenBase) (stream, state);  };  return {    startState: function() {return {tokens:[]};},    token: function(stream, state) {      return tokenize(stream, state);    }  };});CodeMirror.defineMIME('text/troff', 'troff');CodeMirror.defineMIME('text/x-troff', 'troff');CodeMirror.defineMIME('application/x-troff', 'troff');});
 |