コード例 #1
0
 public static string resolve_name(string name, Idocument_container callback)
 {
     for (var i = 0; g_def_colors[i].name != null; i++)
     {
         if (string.Equals(name, g_def_colors[i].name, StringComparison.OrdinalIgnoreCase))
         {
             return(g_def_colors[i].rgb);
         }
     }
     if (callback != null)
     {
         return(callback.resolve_color(name));
     }
     return(string.Empty);
 }
コード例 #2
0
        public static document createFromUTF8(string str, Idocument_container objPainter, context ctx, css user_styles = null)
        {
            var doc           = new document(objPainter, ctx); // Create litehtml::document
            var root_elements = new List <element>();

            using (var gumbo = new Gumbo.Gumbo(str))                  // parse document into GumboOutput
                doc.create_node(gumbo.Document.Root, root_elements);  // Create litehtml::elements.
            if (root_elements.Count != 0)
            {
                doc._root = root_elements.Back();
            }
            // Let's process created elements tree
            if (doc._root != null)
            {
                doc.container.get_media_features(doc._media);
                doc._root.apply_stylesheet(ctx.master_css); // apply master CSS
                doc._root.parse_attributes();               // parse elements attributes
                foreach (var css in doc._css)               // parse style sheets linked in document
                {
                    doc._styles.parse_stylesheet(css.text, css.baseurl, doc, !string.IsNullOrEmpty(css.media) ? media_query_list.create_from_string(css.media, doc) : null);
                }
                doc._styles.sort_selectors(); // Sort css selectors using CSS rules.
                if (doc._media_lists.Count != 0)
                {
                    doc.update_media_lists(doc._media);  // get current media features
                }
                doc._root.apply_stylesheet(doc._styles); // Apply parsed styles.
                if (user_styles != null)
                {
                    doc._root.apply_stylesheet(user_styles); // Apply user styles if any
                }
                doc._root.parse_styles();                    // Parse applied styles in the elements
                doc.fix_tables_layout();                     // Now the _tabular_elements is filled with tabular elements. We have to check the tabular elements for missing table elements and create the anonymous boxes in visual table layout
                doc._root.init();                            // Fanaly initialize elements
            }
            return(doc);
        }
コード例 #3
0
 public document(Idocument_container objContainer, context ctx)
 {
     _container = objContainer;
     _context   = ctx;
 }
コード例 #4
0
 public static document createFromString(string str, Idocument_container objPainter, context ctx, css user_styles = null) => createFromUTF8(Encoding.UTF8.GetString(Encoding.Default.GetBytes(str)), objPainter, ctx, user_styles);
コード例 #5
0
 public static web_color from_string(string str, Idocument_container callback)
 {
     if (string.IsNullOrEmpty(str))
     {
         return(new web_color(0, 0, 0));
     }
     if (str[0] == '#')
     {
         var red   = string.Empty;
         var green = string.Empty;
         var blue  = string.Empty;
         if (str.Length - 1 == 3)
         {
             red   += str[1];
             red   += str[1];
             green += str[2];
             green += str[2];
             blue  += str[3];
             blue  += str[3];
         }
         else if (str.Length - 1 == 6)
         {
             red   += str[1];
             red   += str[2];
             green += str[3];
             green += str[4];
             blue  += str[5];
             blue  += str[6];
         }
         return(new web_color
         {
             red = (byte)Convert.ToInt64(red, 16),
             green = (byte)Convert.ToInt64(green, 16),
             blue = (byte)Convert.ToInt64(blue, 16)
         });
     }
     else if (str.StartsWith("rgb"))
     {
         var s   = str;
         var pos = s.IndexOf("(");
         if (pos != -1)
         {
             s = s.Substring(pos + 1);
         }
         pos = s.IndexOf(")");
         if (pos != -1)
         {
             s = s.Remove(pos, s.Length - pos);
         }
         var tokens = new List <string>();
         html.split_string(s, tokens, ", \t");
         var clr = new web_color();
         if (tokens.Count >= 1)
         {
             clr.red = (byte)int.Parse(tokens[0]);
         }
         if (tokens.Count >= 2)
         {
             clr.green = (byte)int.Parse(tokens[1]);
         }
         if (tokens.Count >= 3)
         {
             clr.blue = (byte)int.Parse(tokens[2]);
         }
         if (tokens.Count >= 4)
         {
             clr.alpha = (byte)(double.Parse(tokens[3]) * 255.0);
         }
         return(clr);
     }
     else
     {
         var rgb = resolve_name(str, callback);
         if (!string.IsNullOrEmpty(rgb))
         {
             return(from_string(rgb, callback));
         }
     }
     return(new web_color(0, 0, 0));
 }