// 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) // Plain browser env else 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') })