private static void MakeDataField(string FileAddress) { var Bytes = System.IO.File.ReadAllBytes(FileAddress); CurrentBlock.NewBlock(() => { CurrentBlock += $"public static readonly string Url =\"data:image/gif;base64,{Convert.ToBase64String(Bytes)}\";"; }); }
private static void MakeBytesAsbyte(byte[] Bytes, string ToVariable) { var ZipMemmory = new System.IO.MemoryStream(); using (var Zipper = new System.IO.Compression.DeflateStream(ZipMemmory, System.IO.Compression.CompressionLevel.Optimal)) { Zipper.Write(Bytes, 0, Bytes.Length); } Bytes = ZipMemmory.ToArray(); var strBytes = new char[Bytes.Length * 4]; var bytelen = Bytes.Length / 4; for (int i = 0; i < Bytes.Length; i++) { var strByte = Bytes[i] * 3; var bytepos = i * 4; strBytes[bytepos] = ByteToChars[strByte]; strBytes[bytepos + 1] = ByteToChars[strByte + 1]; strBytes[bytepos + 2] = ByteToChars[strByte + 2]; strBytes[bytepos + 3] = ','; } CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "var ZipMemmory = new System.IO.MemoryStream(new byte[] {" + new string(strBytes) + "});"; CurrentBlock += "var DezippedMemory = new System.IO.MemoryStream();"; CurrentBlock += "using (var Dezip = new System.IO.Compression.DeflateStream(ZipMemmory, System.IO.Compression.CompressionMode.Decompress))"; CurrentBlock += "{"; CurrentBlock.NewBlock("Dezip.CopyTo(DezippedMemory);"); CurrentBlock += "}"; CurrentBlock += ToVariable + " = DezippedMemory.ToArray();"; }); CurrentBlock += "}\n"; }
private static void MakeBytesAsB64(byte[] Bytes, string ToVariable) { var ZipMemmory = new System.IO.MemoryStream(); using (var Zipper = new System.IO.Compression.DeflateStream(ZipMemmory, System.IO.Compression.CompressionLevel.Optimal)) { Zipper.Write(Bytes, 0, Bytes.Length); } Bytes = ZipMemmory.ToArray(); var Text = System.Convert.ToBase64String(Bytes); CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "var ZipMemmory = new System.IO.MemoryStream(System.Convert.FromBase64String(\"" + Text + "\"));"; CurrentBlock += "var DezippedMemory = new System.IO.MemoryStream();"; CurrentBlock += "using (var Dezip = new System.IO.Compression.DeflateStream(ZipMemmory, System.IO.Compression.CompressionMode.Decompress))"; CurrentBlock += "{"; CurrentBlock.NewBlock("Dezip.CopyTo(DezippedMemory);"); CurrentBlock += "}"; CurrentBlock += ToVariable + " = DezippedMemory.ToArray();"; }); CurrentBlock += "}\n"; }
void MakeForDir(System.IO.DirectoryInfo dirinfo) { foreach (var file in dirinfo.GetFiles()) { var FileName = file.Name.Replace(".", "_"); FileName = FileName.Replace("-", "_"); CurrentBlock += "public class " + FileName; CurrentBlock += "{"; if (file.Name.ToLower().EndsWith("css")) { MakeDataField(file.FullName); } else if (file.Name.ToLower().EndsWith("js")) { CurrentBlock.NewBlock(() => { CurrentBlock += "public static readonly string TextContent = ((Func<string>)(() =>"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "byte[] Result = null;"; #if DEBUG MakeBytesAsB64(Encoding.UTF8.GetBytes(System.IO.File.ReadAllText(file.FullName)), "Result"); #else MakeBytesAsbyte(System.IO.File.ReadAllBytes(file.FullName), "Result"); #endif CurrentBlock += "return System.Text.Encoding.UTF8.GetString(Result);"; }); CurrentBlock += "}))();\n"; }); } else if (file.Name.ToLower().EndsWith("html") | file.Name.ToLower().EndsWith("htm")) { //Use the default configuration for AngleSharp var config = Configuration.Default; //Create a new context for evaluating webpages with the given config var context = BrowsingContext.New(config); //Source to be parsed var source = System.IO.File.ReadAllText(file.FullName); //Create a virtual request to specify the document to load (here from our fixed string) var web = context.OpenAsync(req => req.Content(source)).GetAwaiter().GetResult(); var ElementIds = new string[0]; var ElementTags = new string[0]; foreach (var Element in web.All) { string Attribute = null; if (Element.GetAttribute("src") != null) { Attribute = "src"; } else if (Element.GetAttribute("href") != null & Element.TagName.ToLower() == "link") { Attribute = "href"; } if (Attribute != null) { string Address = file.DirectoryName + "\\" + Element.GetAttribute(Attribute).Replace("/", "\\"); if (System.IO.File.Exists(Address)) { Address = new System.IO.FileInfo(Address).FullName; if (Address.StartsWith(BaseDir)) { Element.RemoveAttribute(Attribute); Element.SetAttribute("MNsrc", "Monsajem_Incs.Resources" + Address.Substring(BaseDir.Length). Replace(".", "_"). Replace("-", "_"). Replace("\\", ".")); } } } } foreach (var Element in web.All) { if (Element.Id != null) { Array.Resize(ref ElementIds, ElementIds.Length + 1); ElementIds[ElementIds.Length - 1] = Element.Id; Array.Resize(ref ElementTags, ElementTags.Length + 1); ElementTags[ElementTags.Length - 1] = Element.TagName.ToUpper(); } } if (ElementIds.Length > 0) { string DocText = "<html>" + "<head>" + web.GetElementsByTagName("head")[0].InnerHtml + "</head>" + "<body>" + web.GetElementsByTagName("body")[0].InnerHtml + "</body></html>"; for (int i = 0; i < ElementIds.Length; i++) { if (ElementTags[i] == "INPUT") { ElementTags[i] = "HTMLInputElement"; } else if (ElementTags[i] == "LABEL") { ElementTags[i] = "HTMLLabelElement"; } else if (ElementTags[i] == "DIV") { ElementTags[i] = "HTMLDivElement"; } else if (ElementTags[i] == "DL") { ElementTags[i] = "HTMLDListElement"; } else if (ElementTags[i] == "BUTTON") { ElementTags[i] = "HTMLButtonElement"; } else if (ElementTags[i] == "AREA") { ElementTags[i] = "HTMLAreaElement"; } else if (ElementTags[i] == "IMG") { ElementTags[i] = "HTMLImageElement"; } else if (ElementTags[i] == "TABLE") { ElementTags[i] = "HTMLTableElement"; } else if (ElementTags[i] == "TR") { ElementTags[i] = "HTMLTableRowElement"; } else if (ElementTags[i] == "TD") { ElementTags[i] = "HTMLTableDataCellElement"; } else if (ElementTags[i] == "SELECT") { ElementTags[i] = "HTMLSelectElement"; } else if (ElementTags[i] == "OPTION") { ElementTags[i] = "HTMLOptionElement"; } else if (ElementTags[i] == "IFRAME") { ElementTags[i] = "HTMLIFrameElement"; } else { ElementTags[i] = "HTMLElement"; } } CurrentBlock.NewBlock(() => { CurrentBlock += "public static readonly string HtmlText = ((Func<string>)(() =>"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "byte[] ByteResult = null;"; CurrentBlock += $"var Result =\n@\"{DocText.Replace("\"", "\"\"")}\";"; CurrentBlock += "var Doc = Document.Parse(Result);"; CurrentBlock += "var Elements = Doc.GetElementsByTagName(\"*\").ToArray();"; CurrentBlock += "foreach(var Element in Elements)"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "var MNsrc = Element.GetAttribute(\"MNsrc\");"; CurrentBlock += "if (MNsrc == \"\")"; CurrentBlock += "MNsrc = null;"; CurrentBlock += "if (MNsrc != null)"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "Element.RemoveAttribute(\"MNsrc\");"; CurrentBlock += "var TagName = Element.TagName.ToLower();"; CurrentBlock += "switch(TagName)"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "case \"script\":"; CurrentBlock.NewBlock(() => { CurrentBlock += "Element.InnerHtml = (string)Type.GetType(MNsrc).GetField(\"TextContent\").GetValue(null);"; CurrentBlock += "break;"; }); CurrentBlock += "case \"img\":"; CurrentBlock.NewBlock(() => { CurrentBlock += "Element.SetAttribute(\"src\",(string)Type.GetType(MNsrc).GetField(\"Url\").GetValue(null));"; CurrentBlock += "break;"; }); CurrentBlock += "case \"link\":"; CurrentBlock.NewBlock(() => { CurrentBlock += "if (Element.GetAttribute(\"type\").ToLower() == \"text/css\")"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "var Style = Document.document.CreateElement<HTMLStyleElement>();"; CurrentBlock += "Element.SetAttribute(\"src\",(string)Type.GetType(MNsrc).GetField(\"Url\").GetValue(null));"; CurrentBlock += "Element.ParentElement.ReplaceChild(Style, Element);"; }); CurrentBlock += "}"; CurrentBlock += "break;"; }); }); CurrentBlock += "}"; }); CurrentBlock += "}"; }); CurrentBlock += "}"; CurrentBlock += "Result = \"<html>\\\"\" +" + "\"<head>\" + Doc.GetElementsByTagName(\"head\")[0].InnerHtml + \"</head>\" +" + "\"<body>\" + Doc.GetElementsByTagName(\"body\")[0].InnerHtml + \"</body></html>\";"; CurrentBlock += "return Result;"; }); CurrentBlock += "}))();\n"; for (int i = 0; i < ElementIds.Length; i++) { CurrentBlock += "public readonly " + ElementTags[i] + " " + ElementIds[i] + ";"; } CurrentBlock += "public " + FileName + "():this(false){}"; CurrentBlock += "public " + FileName + "(bool IsGlobal)"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "if(IsGlobal==true)"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "var Document = new Document();"; for (int i2 = 0; i2 < ElementIds.Length; i2++) { CurrentBlock += ElementIds[i2] + "= Document.GetElementById<" + ElementTags[i2] + ">(\"" + ElementIds[i2] + "\");"; } CurrentBlock += "return;"; }); CurrentBlock += "}"; CurrentBlock += "var doc = Document.Parse(HtmlText);"; CurrentBlock += "var HeadTags = doc.Head.GetElementsByTagName(\"*\").ToArray();"; CurrentBlock += "foreach(var Tag in HeadTags)"; CurrentBlock += "Document.document.Head.AppendChild(Tag);"; for (int i2 = 0; i2 < ElementIds.Length; i2++) { CurrentBlock += ElementIds[i2] + "= doc.GetElementById<" + ElementTags[i2] + ">(\"" + ElementIds[i2] + "\");"; } CurrentBlock += "var div = Document.document.CreateElement(\"Div\");"; CurrentBlock += "div.AppendChild(doc.Body);"; CurrentBlock += "var Scripts = div.GetElementsByTagName(\"Script\").ToArray();"; CurrentBlock += "foreach(var Script in Scripts)"; CurrentBlock += "{"; CurrentBlock.NewBlock(() => { CurrentBlock += "var NewScript = Document.document.CreateElement(\"Script\");"; CurrentBlock += "var Src = Script.GetAttribute(\"src\");"; CurrentBlock += "if(Src!=null)"; CurrentBlock.NewBlock(() => CurrentBlock += "NewScript.SetAttribute(\"src\",Src);"); CurrentBlock += "NewScript.InnerHtml = Script.InnerHtml;"; CurrentBlock += "Script.ParentElement.ReplaceChild(NewScript, Script);"; }); CurrentBlock += "}"; CurrentBlock += "div.SetStyleAttribute(\"display\",\"none\");"; CurrentBlock += "Document.document.Body.AppendChild(div);"; CurrentBlock += "Document.document.Body.RemoveChild(div);"; for (int i2 = 0; i2 < ElementIds.Length; i2++) { CurrentBlock += ElementIds[i2] + ".Id=\"\";"; } }); CurrentBlock += "}"; }); } } else { MakeDataField(file.FullName); } CurrentBlock += "\n" + AddTabs() + "}"; } foreach (var Dir in dirinfo.GetDirectories()) { CurrentBlock += "\n" + AddTabs() + "namespace " + Dir.Name.Replace(".", "_") + "\n" + AddTabs() + "{"; Tabs += 1; MakeForDir(Dir); Tabs -= 1; CurrentBlock += "\n" + AddTabs() + "}"; } }