private Description getDescription(HtmlNode descNode) { Description retDescription = new Description(); DocPara dp = new DocPara(); DocText dt = new DocText(); DocPara newPara; foreach (HtmlNode childnode in descNode.ChildNodes.Where(c => c.InnerText != "\r\n")) { switch (childnode.Name) { case "#text": //if (newParagraph == true) //{ // newPara = new DocPara(); // dt = new DocText(); // dt.TextKind = DocTextKind.Plain; // dt.Text = childnode.InnerText.Replace("\r\n \r\n", "\n"); // newPara.Commands.Add(dt); // dp.Commands.Add(newPara); // newParagraph = false; //} //else //{ dt = new DocText(); dt.TextKind = DocTextKind.Plain; dt.Text = childnode.InnerText.Replace("\r\n \r\n", "\n"); dp.Commands.Add(dt); //} break; case "dt": newPara = new DocPara(); dt = new DocText(); dt.TextKind = DocTextKind.Verbatim; dt.Text = childnode.InnerText.Replace("\r\n \r\n", "\n"); newPara.Commands.Add(dt); dp.Commands.Add(newPara); break; case "span": dt = new DocText(); dt.TextKind = DocTextKind.Verbatim; dt.Text = childnode.InnerText.Replace("\r\n \r\n", "\n"); dp.Commands.Add(dt); break; case "code": case "i": DocMarkup dm = new DocMarkup(); dm.MarkupKind = DocMarkupKind.Emphasis; dt = new DocText(); dt.TextKind = DocTextKind.Plain; dt.Text = childnode.InnerText.Replace("\r\n \r\n", "\n"); dm.Commands.Add(dt); dp.Commands.Add(dm); break; case "dd": case "div": Description partialDescription = this.getDescription(childnode); DocPara partialPara = new DocPara(); partialPara.Commands.AddRange(partialDescription.Paragraphs[0].Commands); dp.Commands.Add(partialPara); break; case "p": newPara = new DocPara(); dp.Commands.Add(newPara); //newParagraph = true; break; case "a": String path = childnode.Attributes[0].Value.Replace("../", string.Empty); String package = path.Split('/')[0]; String obj = path.Replace(".html", string.Empty).Split('/')[1]; DocReference dref = new DocReference(); DocText dtx = new DocText(); newPara = new DocPara(); dtx.TextKind = DocTextKind.Plain; if (path.Split('/').Length == 3) { String member = path.Split('/')[2]; dref.Member = this.Model.MemberRefs.Single(c => c.Key == package + "_" + obj + "_" + member).Value; dtx.Text = member; } else { dref.Compound = this.Model.Compounds.Single(c => c.Identifier == package + "_" + obj); dtx.Text = obj; } dref.Commands.Add(dtx); dp.Commands.Add(dref); break; case "pre": dm = new DocMarkup(); dm.MarkupKind = DocMarkupKind.Emphasis; dt = new DocText(); dt.TextKind = DocTextKind.Plain; dt.Text = WebUtility.HtmlDecode(childnode.InnerText); dm.Commands.Add(dt); dp.Commands.Add(dm); break; default: break; } } retDescription.Paragraphs.Add(dp); return retDescription; }
private void ParsePackages() { this.currentFileName = this.IndexFile; HtmlDocument document = new HtmlDocument(); try { document.Load(currentFileName); } catch (Exception) { this.Log(LogKind.Error, "Can't open " + this.currentFileName + "."); return; } HtmlNode root = document.DocumentNode; // Get the HtmlNode, what represents the html tag HtmlNode htmlnode = root.ChildNodes.First(node => node.Name == "html"); // Get the node, what represents the head tag HtmlNode headNode = null; try { headNode = htmlnode.ChildNodes.First(node => node.Name == "head"); } // If the aren't any head tag, than the html is invalid or corrupted catch(InvalidOperationException) { this.Log(LogKind.Error, "Missing head tag in the html. Program is terminating."); return; } // Find the comment, where the version of the javadoc was writen HtmlNode versionnode = headNode.ChildNodes.First(node => node.Name == "#comment"); String version = versionnode.InnerHtml; version = version.Split('(', ')')[1]; this.Index.Version = version; HtmlNode bodyNode = null; try { bodyNode = htmlnode.ChildNodes.First(node => node.Name == "body"); } // If the aren't any body tag, than the html is invalid or corrupted catch (InvalidOperationException) { this.Log(LogKind.Error, "Missing body tag in the html. Program is terminating."); return; } // Get the div tag, what contains the informations about the packages HtmlNode packageDivNode = null; try { packageDivNode = bodyNode.ChildNodes.First(node => node.Name == "div" && node.Attributes.FirstOrDefault(attr => attr.Name == "class" && attr.Value =="contentContainer")!=null); } // If the program can't find the package, than it exit with error. catch (InvalidOperationException) { this.Log(LogKind.Error, "Can't find the packages. Program is terminating."); return; } // Get the table, where is the data of the packages. HtmlNode packageTableNode = null; try { packageTableNode = packageDivNode.ChildNodes.First(node => node.Name == "table").ChildNodes.First(node => node.Name == "tbody"); } catch (InvalidOperationException) { this.Log(LogKind.Error, "Can't find the data of the packages. Program is terminating."); return; } foreach (var packagerow in packageTableNode.ChildNodes.Where(node => node.Name == "tr")) { HtmlNode[] datas = packagerow.ChildNodes.Where(node => node.Name == "td").ToArray(); CompoundIndex ci = new CompoundIndex(); this.Index.Compounds.Add(ci); ci.Name = datas[0].ChildNodes.ElementAt(0).InnerHtml; ci.Identifier = ci.Name; ci.Kind = CompoundKind.Namespace; DoxNamespace c = new DoxNamespace(); c.Identifier = ci.Identifier; c.Name = ci.Name; c.Kind = ci.Kind; this.ProcessPackages.Add(datas[0].ChildNodes.ElementAt(0).Attributes.ElementAt(0).Value); // NEED TO CHANGE! HtmlNode desc = datas[1].ChildNodes.FirstOrDefault(node => node.Name == "div" && node.Attributes.FirstOrDefault(attr => attr.Name == "class" && attr.Value == "block") != null); if(desc != null) { String Description = normalizeHtml(desc.InnerText); DocPara newPara = new DocPara(); DocText desc_text = new DocText(); desc_text.Text = Description; newPara.Commands.Add(desc_text); c.Description.Paragraphs.Add(newPara); } ci.Compound = c; this.Model.Compounds.Add(c); this.Index.CompoundIndexRefs.Add(ci.Identifier, ci); this.Model.CompoundRefs.Add(ci.Identifier, ci.Compound); } this.Log(LogKind.Info, "Processing of " + this.currentFileName + " has ended."); }
public void printMember(DoxMember dm, bool detailed) { DocTable dtable = null; if(detailed == true && dm.DetailedDescription == null) { return; } else if (detailed == true && dm.DetailedDescription.Paragraphs.Count == 0) { return; } if(detailed == true) { dtable = new DocTable(); dtable.ColCount = 1; dtable.RowCount = 2; } DocTableRow dtr = new DocTableRow(); DocTableCell dtc = new DocTableCell(); DocPara dp = new DocPara(); if (dm.ProtectionKind != null) { DocText dt = new DocText(); dt.Text = dm.ProtectionKind.Value.ToString() + ' '; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.New == true) { DocText dt = new DocText(); dt.Text = "new "; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.Final == true) { DocText dt = new DocText(); dt.Text = "final "; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.Volatile == true) { DocText dt = new DocText(); dt.Text = "volatile "; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.VirtualKind != null && dm.VirtualKind != VirtualKind.NonVirtual && dm.Kind != MemberKind.Function) { DocText dt = new DocText(); dt.Text = dm.VirtualKind.ToString(); dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.Inline == true && dm.Kind != MemberKind.Function) { DocText dt = new DocText(); dt.Text = "inline "; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.Static == true && dm.Kind != MemberKind.Function) { DocText dt = new DocText(); dt.Text = "static "; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.Const == true) { DocText dt = new DocText(); dt.Text = "contant "; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.Explicit == true) { DocText dt = new DocText(); dt.Text = "explicit "; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (dm.Definition != null) { String[] texts = dm.Definition.Split(' '); if (texts.Length > 1) { texts = texts.Take(texts.Count() - 1).ToArray(); } for (int i = 0; i < texts.Length; i++ ) { String item = texts[i]; item = item.Split('.').Last(); texts[i] = item; } String text = String.Join(" ", texts); DocText dt = new DocText(); dt.Text = text; dt.TextKind = DocTextKind.Plain; dp.Commands.Add(dt); } if (detailed == false) { dtc.Paragraphs.Add(dp); dtr.Cells.Add(dtc); dtc = new DocTableCell(); dp = new DocPara(); } if (dm.Params.Count != 0) { DocText dt = new DocText(); dt.TextKind = DocTextKind.Plain; dt.Text = dm.Name + "("; dp.Commands.Add(dt); DocAnchor da = new DocAnchor(); da.Id = dm.Identifier; dp.Commands.Add(da); dt = new DocText(); dt.TextKind = DocTextKind.Plain; for (int i = 0; i < dm.Params.Count; i++) { dt.Text = dm.Params[i].Type.Items[0].Text + " "; dt.Text += dm.Params[i].DeclarationName + " "; if (i != dm.Params.Count - 1) { dt.Text += ", "; } } dt.Text += ")"; dp.Commands.Add(dt); } else if (dm.Kind == MemberKind.Function) { DocText dt = new DocText(); dt.TextKind = DocTextKind.Plain; dt.Text = dm.Name; dp.Commands.Add(dt); dt = new DocText(); dt.TextKind = DocTextKind.Plain; dt.Text = "()"; dp.Commands.Add(dt); DocAnchor da = new DocAnchor(); da.Id = dm.Identifier; dp.Commands.Add(da); } else { DocText dt = new DocText(); dt.TextKind = DocTextKind.Plain; dt.Text = dm.Name; dp.Commands.Add(dt); DocAnchor da = new DocAnchor(); da.Id = dm.Identifier; dp.Commands.Add(da); } if (detailed == false) { if (dm.BriefDescription != null && dm.BriefDescription.Paragraphs.Count > 0) { dp.Commands.Add(new DocPara()); dp.Commands.AddRange(dm.BriefDescription.Paragraphs); } dtc.Paragraphs.Add(dp); dtr.Cells.Add(dtc); this.currentTable.Rows.Add(dtr); } else { dtc.IsHeader = true; dtc.Paragraphs.Add(dp); dtr.Cells.Add(dtc); dtable.Rows.Add(dtr); dp = new DocPara(); dp.Commands.AddRange(dm.DetailedDescription.Paragraphs); dtr = new DocTableRow(); dtc = new DocTableCell(); dtc.Paragraphs.Add(dp); dtr.Cells.Add(dtc); dtable.Rows.Add(dtr); dp = new DocPara(); dp.Commands.Add(dtable); DocSect ds = new DocSect(); ds.Paragraphs.Add(dp); this.currentsection.Sections.Add(ds); } }