public override void UpdateEnumField(XElement dest, string member, string java) { XElement jd = Element; var div = jd.Descendants("div").Where(d => Application.HasHtmlClass(d, "api") && d.Elements("h3").Any(h3 => h3.LastNode.ToString().Trim() == java)).FirstOrDefault(); if (div == null) { return; } var srcDoc = div.Descendants("p"); if (srcDoc == null) { return; } var dSummary = dest.Descendants("Member").Where(d => d.Attribute("MemberName").Value == member).Descendants("summary").FirstOrDefault(); if (dSummary == null) { return; } dSummary.Value = ""; dSummary.Add(Mdoc.FromHtml(srcDoc)); Application.FixupMdoc(dSummary); }
public override void UpdateMemberSeeAlso(XElement mdoc, bool clean) { XElement mdDocs = mdoc.Element("Docs"); if (clean) { foreach (XElement e in mdDocs.Elements("altmember").ToList()) { e.Remove(); } } if (seealso_node == null) { return; } foreach (XElement pe in seealso_node.ElementsAfterSelf().TakeWhile(e => e.Name.LocalName == "dd")) { XElement link = pe.Element("a"); if (link == null) { continue; } // FIXME: CrefFromHref() is valid only for DroidDoc. It needs to be rewritten. string cref = Mdoc.CrefFromHref(link.Attribute("href").Value); if (cref.Length > 0 && cref [0] == '!') { continue; } mdDocs.Add(new XElement("altmember", new XAttribute("cref", cref))); } }
public override void UpdateMemberReturns(XElement mdoc, bool clean) { bool firstPass = clean; if (firstPass) { return; } XElement jd = Section; XElement jdReturns = GetJavaDocSection(jd, "Returns"); if (jdReturns == null) { return; } XElement mdReturns = mdoc.Element("Docs").Element("returns") ?? mdoc.Element("Docs").Element("value"); if (mdReturns == null) { return; } if (clean) { mdReturns.Value = ""; } mdReturns.Add(Mdoc.FromHtml(jdReturns.ElementsAfterSelf("ul").First())); Application.FixupMdoc(mdReturns); }
public override void UpdateMemberExceptions(XElement mdoc, bool clean) { if (exception_node == null) { return; } XElement mdDocs = mdoc.Element("Docs"); if (clean) { foreach (XElement e in mdDocs.Elements("exception").ToList()) { e.Remove(); } } foreach (XElement jdp in exception_node.ElementsAfterSelf().TakeWhile(e => e.Name.LocalName == "dd")) { XElement type = jdp.Descendants("a").FirstOrDefault(); if (type != null) { mdDocs.Add(new XElement("exception", new XAttribute("cref", Mdoc.CrefFromHref(type.Attribute("href").Value)), Mdoc.FromHtml(ExceptionDocs(type)))); } } }
public override void UpdateMemberReturns(XElement mdoc, bool clean) { XElement jd = Section; XElement jdReturns = GetJavaDocSectionTable(jd, "Returns"); if (jdReturns == null) { return; } XElement mdReturns = mdoc.Element("Docs").Element("returns") ?? mdoc.Element("Docs").Element("value"); if (mdReturns == null) { return; } XElement jdr = jdReturns.Elements("tr").Last(); string name = jdr.Elements().First().Value.Trim(); var nodes = Mdoc.FromHtml(jdr.Elements().Last().Nodes()); if (clean) { mdReturns.Value = ""; } mdReturns.Add(Mdoc.FromHtml(jdr.Elements().Last())); Application.FixupMdoc(mdReturns); }
public void UpdateTypeDocs(XElement mdoc, RegisterAttribute tregister) { var jd = Element; var mdRemarks = mdoc.XPathSelectElement("Docs/remarks"); mdRemarks.Value = ""; var nodes = GetTypeSummaryNodes(jd); mdRemarks.Add(Mdoc.FromHtml(nodes)); Application.FixupMdoc(mdRemarks); Application.AddAndroidDocUrlWithOptionalContent(mdRemarks, tregister, null); UpdateSince(mdRemarks); Application.SetSummaryFromRemarks(mdoc.Element("Docs")); }
public override void UpdateMemberParameters(XElement mdoc) { if (params_node == null) { return; } foreach (XElement pe in params_node.ElementsAfterSelf().TakeWhile(e => e.Name.LocalName == "dd")) { var code = pe.Element(XName.Get("code")); string name = code.Value; if (name == "event") { name = "e"; } var nodes = Mdoc.FromHtml(code.NodesAfterSelf()); UpdateParameter(name, nodes, mdoc); } }
public override void UpdateMemberReturns(XElement mdoc, bool clean) { XElement mdReturns = mdoc.Element("Docs").Element("returns") ?? mdoc.Element("Docs").Element("value"); if (mdReturns == null) { return; } if (clean) { mdReturns.Value = ""; } if (returns_node == null) { return; } mdReturns.Add(Mdoc.FromHtml(returns_node.ElementsAfterSelf("dd").First().Nodes())); Application.FixupMdoc(mdReturns); }
public void UpdateMemberSection(MemberInfo member, RegisterAttribute tregister, XElement dest, string prefix, bool firstPass) { //XElement jdSummaryDiv = section.SummaryDiv; string anchor = Anchor; var mdRemarks = dest.XPathSelectElement("Docs/remarks"); if (firstPass) { mdRemarks.Value = ""; } if (prefix != null) { Application.AddAndroidDocUrlWithOptionalContent(mdRemarks, tregister, anchor, prefix + " method documentation", Mdoc.FromHtml(GetSummaryNodes())); } else { mdRemarks.Add(Mdoc.FromHtml(GetSummaryNodes())); Application.AddAndroidDocUrlWithOptionalContent(mdRemarks, tregister, anchor); } Application.FixupMdoc(mdRemarks); if (firstPass) { UpdateSince(mdRemarks); Application.SetSummaryFromRemarks(dest.Element("Docs"), prefix, firstPass); } // if method.IsSpecialName is true, then it's probably a property, in // which case the parameter names will NOT match. var method = member as MethodInfo; if (method != null && !method.IsSpecialName) { UpdateMemberParameters(dest); } UpdateMemberExceptions(dest, firstPass); UpdateMemberReturns(dest, firstPass); UpdateMemberSeeAlso(dest, firstPass); }
public override void UpdateMemberSeeAlso(XElement mdoc, bool clean) { XElement jd = Section; XElement mdDocs = mdoc.Element("Docs"); if (clean) { foreach (XElement e in mdDocs.Elements("altmember").ToList()) { e.Remove(); } } XElement jdSeeAlso = GetJavaDocSection(jd, "See Also"); if (jdSeeAlso == null) { return; } foreach (XElement jdp in jdSeeAlso.ElementsAfterSelf("ul").Elements("li").Elements("code")) { XElement link = jdp.Element("a"); if (link == null) { continue; } string cref = Mdoc.CrefFromHref(link.Attribute("href").Value); if (cref.Length > 0 && cref [0] == '!') { continue; } mdDocs.Add(new XElement("altmember", new XAttribute("cref", cref))); } }
public override void UpdateMemberExceptions(XElement mdoc, bool clean) { XElement jd = Section; XElement jdThrows = GetJavaDocSectionTable(jd, "Throws"); if (jdThrows == null) { return; } XElement mdDocs = mdoc.Element("Docs"); if (clean) { foreach (XElement e in mdDocs.Elements("exception").ToList()) { e.Remove(); } } foreach (XElement jdp in jdThrows.Elements("tr").Elements("th")) { XElement type = jdp.Element("a"); if (type != null) { mdDocs.Add(new XElement("exception", new XAttribute("cref", Mdoc.CrefFromHref(type.Attribute("href").Value)), Mdoc.FromHtml(ExceptionDocs(type)))); } else if ((type = jdp.Element("td")) != null) { mdDocs.Add(new XElement("exception", new XAttribute("cref", Mdoc.CrefFromJavaType(type.Value.Trim())), Mdoc.FromHtml(ExceptionDocs(type)))); } } }
public override void UpdateMemberParameters(XElement mdoc) { XElement jd = Section; XElement jdParameters = GetJavaDocSectionTable(jd, "Parameters"); if (jdParameters == null) { return; } foreach (XElement jdp in jdParameters.Elements("tr").Elements("th")) { string name = jdp.FirstNode.ToString().Trim(); if (name == "event") { name = "e"; } var nodes = Mdoc.FromHtml(jdp.Element("td").Nodes()); UpdateParameter(name, nodes, mdoc); } }
void WorkLoop(object sender, EventArgs e) { while (true) { if (ShouldAbort) { return; } Stopwatch Watch = new Stopwatch(); bool EventNeedsFiring = false; FileWatcherRaised = false; try { foreach (var fileName in Directory.EnumerateFiles(FolderPath, FileExtension, SearchOption.TopDirectoryOnly).ToArray()) { if (ShouldAbort) { return; } if (GetMdoc(fileName) != null) { continue; } FileInfo Info = new FileInfo(fileName); MdocIncubatorEntry CurrentState = GetIncubating(fileName); Mdoc ParsedEntry = null; int AvailableTilts = 0; try { ParsedEntry = Mdoc.FromFile(new[] { fileName }, DefaultTiltDose); AvailableTilts = ParsedEntry.Entries.Count; } catch { } if (CurrentState == null) { Stopwatch Timer = new Stopwatch(); Timer.Start(); lock (Incubator) { Incubator.Add(new MdocIncubatorEntry(fileName, Timer, Info.Length, AvailableTilts)); if (Incubator.Count == 1) { IncubationStarted?.Invoke(); } } } else { // Check if bool CanRead = false; try { File.OpenRead(fileName).Close(); CanRead = true; } catch { } if (ParsedEntry == null || Info.Length != CurrentState.Size || CurrentState.NTilts != AvailableTilts || !CanRead) { lock (Incubator) Incubator.Remove(CurrentState); Stopwatch Timer = new Stopwatch(); Timer.Start(); lock (Incubator) Incubator.Add(new MdocIncubatorEntry(fileName, Timer, Info.Length, AvailableTilts)); } else if ((CurrentState.Lifetime.ElapsedMilliseconds > 1000 && AvailableTilts >= ExpectedNTilts) || (AcceptAnywayAfter > 0 && CurrentState.Lifetime.ElapsedMilliseconds > AcceptAnywayAfter)) { //lock (Ripe) { if (!Ripe.Exists(m => m.Path == fileName)) { while (CreationTasks.Count > 15) { Thread.Sleep(1); } Task CreationTask = new Task(() => { Mdoc Created = ParsedEntry; lock (Ripe) { // Make sure the list is sorted int InsertAt = 0; while (InsertAt < Ripe.Count && Ripe[InsertAt].Path.CompareTo(fileName) < 0) { InsertAt++; } Ripe.Insert(InsertAt, Created); } lock (CreationTasks) CreationTasks.Remove(fileName); }); lock (CreationTasks) CreationTasks.Add(fileName, CreationTask); CreationTask.Start(); } } EventNeedsFiring = true; if (!Watch.IsRunning) { Watch.Start(); } lock (Incubator) { Incubator.Remove(CurrentState); if (Incubator.Count == 0) { IncubationEnded?.Invoke(); } } } } if (EventNeedsFiring && Watch.ElapsedMilliseconds > 500) { //Task.WaitAll(CreationTasks.ToArray()); //CreationTasks.Clear(); Watch.Stop(); Watch.Reset(); EventNeedsFiring = false; FilesChanged?.Invoke(); } } } catch (Exception exc) { Debug.WriteLine("FileDiscoverer crashed:"); Debug.WriteLine(exc); if (ExceptionsLogged < 100) { using (TextWriter Writer = File.AppendText("d_filediscoverer.txt")) { Writer.WriteLine(DateTime.Now + ":"); Writer.WriteLine(exc.ToString()); Writer.WriteLine(""); ExceptionsLogged++; } } } while (CreationTasks.Count > 0) { Thread.Sleep(1); } if (EventNeedsFiring) { FilesChanged?.Invoke(); } while (!IsIncubating() && !FileWatcherRaised) { if (ShouldAbort) { return; } Thread.Sleep(50); } } }