Exemple #1
0
        //--- Class Methods ---
        public static bool TryParse(string source, out XDataUri uri)
        {
            if(string.IsNullOrEmpty(source)) {
                uri = null;
                return false;
            }

            // check if source starts with "data:"
            if(!source.StartsWithInvariantIgnoreCase(DATA_SCHEME)) {
                uri = null;
                return false;
            }

            // check if source contains a comma
            var comma = source.IndexOf(",", DATA_SCHEME.Length, StringComparison.Ordinal);
            if(comma < 0) {
                uri = null;
                return false;
            }

            // parse key-value pairs between scheme and comma
            string mime = null;
            string charset = null;
            var base64 = false;
            var temp = source.Substring(DATA_SCHEME.Length, comma - DATA_SCHEME.Length);
            foreach(var header in temp.Split(';')) {
                var equal = header.IndexOfInvariant("=");
                string name;
                string value;
                if(equal == -1) {
                    name = string.IsNullOrEmpty(mime) ? "mime" : "base64";
                    value = XUri.Decode(header).Trim();
                } else {
                    name = XUri.Decode(header.Substring(0, equal)).Trim();
                    value = XUri.Decode(header.Substring(equal + 1)).Trim();
                }
                switch(name.ToLowerInvariant()) {
                case "mime":
                    mime = value;
                    break;
                case "charset":
                    charset = value;
                    break;
                case "base64":
                    base64 = value.EqualsInvariantIgnoreCase(BASE64_ENCODING);
                    break;
                default:

                    // NOTE (steveb): we're ignoring additional meta-data since it's not useful for our use case
                    break;
                }
            }

            // compute mime-type
            var mimeType = MimeType.TEXT;
            if(!string.IsNullOrEmpty(mime)) {
                mimeType = !string.IsNullOrEmpty(charset) ? new MimeType(string.Format("{0};charset={1}", mime, charset)) : new MimeType(mime);
            }

            // create data uri wrapper
            uri = new XDataUri {
                MimeType = mimeType,
                Base64 = base64
            };
            return true;
        }
Exemple #2
0
        //--- Class Methods ---
        public static bool TryParse(string source, out XDataUri uri)
        {
            if (string.IsNullOrEmpty(source))
            {
                uri = null;
                return(false);
            }

            // check if source starts with "data:"
            if (!source.StartsWithInvariantIgnoreCase(DATA_SCHEME))
            {
                uri = null;
                return(false);
            }

            // check if source contains a comma
            var comma = source.IndexOf(",", DATA_SCHEME.Length, StringComparison.Ordinal);

            if (comma < 0)
            {
                uri = null;
                return(false);
            }

            // parse key-value pairs between scheme and comma
            string mime    = null;
            string charset = null;
            var    base64  = false;
            var    temp    = source.Substring(DATA_SCHEME.Length, comma - DATA_SCHEME.Length);

            foreach (var header in temp.Split(';'))
            {
                var    equal = header.IndexOfInvariant("=");
                string name;
                string value;
                if (equal == -1)
                {
                    name  = string.IsNullOrEmpty(mime) ? "mime" : "base64";
                    value = XUri.Decode(header).Trim();
                }
                else
                {
                    name  = XUri.Decode(header.Substring(0, equal)).Trim();
                    value = XUri.Decode(header.Substring(equal + 1)).Trim();
                }
                switch (name.ToLowerInvariant())
                {
                case "mime":
                    mime = value;
                    break;

                case "charset":
                    charset = value;
                    break;

                case "base64":
                    base64 = value.EqualsInvariantIgnoreCase(BASE64_ENCODING);
                    break;

                default:

                    // NOTE (steveb): we're ignoring additional meta-data since it's not useful for our use case
                    break;
                }
            }

            // compute mime-type
            var mimeType = MimeType.TEXT;

            if (!string.IsNullOrEmpty(mime))
            {
                mimeType = !string.IsNullOrEmpty(charset) ? new MimeType(string.Format("{0};charset={1}", mime, charset)) : new MimeType(mime);
            }

            // create data uri wrapper
            uri = new XDataUri {
                MimeType = mimeType,
                Base64   = base64
            };
            return(true);
        }