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);
        }
示例#10
0
        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)));
            }
        }
示例#11
0
        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))));
                }
            }
        }
示例#12
0
        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);
            }
        }
示例#13
0
        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);
                }
            }
        }