public async static Task <string> LoadFromHtml(HTMLNode imgNode, string baseUrl) { Param param = imgNode.Param.ByName("src"); string str = ""; if (param == null) { return(str); } string url = param.Value.Trim().ToLower(); if ((url == "#") || url.Equals(string.Empty)) { return(""); } if ((url.StartsWith("http://") || url.StartsWith("ftp://")) || url.StartsWith("file://")) { url = param.Value.Trim(); } else { url = baseUrl + param.Value.Trim(); } ImageStyle style = new ImageStyle(url); using (Stream stream = await NetHelper.Get(url)) { int width = 0; int height = 0; RandomStream rs = new RandomStream(stream); BitmapImage image = new BitmapImage(); { image.SetSource(rs); width = image.PixelWidth; height = image.PixelHeight; Param param2 = imgNode.Param.ByName("width"); if (param2 != null) { style.Width = HTMLTree.FontSizeFromHTML(param2.Value.Trim()); } Param param3 = imgNode.Param.ByName("height"); if (param3 != null) { style.Height = HTMLTree.FontSizeFromHTML(param3.Value.Trim()); } if ((style.Width != -1) && (style.Height != -1)) { width = style.Width; height = style.Height; } else if (style.Width != -1) { height = (width * style.Height) / style.Width; width = style.Width; } else if (style.Height != -1) { width = (height * style.Width) / style.Height; height = style.Height; } } StringBuilder builder = new StringBuilder(); builder.AppendFormat("{{\\pict\\wmetafile8\\picwgoal{0}\\pichgoal{1}\n", width * 20, height * 20); byte[] buffer = new byte[40]; stream.Position = 0L; int num3 = 0; while ((num3 = stream.Read(buffer, 0, 40)) > 0) { for (int i = 0; i < num3; i++) { builder.Append(buffer[i].ToString("x").PadLeft(2, '0')); } builder.Append("\n"); } builder.Append("}"); return(builder.ToString()); } }
private string da(HTMLNode A_0, FontStyle A_1, ref int A_2) { if (A_0.TagName.Equals("head")) { return(""); } string str = ""; FontStyle fontStyle = A_1; int A_2_1 = -1; int index1 = A_0.Css.Css.IndexOf("font-size", CssType.ForAll, ""); if (index1 == -1) { int index2 = A_0.Css.Css.IndexOf("size", CssType.ForAll, ""); if (index2 != -1) { string fontsize = A_0.Css.Css[index2].Value.Trim(); fontStyle.FontSize = (uint)HTMLTree.FontSizeFromHTML(fontsize); fontStyle.FontSize = (uint)((((int)fontStyle.FontSize - 1) * 2 + 10) * 2); } } else { string fontsize = A_0.Css.Css[index1].Value.Trim(); fontStyle.FontSize = (uint)(HTMLTree.FontSizeFromHTML(fontsize) * 2); } int index3 = A_0.Css.Css.IndexOf("font-family", CssType.ForAll, ""); if (index3 != -1) { fontStyle.FontName = A_0.Css.Css[index3].Value.Trim(); } int index4 = A_0.Css.Css.IndexOf("color", CssType.ForAll, ""); if (index4 != -1) { string color = A_0.Css.Css[index4].Value.Trim(); fontStyle.FontColor = HTMLTree.ColorFromHTML(color); } int index5 = A_0.Css.Css.IndexOf("align", CssType.ForAll, ""); if (index5 != -1) { string align = A_0.Css.Css[index5].Value.Trim(); fontStyle.Align = HTMLTree.AlignFromHtml(align); } switch (A_0.TagName) { case "i": case "em": fontStyle.IsItalic = true; break; case "b": case "strong": fontStyle.IsBold = true; break; case "u": fontStyle.IsUnderLine = true; break; case "center": fontStyle.Align = Alignment.Center; break; case "ul": A_2_1 = 0; break; case "ol": A_2_1 = 1; break; case "sup": fontStyle.Raise = RaiseType.Sup; str = str + "{"; break; case "sub": fontStyle.Raise = RaiseType.Sub; str = str + "{"; break; } switch (A_0.TagName) { case "br": str = str + "\\par"; break; case "li": if (A_2 == 0) { str = str + "\\par\n" + this.da(fontStyle) + "{\\pntext\\'B7\\tab}" + this.da(A_0.Text); break; } else if (A_2 > 0) { str = str + "\\par\n " + this.da(fontStyle) + "{\\pntext " + A_2.ToString() + "\\tab}" + this.da(A_0.Text); ++A_2; break; } else { break; } case "font": if (!A_0.Text.Trim().Equals(string.Empty)) { str = str + this.da(fontStyle) + " " + this.da(A_0.Text); break; } else { break; } case "p": case "div": str = str + "\\par\n\\pard" + this.da(fontStyle) + " " + this.da(A_0.Text); break; case "img": str = str + RTFImageHelper.LoadFromHtml(A_0, ""); break; default: if (A_0.Text != string.Empty) { str = str + this.da(fontStyle) + " " + this.da(A_0.Text); break; } else { break; } } for (int index2 = 0; index2 < A_0.Nodes.Count; ++index2) { str = str + this.da(A_0.Nodes[index2], fontStyle, ref A_2_1); } switch (A_0.TagName) { case "sup": case "sub": str = str + "}"; break; } return(str); }