public void Clicked(object sender, EventArgs e)
        {
            trace.TraceInformation("person clicked:");

            if (individual != null)
            {
                if (trace.Switch.Level.HasFlag(SourceLevels.Information))
                {
                    individual.Print();
                }
                if (parent != null)
                {
                    parent.ClickPerson(individual);
                }
            }
            else
            {
                trace.TraceEvent(TraceEventType.Error, 0, "error: Clicked person = null!");
            }
        }
        void ParsePerson(string id, string data, TextParserSettings parserSettings)
        {
            ParsePersonState state = ParsePersonState.Name;

            IndividualClass person = new IndividualClass();

            person.SetXrefName(id);

            int               strPos  = 0;
            string            nameStr = "";
            PersonalNameClass name    = new PersonalNameClass();

            List <SubStringInstance> subList = CheckSubstrings(id, data, parserSettings);

            foreach (SubStringInstance item in subList)
            {
                EventDataString thisType = null;

                foreach (EventDataString str in parserSettings.eventList)
                {
                    if (str.type == item.type)
                    {
                        thisType = str;
                    }
                }
                if (thisType != null)
                {
                    DecodeEvent(ref person, item.type, data.Substring(item.start + thisType.start.Length, item.end - item.start - thisType.start.Length - thisType.end.Length));
                }
            }

            while (strPos < data.Length)
            {
                //string token = GetToken(ref strPos);
                char ch = data[strPos++];


                switch (state)
                {
                case ParsePersonState.Name:
                    if (ch == '.')
                    {
                        int firstNameStart;
                        int firstNameLength;
                        int lastNameStart;
                        int lastNameLength;
                        if (nameStr.IndexOf(',') >= 0)
                        {
                            firstNameStart = nameStr.IndexOf(',') + 1;
                            while ((firstNameStart < nameStr.Length) && (nameStr[firstNameStart] == ' '))
                            {
                                firstNameStart++;
                            }
                            firstNameLength = nameStr.Length - firstNameStart;
                            lastNameStart   = 0;
                            lastNameLength  = nameStr.IndexOf(',');
                        }
                        else
                        {
                            firstNameStart = 0;
                            if (nameStr.LastIndexOf(' ') >= 0)
                            {
                                firstNameLength = nameStr.LastIndexOf(' ');
                                lastNameStart   = firstNameLength + 1;
                                lastNameLength  = nameStr.Length - firstNameLength - 1;
                            }
                            else
                            {
                                firstNameLength = nameStr.Length;
                                lastNameStart   = firstNameLength;
                                lastNameLength  = 0;
                            }
                        }

                        if (firstNameLength > 0)
                        {
                            name.SetName(PersonalNameClass.PartialNameType.GivenName, nameStr.Substring(firstNameStart, firstNameLength));
                        }
                        if (lastNameLength > 0)
                        {
                            name.SetName(PersonalNameClass.PartialNameType.BirthSurname, nameStr.Substring(lastNameStart, lastNameLength));
                        }
                        person.SetPersonalName(name);
                        state = ParsePersonState.EventToken;
                    }
                    else
                    {
                        nameStr += ch;
                    }
                    break;
                }
            }
            person.Print();
            familyTree.AddIndividual(person);
        }