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); }
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); }
public document(Idocument_container objContainer, context ctx) { _container = objContainer; _context = ctx; }
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);
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)); }