// Copy constructor public CEventDetail( CEventDetail ed ) : base(ed.Gedcom) { m_sEventOrFactClassification = ed.m_sEventOrFactClassification; if( ed.m_dateValue != null ) { m_dateValue = new CPGDate( ed.m_dateValue ); } else { m_dateValue = null; } if( ed.m_placeStructure != null ) { m_placeStructure = new CPlaceStructure( ed.m_placeStructure ); } else { m_placeStructure = null; } if( ed.m_addressStructure != null ) { m_addressStructure = new CAddressStructure( ed.m_addressStructure ); } else { m_addressStructure = null; } m_sResponsibleAgency = ed.m_sResponsibleAgency; m_sReligiousAffiliation = ed.m_sReligiousAffiliation; m_sCauseOfEvent = ed.m_sCauseOfEvent; m_sRestrictionNotice = ed.m_sRestrictionNotice; m_alNoteStructures = new ArrayList(); foreach( CNoteStructure ns in ed.m_alNoteStructures ) { m_alNoteStructures.Add( ns.CopyConstructor() ); } m_alSourceCitations = new ArrayList(); foreach( CSourceCitation sc in ed.m_alSourceCitations ) { m_alSourceCitations.Add( sc.CopyConstructor() ); } m_alMultimediaLinks = new ArrayList(); foreach( CMultimediaLink ml in ed.m_alMultimediaLinks ) { m_alMultimediaLinks.Add( ml.CopyConstructor() ); } m_sAgeAtEvent = ed.m_sAgeAtEvent; m_sHusbandAgeAtEvent = ed.m_sHusbandAgeAtEvent; m_sWifeAgeAtEvent = ed.m_sWifeAgeAtEvent; m_xrefFam = ed.m_xrefFam; m_bAdoptedByHusband = ed.m_bAdoptedByHusband; m_bAdoptedByWife = ed.m_bAdoptedByWife; m_xrefAdoptedChild = ed.m_xrefAdoptedChild; m_sAlternativePlace = ed.m_sAlternativePlace; }
// Copy constructor public CIndividualEventStructure( CEventDetail ed ) : base(ed.Gedcom) { m_eventDetail = new CEventDetail( ed ); }
// Parser public static CEventDetail Parse( CGedcom gedcom, int nLevel ) { CGedcomLine gedcomLine; bool bParsingFinished; bool bGotSomething; // Temporary holders for class members. string sEventOrFactClassification = ""; CPGDate dateValue = null; CPlaceStructure ps, placeStructure = null; CAddressStructure ads, addressStructure = null; string sResponsibleAgency = ""; string sReligiousAffiliation = ""; string sCauseOfEvent = ""; string sRestrictionNotice = ""; ArrayList alNoteStructures = new ArrayList(); ArrayList alSourceCitations = new ArrayList(); ArrayList alMultimediaLinks = new ArrayList(); string sAgeAtEvent = ""; string sHusbandAgeAtEvent = ""; string sWifeAgeAtEvent = ""; string xrefFam=""; bool bAdoptedByHusband = false; bool bAdoptedByWife = false; string sPlaceAlternative = ""; string sOverview = ""; CNoteStructure ns; CSourceCitation sc; CMultimediaLink ml; bGotSomething = false; do { bParsingFinished = true; if( (gedcomLine = gedcom.GetLine(nLevel, "FAMC")) != null ) { xrefFam = gedcomLine.LinePointer; gedcom.IncrementLineIndex(1); // Test for underscore items first so that parser doesn't skip them later if( (gedcomLine = gedcom.GetLine(nLevel, "_PLAC")) != null ) { sPlaceAlternative = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "_OVER")) != null ) { sOverview = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bool bParsingFinished3; do { bParsingFinished3 = true; if( (gedcomLine = gedcom.GetLine(nLevel+1, "CONC")) != null ) { sOverview += gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished3 = false; } else if( (gedcomLine = gedcom.GetLine(nLevel+1, "CONT")) != null ) { sOverview += "\n" + gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished3 = false; } } while( !bParsingFinished3 ); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel+1, "ADOP")) != null ) { string adoptedByWhichParent = gedcomLine.LineItem; if( adoptedByWhichParent != null && adoptedByWhichParent.Length >= 4 ) { try { if( adoptedByWhichParent.Substring(0,4).ToUpper().CompareTo( "BOTH" ) == 0 ) { bAdoptedByHusband = true; bAdoptedByWife = true; } else if( adoptedByWhichParent.Substring(0,4).ToUpper().CompareTo( "HUSB" ) == 0 ) { bAdoptedByHusband = true; } else if( adoptedByWhichParent.Substring(0,4).ToUpper().CompareTo( "WIFE" ) == 0 ) { bAdoptedByWife = true; } } catch( ArgumentOutOfRangeException ) { LogFile.TheLogFile.WriteLine( LogFile.DT_GEDCOM, LogFile.EDebugLevel.Warning, String.Format("Unusual ADOP parameter :{0}", adoptedByWhichParent) ); } } gedcom.IncrementLineIndex(1); } bParsingFinished = false; } else if( (gedcomLine = gedcom.GetLine(nLevel, "TYPE")) != null ) { sEventOrFactClassification = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "DATE")) != null ) { dateValue = CPGDate.Parse( gedcomLine.LineItem ); gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (ps = CPlaceStructure.Parse( gedcom, nLevel )) != null ) { placeStructure = ps; bParsingFinished = false; bGotSomething = true; } else if( (ads = CAddressStructure.Parse( gedcom, nLevel )) != null ) { addressStructure = ads; bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "AGNC")) != null ) { sResponsibleAgency = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "RELI")) != null ) { sReligiousAffiliation = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "CAUS")) != null ) { sCauseOfEvent = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "RESN")) != null ) { sRestrictionNotice = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (sc = CSourceCitation.Parse( gedcom, nLevel )) != null ) { alSourceCitations.Add( sc ); bParsingFinished = false; bGotSomething = true; } else if( (ml = CMultimediaLink.Parse( gedcom, nLevel )) != null ) { alMultimediaLinks.Add( ml ); bParsingFinished = false; bGotSomething = true; } else if( (ns = CNoteStructure.Parse( gedcom, nLevel )) != null ) { alNoteStructures.Add( ns ); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "AGE")) != null ) { sAgeAtEvent = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } else if( (gedcomLine = gedcom.GetLine(nLevel, "HUSB")) != null ) { gedcom.IncrementLineIndex(1); if( (gedcomLine = gedcom.GetLine(nLevel+1, "AGE")) != null ) { sHusbandAgeAtEvent = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } } else if( (gedcomLine = gedcom.GetLine(nLevel, "WIFE")) != null ) { gedcom.IncrementLineIndex(1); if( (gedcomLine = gedcom.GetLine(nLevel+1, "AGE")) != null ) { sWifeAgeAtEvent = gedcomLine.LineItem; gedcom.IncrementLineIndex(1); bParsingFinished = false; bGotSomething = true; } } else if( ( gedcomLine = gedcom.GetLine()).Level >= nLevel ) { LogFile.TheLogFile.WriteLine( LogFile.DT_GEDCOM, LogFile.EDebugLevel.Warning, "Unknown tag :" ); LogFile.TheLogFile.WriteLine( LogFile.DT_GEDCOM, LogFile.EDebugLevel.Warning, gedcomLine.ToString() ); gedcom.IncrementLineIndex(1); bParsingFinished = false; } } while( !bParsingFinished ); if( !bGotSomething ) { return null; } CEventDetail ed = new CEventDetail( gedcom ); ed.m_sEventOrFactClassification = sEventOrFactClassification; ed.m_dateValue = dateValue; ed.m_placeStructure = placeStructure; ed.m_addressStructure = addressStructure; ed.m_sResponsibleAgency = sResponsibleAgency; ed.m_sReligiousAffiliation = sReligiousAffiliation; ed.m_sCauseOfEvent = sCauseOfEvent; ed.m_sRestrictionNotice = sRestrictionNotice; ed.m_alNoteStructures = alNoteStructures; ed.m_alSourceCitations = alSourceCitations; ed.m_alMultimediaLinks = alMultimediaLinks; ed.m_sAgeAtEvent = sAgeAtEvent; ed.m_sHusbandAgeAtEvent = sHusbandAgeAtEvent; ed.m_sWifeAgeAtEvent = sWifeAgeAtEvent; ed.m_xrefFam = xrefFam; ed.m_bAdoptedByHusband = bAdoptedByHusband; ed.m_bAdoptedByWife = bAdoptedByWife; ed.m_xrefAdoptedChild = ""; ed.m_sAlternativePlace = sPlaceAlternative; ed.m_sOverview = sOverview; return ed; }