예제 #1
0
        public static bool TryAsASCIIAString(string pString, out cCommandPart rResult)
        {
            if (pString == null)
            {
                rResult = null; return(false);
            }

            cTextCommandPart lText;

            if (ZTryAsBytesInCharset(pString, cCharset.AString, false, out lText))
            {
                rResult = lText; return(true);
            }
            if (ZTryAsQuotedASCII(pString, false, out lText))
            {
                rResult = lText; return(true);
            }

            if (TryAsASCIILiteral(pString, false, out var lLiteral))
            {
                rResult = lLiteral; return(true);
            }

            rResult = null;
            return(false);
        }
예제 #2
0
 public void BeginList(eListBracketing pBracketing, cCommandPart pPrefix = null, cCommandPart pPostfix = null)
 {
     if (mList != null)
     {
         mLists.Push(mList);
     }
     mList = new cList(pBracketing, pPrefix, pPostfix);
 }
예제 #3
0
 public void Add(cCommandPart pPart)
 {
     if (mAddCount != 0)
     {
         mParts.Add(cCommandPart.Space);
     }
     mParts.Add(pPart);
     mAddCount++;
 }
예제 #4
0
 public cList(eListBracketing pBracketing, cCommandPart pPrefix, cCommandPart pPostix)
 {
     Bracketing = pBracketing;
     Prefix     = pPrefix;
     Postfix    = pPostix;
     mParts     = new List <cCommandPart>();
     mAddCount  = 0;
     Parts      = new ReadOnlyCollection <cCommandPart>(mParts);
 }
예제 #5
0
                public void Add(cCommandPart pPart)
                {
                    if (mList == null)
                    {
                        mParts.Add(pPart);
                        return;
                    }

                    mList.Add(pPart);
                }
예제 #6
0
 public bool TryAsMailbox(string pMailboxPath, char?pDelimiter, out cCommandPart rCommandPart, out string rEncodedMailboxPath)
 {
     if (pMailboxPath == null)
     {
         rCommandPart = null; rEncodedMailboxPath = null; return(false);
     }
     if (pDelimiter != null && !cTools.IsValidDelimiter(pDelimiter.Value))
     {
         rCommandPart = null; rEncodedMailboxPath = null; return(false);
     }
     return(ZTryAsMailbox(pMailboxPath, pDelimiter, cCharset.AString, out rCommandPart, out rEncodedMailboxPath));
 }
예제 #7
0
 public bool TryAsListMailbox(string pString, char?pDelimiter, out cCommandPart rResult)
 {
     if (pString == null)
     {
         rResult = null; return(false);
     }
     if (pDelimiter != null && !cTools.IsValidDelimiter(pDelimiter.Value))
     {
         rResult = null; return(false);
     }
     return(ZTryAsMailbox(pString, pDelimiter, cCharset.ListMailbox, out rResult, out _));
 }
예제 #8
0
        public bool TryAsAString(string pString, bool pSecret, out cCommandPart rResult)
        {
            if (pString == null)
            {
                rResult = null; return(false);
            }

            bool                lResult;
            cTextCommandPart    lText;
            cLiteralCommandPart lLiteral;

            if (ZTryAsBytesInCharset(pString, cCharset.AString, pSecret, out lText))
            {
                rResult = lText; return(true);
            }
            if (ZTryAsQuotedASCII(pString, pSecret, out lText))
            {
                rResult = lText; return(true);
            }
            if (TryAsASCIILiteral(pString, pSecret, out lLiteral))
            {
                rResult = lLiteral; return(true);
            }

            if (UTF8Enabled)
            {
                lResult = ZTryAsQuotedUTF8(pString, pSecret, out lText);
                rResult = lText;
                return(lResult);
            }

            if (Encoding == null)
            {
                rResult = null; return(false);
            }

            var lBytes = Encoding.GetBytes(pString);

            if (ZTryAsBytesInCharset(lBytes, cCharset.AString, pSecret, true, out lText))
            {
                rResult = lText; return(true);
            }
            if (ZTryAsQuotedASCII(lBytes, pSecret, true, out lText))
            {
                rResult = lText; return(true);
            }

            lResult = ZTryAsLiteral(lBytes, pSecret, true, out lLiteral);
            rResult = lLiteral;
            return(lResult);
        }
예제 #9
0
 public static bool TryAsASCIIString(string pString, out cCommandPart rResult)
 {
     if (pString == null)
     {
         rResult = null; return(false);
     }
     if (ZTryAsQuotedASCII(pString, false, out var lText))
     {
         rResult = lText; return(true);
     }
     if (TryAsASCIILiteral(pString, false, out var lLiteral))
     {
         rResult = lLiteral; return(true);
     }
     rResult = null;
     return(false);
 }
예제 #10
0
        public bool TryAsNString(string pString, bool pSecret, out cCommandPart rResult)
        {
            if (pString == null)
            {
                if (pSecret)
                {
                    rResult = cCommandPart.NilSecret;
                }
                else
                {
                    rResult = cCommandPart.Nil;
                }
                return(true);
            }

            return(TryAsString(pString, pSecret, out rResult));
        }
예제 #11
0
        private bool ZTryAsMailbox(string pString, char?pDelimiter, cCharset pCharset, out cCommandPart rCommandPart, out string rEncodedMailboxPath)
        {
            if (pString.Equals(cMailboxName.InboxString, StringComparison.InvariantCultureIgnoreCase))
            {
                rCommandPart        = cCommandPart.Inbox;
                rEncodedMailboxPath = cMailboxName.InboxString;
            }

            cTextCommandPart    lText;
            cLiteralCommandPart lLiteral;

            if (ZTryAsBytesInCharset(pString, pCharset, false, out lText))
            {
                rCommandPart        = lText;
                rEncodedMailboxPath = pString;
                return(true);
            }

            if (UTF8Enabled)
            {
                if (ZTryAsQuotedUTF8(pString, false, out lText))
                {
                    rCommandPart        = lText;
                    rEncodedMailboxPath = pString;
                    return(true);
                }

                rCommandPart        = null;
                rEncodedMailboxPath = null;
                return(false);
            }

            cByteList lBytes;

            if (pDelimiter == null)
            {
                lBytes = cModifiedUTF7.Encode(pString);
            }
            else
            {
                char lDelimiterChar = pDelimiter.Value;
                byte lDelimiterByte = (byte)lDelimiterChar;

                string[] lSegments = pString.Split(lDelimiterChar);

                lBytes = new cByteList();
                bool lFirst = true;

                foreach (string lSegment in lSegments)
                {
                    if (lFirst)
                    {
                        lFirst = false;
                    }
                    else
                    {
                        lBytes.Add(lDelimiterByte);
                    }
                    lBytes.AddRange(cModifiedUTF7.Encode(lSegment));
                }
            }

            if (ZTryAsBytesInCharset(lBytes, pCharset, false, false, out lText) || ZTryAsQuotedASCII(lBytes, false, false, out lText))
            {
                rCommandPart        = lText;
                rEncodedMailboxPath = cTools.ASCIIBytesToString(lBytes);
                return(true);
            }

            if (ZTryAsASCIILiteral(lBytes, false, out lLiteral))
            {
                rCommandPart        = lLiteral;
                rEncodedMailboxPath = cTools.ASCIIBytesToString(lBytes);
                return(true);
            }

            rCommandPart        = null;
            rEncodedMailboxPath = null;
            return(false);
        }