| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 | // 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";var rfc2822 = [  "From", "Sender", "Reply-To", "To", "Cc", "Bcc", "Message-ID",  "In-Reply-To", "References", "Resent-From", "Resent-Sender", "Resent-To",  "Resent-Cc", "Resent-Bcc", "Resent-Message-ID", "Return-Path", "Received"];var rfc2822NoEmail = [  "Date", "Subject", "Comments", "Keywords", "Resent-Date"];CodeMirror.registerHelper("hintWords", "mbox", rfc2822.concat(rfc2822NoEmail));var whitespace = /^[ \t]/;var separator = /^From /; // See RFC 4155var rfc2822Header = new RegExp("^(" + rfc2822.join("|") + "): ");var rfc2822HeaderNoEmail = new RegExp("^(" + rfc2822NoEmail.join("|") + "): ");var header = /^[^:]+:/; // Optional fields defined in RFC 2822var email = /^[^ ]+@[^ ]+/;var untilEmail = /^.*?(?=[^ ]+?@[^ ]+)/;var bracketedEmail = /^<.*?>/;var untilBracketedEmail = /^.*?(?=<.*>)/;function styleForHeader(header) {  if (header === "Subject") return "header";  return "string";}function readToken(stream, state) {  if (stream.sol()) {    // From last line    state.inSeparator = false;    if (state.inHeader && stream.match(whitespace)) {      // Header folding      return null;    } else {      state.inHeader = false;      state.header = null;    }    if (stream.match(separator)) {      state.inHeaders = true;      state.inSeparator = true;      return "atom";    }    var match;    var emailPermitted = false;    if ((match = stream.match(rfc2822HeaderNoEmail)) ||        (emailPermitted = true) && (match = stream.match(rfc2822Header))) {      state.inHeaders = true;      state.inHeader = true;      state.emailPermitted = emailPermitted;      state.header = match[1];      return "atom";    }    // Use vim's heuristics: recognize custom headers only if the line is in a    // block of legitimate headers.    if (state.inHeaders && (match = stream.match(header))) {      state.inHeader = true;      state.emailPermitted = true;      state.header = match[1];      return "atom";    }    state.inHeaders = false;    stream.skipToEnd();    return null;  }  if (state.inSeparator) {    if (stream.match(email)) return "link";    if (stream.match(untilEmail)) return "atom";    stream.skipToEnd();    return "atom";  }  if (state.inHeader) {    var style = styleForHeader(state.header);    if (state.emailPermitted) {      if (stream.match(bracketedEmail)) return style + " link";      if (stream.match(untilBracketedEmail)) return style;    }    stream.skipToEnd();    return style;  }  stream.skipToEnd();  return null;};CodeMirror.defineMode("mbox", function() {  return {    startState: function() {      return {        // Is in a mbox separator        inSeparator: false,        // Is in a mail header        inHeader: false,        // If bracketed email is permitted. Only applicable when inHeader        emailPermitted: false,        // Name of current header        header: null,        // Is in a region of mail headers        inHeaders: false      };    },    token: readToken,    blankLine: function(state) {      state.inHeaders = state.inSeparator = state.inHeader = false;    }  };});CodeMirror.defineMIME("application/mbox", "mbox");});
 |