protected virtual void TranslateDevHtmlDocument(string sourceFilePath, string targetFilePath) { HtmlDocument htmlDoc = new HtmlDocument(); VisitedItems.Clear(); try { using (var srcTxtReader = CreateStreamReaderFromFile(sourceFilePath)) using (var tarTxtWriter = new StreamWriter(targetFilePath)) { List <HtmlNode> scriptNodes = new List <HtmlNode>(); htmlDoc.Load(srcTxtReader); htmlDoc.DocumentNode.SelectNodes("//script")?.ToList() .ForEach(n => { n.Remove(); scriptNodes.Add(n); }); foreach (var node in htmlDoc.DocumentNode.ChildNodes) { scriptNodes.AddRange(TranslateHtmlNodes(node.ChildNodes, 0)); } var body = htmlDoc.DocumentNode.SelectNodes("//body") .SingleOrDefault(); scriptNodes.ForEach(n => { body?.ChildNodes.Add(HtmlNode.CreateNode(Environment.NewLine)); body?.ChildNodes.Add(n); }); FormatHtmlNodes(htmlDoc.DocumentNode.ChildNodes, 0); htmlDoc.OptionFixNestedTags = true; htmlDoc.Save(tarTxtWriter); } foreach (var includeFilePath in VisitedItems) { if (ReferenceItems.ContainsKey(includeFilePath) == true) { if (ReferenceItems[includeFilePath].Contains(sourceFilePath) == false) { ReferenceItems[includeFilePath].Add(sourceFilePath); } } else { ReferenceItems.Add(includeFilePath, new List <string>()); ReferenceItems[includeFilePath].Add(sourceFilePath); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } }
protected bool HasCycle(string includeFilePath) { bool result = false; if (VisitedItems.Any(i => i.Equals(includeFilePath, StringComparison.CurrentCultureIgnoreCase))) { int visitedIdx = VisitedItems.Count - 1; List <string> periodItems = new List <string> { includeFilePath }; while (visitedIdx >= 0 && VisitedItems[visitedIdx].Equals(includeFilePath) == false) { periodItems.Insert(0, VisitedItems[visitedIdx--]); } result = ContainsSubsequence(VisitedItems, periodItems); } return(result); }
protected virtual HtmlNode[] TranslateHtmlNodes(HtmlNodeCollection nodes, int level) { List <HtmlNode> scriptNodes = new List <HtmlNode>(); List <HtmlNode> includeNodes = new List <HtmlNode>(); if (nodes == null || level > MaxLevel) { return(scriptNodes.ToArray()); } foreach (var node in nodes) { if (node.Name.ToLower().Contains(IncludeTagName) == true) { includeNodes.Add(node); } else { scriptNodes.AddRange(TranslateHtmlNodes(node.ChildNodes, level + 1)); } } foreach (var node in includeNodes) { HtmlDocument htmlDoc = new HtmlDocument(); try { string includeFilePath = Path.Combine(WatchPath, node.InnerText); VisitedItems.Add(includeFilePath); using (var srcFs = new FileStream(includeFilePath, FileMode.Open, FileAccess.Read)) using (var srcTxtReader = new StreamReader(srcFs)) { var content = srcTxtReader.ReadToEnd(); foreach (var attr in node.Attributes) { content = content.Replace(attr.Name, attr.Value); } htmlDoc.Load(new StringReader(content)); htmlDoc.DocumentNode.SelectNodes("//script")?.ToList() .ForEach(n => { n.Remove(); scriptNodes.Add(n); }); foreach (var subNode in htmlDoc.DocumentNode.ChildNodes) { scriptNodes.AddRange(TranslateHtmlNodes(subNode.ChildNodes, level + 1)); } node.ParentNode.ReplaceChild(htmlDoc.DocumentNode, node); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } } return(scriptNodes.ToArray()); }