// ----------------------------------------------------------------------- // // Copyright (C) 2003-2006 Angel Marin // // This file is part of SharpMimeTools // // SharpMimeTools is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // SharpMimeTools is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with SharpMimeTools; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // // ----------------------------------------------------------------------- using System; namespace anmar.SharpMimeTools { /// /// /// public sealed class ABNF { /// /// /// public const string CRLF = "\r\n"; /// /// /// public const string ALPHA = @"A-Za-z"; /// /// /// public const string DIGIT = @"0-9"; /// /// RFC 2822 Section 2.2.2 /// public const string WSP = @"\x20\x09"; /// /// RFC 2822 Section 3.2.1 /// public const string NO_WS_CTL = @"\x01-\x08\x0B\x0C\x0E-\x1F\x7F"; /// /// RFC 2822 Section 3.2.1 /// // FIXME: add obs-text public const string text = @"\x01-\x09\x0B\x0C\x0E-\x7F"; /// /// RFC 2822 Section 3.2.2 /// // FIXME: add obs-qp public const string quoted_pair = @"[\x5C][" + text + "]"; /// /// RFC 2822 Section 3.2.3 /// // FIXME: add obs-FWS public const string FWS = @"(?:(?:[" + WSP + @"]*\r\n)?[" + WSP + @"]+)"; /// /// RFC 2822 Section 3.2.3 /// public const string ctext = NO_WS_CTL + @"\x21-\x27\x2A-\x5B\x5D-\x7E"; /// /// RFC 2822 Section 3.2.3 /// public const string ccontent = "(?:" + ctext + "|" + quoted_pair + ")"; /// /// RFC 2822 Section 3.2.3 /// public const string comment = @"\((" + FWS + "?" + ccontent + ")*" + FWS + @"?\)"; /// /// RFC 2822 Section 3.2.3 /// // FIXME: Correct this simplification public const string CFWS = "(?:(?:" + FWS + "?" + comment + ")*(?:" + FWS + "?" + comment + "|" + FWS + "))"; /// /// RFC 2822 Section 3.2.4 /// public const string atext = ALPHA + DIGIT + @"\x21\x23-\x27\x2A\x2B\x2D\x2F\x3D\x3F\x5E\x5F\x60\x7B-\x7E"; /// /// RFC 2822 Section 3.2.4 /// public const string atom = CFWS + @"?[" + atext + @"]" + CFWS + "?"; /// /// RFC 2822 Section 3.2.4 /// public const string dot_atom = CFWS + @"?" + dot_atom_text + CFWS + "?"; /// /// RFC 2822 Section 3.2.4 /// public const string dot_atom_text = @"[" + atext + @"]+(?:[.][" + atext + @"]+)*"; /// /// RFC 2822 Section 3.2.5 /// public const string DQUOTE = @"\x22"; /// /// RFC 2822 Section 3.2.5 /// public const string qtext = NO_WS_CTL + @"\x21\x23-\x5A\x5B\x5D-\x7E"; /// /// RFC 2822 Section 3.2.5 /// public const string qcontent = @"(?:[" + qtext + @"]|" + quoted_pair + @")"; /// /// RFC 2822 Section 3.2.5 /// public const string quoted_string = CFWS + "?" + DQUOTE + @"(?:" + FWS + "?" + qcontent + ")*" + FWS + "?" + DQUOTE + CFWS + "?"; /// /// RFC 2822 Section 3.2.6 /// public const string word = @"(?:" + atom + @"|" + quoted_string + @")"; /// /// RFC 2822 Section 3.2.6 /// // FIXME: add obs-phrase public const string phrase = word + @"+"; /// /// RFC 2822 Section 3.4 /// public const string address = @"(?:" + mailbox + @"|" + group + @")"; /// /// RFC 2822 Section 3.4 /// public const string mailbox = @"(?:" + addr_spec + @"|" + name_addr + @")"; /// /// RFC 2822 Section 3.4 /// public const string name_addr = @"(?:(?:" + phrase + @")?(?:" + angle_addr + @"))"; /// /// RFC 2822 Section 3.4 /// // FIXME: add obs-angle-addr public const string angle_addr = CFWS + @"?[\x3C]" + addr_spec + @"[\x3E]" + CFWS + "?"; /// /// RFC 2822 Section 3.4 /// public const string group = phrase + @":(?:" + mailbox_list + @"|" + CFWS + @")?[;]" + CFWS + "?"; /// /// RFC 2822 Section 3.4 /// public const string mailbox_list = @"(?:" + mailbox + @"(?:[,]" + mailbox + @")*)"; /// /// RFC 2822 Section 3.4 /// public const string address_list = @"(?:" + address + @"(?:[,]" + address + @")*)"; /// /// RFC 2822 Section 3.4.1 /// // FIXME: add obs-local-part public const string local_part = @"(?:" + dot_atom + @"|" + quoted_string + @")"; /// /// RFC 2822 Section 3.4.1 /// // FIXME: add obs-domain public const string domain = @"(?:" + dot_atom + @"|" + domain_literal + @")"; /// /// RFC 2822 Section 3.4.1 /// public const string domain_literal = CFWS + @"?[\[](?:" + FWS + "?" + dcontent + @")*" + FWS + @"?[\]]" + CFWS + "?"; /// /// RFC 2822 Section 3.4.1 /// public const string dtext = NO_WS_CTL + @"\x21-\x5A\x5E-\x7E"; /// /// RFC 2822 Section 3.4.1 /// public const string dcontent = @"(?:[" + dtext + @"]|" + quoted_pair + @")"; /// /// RFC 2822 Section 3.4.1 /// public const string addr_spec = local_part + "[@]" + domain; /// /// Regular Expression for address (RFC 2822 Section 3.4) definition /// public static System.Text.RegularExpressions.Regex address_regex = new System.Text.RegularExpressions.Regex(@"(" + anmar.SharpMimeTools.ABNF.address + @")", System.Text.RegularExpressions.RegexOptions.Singleline); } }