File Editor
Directories:
.. (Back)
Files:
index.html
mbox.js
Create New File
Create
Edit File: mbox.js
// CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://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 4155 var rfc2822Header = new RegExp("^(" + rfc2822.join("|") + "): "); var rfc2822HeaderNoEmail = new RegExp("^(" + rfc2822NoEmail.join("|") + "): "); var header = /^[^:]+:/; // Optional fields defined in RFC 2822 var 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"); });
Save Changes
Rename File
Rename