예제 #1
0
        private static string MapReference(NodeKeysInfo info, string title)
        {
            if (info.Regular.Contains(title))
            {
                return(title);
            }

            info.References.TryGetValue(title, out var reference);

            return(reference);
        }
예제 #2
0
        public static NodeKeysInfo Build(WikiPageTitle[] titles)
        {
            var dict   = titles.ToDictionary(x => x.Name);
            var result = new NodeKeysInfo
            {
                BadTargetReference = new HashSet <string>(),
                CycleReference     = new HashSet <string>(),
                References         = new Dictionary <string, string>(),
                Regular            = new HashSet <string>(),
            };

            foreach (var title in dict.Keys)
            {
                var info = GetNodeInfo(dict, title);

                switch (info.Type)
                {
                case NodeType.Regular:
                    result.Regular.Add(title);
                    break;

                case NodeType.Reference:
                    result.References.Add(title, info.Reference);
                    break;

                case NodeType.CycleReference:
                    result.CycleReference.Add(title);
                    break;

                case NodeType.BadReference:
                    result.BadTargetReference.Add(title);
                    break;
                }
            }

            return(result);
        }