| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | // 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") // CommonJS    mod(require("../../lib/codemirror"));  else if (typeof define == "function" && define.amd) // AMD    define(["../../lib/codemirror"], mod);  else // Plain browser env    mod(CodeMirror);})(function(CodeMirror) {  "use strict";  function errorIfNotEmpty(stream) {    var nonWS = stream.match(/^\s*\S/);    stream.skipToEnd();    return nonWS ? "error" : null;  }  CodeMirror.defineMode("asciiarmor", function() {    return {      token: function(stream, state) {        var m;        if (state.state == "top") {          if (stream.sol() && (m = stream.match(/^-----BEGIN (.*)?-----\s*$/))) {            state.state = "headers";            state.type = m[1];            return "tag";          }          return errorIfNotEmpty(stream);        } else if (state.state == "headers") {          if (stream.sol() && stream.match(/^\w+:/)) {            state.state = "header";            return "atom";          } else {            var result = errorIfNotEmpty(stream);            if (result) state.state = "body";            return result;          }        } else if (state.state == "header") {          stream.skipToEnd();          state.state = "headers";          return "string";        } else if (state.state == "body") {          if (stream.sol() && (m = stream.match(/^-----END (.*)?-----\s*$/))) {            if (m[1] != state.type) return "error";            state.state = "end";            return "tag";          } else {            if (stream.eatWhile(/[A-Za-z0-9+\/=]/)) {              return null;            } else {              stream.next();              return "error";            }          }        } else if (state.state == "end") {          return errorIfNotEmpty(stream);        }      },      blankLine: function(state) {        if (state.state == "headers") state.state = "body";      },      startState: function() {        return {state: "top", type: null};      }    };  });  CodeMirror.defineMIME("application/pgp", "asciiarmor");  CodeMirror.defineMIME("application/pgp-encrypted", "asciiarmor");  CodeMirror.defineMIME("application/pgp-keys", "asciiarmor");  CodeMirror.defineMIME("application/pgp-signature", "asciiarmor");});
 |