예제 #1
0
        public XRefSpec GetXrefSpec(string uid)
        {
            if (uid == null)
            {
                throw new ArgumentNullException(nameof(uid));
            }

            if (string.IsNullOrWhiteSpace(uid))
            {
                return(null);
            }

            if (XRefSpecMap.TryGetValue(uid, out XRefSpec xref))
            {
                return(xref);
            }

            if (ExternalXRefSpec.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (UnknownUids.ContainsKey(uid))
            {
                return(null);
            }

            if (_reader != null)
            {
                xref = _reader.Result.Find(uid);
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            if (ExternalReferencePackages.Length > 0)
            {
                using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
                {
                    xref = GetExternalReference(externalReferences, uid);
                }
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            var uidList = ResolveByXRefServiceAsync(new List <string> {
                uid
            }, ExternalXRefSpec).Result;

            if (uidList.Count == 0)
            {
                return(ExternalXRefSpec[uid]);
            }

            UnknownUids.TryAdd(uid, null);
            return(null);
        }
예제 #2
0
        public void RegisterInternalXrefSpecBookmark(string uid, string bookmark)
        {
            if (uid == null)
            {
                throw new ArgumentNullException(nameof(uid));
            }
            if (uid.Length == 0)
            {
                throw new ArgumentException("Uid cannot be empty", nameof(uid));
            }
            if (bookmark == null)
            {
                throw new ArgumentNullException(nameof(bookmark));
            }
            if (bookmark.Length == 0)
            {
                return;
            }

            if (XRefSpecMap.TryGetValue(uid, out XRefSpec xref))
            {
                xref.Href = UriUtility.GetNonFragment(xref.Href) + "#" + bookmark;
            }
            else
            {
                throw new DocfxException($"Xref spec with uid {uid} not found. Can't register bookmark {bookmark} to it.");
            }
        }
예제 #3
0
        public void RegisterInternalXrefSpecBookmark(string uid, string bookmark)
        {
            if (string.IsNullOrEmpty(uid))
            {
                throw new ArgumentNullException(nameof(uid));
            }
            if (bookmark == null)
            {
                throw new ArgumentNullException(nameof(uid));
            }
            if (bookmark == string.Empty)
            {
                return;
            }

            XRefSpec xref;

            if (XRefSpecMap.TryGetValue(uid, out xref))
            {
                xref.Href = UriUtility.GetNonFragment(xref.Href) + "#" + bookmark;
            }
            else
            {
                throw new DocfxException($"Xref spec with uid {uid} not found. Can't register bookmark {bookmark} to it.");
            }
        }
예제 #4
0
        public XRefSpec GetXrefSpec(string uid)
        {
            if (string.IsNullOrEmpty(uid))
            {
                throw new ArgumentNullException(nameof(uid));
            }

            XRefSpec xref;

            if (XRefSpecMap.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (ExternalXRefSpec.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (UnknownUids.ContainsKey(uid))
            {
                return(null);
            }

            if (XRefMaps != null && XRefMaps.Count > 0)
            {
                xref = (from map in XRefMaps select new BasicXRefMapReader(map).Find(uid)).FirstOrDefault();
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            if (ExternalReferencePackages.Length > 0)
            {
                using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
                {
                    xref = GetExternalReference(externalReferences, uid);
                }
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            UnknownUids.TryAdd(uid, null);
            return(null);
        }
예제 #5
0
        public XRefSpec GetXrefSpec(string uid)
        {
            if (string.IsNullOrEmpty(uid))
            {
                throw new ArgumentNullException(nameof(uid));
            }

            if (XRefSpecMap.TryGetValue(uid, out XRefSpec xref))
            {
                return(xref);
            }

            if (ExternalXRefSpec.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (UnknownUids.ContainsKey(uid))
            {
                return(null);
            }

            if (_reader != null)
            {
                xref = _reader.Result.Find(uid);
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            if (ExternalReferencePackages.Length > 0)
            {
                using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
                {
                    xref = GetExternalReference(externalReferences, uid);
                }
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            UnknownUids.TryAdd(uid, null);
            return(null);
        }
예제 #6
0
        public XRefSpec GetXrefSpec(string uid)
        {
            if (string.IsNullOrEmpty(uid))
            {
                throw new ArgumentNullException(nameof(uid));
            }

            XRefSpec xref;

            if (XRefSpecMap.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (ExternalXRefSpec.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            return(null);
        }