示例#1
0
        private void IncrementAppearance(string individualId, string childId, int depth)
        {
            if (ancestors.ContainsKey(individualId))
            {
                AncestorIndividual individual = ancestors[individualId];
                individual.LowestGeneration  = Math.Min(individual.LowestGeneration, depth);
                individual.HighestGeneration = Math.Min(individual.HighestGeneration, depth);
                individual.AppearanceCount++;

                if (!string.IsNullOrEmpty(childId))
                {
                    individual.ChildrenIds.Add(childId);
                }

                ancestors[individualId] = individual;

                if (!string.IsNullOrEmpty(individual.FatherId))
                {
                    IncrementAppearance(individual.FatherId, individualId, depth + 1);
                }

                if (!string.IsNullOrEmpty(individual.MotherId))
                {
                    IncrementAppearance(individual.MotherId, individualId, depth + 1);
                }
            }
        }
示例#2
0
        private void GenerateAncestorList(string individualId, string spouseId, string childId, int depth)
        {
            if (ancestors.ContainsKey(individualId))
            {
                IncrementAppearance(individualId, childId, depth);
            }
            else
            {
                AncestorIndividual individual       = new AncestorIndividual(individualId);
                GedcomIndividual   gedcomIndividual = gedcomIndividuals[individualId];

                individual.GivenName         = gedcomIndividual.GivenName.Trim();
                individual.Surname           = gedcomIndividual.Surname.Trim();
                individual.Prefix            = gedcomIndividual.Prefix.Trim();
                individual.Suffix            = gedcomIndividual.Suffix.Trim();
                individual.Sex               = gedcomIndividual.Sex.Trim();
                individual.BirthDate         = gedcomIndividual.BirthDate.Trim();
                individual.DiedDate          = gedcomIndividual.DiedDate.Trim();
                individual.AppearanceCount   = 1;
                individual.LowestGeneration  = depth;
                individual.HighestGeneration = depth;

                if (!string.IsNullOrEmpty(childId))
                {
                    individual.ChildrenIds.Add(childId);
                }

                GedcomFamily?gedcomFamily = gedcomFamilies.FirstOrDefault(x => x.Value.Children.Contains(individualId)).Value;
                if (gedcomFamily != null)
                {
                    individual.FatherId = gedcomFamily.Value.HusbandId;
                    individual.MotherId = gedcomFamily.Value.WifeId;
                }
                individual.SpouseId = spouseId;

                ancestors.Add(individualId, individual);
                if (depth <= MaxDepth)
                {
                    if (!string.IsNullOrEmpty(individual.FatherId))
                    {
                        GenerateAncestorList(individual.FatherId, individual.MotherId, individualId, depth + 1);
                    }

                    if (!string.IsNullOrEmpty(individual.MotherId))
                    {
                        GenerateAncestorList(individual.MotherId, individual.FatherId, individualId, depth + 1);
                    }
                }
            }
        }
示例#3
0
        public string GenerateBirthDeathDate(AncestorIndividual individual)
        {
            string born = ProcessDate(individual.BirthDate);
            string died = ProcessDate(individual.DiedDate);

            if (born != "?" || died != "?")
            {
                if (born == "?")
                {
                    return(string.Format("(d.{0})", died));
                }
                else if (died == "?")
                {
                    return(string.Format("(b.{0})", born));
                }
                else
                {
                    return(string.Format("(b.{0}, d.{1})", born, died));
                }
            }
            return(string.Empty);
        }
示例#4
0
        public string GenerateFullName(AncestorIndividual individual, bool SurnameFirst)
        {
            string name = "";

            if (string.IsNullOrEmpty(individual.Surname))
            {
                name = string.Format("{0}", individual.GivenName);
            }
            else
            {
                if (individual.Suffix.Length > 0)
                {
                    if (SurnameFirst)
                    {
                        name = string.Format("{2}, {0} ({1})", individual.GivenName, individual.Suffix, individual.Surname);
                    }
                    else
                    {
                        name = string.Format("{0} {2} ({1})", individual.GivenName, individual.Suffix, individual.Surname);
                    }
                }
                else
                {
                    if (SurnameFirst)
                    {
                        name = string.Format("{1}, {0}", individual.GivenName, individual.Surname);
                    }
                    else
                    {
                        name = string.Format("{0} {1}", individual.GivenName, individual.Surname);
                    }
                }
            }

            name = name + " " + GenerateBirthDeathDate(individual);
            name = name.Replace("  ", " ").Replace("  ", " ");
            return(name);
        }
示例#5
0
        private void OutputIndividualText(string individualId, string spouseId, StreamWriter writer)
        {
            AncestorIndividual individual = ancestors[individualId];
            AncestorIndividual?father     = null;
            AncestorIndividual?mother     = null;
            AncestorIndividual?spouse     = null;

            if ((!string.IsNullOrEmpty(individual.FatherId)) && (ancestors.ContainsKey(individual.FatherId)))
            {
                father = ancestors[individual.FatherId];
            }
            if ((!string.IsNullOrEmpty(individual.MotherId)) && (ancestors.ContainsKey(individual.MotherId)))
            {
                mother = ancestors[individual.MotherId];
            }
            if ((!string.IsNullOrEmpty(spouseId)) && (ancestors.ContainsKey(spouseId)))
            {
                spouse = ancestors[spouseId];
            }

            writer.WriteLine(GenerateFullName(individual, false));


            if (spouse.HasValue)
            {
                writer.WriteLine("     x " + GenerateFullName(spouse.Value, false));
            }
            if (father.HasValue)
            {
                writer.WriteLine("     f. " + GenerateFullName(father.Value, false));
            }
            if (mother.HasValue)
            {
                writer.WriteLine("     m. " + GenerateFullName(mother.Value, false));
            }
            writer.WriteLine();
        }
示例#6
0
        private void OutputIndividualTextOneLine(string individualId, StreamWriter writer)
        {
            AncestorIndividual individual = ancestors[individualId];

            writer.WriteLine(string.Format("{0} ({2} occurences)", GenerateFullName(individual, true), GenerateBirthDeathDate(individual), individual.AppearanceCount));
        }