コード例 #1
0
        internal static void ParseCSS_(TextualDataResource tdr, HashSet <string> resourceUrls, Logger logger)
        {
            logger.Verbose("enter. Parsing CSS from {0}", tdr.Uri);
            Parser     parser     = new Parser();
            StyleSheet stylesheet = parser.Parse(tdr.Data);

            CollectAllImportUris_(stylesheet, resourceUrls, tdr.Uri, logger);
            CollectAllFontFaceUris_(stylesheet, resourceUrls, tdr.Uri, logger);
            CollectAllBackgroundImageUris_(stylesheet, resourceUrls, tdr.Uri, logger);
            logger.Verbose("exit");
        }
コード例 #2
0
        internal static TextualDataResource TryGetTextualData_(RGridResource blob, Uri baseUrl, Logger logger)
        {
            byte[] contentBytes   = blob.Content;
            string contentTypeStr = blob.ContentType;

            logger.Verbose("enter - content length: {0} ; content type: {1}", contentBytes?.Length.ToString() ?? "<null>", contentTypeStr);
            if (contentTypeStr == null)
            {
                return(null);
            }
            if (contentBytes.Length == 0)
            {
                return(null);
            }
            string[] parts = contentTypeStr.Split(';');

            TextualDataResource tdr = new TextualDataResource();

            if (parts.Length > 0)
            {
                tdr.MimeType = parts[0].ToLowerInvariant();
            }

            string charset = "UTF-8";

            if (parts.Length > 1)
            {
                string[] keyVal = parts[1].Split('=');
                string   key    = keyVal[0].Trim();
                string   val    = keyVal[1].Trim().Trim('"');
                if (key.Equals("charset", StringComparison.OrdinalIgnoreCase))
                {
                    charset = val.ToUpper();
                }
            }

            if (charset != null)
            {
                tdr.Data = Encoding.GetEncoding(charset).GetString(contentBytes);
            }

            tdr.Uri = blob.Url;
            if (!tdr.Uri.IsAbsoluteUri)
            {
                tdr.Uri = new Uri(baseUrl, tdr.Uri);
            }

            tdr.OriginalData = blob.Content;
            logger.Verbose("exit");
            return(tdr);
        }
コード例 #3
0
        internal static void ParseSVG_(TextualDataResource tdr, HashSet <string> allResourceUris, Logger logger)
        {
            HtmlDocument svgDoc = new HtmlDocument();

            svgDoc.Load(new MemoryStream(tdr.OriginalData));
            IEnumerable <HtmlNode> nodes = svgDoc.DocumentNode.Descendants().Where(n => n.HasAttributes);

            foreach (HtmlNode node in nodes)
            {
                foreach (HtmlAttribute attr in node.Attributes)
                {
                    if (attr.Name.Equals("xlink:href", StringComparison.OrdinalIgnoreCase) || attr.Name.Equals("href", StringComparison.OrdinalIgnoreCase))
                    {
                        string uri = attr.Value;
                        CreateUriAndAddToList(allResourceUris, tdr.Uri, uri, logger);
                    }
                }
            }
        }
コード例 #4
0
        private void GetAndParseResource_(RGridResource blob, Uri baseUrl, HashSet <string> resourceUrls)
        {
            try
            {
                TextualDataResource tdr = TryGetTextualData_(blob, baseUrl, logger_);
                switch (tdr?.MimeType)
                {
                case "text/css": ParseCSS_(tdr, resourceUrls, logger_); break;

                case "image/svg+xml": ParseSVG_(tdr, resourceUrls, logger_); break;
                }
            }
            catch (Exception ex)
            {
                logger_.Log("Error: " + ex);
                logger_.Log("File name: " + blob.Url);
                debugResourceWriter_.Write(blob);
            }
        }