diff --git a/.editorconfig b/.editorconfig
index 4817c21..2b1d7c2 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,21 +1,95 @@
-###############################
-# Core EditorConfig Options #
-###############################
-root = true
+
# All files
[*]
indent_style = space
+csharp_indent_labels = one_less_than_current
+csharp_using_directive_placement = inside_namespace:suggestion
+csharp_prefer_simple_using_statement = true:suggestion
+csharp_prefer_braces = true:silent
+csharp_style_namespace_declarations = block_scoped:silent
+csharp_style_prefer_method_group_conversion = true:silent
+csharp_style_prefer_top_level_statements = true:silent
+csharp_style_expression_bodied_methods = false:silent
+csharp_style_expression_bodied_constructors = false:silent
+csharp_style_expression_bodied_operators = false:silent
+csharp_style_expression_bodied_properties = true:silent
+csharp_style_expression_bodied_indexers = true:silent
+csharp_style_expression_bodied_accessors = true:silent
+csharp_style_expression_bodied_lambdas = true:silent
+csharp_style_expression_bodied_local_functions = false:silent
+csharp_style_throw_expression = true:suggestion
+dotnet_diagnostic.IDE0073.severity = error
-# XML project files
-[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
-indent_size = 4
+# Xml files
+[*.xml]
+indent_size = 2
-# XML config files
-[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
-indent_size = 4
+[*.{cs,vb}]
+#### Naming styles ####
+
+# Naming rules
+
+dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
+dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
+dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
+
+dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.types_should_be_pascal_case.symbols = types
+dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
+
+dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
+dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
+
+# Symbol specifications
-# Code files
-[*.{cs,csx,vb,vbx}]
+dotnet_naming_symbols.interface.applicable_kinds = interface
+dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.interface.required_modifiers =
+
+dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
+dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.types.required_modifiers =
+
+dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
+dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.non_field_members.required_modifiers =
+
+# Naming styles
+
+dotnet_naming_style.begins_with_i.required_prefix = I
+dotnet_naming_style.begins_with_i.required_suffix =
+dotnet_naming_style.begins_with_i.word_separator =
+dotnet_naming_style.begins_with_i.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+dotnet_style_operator_placement_when_wrapping = beginning_of_line
+tab_width = 4
indent_size = 4
-insert_final_newline = true
-charset = utf-8-bom
+end_of_line = crlf
+dotnet_style_coalesce_expression = true:suggestion
+dotnet_style_null_propagation = true:suggestion
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
+dotnet_style_prefer_auto_properties = true:silent
+dotnet_style_object_initializer = true:suggestion
+dotnet_style_collection_initializer = true:suggestion
+dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
+dotnet_style_prefer_conditional_expression_over_assignment = true:silent
+dotnet_style_prefer_conditional_expression_over_return = true:silent
+dotnet_style_explicit_tuple_names = true:suggestion
+dotnet_style_prefer_inferred_tuple_names = true:suggestion
+dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
+dotnet_style_prefer_compound_assignment = true:suggestion
+dotnet_style_prefer_simplified_interpolation = true:suggestion
+dotnet_style_namespace_match_folder = true:suggestion
+
+# License header
+file_header_template = \r\nCopyright (c) GeneGenie.com. All Rights Reserved.\r\nLicensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.\r\n
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql.yml
similarity index 60%
rename from .github/workflows/codeql-analysis.yml
rename to .github/workflows/codeql.yml
index 3464d78..a49f7ea 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql.yml
@@ -3,58 +3,62 @@
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
name: "CodeQL"
on:
push:
- branches: [master]
+ branches: [ main, dev ]
pull_request:
# The branches below must be a subset of the branches above
- branches: [master]
+ branches: [ main, dev ]
schedule:
- - cron: '0 8 * * 5'
+ - cron: '23 12 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
strategy:
fail-fast: false
matrix:
- # Override automatic language detection by changing the below list
- # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
- language: ['csharp']
- # Learn more...
- # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
+ language: [ 'csharp' ]
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
steps:
- name: Checkout repository
- uses: actions/checkout@v2
- with:
- # We must fetch at least the immediate parents so that if this is
- # a pull request then we can checkout the head.
- fetch-depth: 2
+ uses: actions/checkout@v3
- # If this run was triggered by a pull request event, then checkout
- # the head of the pull request instead of the merge commit.
- - run: git checkout HEAD^2
- if: ${{ github.event_name == 'pull_request' }}
+ - name: Setup .Net SDK (v7.0)
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: '7.0.x'
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v1
+ uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
+ # By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@v1
+ uses: github/codeql-action/autobuild@v2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -68,4 +72,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
+ uses: github/codeql-action/analyze@v2
diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml
new file mode 100644
index 0000000..70404dd
--- /dev/null
+++ b/.github/workflows/sonar.yml
@@ -0,0 +1,43 @@
+name: SonarCloud
+
+on:
+ push:
+ branches: [ main, dev ]
+ pull_request:
+ branches: [ main, dev ]
+ types: [opened, synchronize, reopened]
+
+jobs:
+ build:
+ name: Build and analyze
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up JDK 11
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'zulu'
+ java-version: '21'
+ java-package: jdk # optional (jdk or jre) - defaults to jdk
+
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
+
+ - name: Setup .Net SDK (v8.0)
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: '8.0.x'
+
+ - name: Install dotnet global tools
+ run: |
+ dotnet tool install --global dotnet-coverage
+ dotnet tool install --global dotnet-sonarscanner
+ - name: Build and analyze
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+ run: |
+ dotnet sonarscanner begin /k:"GeneGenie.Gedcom" /o:"thegenegenieproject" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.vscoveragexml.reportsPaths=coverage.xml
+ dotnet build --no-incremental
+ dotnet-coverage collect 'dotnet test' -f xml -o 'coverage.xml'
+ dotnet sonarscanner end
diff --git a/.gitignore b/.gitignore
index 30a8bcf..dbbdb78 100644
--- a/.gitignore
+++ b/.gitignore
@@ -287,3 +287,6 @@ Icon
Network Trash Folder
Temporary Items
.apdisk
+
+# JtBrains Rider
+**/.idea/**
diff --git a/Contributing.md b/Contributing.md
index 29f4f36..cd5e943 100644
--- a/Contributing.md
+++ b/Contributing.md
@@ -30,4 +30,4 @@ Major changes should have benchmarks wrapped around the old and new code to prov
### Style guidelines
-The StyleCop.Analyzer nuget package is used in all projects to help enforce style guidelines. These guidelines are there to ensure a consistent style, I don't necessarily agree with all of them but they represent a good compromise. When we remove the final few build warnings from the compiler, style violations will be treated as errors and will halt any build.
+The .editorconfig settings file is used in all projects to help enforce style guidelines. These guidelines are there to ensure a consistent style, I don't necessarily agree with all of them but they represent a good compromise. When we remove the final few build warnings from the compiler, style violations will be treated as errors and will halt any build.
diff --git a/GeneGenie.Gedcom.Sample/.editorconfig b/GeneGenie.Gedcom.Sample/.editorconfig
new file mode 100644
index 0000000..4c77e11
--- /dev/null
+++ b/GeneGenie.Gedcom.Sample/.editorconfig
@@ -0,0 +1,7 @@
+# Allow inheritence of settings from directory above.
+root = false
+
+[*.{cs,vb}]
+dotnet_diagnostic.CA1303.severity = none
+dotnet_diagnostic.CA1812.severity = none
+dotnet_diagnostic.CA1848.severity = none
diff --git a/GeneGenie.Gedcom.Sample/GeneGenie.Gedcom.Sample.csproj b/GeneGenie.Gedcom.Sample/GeneGenie.Gedcom.Sample.csproj
index 163b6b8..cfc704d 100644
--- a/GeneGenie.Gedcom.Sample/GeneGenie.Gedcom.Sample.csproj
+++ b/GeneGenie.Gedcom.Sample/GeneGenie.Gedcom.Sample.csproj
@@ -1,8 +1,8 @@
-
+
Exe
- net6.0
+ net8.0
@@ -13,22 +13,10 @@
CS1573: Parameter 'parameter' has no matching param tag in the XML comment for 'parameter' (but other parameters do)
CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member'
-->
- $(OutputPath)$(AssemblyName).xml
+ True
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
-
diff --git a/GeneGenie.Gedcom.Sample/GeneGenie.Gedcom.Sample.xml b/GeneGenie.Gedcom.Sample/GeneGenie.Gedcom.Sample.xml
deleted file mode 100644
index a47cc30..0000000
--- a/GeneGenie.Gedcom.Sample/GeneGenie.Gedcom.Sample.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
- GeneGenie.Gedcom.Sample
-
-
-
-
- Sample console app showing how to read, query, change and save a GEDCOM file.
-
-
-
-
- App entry point.
-
-
-
-
- Tiny sample class on how to load a GEDCOM file.
-
-
-
-
- Loads the presidents tree.
-
- A database reader that can be used to access the parsed database.
-
-
-
- Tiny sample class on how to query a GEDCOM file.
-
-
-
-
- Queries the tree for any individual with a name, just to show how to query.
-
- The database to query.
-
-
-
- Tiny sample class on how to add a person to a database.
-
-
-
-
- Adds a sample person (well, a cartoon mouse) to the presidents file. The mouse may do a better job if elected president.
-
- The database to add the individual to.
-
-
-
- Tiny sample class on how to save a GEDCOM file.
-
-
-
-
- Saves the sample database out to a new file.
-
- The database to save.
-
-
-
diff --git a/GeneGenie.Gedcom.Sample/Program.cs b/GeneGenie.Gedcom.Sample/Program.cs
index 59cadc4..92e2bbb 100644
--- a/GeneGenie.Gedcom.Sample/Program.cs
+++ b/GeneGenie.Gedcom.Sample/Program.cs
@@ -2,7 +2,6 @@
// Copyright (c) GeneGenie.com. All Rights Reserved.
// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
//
-// Copyright (C) 2016 Ryan O'Neill r@genegenie.com
namespace GeneGenie.Gedcom.Sample
{
diff --git a/GeneGenie.Gedcom.Sample/Step1LoadTreeFromFile.cs b/GeneGenie.Gedcom.Sample/Step1LoadTreeFromFile.cs
index 22d3883..0d882f2 100644
--- a/GeneGenie.Gedcom.Sample/Step1LoadTreeFromFile.cs
+++ b/GeneGenie.Gedcom.Sample/Step1LoadTreeFromFile.cs
@@ -32,7 +32,7 @@ public static GedcomDatabase LoadPresidentsTree()
private static GedcomDatabase LoadGedcomFromFile()
{
- var gedcomReader = GedcomRecordReader.CreateReader("Data\\presidents.ged");
+ var gedcomReader = GedcomRecordReader.CreateReader("Data/presidents.ged");
if (gedcomReader.Parser.ErrorState != Enums.GedcomErrorState.NoError)
{
Console.WriteLine($"Could not read file, encountered error {gedcomReader.Parser.ErrorState} press a key to continue.");
diff --git a/GeneGenie.Gedcom.Sample/Step2QueryTree.cs b/GeneGenie.Gedcom.Sample/Step2QueryTree.cs
index 74ed346..22254e3 100644
--- a/GeneGenie.Gedcom.Sample/Step2QueryTree.cs
+++ b/GeneGenie.Gedcom.Sample/Step2QueryTree.cs
@@ -2,7 +2,6 @@
// Copyright (c) GeneGenie.com. All Rights Reserved.
// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
//
-// Copyright (C) 2016 Ryan O'Neill r@genegenie.com
namespace GeneGenie.Gedcom.Sample
{
diff --git a/GeneGenie.Gedcom.Tests/.editorconfig b/GeneGenie.Gedcom.Tests/.editorconfig
index f5e3c01..4db2cf6 100644
--- a/GeneGenie.Gedcom.Tests/.editorconfig
+++ b/GeneGenie.Gedcom.Tests/.editorconfig
@@ -1,7 +1,12 @@
-[*.cs]
+# Allow inheritence of settings from directory above.
+root = false
-# CS1591: Missing XML comment for publicly visible type or member
-dotnet_diagnostic.CS1591.severity = none
-
-# SA1600: Elements should be documented
-dotnet_diagnostic.SA1600.severity = none
+# Remove junk warnings from unit tests, mostly because we are certain of the input data.
+[*.{cs,vb}]
+dotnet_diagnostic.CA1062.severity = none
+dotnet_diagnostic.CA1307.severity = none
+dotnet_diagnostic.CA1310.severity = none
+dotnet_diagnostic.CA1707.severity = none
+dotnet_diagnostic.CA1812.severity = none
+dotnet_diagnostic.CA2007.severity = none
+dotnet_diagnostic.IDE0057.severity = none
diff --git a/GeneGenie.Gedcom.Tests/Data/SubmitterReference.ged b/GeneGenie.Gedcom.Tests/Data/SubmitterReference.ged
new file mode 100644
index 0000000..6718be4
--- /dev/null
+++ b/GeneGenie.Gedcom.Tests/Data/SubmitterReference.ged
@@ -0,0 +1,55 @@
+0 HEAD
+1 FILE SubmitterReference.ged
+1 COPR (c) Some person
+2 DATE 19 Mrz 2016
+3 TIME 12:42:09
+1 CHAR UTF-8
+1 LANG German
+1 GEDC
+2 VERS 5.5.1
+1 PLAC
+2 FORM Town , Region , Country
+1 SUBM @S1@
+1 SOUR PhpGedView
+2 NAME PhpGedView Online Genealogy
+2 VERS 3.3.8 final
+1 DATE 4 Mar 2006
+0 @S1@ SUBM
+1 NAME First Submitter
+1 ADDR
+2 POST 90425
+2 CITY Nrnberg
+2 CTRY Deutschland
+0 @S2@ SUBM
+1 NAME Second Submitter
+1 ADDR
+2 POST 9100
+2 CITY Zrich
+2 CTRY Schweiz
+0 @I19@ INDI
+1 SEX F
+1 NAME Elisabeth /Example-Name/
+2 GIVN Elisabeth
+2 SURN Example
+2 _MARNM Example-Name
+1 RELI
+1 ADDR
+2 POST 9103
+2 CITY Altenstadt
+2 STAE SG
+2 CTRY CH, Europa
+1 BIRT
+2 DATE 1928
+2 _BURG
+1 DEAT
+2 DATE 1957
+1 NOTE
+1 SUBM @S@
+1 CHAN
+2 DATE 1 FEB 2016
+0 @F3@ FAM
+1 WIVE @I19@
+1 MARR
+2 DATE unbekannt
+1 SUBM @S@
+0 TRLR
diff --git a/GeneGenie.Gedcom.Tests/Data/UidAndBurg.ged b/GeneGenie.Gedcom.Tests/Data/UidAndBurg.ged
new file mode 100644
index 0000000..d761a50
--- /dev/null
+++ b/GeneGenie.Gedcom.Tests/Data/UidAndBurg.ged
@@ -0,0 +1,20 @@
+0 HEAD
+1 SOUR PhpGedView
+2 NAME PhpGedView Online Genealogy
+2 VERS 3.3.8 final
+1 DATE 1 Apr 2006
+0 @I1@ INDI
+1 _UID A5A812A4C0FE44C9A98F8D4627073B69AB88
+1 NAME TestGivenName /TestSurname/
+2 SURN TestSurname
+2 GIVN TestGivenName
+1 SEX M
+1 BIRT
+2 DATE 9 OCT 1990
+2 _BURG unbekannt
+1 CHAN
+2 DATE 28 DEC 2023
+3 TIME 11:21:46
+0 @SUBM@ SUBM
+1 NAME Test for GeneGenie
+0 TRLR
diff --git a/GeneGenie.Gedcom.Tests/Data/changedate.ged b/GeneGenie.Gedcom.Tests/Data/changedate.ged
new file mode 100644
index 0000000..4b2c08d
--- /dev/null
+++ b/GeneGenie.Gedcom.Tests/Data/changedate.ged
@@ -0,0 +1,87 @@
+0 HEAD
+1 CHAR ASCII
+1 SOUR ID_OF_CREATING_FILE
+1 GEDC
+2 VERS 5.5
+2 FORM Lineage-Linked
+1 SUBM @SUBMITTER@
+1 NOTE Small example file containing all types of records, each with a CHANge date
+0 @SUBMISSION@ SUBN
+1 SUBM @SUBMITTER@
+1 FAMF NameOfFamilyFile
+1 TEMP Abreviated temple code
+1 ANCE 1
+1 DESC 1
+1 ORDI yes
+1 CHAN
+2 DATE 01 JUN 2023
+3 TIME 10:11:11
+0 @SUBMITTER@ SUBM
+1 NAME /Submitter/
+1 ADDR Submitters address
+2 CONT address continued here
+1 CHAN
+2 DATE 02 JUN 2023
+3 TIME 10:11:12
+0 @FATHER@ INDI
+1 NAME /Father/
+1 SEX M
+1 BIRT
+2 PLAC birth place
+2 DATE 1 JAN 1899
+1 DEAT
+2 PLAC death place
+2 DATE 31 DEC 1990
+1 FAMS @FAMILY@
+2 SOUR @SOURCE1@
+3 PAGE 42
+1 CHAN
+2 DATE 03 JUN 2023
+3 TIME 10:11:13
+0 @MOTHER@ INDI
+1 NAME /Mother/
+1 SEX F
+1 BIRT
+2 PLAC birth place
+2 DATE 1 JAN 1899
+1 DEAT
+2 PLAC death place
+2 DATE 31 DEC 1990
+1 FAMS @FAMILY@
+0 @FAMILY@ FAM
+1 HUSB @FATHER@
+1 WIFE @MOTHER@
+1 CHAN
+2 DATE 04 JUN 2023
+3 TIME 10:11:14
+0 @SOURCE1@ SOUR
+1 TITL Some source
+1 CHAN
+2 DATE 05 JUN 2023
+3 TIME 10:11:15
+0 @R1@ REPO
+1 NAME Some repository
+1 PHON +1-800-000-0000
+1 CHAN
+2 DATE 06 JUN 2023
+3 TIME 10:11:16
+0 @N1@ NOTE
+1 CONC Some note
+1 CHAN
+2 DATE 07 JUN 2023
+3 TIME 10:11:17
+0 @M1@ OBJE
+1 TITL Some multimedia
+1 FORM PICT
+1 BLOB
+2 CONT .HM.......k.1..F.jwA.Dzzzzw............A....1.........0U.66..E.8
+2 CONT .......A..k.a6.A.......A..k.........../6....G.......0../..U.....
+2 CONT .w1/m........HC0..../...zzzzzzzz..5zzk..AnA..U..W6U....2rRrRrRrR
+2 CONT .Dw...............k.1.......1..A...5ykE/zzzx/.g//.Hxzk6/.Tzy/.k1
+2 CONT /Dw/.Tvz.E5zzUE9/kHz.Tw2/DzzzEEA.kE2zk5yzk2/zzs21.U2/Dw/.Tw/.Tzy
+2 CONT /.fy/.HzzkHzzzo21Ds00.E2.UE2.U62/.k./Ds0.UE0/Do0..E8/UE2.U62.U9w
+2 CONT /.Tx/.20.jg2/jo2..9u/.0U.6A.zk
+1 CHAN
+2 DATE 08 JUN 2023
+3 TIME 10:11:18
+0 TRLR
diff --git a/GeneGenie.Gedcom.Tests/Date/GedcomDateCompareTest.cs b/GeneGenie.Gedcom.Tests/Date/GedcomDateCompareTest.cs
index 50ca731..62d2c28 100644
--- a/GeneGenie.Gedcom.Tests/Date/GedcomDateCompareTest.cs
+++ b/GeneGenie.Gedcom.Tests/Date/GedcomDateCompareTest.cs
@@ -2,7 +2,6 @@
// Copyright (c) GeneGenie.com. All Rights Reserved.
// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
//
-// Copyright (C) 2016 Ryan O'Neill r@genegenie.com
namespace GeneGenie.Gedcom.Date.Tests
{
diff --git a/GeneGenie.Gedcom.Tests/Date/GedcomDateMatchTest.cs b/GeneGenie.Gedcom.Tests/Date/GedcomDateMatchTest.cs
index 0eaee55..0f4bfc6 100644
--- a/GeneGenie.Gedcom.Tests/Date/GedcomDateMatchTest.cs
+++ b/GeneGenie.Gedcom.Tests/Date/GedcomDateMatchTest.cs
@@ -2,11 +2,9 @@
// Copyright (c) GeneGenie.com. All Rights Reserved.
// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
//
-// Copyright (C) 2016 Ryan O'Neill r@genegenie.com
namespace GeneGenie.Gedcom.Date.Tests
{
- using System.Collections.Generic;
using Xunit;
///
@@ -14,24 +12,12 @@ namespace GeneGenie.Gedcom.Date.Tests
///
public class GedcomDateMatchTest
{
- public static IEnumerable DatesToMatch()
- {
- yield return new object[] { string.Empty, string.Empty, 100m };
- yield return new object[] { "19 APR 1996", "19 APR 1996", 100m };
- yield return new object[] { "Jan 1990", "Jan 1990", 100m };
- yield return new object[] { "Feb 2000", "FEB 2000", 100m };
- yield return new object[] { "Jan 1 1990", "Jan 2 1990", 83.3m };
- }
-
- private static GedcomDate CreateDate(string dateText)
- {
- var date = new GedcomDate();
- date.ParseDateString(dateText);
- return date;
- }
-
[Theory]
- [MemberData(nameof(DatesToMatch))]
+ [InlineData("", "", 100)]
+ [InlineData("19 APR 1996", "19 APR 1996", 100)]
+ [InlineData("Jan 1990", "Jan 1990", 100)]
+ [InlineData("Feb 2000", "FEB 2000", 100)]
+ [InlineData("Jan 1 1990", "Jan 2 1990", 83.3)]
private void Dates_should_match(string dateAText, string dateBText, decimal expectedMatch)
{
var dateA = CreateDate(dateAText);
@@ -41,5 +27,12 @@ private void Dates_should_match(string dateAText, string dateBText, decimal expe
Assert.Equal(expectedMatch, matched, 1);
}
+
+ private static GedcomDate CreateDate(string dateText)
+ {
+ var date = new GedcomDate();
+ date.ParseDateString(dateText);
+ return date;
+ }
}
}
diff --git a/GeneGenie.Gedcom.Tests/EncoderTests/GedcomAnselEncoderTest.cs b/GeneGenie.Gedcom.Tests/EncoderTests/GedcomAnselEncoderTest.cs
index 0687711..4660a7e 100644
--- a/GeneGenie.Gedcom.Tests/EncoderTests/GedcomAnselEncoderTest.cs
+++ b/GeneGenie.Gedcom.Tests/EncoderTests/GedcomAnselEncoderTest.cs
@@ -22,7 +22,7 @@ public class GedcomAnselEncoderTest
[Fact]
public void Ansel_charset_is_recognised()
{
- var reader = GedcomRecordReader.CreateReader("./Data/Ansel.ged");
+ var reader = GedcomRecordReader.CreateReader("./Data/ANSEL.GED");
Assert.Equal(GedcomCharset.Ansel, reader.Parser.Charset);
}
@@ -34,7 +34,7 @@ public void Ansel_charset_is_recognised()
[Fact]
public void Record_count_is_33_children_plus_two_parents()
{
- var reader = GedcomRecordReader.CreateReader("./Data/Ansel.ged");
+ var reader = GedcomRecordReader.CreateReader("./Data/ANSEL.GED");
Assert.Equal(35, reader.Database.Individuals.Count);
}
@@ -44,7 +44,7 @@ public void Record_count_is_33_children_plus_two_parents()
/// The expected test data has been rigorously checked to ensure the Unicode characters match exactly. If your editor
/// is not Unicode aware updates them, they'll probably fail.
///
- /// The name of the child test record in the Ansel.ged file.
+ /// The name of the child test record in the ANSEL.GED file.
/// The expected text to find in the birth place field, after translation to Unicode.
/// The expected text to find in the death place field, after translation to Unicode.
[Theory]
@@ -83,7 +83,7 @@ public void Record_count_is_33_children_plus_two_parents()
[InlineData("code: FE (Unicode: comma above, 0313) /high comma, centered/", "A̓B̓C̓D̓E̓F̓G̓H̓I̓J̓K̓L̓M̓N̓O̓P̓Q̓R̓S̓T̓U̓V̓W̓X̓Y̓Z̓", "a̓b̓c̓d̓e̓f̓g̓h̓i̓j̓k̓l̓m̓n̓o̓p̓q̓r̓s̓t̓u̓v̓w̓x̓y̓z̓")]
public void Characters_can_be_translated_to_unicode(string childName, string birthPlace, string deathPlace)
{
- var reader = GedcomRecordReader.CreateReader("./Data/Ansel.ged");
+ var reader = GedcomRecordReader.CreateReader("./Data/ANSEL.GED");
var child = reader.Database.Individuals.First(i => i.GetName().Name == childName);
diff --git a/GeneGenie.Gedcom.Tests/Equality/GedcomEventTest.cs b/GeneGenie.Gedcom.Tests/Equality/GedcomEventTest.cs
index 0ff49d7..09c78cd 100644
--- a/GeneGenie.Gedcom.Tests/Equality/GedcomEventTest.cs
+++ b/GeneGenie.Gedcom.Tests/Equality/GedcomEventTest.cs
@@ -9,7 +9,7 @@ namespace GeneGenie.Gedcom.Tests.Equality
using Xunit;
///
- /// Tests for equality of family records.
+ /// Tests for equality of GedcomEvent.
///
public class GedcomEventTest
{
diff --git a/GeneGenie.Gedcom.Tests/Equality/GedcomHeaderTest.cs b/GeneGenie.Gedcom.Tests/Equality/GedcomHeaderTest.cs
index 3b22a8b..e33206a 100644
--- a/GeneGenie.Gedcom.Tests/Equality/GedcomHeaderTest.cs
+++ b/GeneGenie.Gedcom.Tests/Equality/GedcomHeaderTest.cs
@@ -8,7 +8,7 @@ namespace GeneGenie.Gedcom.Tests.Equality
using Xunit;
///
- /// Tests for equality of multimedia files.
+ /// Tests for equality of headers.
///
public class GedcomHeaderTest
{
diff --git a/GeneGenie.Gedcom.Tests/Equality/GedcomPlaceTest.cs b/GeneGenie.Gedcom.Tests/Equality/GedcomPlaceTest.cs
index 4227164..5261b98 100644
--- a/GeneGenie.Gedcom.Tests/Equality/GedcomPlaceTest.cs
+++ b/GeneGenie.Gedcom.Tests/Equality/GedcomPlaceTest.cs
@@ -8,7 +8,7 @@ namespace GeneGenie.Gedcom.Tests.Equality
using Xunit;
///
- /// Tests for equality of family records.
+ /// Tests for equality of GedcomPlace.
///
public class GedcomPlaceTest
{
diff --git a/GeneGenie.Gedcom.Tests/GedcomDeleteTest.cs b/GeneGenie.Gedcom.Tests/GedcomDeleteTest.cs
index 1fda0af..0d5dd29 100644
--- a/GeneGenie.Gedcom.Tests/GedcomDeleteTest.cs
+++ b/GeneGenie.Gedcom.Tests/GedcomDeleteTest.cs
@@ -2,8 +2,6 @@
// Copyright (c) GeneGenie.com. All Rights Reserved.
// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
//
-// Copyright (C) 2007 David A Knight david@ritter.demon.co.uk
-// Copyright (C) 2016 Ryan O'Neill r@genegenie.com
namespace GeneGenie.Gedcom
{
diff --git a/GeneGenie.Gedcom.Tests/GedcomIdentTest.cs b/GeneGenie.Gedcom.Tests/GedcomIdentTest.cs
index 9fe3d7a..8d527b8 100644
--- a/GeneGenie.Gedcom.Tests/GedcomIdentTest.cs
+++ b/GeneGenie.Gedcom.Tests/GedcomIdentTest.cs
@@ -7,6 +7,7 @@
namespace GeneGenie.Gedcom.Parser
{
+ using System;
using System.Linq;
using Xunit;
@@ -27,11 +28,12 @@ private GedcomRecordReader Read(string file)
private void Multiline_note_is_read_when_dodgy_ident_tag_is_used()
{
var reader = Read("./Data/superfluous-ident-test.ged");
+ var expected = $"First line of a note.{Environment.NewLine}Second line of a note.{Environment.NewLine}Third line of a note.";
var noteXref = reader.Database.Individuals.Single().Notes.First();
var note = reader.Database.Notes.Single(n => n.XrefId == noteXref);
- Assert.Equal("First line of a note.\r\nSecond line of a note.\r\nThird line of a note.", note.Text);
+ Assert.Equal(expected, note.Text);
}
[Fact]
diff --git a/GeneGenie.Gedcom.Tests/GedcomSimpleTest.cs b/GeneGenie.Gedcom.Tests/GedcomSimpleTest.cs
index 8545ab1..01c2bf7 100644
--- a/GeneGenie.Gedcom.Tests/GedcomSimpleTest.cs
+++ b/GeneGenie.Gedcom.Tests/GedcomSimpleTest.cs
@@ -44,7 +44,7 @@ private void Creator_address()
{
var reader = GetReader("./Data/simple.ged");
var creatorAddress = reader.Database.Submitters.SingleOrDefault()?.Address.AddressLine;
- Assert.Equal("Submitters address\r\naddress continued here", creatorAddress);
+ Assert.Equal($"Submitters address{Environment.NewLine}address continued here", creatorAddress);
}
[Fact]
diff --git a/GeneGenie.Gedcom.Tests/GedcomXRefTest.cs b/GeneGenie.Gedcom.Tests/GedcomXRefTest.cs
index 58c5d2f..7e120ea 100644
--- a/GeneGenie.Gedcom.Tests/GedcomXRefTest.cs
+++ b/GeneGenie.Gedcom.Tests/GedcomXRefTest.cs
@@ -18,10 +18,10 @@ namespace GeneGenie.Gedcom.Tests
public class GedcomXRefTest
{
[Theory]
- [InlineData(".\\Data\\simple.ged")]
- [InlineData(".\\Data\\presidents.ged")]
- [InlineData(".\\Data\\Spouse-sealing.ged")]
- [InlineData(".\\Data\\superfluous-ident-test.ged")]
+ [InlineData("./Data/simple.ged")]
+ [InlineData("./Data/presidents.ged")]
+ [InlineData("./Data/Spouse-sealing.ged")]
+ [InlineData("./Data/superfluous-ident-test.ged")]
private void Original_record_id(string sourceFile)
{
var originalReader = GedcomRecordReader.CreateReader(sourceFile, false);
diff --git a/GeneGenie.Gedcom.Tests/GeneGenie.Gedcom.Tests.csproj b/GeneGenie.Gedcom.Tests/GeneGenie.Gedcom.Tests.csproj
index bc9585b..4076cc6 100644
--- a/GeneGenie.Gedcom.Tests/GeneGenie.Gedcom.Tests.csproj
+++ b/GeneGenie.Gedcom.Tests/GeneGenie.Gedcom.Tests.csproj
@@ -1,47 +1,24 @@
-
+
- net6.0
+ net8.0
false
0.6
-
-
- $(OutputPath)$(AssemblyName).xml
-
+
+
+
-
+
latest
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers
@@ -67,17 +44,20 @@
Always
-
+
Always
+
+ Always
+
Always
- Always
+ Always
- Always
+ Always
Always
@@ -91,6 +71,12 @@
Always
+
+ Always
+
+
+ Always
+
@@ -98,7 +84,8 @@
"Unit tests for the GeneGenie.Gedcom library"
GeneGenie.Gedcom.Tests"
GeneGenie.Gedcom.Tests"
-
+ True
+
diff --git a/GeneGenie.Gedcom.Tests/GeneGenie.Gedcom.Tests.xml b/GeneGenie.Gedcom.Tests/GeneGenie.Gedcom.Tests.xml
deleted file mode 100644
index 21d036b..0000000
--- a/GeneGenie.Gedcom.Tests/GeneGenie.Gedcom.Tests.xml
+++ /dev/null
@@ -1,502 +0,0 @@
-
-
-
- GeneGenie.Gedcom.Tests
-
-
-
-
- Tests for equality of addresses.
-
-
-
-
- Helper functions to create people with names for unit testing.
-
-
-
-
- Create an individual with a specific name.
-
- The gedcom database to attach the name and individual to.
- The name to place directly into the name field.
- The constructed individual.
-
-
-
- Create an individual with a specific name.
-
- The gedcom database to attach the name and individual to.
- The given name (first name) to attach to the new individual.
- The surname (last name) to attach to the new individual.
- The constructed individual.
-
-
-
- Rigorous tests to ensure that Ansel files can be can be properly loaded and converted to Unicode.
-
-
-
-
- Checks that the Ansel encoding is recognised.
-
-
-
-
- Test to catch the addition of child records so that we can add tests for them.
- If this fails, we need to test the characters in the new entries.
-
-
-
-
- Uses the Ansel test file supplied by Heiner Eichmann to test every character in Ansel can be decoded into Unicode.
- The expected test data has been rigorously checked to ensure the Unicode characters match exactly. If your editor
- is not Unicode aware updates them, they'll probably fail.
-
- The name of the child test record in the Ansel.ged file.
- The expected text to find in the birth place field, after translation to Unicode.
- The expected text to find in the death place field, after translation to Unicode.
-
-
-
- Rigorous tests to ensure that ANSI files can be can be properly loaded and converted to Unicode.
-
-
-
-
- Checks that the ANSI encoding is recognised.
-
-
-
-
- Test to catch the addition of child records so that we can add tests for them.
- If this fails, we need to test the characters in the new entries.
-
-
-
-
- Uses the Ansi test file to test every character in ANSI can be decoded into Unicode.
-
- The name of the child test record in the ansi.ged file.
- The expected integer value to find in the birth place field, before any translation.
- The expected text to find in the birth place field, after translation to Unicode.
-
-
-
- Tests for equality of family records.
-
-
-
-
- Initializes a new instance of the class.
- Comparison tests for event.
-
-
-
-
- Tests for equality of multimedia files.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests for equality of multimedia files.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests for equality of multimedia records.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Test suite for equality of GedcomNoteRecord.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests for equality of family records.
-
-
-
-
- Initializes a new instance of the class.
- Comparison tests for places.
-
-
-
-
- Test suite for equality of GedcomRecordedEvent.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Test suite for equality of GedcomRepositoryCitation.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Test suite for equality of GedcomRepositoryRecord.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Test suite for equality of GedcomSourceCitation.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Test suite for equality of GedcomSourceRecord.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Test suite for equality of GedcomSubmissionRecord.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Test suite for equality of GedcomSubmitterRecord.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Class GedComComparisonTests.
-
-
-
-
- GedCOM comparison gedcom association is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom date is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom event is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom family link is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom family record is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom header is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom individual record is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom multimedia record is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom name is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom note record is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom place is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom repository citation is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom repository record is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom source citation is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom source record is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom submission record is equivalent to expect are equal.
-
-
-
-
- GedCOM comparison gedcom submitter record is equivalent to expect are equal.
-
-
-
-
- Tests for ensuring the custom.ged file can be parsed and custom fields found.
-
-
-
-
- Tests for ensuring the simple.ged file can be parsed as expected.
-
-
-
-
- All of the tests that need writing, converting from old comments and old unit tests.
-
-
-
-
- Tests for equality of addresses.
-
-
-
-
- Tests that source records are read in for the varying record types.
-
-
-
-
- Compares two lists of records to see if they are equal.
- Uses the automated record id from the base class for sorting.
-
- A class that inherits from and implements Equals/GetHashCode.
- The first list of records.
- The second list of records.
-
-
-
- TODO: More tests and simplify / split the tests that are there.
-
-
-
-
- Tests for equality of associations.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests for equality of family links.
-
-
-
-
- Tests for equality of family records.
-
-
-
-
- Initializes a new instance of the class.
- Comparison tests for GedcomFamilyRecord.
-
-
-
-
- Tests that the spousal sealing record can be added, removed and round tripped to storage.
-
-
-
-
- Checks that the date comparision works, which is complex as GEDCOM dates can have a lot of prefixes.
-
-
-
-
- Checks the mechanism for testing how similar dates are.
-
-
-
-
- Null comparison tests for dates, ensuring a real date never matches a null.
-
-
-
-
- Unit tests and data for ensuring changed dates and times are output in correct format.
-
-
-
-
- Unit tests and data for ensuring dates can be parsed from GEDCOM files.
-
-
-
-
- Tests that all date periods are handled and can be parsed.
-
-
-
-
- Tests for deleting individuals, ensuring that sources etc are also deleted if no longer referenced.
-
-
-
-
- Checks that the IDENT tag does not muck up the import of a file as shown by
- http://www.tamurajones.net/GEDCOMIdentifiersCONCAndCONT.xhtml .
-
-
-
-
- Tests for ensuring that GEDCOM files can be loaded, saved and reopened without data loss.
-
-
-
-
- Initializes a new instance of the class.
-
- A helper class used to log output to the test runner.
-
-
-
- To help diagnose file differences, this function logs the contents of the files to the test runner.
-
- Path to source file to show.
- Path to file that has been rewritten.
-
-
-
- Ensures that the parser loads a file that contains all known GEDCOM tags.
- TODO: Could do with validating that it actually understood every tag in that file.
-
-
-
-
- File sourced from http://heiner-eichmann.de/gedcom/allged.htm .
-
-
-
-
- Tests for equality of individuals.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests for equality of names and name lists.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests for name parsing.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests to ensure that the correct number of families and individuals are read.
-
-
-
-
- Tests the ability to match individuals on user entered data.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Tests that source records are read in for the varying record types.
-
-
-
-
- Loads the torture test files to test every tag can be read at least without falling over.
-
-
-
-
diff --git a/GeneGenie.Gedcom.Tests/RecordReaderTests/GecomCustomRecordTest.cs b/GeneGenie.Gedcom.Tests/RecordReaderTests/GecomCustomRecordTest.cs
new file mode 100644
index 0000000..555fc91
--- /dev/null
+++ b/GeneGenie.Gedcom.Tests/RecordReaderTests/GecomCustomRecordTest.cs
@@ -0,0 +1,46 @@
+//
+// Copyright (c) GeneGenie.com. All Rights Reserved.
+// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
+//
+// Copyright (C) 2023 Herbert Oppmann gith@memotech.franken.de
+
+
+namespace GeneGenie.Gedcom.Tests.RecordReaderTests
+{
+ using GeneGenie.Gedcom.Parser;
+ using System;
+ using Xunit;
+
+ ///
+ /// Tests to ensure that custom records are correctly read in.
+ ///
+ public class GedcomCustomRecordTest
+ {
+ ///
+ /// Test for custom record '_UID' in individual record.
+ ///
+ [Fact]
+ public void Record_UID()
+ {
+ var reader = GedcomRecordReader.CreateReader("./Data/UidAndBurg.ged");
+ GedcomIndividualRecord indi = reader.Database.Individuals[0];
+ GedcomCustomRecord cr = indi.Custom[0];
+ Assert.Equal("_UID", cr.Tag);
+ Assert.Equal("A5A812A4C0FE44C9A98F8D4627073B69AB88", cr.Classification);
+ }
+
+ ///
+ /// Test for custom record '_BURG' in event record.
+ ///
+ [Fact]
+ public void Record_BURG()
+ {
+ var reader = GedcomRecordReader.CreateReader("./Data/UidAndBurg.ged");
+ GedcomIndividualRecord indi = reader.Database.Individuals[0];
+ GedcomEvent er = indi.Events[0];
+ GedcomCustomRecord cr = er.Custom[0];
+ Assert.Equal("_BURG", cr.Tag);
+ Assert.Equal("unbekannt", cr.Classification);
+ }
+ }
+}
diff --git a/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomChangeDateReadTest.cs b/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomChangeDateReadTest.cs
new file mode 100644
index 0000000..35e2834
--- /dev/null
+++ b/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomChangeDateReadTest.cs
@@ -0,0 +1,48 @@
+//
+// Copyright (c) GeneGenie.com. All Rights Reserved.
+// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
+//
+// Copyright (C) 2023 Herbert Oppmann gith@memotech.franken.de
+
+namespace GeneGenie.Gedcom
+{
+ using System;
+ using System.Linq;
+ using GeneGenie.Gedcom.Parser;
+ using Xunit;
+
+ ///
+ /// Tests that the change dates are read in for the varying record types.
+ ///
+ public class GedcomChangeDateReadTest
+ {
+ [Fact]
+ private void Read_sample_and_check_changed_dates()
+ {
+ var reader = GedcomRecordReader.CreateReader("./Data/changedate.ged");
+
+ // TODO: Submission records are parsed but not stored in the DataBase, so can't check this currently
+
+ GedcomChangeDate Submitter_ChangeDate = reader.Database.Submitters.Single().ChangeDate;
+ Assert.Equal("02 JUN 2023 10:11:12", Submitter_ChangeDate?.DateString);
+
+ var father = reader.Database.Individuals.SingleOrDefault(x => x.GetName().Name == "/Father/");
+ Assert.Equal("03 JUN 2023 10:11:13", father?.ChangeDate?.DateString);
+
+ GedcomChangeDate Family_ChangeDate = reader.Database.Families.Single().ChangeDate;
+ Assert.Equal("04 JUN 2023 10:11:14", Family_ChangeDate?.DateString);
+
+ GedcomChangeDate Source_ChangeDate = reader.Database.Sources.Single().ChangeDate;
+ Assert.Equal("05 JUN 2023 10:11:15", Source_ChangeDate?.DateString);
+
+ GedcomChangeDate Repository_ChangeDate = reader.Database.Repositories.Single().ChangeDate;
+ Assert.Equal("06 JUN 2023 10:11:16", Repository_ChangeDate?.DateString);
+
+ GedcomChangeDate Note_ChangeDate = reader.Database.Notes.Single().ChangeDate;
+ Assert.Equal("07 JUN 2023 10:11:17", Note_ChangeDate?.DateString);
+
+ GedcomChangeDate Media_ChangeDate = reader.Database.Media.Single().ChangeDate;
+ Assert.Equal("08 JUN 2023 10:11:18", Media_ChangeDate?.DateString);
+ }
+ }
+}
diff --git a/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomRecordCountTest.cs b/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomRecordCountTest.cs
index dcf0159..f1a87ae 100644
--- a/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomRecordCountTest.cs
+++ b/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomRecordCountTest.cs
@@ -2,10 +2,10 @@
// Copyright (c) GeneGenie.com. All Rights Reserved.
// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
//
-// Copyright (C) 2016 Ryan O'Neill r@genegenie.com
namespace GeneGenie.Gedcom.Parser
{
+ using System;
using Xunit;
///
@@ -51,11 +51,11 @@ private void Submitter_name_can_be_read(string file, string expectedName)
Assert.Equal(expectedName, reader.Database.Header.Submitter.Name);
}
- [Theory]
- [InlineData("./Data/allged.ged", "Corporation address line 1\r\nCorporation address line 2\r\nCorporation address line 3\r\nCorporation address line 4")]
- private void Corporation_address_can_be_read(string file, string expected)
+ [Fact]
+ private void Corporation_address_can_be_read()
{
- var reader = GedcomRecordReader.CreateReader(file);
+ var reader = GedcomRecordReader.CreateReader("./Data/allged.ged");
+ var expected = $"Corporation address line 1{Environment.NewLine}Corporation address line 2{Environment.NewLine}Corporation address line 3{Environment.NewLine}Corporation address line 4";
Assert.Equal(expected, reader.Database.Header.CorporationAddress.AddressLine);
}
diff --git a/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomSurviveMalformedTest.cs b/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomSurviveMalformedTest.cs
new file mode 100644
index 0000000..afa3ee7
--- /dev/null
+++ b/GeneGenie.Gedcom.Tests/RecordReaderTests/GedcomSurviveMalformedTest.cs
@@ -0,0 +1,42 @@
+//
+// Copyright (c) GeneGenie.com. All Rights Reserved.
+// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
+//
+// Copyright (C) 2023 Herbert Oppmann gith@memotech.franken.de
+
+
+namespace GeneGenie.Gedcom
+{
+ using System;
+ using GeneGenie.Gedcom.Parser;
+ using Xunit;
+
+ ///
+ /// Tests to ensure that malformed GEDCOM files are survived.
+ ///
+ public class GedcomSurviveMalformedTest
+ {
+ [Fact]
+ private void SubmitterReferenceWithWrongId()
+ {
+ var reader = GedcomRecordReader.CreateReader("./Data/SubmitterReference.ged");
+ GedcomChangeDate LatestChangeDate = null;
+ foreach (GedcomIndividualRecord indi in reader.Database.Individuals)
+ {
+ if ((LatestChangeDate == null) ||
+ ((indi.ChangeDate != null) && (indi.ChangeDate > LatestChangeDate)))
+ {
+ LatestChangeDate = indi.ChangeDate;
+ }
+ }
+ foreach (GedcomFamilyRecord fam in reader.Database.Families)
+ {
+ if ((LatestChangeDate == null) ||
+ ((fam.ChangeDate != null) && (fam.ChangeDate > LatestChangeDate)))
+ {
+ LatestChangeDate = fam.ChangeDate;
+ }
+ }
+ }
+ }
+}
diff --git a/GeneGenie.Gedcom.Tests/RecordReaderTests/LineTerminatorTests.cs b/GeneGenie.Gedcom.Tests/RecordReaderTests/LineTerminatorTests.cs
new file mode 100644
index 0000000..4963666
--- /dev/null
+++ b/GeneGenie.Gedcom.Tests/RecordReaderTests/LineTerminatorTests.cs
@@ -0,0 +1,55 @@
+//
+// Copyright (c) GeneGenie.com. All Rights Reserved.
+// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
+//
+
+namespace GeneGenie.Gedcom.Tests.RecordReaderTests
+{
+ using GeneGenie.Gedcom.Parser;
+ using System;
+ using System.IO;
+ using System.Text;
+ using Xunit;
+
+ ///
+ /// Tests for verifying GEDCOM line terminators can be found.
+ ///
+ public class LineTerminatorTests
+ {
+ ///
+ /// Tests to ensure we can detect if the source GEDCOM file has CR, CRLF or LF terminated lines.
+ ///
+ ///
+ ///
+ [Theory]
+ [InlineData("First line. \n Second line.", "\n")]
+ [InlineData("First line. \r Second line.", "\r")]
+ public void Line_delimiter_can_be_parsed(string text, string expectedTerminator)
+ {
+ using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(text)))
+ {
+ var sr = new StreamReader(ms);
+
+ var newlineTerminator = GedcomRecordReader.DetectNewline(sr);
+
+ Assert.Equal(expectedTerminator, newlineTerminator);
+ }
+ }
+
+ ///
+ /// Tests that an if a line terminator is not found in the text, the default system newline is used.
+ ///
+ [Fact]
+ public void System_default_line_delimiter_is_used()
+ {
+ using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("")))
+ {
+ var sr = new StreamReader(ms);
+
+ var newlineTerminator = GedcomRecordReader.DetectNewline(sr);
+
+ Assert.Equal(Environment.NewLine, newlineTerminator);
+ }
+ }
+ }
+}
diff --git a/GeneGenie.Gedcom/AssemblyInfo.cs b/GeneGenie.Gedcom/AssemblyInfo.cs
new file mode 100644
index 0000000..f000918
--- /dev/null
+++ b/GeneGenie.Gedcom/AssemblyInfo.cs
@@ -0,0 +1,8 @@
+//
+// Copyright (c) GeneGenie.com. All Rights Reserved.
+// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
+//
+
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("GeneGenie.Gedcom.Tests")]
diff --git a/GeneGenie.Gedcom/Data/StaticDateData.cs b/GeneGenie.Gedcom/Data/StaticDateData.cs
index d7e83fe..79e6cfd 100644
--- a/GeneGenie.Gedcom/Data/StaticDateData.cs
+++ b/GeneGenie.Gedcom/Data/StaticDateData.cs
@@ -35,7 +35,7 @@ public static class StaticDateData
/// Longer strings that match the start of shorter strings should be listed first (ABT. before ABT).
///
/// Of particular note;
- /// C or CIRCA from BROSKEEP files, C may be due to the date being set from a baptism / christening, but if that is the
+ /// C or CIRCA from BROSKEEP files, C may be due to the date being set from a baptism / christening, but if that is the
/// case estimate is still reasonable to go with.
///
/// BROSKEEP seems to be stupid and doesn't make proper use of CAL e.g 'BU.9-6-1825' for a death date means it is really
diff --git a/GeneGenie.Gedcom/Enums/GedcomDatePeriod.cs b/GeneGenie.Gedcom/Enums/GedcomDatePeriod.cs
index 3c259df..9398425 100644
--- a/GeneGenie.Gedcom/Enums/GedcomDatePeriod.cs
+++ b/GeneGenie.Gedcom/Enums/GedcomDatePeriod.cs
@@ -8,7 +8,7 @@
namespace GeneGenie.Gedcom.Enums
{
///
- /// How accurate is the date and what range does it span?.
+ /// How accurate is the date and what range does it span?
///
public enum GedcomDatePeriod
{
diff --git a/GeneGenie.Gedcom/Enums/GedcomErrorState.cs b/GeneGenie.Gedcom/Enums/GedcomErrorState.cs
index 18d8e96..7b436ff 100644
--- a/GeneGenie.Gedcom/Enums/GedcomErrorState.cs
+++ b/GeneGenie.Gedcom/Enums/GedcomErrorState.cs
@@ -23,7 +23,7 @@ public enum GedcomErrorState
LevelExpected,
///
- /// Delimeter after level not found
+ /// Delimiter after level not found
///
LevelMissingDelim,
@@ -33,7 +33,7 @@ public enum GedcomErrorState
LevelInvalid,
///
- /// Delimeter after XrefID not found
+ /// Delimiter after XrefID not found
///
XrefIDMissingDelim,
@@ -48,7 +48,7 @@ public enum GedcomErrorState
TagExpected,
///
- /// Delimeter, or newline after the tag was not found
+ /// Delimiter, or newline after the tag was not found
///
TagMissingDelimOrTerm,
@@ -58,7 +58,7 @@ public enum GedcomErrorState
LineValueExpected,
///
- /// newline after line value not found
+ /// Newline after line value not found
///
LineValueMissingTerm,
@@ -68,7 +68,7 @@ public enum GedcomErrorState
LineValueInvalid,
///
- /// Deliminator in GEDCOM is a single space, this error will occur
+ /// Delimiter in GEDCOM is a single space, this error will occur
/// when a multi space delimiter is detected
///
InvalidDelim,
diff --git a/GeneGenie.Gedcom/GedcomAssociation.cs b/GeneGenie.Gedcom/GedcomAssociation.cs
index afa8cca..8ea2a7e 100644
--- a/GeneGenie.Gedcom/GedcomAssociation.cs
+++ b/GeneGenie.Gedcom/GedcomAssociation.cs
@@ -13,7 +13,7 @@ namespace GeneGenie.Gedcom
///
/// How the given individual is associated to another.
- /// Each GedcomIndividal contains a list of these.
+ /// Each GedcomIndividual contains a list of these.
///
public class GedcomAssociation : GedcomRecord, IComparable, IComparable, IEquatable
{
diff --git a/GeneGenie.Gedcom/GedcomChangeDate.cs b/GeneGenie.Gedcom/GedcomChangeDate.cs
index d4a7fd7..a3e6940 100644
--- a/GeneGenie.Gedcom/GedcomChangeDate.cs
+++ b/GeneGenie.Gedcom/GedcomChangeDate.cs
@@ -2,8 +2,6 @@
// Copyright (c) GeneGenie.com. All Rights Reserved.
// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
//
-// Copyright (C) 2008 David A Knight david@ritter.demon.co.uk
-// Copyright (C) 2016 Ryan O'Neill r@genegenie.com
namespace GeneGenie.Gedcom
{
diff --git a/GeneGenie.Gedcom/GedcomDate.cs b/GeneGenie.Gedcom/GedcomDate.cs
index 50ccf6d..a5abb00 100644
--- a/GeneGenie.Gedcom/GedcomDate.cs
+++ b/GeneGenie.Gedcom/GedcomDate.cs
@@ -578,7 +578,7 @@ public void ParseDateString(string inputDate)
if (dataString.StartsWith("@#"))
{
dataString = dataString.Substring(2);
- int i = dataString.IndexOf("@", 2); // TODO: Subtle bug? Should the 2 be there as already trimmed above?
+ int i = dataString.IndexOf("@", 2);
if (i != -1)
{
dateType = dataString.Substring(0, i).ToUpper();
@@ -588,19 +588,19 @@ public void ParseDateString(string inputDate)
switch (dateType)
{
- case "@#DGREGORIAN@":
+ case "DGREGORIAN":
DateType = GedcomDateType.Gregorian;
break;
- case "@#DJULIAN@":
+ case "DJULIAN":
DateType = GedcomDateType.Julian;
break;
- case "@#DHEBREW@":
+ case "DHEBREW":
DateType = GedcomDateType.Hebrew;
break;
- case "@#DROMAN@":
+ case "DROMAN":
DateType = GedcomDateType.Roman;
break;
- case "@#DUNKNOWN@":
+ case "DUNKNOWN":
DateType = GedcomDateType.Unknown;
break;
default:
diff --git a/GeneGenie.Gedcom/GedcomEvent.cs b/GeneGenie.Gedcom/GedcomEvent.cs
index 54fbd7b..9415fdc 100644
--- a/GeneGenie.Gedcom/GedcomEvent.cs
+++ b/GeneGenie.Gedcom/GedcomEvent.cs
@@ -75,7 +75,7 @@ public class GedcomEvent : GedcomRecord, IComparable, IComparable,
"SSN",
"TITL",
- // GEDCOM allows custom records, beginging with _
+ // GEDCOM allows custom records, beginning with _
"_UNKN",
};
@@ -212,6 +212,9 @@ public override GedcomRecordType RecordType
get { return GedcomRecordType.Event; }
}
+ /// Gets or sets the list of entries found when parsing an event.
+ public GedcomRecordList Custom { get; set; } = new GedcomRecordList();
+
///
/// Gets the gedcom tag.
///
@@ -757,7 +760,7 @@ public override void GenerateXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant husband");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent husband");
}
}
@@ -785,7 +788,7 @@ public override void GenerateXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant wife");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent wife");
}
}
diff --git a/GeneGenie.Gedcom/GedcomFamilyLink.cs b/GeneGenie.Gedcom/GedcomFamilyLink.cs
index 8e8cafe..396843c 100644
--- a/GeneGenie.Gedcom/GedcomFamilyLink.cs
+++ b/GeneGenie.Gedcom/GedcomFamilyLink.cs
@@ -11,7 +11,7 @@ namespace GeneGenie.Gedcom
using GeneGenie.Gedcom.Enums;
///
- /// How an individal is linked to a family.
+ /// How an individual is linked to a family.
///
public class GedcomFamilyLink : GedcomRecord, IComparable, IComparable, IEquatable
{
@@ -183,10 +183,10 @@ public ChildLinkageStatus Status
}
///
- /// Gets or sets a value indicating whether [prefered spouse].
+ /// Gets or sets a value indicating whether [preferred spouse].
///
///
- /// true if [prefered spouse]; otherwise, false .
+ /// true if [preferred spouse]; otherwise, false .
///
public bool PreferedSpouse
{
diff --git a/GeneGenie.Gedcom/GedcomFamilyRecord.cs b/GeneGenie.Gedcom/GedcomFamilyRecord.cs
index a06e25b..9f7e696 100644
--- a/GeneGenie.Gedcom/GedcomFamilyRecord.cs
+++ b/GeneGenie.Gedcom/GedcomFamilyRecord.cs
@@ -338,6 +338,7 @@ public override GedcomChangeDate ChangeDate
foreach (string submitterID in SubmitterRecords)
{
record = Database[submitterID];
+ if (record == null) continue;
childChangeDate = record.ChangeDate;
if (childChangeDate != null && realChangeDate != null && childChangeDate > realChangeDate)
{
@@ -910,7 +911,7 @@ public override void GenerateXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant husband");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent husband");
}
}
@@ -937,7 +938,7 @@ public override void GenerateXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant wife");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent wife");
}
}
@@ -1016,7 +1017,7 @@ public override void GenerateXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant child");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent child");
}
}
diff --git a/GeneGenie.Gedcom/GedcomIndividualRecord.cs b/GeneGenie.Gedcom/GedcomIndividualRecord.cs
index 4de2107..8ca8a98 100644
--- a/GeneGenie.Gedcom/GedcomIndividualRecord.cs
+++ b/GeneGenie.Gedcom/GedcomIndividualRecord.cs
@@ -620,6 +620,7 @@ public override GedcomChangeDate ChangeDate
foreach (string submitterID in SubmitterRecords)
{
record = Database[submitterID];
+ if (record == null) continue;
childChangeDate = record.ChangeDate;
if (childChangeDate != null && realChangeDate != null && childChangeDate > realChangeDate)
{
@@ -899,7 +900,7 @@ public GedcomName GetName()
}
///
- /// Sets the name of the prefered.
+ /// Sets the name of the preferred.
///
/// The name.
public void SetPreferedName(GedcomName name)
@@ -1002,7 +1003,7 @@ public GedcomFamilyRecord GetFamily()
GedcomFamilyLink link = SpouseIn.FirstOrDefault(f => (f.PreferedSpouse == true));
- // shouldn't need this as we automatically set the prefered on loading
+ // shouldn't need this as we automatically set the preferred on loading
// do the check anyway though just incase.
if (link == null && SpouseIn.Count > 0)
{
@@ -1367,7 +1368,7 @@ public override void GenerateXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant associated individual");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent associated individual");
}
}
diff --git a/GeneGenie.Gedcom/GedcomRecord.cs b/GeneGenie.Gedcom/GedcomRecord.cs
index 3eec946..b64900f 100644
--- a/GeneGenie.Gedcom/GedcomRecord.cs
+++ b/GeneGenie.Gedcom/GedcomRecord.cs
@@ -465,7 +465,7 @@ public void GenerateNoteXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant note");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent note");
}
}
}
diff --git a/GeneGenie.Gedcom/GedcomSourceCitation.cs b/GeneGenie.Gedcom/GedcomSourceCitation.cs
index 415e23b..2c23be7 100644
--- a/GeneGenie.Gedcom/GedcomSourceCitation.cs
+++ b/GeneGenie.Gedcom/GedcomSourceCitation.cs
@@ -273,7 +273,7 @@ public override void GenerateXML(XmlNode root)
}
else
{
- System.Diagnostics.Debug.WriteLine("Pointer to non existant source");
+ System.Diagnostics.Debug.WriteLine("Pointer to non existent source");
}
if (!string.IsNullOrEmpty(Page))
diff --git a/GeneGenie.Gedcom/GedcomSourceRecord.cs b/GeneGenie.Gedcom/GedcomSourceRecord.cs
index 5a41332..fe648db 100644
--- a/GeneGenie.Gedcom/GedcomSourceRecord.cs
+++ b/GeneGenie.Gedcom/GedcomSourceRecord.cs
@@ -121,7 +121,7 @@ public GedcomSourceRecord(GedcomDatabase database)
public StringBuilder PublicationText { get; set; }
///
- /// Gets or sets the text text. TODO: What?.
+ /// Gets or sets the text text. TODO: What?
///
public StringBuilder TextText { get; set; }
diff --git a/GeneGenie.Gedcom/GeneGenie.Gedcom.csproj b/GeneGenie.Gedcom/GeneGenie.Gedcom.csproj
index 498cb16..9bd4d4b 100644
--- a/GeneGenie.Gedcom/GeneGenie.Gedcom.csproj
+++ b/GeneGenie.Gedcom/GeneGenie.Gedcom.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
@@ -12,16 +12,11 @@
CS1573: Parameter 'parameter' has no matching param tag in the XML comment for 'parameter' (but other parameters do)
CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member'
-->
- $(OutputPath)$(AssemblyName).xml
+
-
-
-
-
-
@@ -29,12 +24,8 @@
-
- all
- runtime; build; native; contentfiles; analyzers
-
-
-
+
+
@@ -44,7 +35,6 @@
GeneGenie.Gedcom"
true
1.1.0
- StrongName.snk
Ryan O'Neill, David A. Knight, Grant Winney
.Net 6.0 library for loading, saving, working with and analysing family trees stored in the GEDCOM format.
https://github.com/TheGeneGenieProject/GeneGenie.Gedcom/blob/master/Licence.txt
@@ -52,6 +42,7 @@
https://avatars0.githubusercontent.com/u/22330020?s=200&v=4
https://github.com/TheGeneGenieProject/GeneGenie.Gedcom
gedcom genegenie gene genie parser genealogy family tree
+ True
@@ -63,7 +54,7 @@
-
+
diff --git a/GeneGenie.Gedcom/GeneGenie.Gedcom.xml b/GeneGenie.Gedcom/GeneGenie.Gedcom.xml
deleted file mode 100644
index e12e335..0000000
--- a/GeneGenie.Gedcom/GeneGenie.Gedcom.xml
+++ /dev/null
@@ -1,6392 +0,0 @@
-
-
-
- GeneGenie.Gedcom
-
-
-
-
- General GEDCOM related constants.
-
-
-
-
- The default name for an individual when they have not been given one.
-
-
-
-
- The unknown name part.
-
-
-
-
- The unknown soundex.
-
-
-
-
- Month and period data used for parsing dates from GEDCOM files.
-
-
-
-
- All month names that might come up in GEDCOM date formats, abbreviated, non English as well.
-
-
-
-
- Delimiters that are valid for parsing the date parts of a GEDCOM date record.
-
-
-
-
- A list of mappings of text prefixes and suffixes to their GEDCOM types.
- Not all of these are valid as many tags come from programmes that do not obey the standards.
- Longer strings that match the start of shorter strings should be listed first (ABT. before ABT).
-
- Of particular note;
- C or CIRCA from BROSKEEP files, C may be due to the date being set from a baptism / christening, but if that is the
- case estimate is still reasonable to go with.
-
- BROSKEEP seems to be stupid and doesn't make proper use of CAL e.g 'BU.9-6-1825' for a death date means it is really
- the burial date that has just been copied to the death date.
- Same with birth / baptism.
-
-
-
-
- Child Linkage Status.
-
-
-
-
- Unknown
-
-
-
-
- Challenged
-
-
-
-
- Disproven
-
-
-
-
- Proven
-
-
-
-
- GEDCOM Adoption Type.
-
-
-
-
- None
-
-
-
-
- Husband
-
-
-
-
- Wife
-
-
-
-
- Husband and Wife
-
-
-
-
- Indicates the credibility of a piece of information, based upon its supporting evidence.
-
-
-
-
- Unreliable
-
-
-
-
- Questionable
-
-
-
-
- Secondary
-
-
-
-
- Primary
-
-
-
-
- Unknown
-
-
-
-
- The encoding used for the GEDCOM file.
-
-
-
- Reserved default / error value.
-
-
- ANSEL encoding.
-
-
- ANSI encoding.
-
-
- ASCII encoding.
-
-
- UTF8 encoding.
-
-
- UTF16, Big Endian.
-
-
- UTF16, Little Endian.
-
-
- UTF32, Big Endian.
-
-
- UTF32, Little Endian.
-
-
- Encoding was not found. We should default to unknown at the top instead and report error.
-
-
-
- How accurate is the date and what range does it span?.
-
-
-
- A default for dates so that none slip in without being explicitly checked.
-
-
- A single point in time.
-
-
- Any point in time after.
-
-
- Any point in time before.
-
-
- Any point in time between.
-
-
- Roughly near the date.
-
-
- Calculated / reverse engineered from another piece of data.
-
-
- An estimated date, likely to be slightly wrong.
-
-
- What someone thinks the date looks like based on reading old documents.
-
-
- A date range.
-
-
- When parsing date formats dates can be prefixed but are sometimes suffixed.
- This defines where to look for specific date period indicators.
-
-
- Error state for uninitialised instances.
-
-
- The text denoting the date period is before the dates.
-
-
- The text denoting the date period is after the dates.
-
-
-
- Calendars recognised in GEDCOM format.
-
-
-
- Gregorian calendar.
-
-
- Julian calendar.
-
-
- Hebrew calendar.
-
-
- French calendar.
-
-
- Roman calendar.
-
-
- Unknown calendar.
-
-
-
- Defines the current error status the parser is in.
-
-
-
-
- No error has occured
-
-
-
-
- A level value was expected but not found
-
-
-
-
- Delimeter after level not found
-
-
-
-
- The level value is invalid
-
-
-
-
- Delimeter after XrefID not found
-
-
-
-
- The ID is too long, can be at most 22 characters
-
-
-
-
- A GEDCOM tag name (or custom tag name) was expected but not found
-
-
-
-
- Delimeter, or newline after the tag was not found
-
-
-
-
- Value expected but not found
-
-
-
-
- newline after line value not found
-
-
-
-
- The line value is invalid
-
-
-
-
- Deliminator in GEDCOM is a single space, this error will occur
- when a multi space delimiter is detected
-
-
-
-
- An unknown error has occured while parsing
-
-
-
-
- GEDCOM Event Types.
-
-
-
-
- Generic Event
-
-
-
-
- Annulment
-
-
- Declaring a marriage void from the beginning (never existed).
-
-
-
-
- Census
-
-
- The event of the periodic count of the population for a designated locality,
- such as a national or state Census.
-
-
-
-
- Divorce
-
-
- An event of dissolving a marriage through civil action.
-
-
-
-
- Divorce Filed
-
-
- An event of filing for a divorce by a spouse.
-
-
-
-
- Engagement
-
-
- An event of recording or announcing an agreement between two people to become married.
-
-
-
-
- Marriage Bann
-
-
- An event of an official public notice given that two people intend to marry.
-
-
-
-
- Marriage Contract
-
-
- An event of recording a formal agreement of marriage, including the prenuptial
- agreement in which marriage partners reach agreement about the property rights
- of one or both, securing property to their children.
-
-
-
-
- Marriage
-
-
- A legal, common-law, or customary event of creating a family unit of a man and a woman as husband and wife.
-
-
-
-
- Marriage License
-
-
- An event of obtaining a legal license to marry.
-
-
-
-
- Marriage Settlement
-
-
- An event of creating an agreement between two people contemplating marriage, at which time
- they agree to release or modify property rights that would otherwise arise from the marriage.
-
-
-
-
- Residence
-
-
- An address or place of residence that a family or individual resided.
-
-
-
-
- Birth
-
-
-
-
- Christening
-
-
-
-
- Death
-
-
-
-
- Burial
-
-
-
-
- Cremation
-
-
-
-
- Adoption
-
-
-
-
- Baptism
-
-
-
-
- Bar Mitzvah
-
-
-
-
- Bat Mitzvah
-
-
-
-
- Blessing
-
-
-
-
- Adult Christening
-
-
-
-
- Confirmation
-
-
-
-
- First Communion
-
-
-
-
- Ordination
-
-
-
-
- Naturalization
-
-
-
-
- Emigration
-
-
-
-
- Immigration
-
-
-
-
- Census
-
-
-
-
- Probate
-
-
-
-
- Will Creation
-
-
-
-
- Graduation
-
-
-
-
- Retirement
-
-
-
-
- Generic Fact
-
-
-
-
- Caste
-
-
-
-
- Physical Description
-
-
-
-
- Education
-
-
-
-
- National ID Number
-
-
-
-
- National Or Tribal Origin
-
-
-
-
- Number of Children
-
-
-
-
- Number of Marriages
-
-
-
-
- Occupation
-
-
-
-
- Possessions
-
-
-
-
- Religion
-
-
-
-
- Residence
-
-
-
-
- Social Security Number
-
-
-
-
- Nobility Type Title
-
-
-
-
- Custom
-
-
-
-
- Line values in GEDCOM can either be a pointer to another record, or the data itself.
-
-
-
-
- No line value
-
-
-
-
- Line value is a pointer to another record
-
-
-
-
- Line value is the actual data
-
-
-
-
- GEDCOM Record Types.
-
-
-
-
- Generic Record
-
-
-
-
- Family
-
-
-
-
- Individual
-
-
-
-
- Multimedia
-
-
-
-
- Note
-
-
-
-
- Repository
-
-
-
-
- Source
-
-
-
-
- Submitter
-
-
-
-
- Submission
-
-
-
-
- Event
-
-
-
-
- Family Event
-
-
-
-
- Place
-
-
-
-
- Source Citation
-
-
-
-
- Latter Day Saints Spouse Sealing record for a married couple.
-
-
-
-
- Family Link
-
-
-
-
- Association
-
-
-
-
- Name
-
-
-
-
- Individual Event
-
-
-
-
- Date
-
-
-
-
- Repository Citation
-
-
-
-
- Custom Record
-
-
-
-
- Header
-
-
-
-
- GEDCOM Restriction Types.
-
-
- Signifies that access to information has been denied or otherwise restricted.
-
-
-
-
- None
-
-
-
-
- Confidential
-
-
-
-
- Locked
-
-
-
-
- Privacy
-
-
-
-
- The gender / sex of an individual.
-
-
-
- The sex of the individual has not been set yet and is equivalent to null.
-
-
- Undetermined from available records and not quite sure what the sex is.///
-
-
- The individual is male.
-
-
- The individual is female.
-
-
- The individual is both male and female.
-
-
- The individual is neuter.
-
-
-
- Defines the parse states for GEDCOM file.
-
-
-
-
- Reading the current level
-
-
-
-
- Reading the current ID
-
-
-
-
- Reading the current tag name
-
-
-
-
- Reading the value for the current tag
-
-
-
-
- Marriage Start Status.
-
-
-
-
- Single
-
-
-
-
- Private
-
-
-
-
- Partners
-
-
-
-
- Other
-
-
-
-
- Unknown
-
-
-
-
- Informational, warnings and error codes for the import.
- Codes;
- 001 - 100 - Informational
- 101 - 200 - Warnings
- 201 - 300 - Errors.
-
-
-
- So that we don't accidentally default to the first id if not initialised, we use unknown.
-
-
- We only received a year as input which is ambiguous. Interpreted as a range, the original date was kept.
-
-
- We only received a year and date as input which is ambiguous. Interpreted as a range, the original date was kept.
-
-
- Parsing a date led to an invalid day of the month which was adjusted.
-
-
- The date could not be turned into a valid date time.
-
-
-
- Severity of the messages logged during import.
-
-
-
- So that we don't accidentally default to the first id if not initialised, we use unknown.
-
-
- The user can view these, but they should not need to.
-
-
- The user needs to know something and / or make a decision.
-
-
- We couldn't automatically import something, the user needs to intervene.
-
-
-
- Indicates the child-to-family relationship for pedigree navigation purposes.
-
-
-
-
- Unknown
-
-
-
-
- Adopted
-
-
-
-
- Biological
-
-
-
-
- Foster
-
-
-
-
- Sealing
-
-
-
-
- Father Adopted
-
-
-
-
- Mother Adopted
-
-
-
-
- Source Media Type.
-
-
-
-
- None
-
-
-
-
- Audio
-
-
-
-
- Book
-
-
-
-
- Card
-
-
-
-
- Electronic
-
-
-
-
- Fiche
-
-
-
-
- Film
-
-
-
-
- Magazine
-
-
-
-
- Manuscript
-
-
-
-
- Map
-
-
-
-
- Newspaper
-
-
-
-
- Photo
-
-
-
-
- Tombstone
-
-
-
-
- Video
-
-
-
-
- Civil Registry
-
-
-
-
- Family Archive CD
-
-
-
-
- Microfilm
-
-
-
-
- Census
-
-
-
-
- Letter
-
-
-
-
- Official Document
-
-
-
-
- Microfiche
-
-
-
-
- Other
-
-
-
-
- Status of a spouse sealing at a specific date.
-
-
-
-
- Status not set, record should not be output to GEDCOM file.
-
-
-
-
- Canceled and considered invalid.
-
-
-
-
- Completed but the date is not known.
-
-
-
-
- Patron excluded this ordinance from being cleared in this submission.
-
-
-
-
- This ordinance is not authorized.
-
-
-
-
- This ordinance is not authorized, previous sealing cancelled.
-
-
-
-
- Ordinance is likely completed, another ordinance for this person was converted
- from temple records of work completed before 1970, therefore this ordinance is
- assumed to be complete until all records are converted.
-
-
-
-
- Ordinance was previously submitted.
-
-
-
-
- Data for clearing ordinance request was insufficient.
-
-
-
-
- Stores details of an address.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets a complete address as a single line.
-
-
-
-
- Gets or sets the first line in an address.
-
-
-
-
- Gets or sets the second line in an address.
-
-
-
-
- Gets or sets the third line in an address.
-
-
-
-
- Gets or sets the date the address was changed.
-
-
-
-
- Gets or sets the city for the address.
-
-
-
-
- Gets or sets the country the address is in.
-
-
-
-
- Gets or sets the database the address is in.
-
-
-
-
- Gets or sets the main email address.
-
-
-
-
- Gets or sets the secondary email address.
-
-
-
-
- Gets or sets the tertiary email address.
-
-
-
-
- Gets or sets the main fax number.
-
-
-
-
- Gets or sets the secondary fax number.
-
-
-
-
- Gets or sets the tertiary fax number.
-
-
-
-
- Gets or sets the main phone number.
-
-
-
-
- Gets or sets secondary phone number.
-
-
-
-
- Gets or sets the tertiary phone number.
-
-
-
-
- Gets or sets the PostCode / zip code for the address.
-
-
-
-
- Gets or sets the state or county for the address.
-
-
-
-
- Gets or sets the main website URI.
-
-
-
-
- Gets or sets the secondary website URI.
-
-
-
-
- Gets or sets the tertiary website URI.
-
-
-
-
- Compares the current and passed-in address to see if they are the same.
-
- The address to compare the current instance against.
-
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
-
- Compares the current and passed-in address to see if they are the same.
-
- The object to compare the current instance against.
-
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
-
- Compares the current and passed-in address to see if they are the same.
-
- The address to compare the current instance against.
-
- True if they match, False otherwise.
-
-
-
-
- Compares the current and passed-in address to see if they are the same.
-
- The address to compare the current instance against.
-
- true if the specified is equal to this instance; otherwise, false .
-
-
-
-
-
-
-
- Add the GEDCOM 6 XML elements for the data in this object as child
- nodes of the given root.
-
-
- A .
-
-
-
-
- Get the GEDCOM 5.5 lines for the data in this object.
- Lines start at the given level.
-
-
- A .
-
-
- A .
-
-
-
-
- Used for holding the age of an individual for a given event,
- this is an object rather than it just being a straight forward
- number to allow for vague values to be given, e.g. < 10.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the date on which the age of an individual changed.
-
-
-
-
- Gets or sets.
-
- TODO: Docs
-
-
-
- Gets a value indicating whether the individual is considered stillborn.
-
-
-
-
- Gets a value indicating whether the individual is considered an infant.
-
-
-
-
- Gets a value indicating whether the individual is considered a child.
-
-
-
-
- Gets or sets the year portion of the individual's age.
-
-
-
-
- Gets or sets the month portion of the individual's age.
-
-
-
-
- Gets or sets the day portion of the individual's age.
-
-
-
-
- Parses a string for a GEDCOM format date.
-
- The string to parse.
- The database to associate the result of the parsing with.
- The parsed age or a null if the date is not recognised.
-
-
-
- Output GEDCOM formatted text representing the age.
-
- The writer to output to.
- The GEDCOM level.
-
-
-
- Called after one of the date elements for this instance is changed.
-
-
-
-
- How the given individual is associated to another.
- Each GedcomIndividal contains a list of these.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the record type for an association.
-
-
-
-
- Gets the GEDCOM tag for an association.
-
-
-
-
- Gets or sets the description for this association.
-
-
-
-
- Gets or sets the individual for this association.
-
-
-
-
- Outputs a GEDCOM format version of this instance.
-
- The writer to output to.
-
-
-
- Compare the user-entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
-
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
-
- Compares the current and passed-in association to see if they are the same.
-
- The association to compare the current instance against.
-
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
-
- Compares the current and passed-in association to see if they are the same.
-
- The association to compare the current instance against.
-
- True if they match, False otherwise.
-
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
- True if they match, False otherwise.
-
-
-
-
-
-
- The date on which a GEDCOM record was changed.
-
-
-
-
- Initializes a new instance of the class.
-
- The GEDCOM database to associate this date with.
-
-
-
-
-
-
- GEDCOM allows for custom tags to be added by applications.
- This is essentially a dummy object.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
-
-
-
-
-
-
- Gets or sets the tag associated with this custom record.
-
-
-
-
- Placeholder for GEDCOM output code, does not actually output any data.
-
- The writer to output to.
-
-
-
- The database for all the GEDCOM records.
- This is currently just in memory. To implement a "real"
- database you should derive from this class and override
- the necessary methods / properties.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the header for a GEDCOM file.
-
-
-
-
- Gets or sets hashtable of all top level GEDCOM records, key is the XRef.
- Top level records are Individuals, Families, Sources, Repositories, and Media.
-
-
-
-
- Gets total number of top level GEDCOM records in the database.
- Top level records are Individuals, Families, Sources, Repositories, and Media.
-
-
-
-
- Gets the current GedcomRecord when enumerating the database.
-
-
-
-
- Gets a list of all the Individuals in the database.
-
-
-
-
- Gets a list of all the Families in the database.
-
-
-
-
- Gets a list of all the sources in the database.
-
-
-
-
- Gets a list of all the repositories in the database.
-
-
-
-
- Gets a list of all the media items in the database.
-
-
-
-
- Gets a list of all the notes in the database.
-
-
-
-
- Gets a list of all the submitters in the database.
-
-
-
-
- Gets or sets the name of the database, this is currently the full filename
- of the GEDCOM file the database was read from / saved to,
- but could equally be a connection string for a real backend database.
-
-
-
-
- Gets all the names used in the database, used primarily to save
- memory by storing names only once.
-
-
-
-
- Gets all the place names used in the database, used primarily to save
- memory by storing names only once.
-
-
-
-
- Gets or sets utility property providing all the surnames in the database, along with
- a count of how many people have that surname.
-
-
-
-
- Gets or sets a value indicating whether the database is being loaded.
-
-
-
-
- Gets or sets the GedcomRecord associated with the given XRef.
-
- TODO: Doc.
-
-
-
- Determines whether the specified , is equal (in contents, not structure) to this instance.
-
- The to compare with this instance.
-
- true if the specified is equal to this instance; otherwise, false .
-
-
-
-
-
-
-
-
-
-
- Add the given record to the database with the given XRef.
-
-
- A .
-
-
- A .
-
-
-
-
- Builds up the surname list for use with the Surnames property.
-
-
-
-
- Remove the given record with the given XRef from the database.
-
-
- A .
-
-
- A .
-
-
-
-
- Does the database contain a record with the given XRef.
-
-
- A .
-
-
- A .
-
-
-
-
- Advances the enumerator to the next element of the collection.
-
-
- True if the enumerator was successfully advanced to the next element;
- False if the enumerator has passed the end of the collection.
-
-
-
-
- Sets the enumerator to its initial position, which is before the first element in the collection.
-
-
-
-
- TODO: Doc.
-
- TODO: Doc 2.
-
-
-
- Create a new XRef.
-
-
- A .
-
-
- A TODO: Doc.
-
-
-
-
- Combines the given database with this one.
- This is literally what it says, no duplicate removal is performed
- combine will not take place if there are duplicate xrefs.
-
-
- A .
-
-
- A .
-
-
-
-
- Add the given individual to the surnames list.
-
-
- A .
-
-
-
-
- Defines a date, allowing partial dates, date ranges etc.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate the date with.
-
-
-
-
-
-
-
-
-
- Gets or sets the calendar type.
-
-
-
-
- Gets or sets the date period.
-
-
-
-
- Gets or sets the time.
-
-
-
-
- Gets or sets the date, or the first date in a date range.
-
-
-
-
- Gets the DateTime, or the first DateTime in a date range.
-
-
-
-
- Gets or sets the second date in a date range.
-
-
-
-
- Gets the second DateTime in a date range.
-
-
-
-
- Gets.
-
- TODO: Doc
- TODO: cache this value, clear cache when _DatePeriod / _Date1 / _Date2 / _Time change
-
-
-
- Gets a text representation of the date period and date.
- TODO: Seems wrongly named, returns original value as well as period.
-
-
-
-
- Compare two dates to see if first is greater than the second.
-
- First date to compare.
- Second date to compare.
- bool.
-
-
-
- Compare two dates to see if first is less than the second.
-
- First date to compare.
- Second date to compare.
- bool.
-
-
-
- Compare two dates to see if they are not equal.
-
- First date to compare.
- Second date to compare.
- bool.
-
-
-
- Compare two dates to see if they are equal.
-
- First date to compare.
- Second date to compare.
- bool.
-
-
-
- Compare two GEDCOM format dates.
-
- First date to compare.
- Second date to compare.
- 0 if equal, -1 if datea less than dateb, else 1.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Determines whether the specified , is equal to this instance.
-
- The to compare with this instance.
-
- true if the specified is equal to this instance; otherwise, false .
-
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed-in date to see if they are the same.
-
- The date to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed-in date to see if they are the same.
-
- The date to compare the current instance against.
- True if they match, False otherwise.
-
-
-
-
-
-
- Returns a percentage based score on how similar the passed record is to the current instance.
-
- The date to compare this instance against.
- A score from 0 to 100 representing the percentage match.
-
-
-
- Extracts the date period from raw text and attempts to guess if the date period is not present.
-
- The data string.
- A object with the period and the text removed from the input string.
-
-
-
- Parse passed date into instance properties.
-
- The date to parse as a text string.
-
-
-
- Output GEDCOM format for this instance.
-
- Where to output the data to.
-
-
-
- Compare two possibly null dates.
-
- First date to compare.
- Second date to compare.
- 0 if dates match, -1 if dateaDate is less than datebDate, otherwise 1.
-
-
-
- Fuzzy matching of dates. TODO: Unit test coverage, no idea how well this works.
-
- First date to compare.
- Second date to compare.
- Returns a float rather than an int to allow for some fuzziness
- e.g. 10-11-2000 is 10 NOV 2000 or 11 OCT 2000.
-
-
-
-
- Split a date string into parts.
-
- The date to split.
- Array of strings representing parts of a date.
-
-
-
- Get DateTime information from an array representing parts of a date.
-
- The parts of a valid date.
- The first element in the array that contains a valid date part.
- The number of elements in the array that contain valid date parts.
- The calendar for the given date.
- The original date string, used for feedback to the user if the date cannot be parsed.
- Return a DateTime if the passed-in values could be parsed into a valid DateTime; otherwise null.
-
-
- The result of parsing and extracting a date period from a string.
-
-
- Gets or sets the string that shows the parsed data with the date period extracted.
-
-
- Gets or sets the date period that has been parsed from the raw text.
-
-
-
- Maps a date / date range indicator from the GEDCOM file to it's enum.
-
-
-
- Gets or sets the date period that this element maps to.
-
-
- Gets or sets the text that is searched for in the GEDCOM date line.
-
-
- Gets or sets the position of the text that is searched for.
-
-
-
- Defines a generic event or fact.
-
-
-
-
- The GEDCOM event type.
-
-
-
-
- The classification.
-
-
-
-
- The certainty.
-
-
-
-
- The record.
-
-
-
-
- Used for Gedcom 6 XML output.
-
-
-
-
- The event name.
-
-
-
-
- The date.
-
-
-
-
- The place.
-
-
-
-
- The address.
-
-
-
-
- The responsible agency.
-
-
-
-
- The religious affiliation.
-
-
-
-
- The cause.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the gedcom tag.
-
-
- The gedcom tag.
-
-
-
-
- Gets or sets the type of the event.
-
-
- The type of the event.
-
-
-
-
- Gets or sets the name of the event.
-
-
- The name of the event.
-
-
-
-
- Gets or sets the classification.
-
-
- The classification.
-
-
-
-
- Gets or sets the date.
-
-
- The date.
-
-
-
-
- Gets or sets the place.
-
-
- The place.
-
-
-
-
- Gets or sets the address.
-
-
- The address.
-
-
-
-
- Gets or sets the responsible agency.
-
-
- The responsible agency.
-
-
-
-
- Gets or sets the religious affiliation.
-
-
- The religious affiliation.
-
-
-
-
- Gets or sets the cause.
-
-
- The cause.
-
-
-
-
- Gets or sets the certainty.
-
-
- The certainty.
-
-
-
-
- Gets or sets the event x reference identifier.
-
-
- The event x reference identifier.
-
-
-
-
- Gets or sets the record.
-
-
- The record.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Get the user-friendly textual description for a GedcomEventType.
-
- A GEDCOM event type.
-
- The textual description for a given GedcomEventType.
-
-
-
-
- Get the tag for a GedcomEventType.
-
- A GEDCOM event type.
-
- The tag for a given GedcomEventType.
-
-
-
-
- Attempts to determine a standard event type from a textual
- description. Always returns GenericEvent if one can't be found
- even though where the string came from maybe a FACT.
-
- The type name as a string.
-
- A GedcomEventType matching the textual description, or GenericEvent if no match was found.
-
-
-
-
- Deletes this instance.
-
-
-
-
- Compares two events to see if the date and place are the same.
-
- The event instance to compare against.
- Relative position in the sort order.
-
-
-
- Compares two events to see if the date and place are the same.
-
- The event instance to compare against.
- Relative position in the sort order.
-
-
-
- Returns a percentage based score on how similar the passed record is to the current instance.
-
- The event to compare against this instance.
- A score from 0 to 100 representing the percentage match.
-
-
-
- Generates the XML.
-
- The root.
-
-
-
- Outputs the specified sw.
-
- The sw.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomEvent to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- An event relating to a given family.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets or sets the husband age.
-
-
- The husband age.
-
-
-
-
- Gets or sets the wife age.
-
-
- The wife age.
-
-
-
-
- Gets or sets the family record.
-
-
- The family record.
-
- Must set a GedcomFamilyRecord on a GedcomFamilyEvent.
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Output GEDCOM format for this family event.
-
- Where to output the data to.
-
-
-
-
-
-
- How an individal is linked to a family.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets or sets the family.
-
-
- The family.
-
-
-
-
- Gets or sets the individual being linked in this family record.
-
-
-
-
- Gets or sets the pedigree.
-
-
- The pedigree.
-
-
-
-
- Gets or sets the father pedigree.
-
-
- The father pedigree.
-
-
-
-
- Gets or sets the mother pedigree.
-
-
- The mother pedigree.
-
-
-
-
- Gets or sets the status.
-
-
- The status.
-
-
-
-
- Gets or sets a value indicating whether [prefered spouse].
-
-
- true if [prefered spouse]; otherwise, false .
-
-
-
-
- Compares the current and passed family link to see if they are the same.
-
- The object to compare the current instance against.
- True if they match, False otherwise.
-
-
-
- Compares the current and passed family link to see if they are the same.
-
- The family link to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed family link to see if they are the same.
-
- The object to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed family link to see if they are the same.
-
- The GedcomFamilyLink to compare the current instance against.
- True if they match, False otherwise.
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
- True if they match, False otherwise.
-
-
-
-
-
-
- Defines a family, consisting of husband/wife and children, and
- family events.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
- The first individual.
- The second individual.
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the gedcom tag for a family record.
-
-
- The gedcom tag for a family record.
-
-
-
-
- Gets the family events.
-
-
- The family events.
-
-
-
-
- Gets or sets the husband.
-
-
- The husband.
-
-
-
-
- Gets or sets the wife.
-
-
- The wife.
-
-
-
-
- Gets the children.
-
-
- The children.
-
-
-
-
- Gets or sets the number of children.
-
-
- The number of children.
-
-
-
-
- Gets the submitter records.
-
-
- The submitter records.
-
-
-
-
- Gets the marriage.
-
-
- The marriage.
-
-
-
-
- Gets or sets the start status.
-
-
- The start status.
-
-
-
-
- Gets or sets the spousal sealing record for this family or null if one does not exist.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Deletes this instance.
-
-
-
-
- Add a new family event for a given event type.
-
- The event type.
-
- The new family event based on the given event type.
-
-
-
-
- Add a child.
-
- The child.
-
- Returns True if a new child record is added; otherwise False.
-
-
-
-
- Add a new child.
-
-
- The child's record.
-
-
-
-
- Remove a child.
-
- The child.
-
-
-
- Changes the husband.
-
- The husband.
-
-
-
- Changes the wife.
-
- The wife.
-
-
-
- Removes the husband.
-
- The husband.
-
-
-
- Removes the wife.
-
- The wife.
-
-
-
- Clears the linkage types.
-
-
-
-
- Sets the type of the linkage.
-
- The child xref identifier.
- The pedigree linkage type.
-
-
-
- Sets the type of the linkage.
-
- The child xref identifier.
- The pedigree linkage type.
- The adoption type.
-
-
-
- Gets the type of the husband linkage.
-
- The child xref identifier.
-
- Pedigree linkage type for husband.
-
-
-
-
- Gets the type of the wife linkage.
-
- The child xref identifier.
-
- Pedigree linkage type for wife.
-
-
-
-
- Gets the type of the linkage.
-
- The child xref identifier.
-
- Pedigree linkage type.
-
-
-
-
- Generates the XML.
-
- The root node.
-
-
-
- Output GEDCOM format for this instance.
-
- Where to output the data to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomFamilyRecord to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
- True if they match, False otherwise.
-
-
-
-
-
-
- Compares two objects for equality.
-
-
-
-
- Compares two records to see if they are equal.
- Safely handles one or both being null.
- The records must implement IComparable.
-
- A type that implements IComparable.
- The first record.
- The second record.
-
- Returns an integer that indicates their relative position in the sort order.
-
-
-
-
- Compares two records to see if they are equal.
- Safely handles one or both being null.
- The records must implement IComparable.
-
- A type that implements IComparable.
- The first record.
- The second record.
-
- Returns an integer that indicates their relative position in the sort order.
-
-
-
-
- Compares two lists of objects that inherit from GedcomRecord for equality.
-
-
-
-
- Compares two lists of records to see if they are equal.
- Uses the automated record id from the base class for sorting.
-
- A class that inherits from and implements Equals/GetHashCode.
- The first list of records.
- The second list of records.
-
- True if they match, otherwise false.
-
-
-
-
- Compares two lists to see if they are equal.
- Relies on the sorting of the generic type used.
-
- Any old object that can be compared.
- The first list of records.
- The second list of records.
-
- True if they match, otherwise false.
-
-
-
-
- Compares two lists of records to see if they are equal.
- The records must implement IComparable and inherit from GedcomRecord.
-
- A type that inherits from GedcomRecord and implements IComparable.
- The first list of records.
- The second list of records.
-
- Returns an integer that indicates their relative position in the sort order.
-
-
-
-
- Compares two lists of records to see if they are equal.
- The records must implement IComparable.
-
- A type that implements IComparable.
- The first list of records.
- The second list of records.
-
- Returns an integer that indicates their relative position in the sort order.
-
-
-
-
- The header from / for a GEDCOM file.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the database.
-
-
- The database.
-
- Database can only have one header.
-
-
-
- Gets or sets the name of the application.
-
-
- The name of the application.
-
-
-
-
- Gets or sets the application version.
-
-
- The application version.
-
-
-
-
- Gets or sets the application system identifier.
-
-
- The application system identifier.
-
-
-
-
- Gets or sets the corporation.
-
-
- The corporation.
-
-
-
-
- Gets or sets the corporation address.
-
-
- The corporation address.
-
-
-
-
- Gets or sets the content description.
-
-
- The content description.
-
-
-
-
- Gets or sets the submitter x reference identifier.
-
-
- The submitter x reference identifier.
-
-
-
-
- Gets or sets the submitter.
-
-
- The submitter.
-
-
-
-
- Gets or sets the transmission date.
-
-
- The transmission date.
-
-
-
-
- Gets or sets the copyright.
-
-
- The copyright.
-
-
-
-
- Gets or sets the language.
-
-
- The language.
-
-
-
-
- Gets or sets the filename.
-
-
- The filename.
-
-
-
-
- Gets or sets the name of the source.
-
-
- The name of the source.
-
-
-
-
- Gets or sets the source date.
-
-
- The source date.
-
-
-
-
- Gets or sets the source copyright.
-
-
- The source copyright.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Output GEDCOM format for this instance.
-
- Where to output the data to.
-
-
-
- Checks if the passed header is equal in terms of user content to the current instance.
- If new fields are added to the header they should also be added in here for comparison.
-
- The object to compare against this instance.
- Returns true if headers match in user entered content, otherwise false.
-
-
-
- Checks if the passed header is equal in terms of user content to the current instance.
- If new fields are added to the header they should also be added in here for comparison.
-
- The GedcomHeader to compare against this instance.
- Returns true if headers match in user entered content, otherwise false.
-
-
-
-
-
-
- An event relating to a given individual.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets or sets the age.
-
-
- The age.
-
-
-
-
- Gets or sets the family in which an individual appears as a child.
-
-
-
-
- Gets or sets the adoption type.
-
-
-
-
- Gets or sets the individual's record.
-
- Must set a GedcomIndividualRecord on a GedcomIndividualEvent.
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Output GEDCOM format for this instance.
-
- Where to output the data to.
-
-
-
- Details about a given individual.
-
-
-
-
- The ancestral file number.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
- The surname.
-
-
- Gets or sets the list of entries found when parsing an individual.
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for an individual.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets the individual's names.
-
-
- The names of the individual.
-
-
-
-
- Gets a single letter representing the individual's gender.
-
-
- The gender character.
-
-
-
-
- Gets or sets the sex.
-
-
- The sex.
-
-
-
-
- Gets the events.
-
-
- The events.
-
-
-
-
- Gets the list of events.
-
-
- The list of events.
-
-
-
-
- Gets the child in.
-
-
- The child in.
-
-
-
-
- Gets the spouse in.
-
-
- The spouse in.
-
-
-
-
- Gets the submitter records.
-
-
- The submitter records.
-
-
-
-
- Gets this individual's associations to others.
-
-
- The associations.
-
-
-
-
- Gets the list of aliases.
-
-
- The list of aliases.
-
-
-
-
- Gets the anci.
-
-
- The anci.
-
-
-
-
- Gets the desi.
-
-
- The desi.
-
-
-
-
- Gets or sets the permanent record file number.
-
-
- The permanent record file number.
-
-
-
-
- Gets or sets the ancestral file number.
-
-
- The ancestral file number.
-
-
-
-
- Gets or sets the address.
- This is a hack, not according to the spec, but Family Tree Maker sticks
- an address under an individual.
- GedcomRecordReader will build the address up here, then create a RESI record from it.
-
-
- The address.
-
-
-
-
- Gets the birth.
-
-
- The birth.
-
-
-
-
- Gets the death.
-
-
- The death.
-
-
-
-
- Gets the height.
-
-
- The height.
-
-
-
-
- Gets the weight.
-
-
- The weight.
-
-
-
-
- Gets the medical event.
-
-
- The medical event.
-
-
-
-
- Gets a value indicating whether this is dead.
-
-
- true if dead; otherwise, false .
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
-
-
-
- Compares the current and passed individual to see if they are the same.
- Compares using user submitted data, not the internal ids which may change.
-
- The object to compare the current individual instance against.
- True if they match, false otherwise.
-
-
-
- Compares the current and passed individual to see if they are the same.
- Compares using user submitted data, not the internal ids which may change.
-
- The individual to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current individual against the passed individual to see if they are
- essentially the same. Compares the content, not the structure.
- For example, names are compared but internal xref ids are not.
-
- The second person to compare against.
- TODO: Doc.
-
-
-
- Compares the current and passed individual to see if they are the same.
- Compares using user submitted data, not the internal ids which may change.
-
- The other individual to compare the current individual against.
- True if they match, false otherwise.
-
-
-
- Deletes this instance.
-
-
-
-
- Gets the preferred name (if set) or the first name if no preferred name is set.
-
- A GedcomName or null if no names found.
-
-
-
- Sets the name of the prefered.
-
- The name.
-
-
-
- Determine whether a spouse is in the family.
-
- The family.
-
- True if spouse is in the family; otherwise False.
-
-
-
-
- Determine whether a spouse is in the family.
-
- The family.
- The family link.
-
- True if spouse is in the family; otherwise False.
-
-
-
-
- Determine whether a child is in the family.
-
- The family.
-
- True if child is in the family; otherwise False.
-
-
-
-
- Determines whether a child is in the family.
-
- The family.
- The fam link.
-
- True if child is in the family; otherwise False.
-
-
-
-
- Gets the family.
-
-
- Family.
-
-
-
-
- Sets the preferred spouse.
-
- The xref identifier.
-
-
-
- Finds the event.
-
- Type of the event.
-
- The event if found; otherwise null.
-
-
-
-
- Matches the surname.
-
- The prefix.
- if set to true [soundex].
-
- True if the surname starts with prefix; otherwise False.
-
-
-
-
- Matches the firstname.
-
- The prefix.
- if set to true [soundex].
-
- True if the firstname starts with prefix; otherwise False.
-
-
-
-
- Determines whether the passed individual is a match for the current instance
- based on key user entered data.
-
- The individual to compare this instance against.
- A score from 0 to 100 representing the percentage match.
-
-
-
- Gets a "fake" family record that contains all of this individual's children.
- The record will only contain children.
-
-
- A .
-
-
-
-
- Outputs this instance of an individual as a GEDCOM record.
-
- The textwriter to output to.
-
-
-
- A multimedia file.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the database.
-
-
- The database.
-
-
-
-
- Gets or sets the filename.
-
-
- The filename.
-
-
-
-
- Gets or sets the format.
-
-
- The format.
-
-
-
-
- Gets or sets the type of the source media.
-
-
- The type of the source media.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Compares an object to this GedcomMultimediaFile to determine sort order.
-
- The object to compare to the current instance.
- Returns a value determine the sort order of the compared objects.
-
-
-
- Compares two GedcomMultimediaFile instances to determine sort order.
-
- The GedcomMultimediaFile to compare to the current instance.
- Returns a value determine the sort order of the compared GedcomMultimediaFile objects.
-
-
-
- Compares two instances of GedcomMultimediaFile to determine equality.
-
- The GedcomMultimediaFile to compare to the current instance.
- True if equal, otherwise False.
-
-
-
- Compares an object to this GedcomMultimediaFile to determine equality.
-
- The object to compare to the current instance.
- True if equal, otherwise False.
-
-
-
-
-
-
- Updates the change date and time.
-
-
-
-
- A multimedia record, this can consist of any number of files
- of varying types.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a multimedia record.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets the multimedia files.
-
-
- The multimedia files.
-
-
-
-
- Gets or sets the title.
-
-
- The title.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Compares the two passed records by title.
-
- The first multimedia record.
- The second multimedia record.
-
- <0 if the first record's title precedes the second in the sort order;
- >0 if the second record's title precedes the first;
- 0 if the titles are equal.
-
-
-
-
- Adds the multimedia file.
-
- The filename.
-
-
-
- Outputs this instance as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomMultimediaRecord to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
-
-
-
- A name for a given individual, allowing different variations to be
- stored.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the name.
-
-
- The name.
-
-
-
-
- Gets or sets the type.
-
-
- The type.
-
-
-
-
- Gets the phonetic variations.
-
-
- The phonetic variations.
-
-
-
-
- Gets the romanized variations.
-
-
- The romanized variations.
-
-
-
-
- Gets or sets the surname.
-
-
- The surname.
-
-
-
-
- Gets the surname soundex.
-
-
- The surname soundex.
-
-
-
-
- Gets the firstname soundex.
-
-
- The firstname soundex.
-
-
-
-
- Gets or sets the prefix.
-
-
- The prefix.
-
-
-
-
- Gets or sets the given.
-
-
- The given.
-
-
-
-
- Gets or sets the surname prefix.
-
-
- The surname prefix.
-
-
-
-
- Gets or sets the suffix.
-
-
- The suffix.
-
-
-
-
- Gets or sets the nick.
-
-
- The nick.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Gets or sets a value indicating whether this is the individuals preferred name.
-
-
- true if [preferred name]; otherwise, false .
-
-
-
-
- Compares two GedcomName instances by using the full name.
-
- The name to compare against this instance.
- An integer specifying the relative sort order.
-
-
-
- Compares two GedcomName instances by using the full name.
-
- The name to compare against this instance.
- An integer specifying the relative sort order.
-
-
-
- Compare the user-entered data against the passed instance for similarity.
-
- The GedcomName to compare this instance against.
-
- True if instance matches user data, otherwise False.
-
-
-
-
- Compare the user-entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise False.
-
-
-
-
- Returns a percentage based score on how similar the passed record is to the current instance.
-
- The event to compare against this instance.
- A score from 0 to 100 representing the percentage match.
-
-
-
- Outputs this instance as a GEDCOM record.
-
- The writer to output to.
-
-
-
- GEDCOM Note Record.
-
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
-
-
-
- Gets or sets the parsed text. HACK.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a note record.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the text.
-
-
- The text.
-
-
-
-
- Generates the XML.
-
- The root node.
-
-
-
- Outputs this instance as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomNoteRecord to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- A message generated by the GEDCOM file parsing process to provide feedback to the user on warnings, errors and information.
-
-
-
-
- Initializes a new instance of the class.
-
- The message identifier, from the master list of enums.
- A bunch of context parameters that are relevant to this message id.
-
-
-
- Gets the additional data that was logged with the message for context.
-
-
-
-
- Gets or sets the message id uniquely identifying where this message was generated from in code.
-
-
-
-
- Gets the severity of the message. This is fixed here for now as it is very simple.
-
-
-
-
- Represents a place or location.
-
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a place.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the name.
-
-
- The name.
-
-
-
-
- Gets or sets the form.
-
-
- The form.
-
-
-
-
- Gets the phonetic variations.
-
-
- The phonetic variations.
-
-
-
-
- Gets the romanized variations.
-
-
- The romanized variations.
-
-
-
-
- Gets or sets the latitude.
-
-
- The latitude.
-
-
-
-
- Gets or sets the longitude.
-
-
- The longitude.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Outputs this instance as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomPlace to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compares this place record to another record.
-
- A place record.
-
- <0 if the this record precedes the other in the sort order;
- >0 if the other record precedes this one;
- 0 if the records are equal.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomRepositoryRecord to compare this instance against.
-
- True if instance matches user data, otherwise False.
-
-
-
-
- GEDCOM Record.
-
-
-
-
- The level.
-
-
-
-
- The user reference number.
-
-
-
-
- The user reference type.
-
-
-
-
- The automated record identifier.
-
-
-
-
- The change date.
-
-
-
-
- The notes.
-
-
-
-
- The multimedia.
-
-
-
-
- The sources.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets a backpointer to know which database this record is in.
-
-
-
-
- Gets or sets the xref identifier.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the level.
-
-
- The level.
-
-
-
-
- Gets or sets the parsing level.
- When we are removing inline note records etc. the new
- record is set to level 0, this breaks the parsing mechanism,
- so we need to record the level the record used to occur on
- TODO: this is a bit of a hack as it adds parsing related code to non
- parsing data.
-
-
-
-
- Gets or sets the x reference identifier.
-
-
- The x reference identifier.
-
-
-
-
- Gets or sets the user reference number.
-
-
- The user reference number.
-
-
-
-
- Gets or sets the type of the user reference.
-
-
- The type of the user reference.
-
-
-
-
- Gets or sets the automated record identifier.
-
-
- The automated record identifier.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
- MISSING DATABASE: " + this.RecordType.ToString().
-
-
-
- Gets a list of cross references to notes for this record.
-
-
-
-
- Gets the multimedia.
-
-
- The multimedia.
-
-
-
-
- Gets the sources.
-
-
- The sources.
-
-
-
-
- Gets or sets the reference count.
-
-
- The reference count.
-
-
-
-
- Gets or sets the restriction notice.
-
-
- Not standard GEDCOM, but no reason not to put a restriction notice at this level.
-
-
- The restriction notice.
-
-
-
-
- Gets the list of informational, warning and error messages generated when parsing this record.
-
-
-
-
- Deletes this instance.
-
- Ref Count already 0.
-
-
-
- Generates the XML.
-
- The root node.
-
-
-
- Generates the note XML.
-
- The root node.
-
-
-
- Generates the citations XML.
-
- The record node.
-
-
-
- Generates the multimedia XML.
-
- The record node.
-
-
-
- Generates the change date XML.
-
- The record node.
-
-
-
- Outputs this instance as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Must be overridden in derived classes to compare the user entered data for that instance.
- Called from the method before it checks common
- data elements (notes, sources etc.).
- We use the word equivalent so that we avoid using the word equals. This is because we are
- checking user entered data only and as far as the end user cares, two records can be equivalent
- (matching) but they might be two different individuals / families etc.
-
- The object to compare this instance against.
- True if instance matches user data, otherwise False.
-
-
-
- Compares the inheriting instance user entered data against the passed GedcomRecord.
- If that matches, will then compare the common elements of the passed GedcomRecord
- against this instance (Source etc. which are common to all inheritors).
-
- The GedcomRecord to compare against.
- True if the core base properties match, otherwise False.
-
-
-
-
-
-
-
-
-
- Splits the text.
-
- The streamwriter.
- The line.
- The level.
-
-
-
- Adds a warning, information or error message for the user to review after parsing.
-
- The warning identifier.
- An array of additional data for context on the error.
-
-
-
- Update the GedcomChangeDate for this record.
-
- The sender.
- The instance containing the event data.
-
-
-
- Update the GedcomChangeDate for this record.
-
-
-
-
- Splits the text.
-
- The stream writer.
- The line.
-
-
-
- Outputs the standard.
-
- The writer.
-
-
-
- TODO: Doc.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the date that this record was changed.
-
-
- The date of the change.
-
-
-
-
- Gets or sets the database.
-
-
- The database.
-
-
-
-
- Gets or sets the types.
-
-
- The types.
-
-
-
-
- Gets or sets the date.
-
-
- The date.
-
-
-
-
- Gets or sets the place.
-
-
- The place.
-
-
-
-
- Compares this event to another record.
-
- A recorded event.
-
- <0 if the first event precedes the second in the sort order;
- >0 if the second event precedes the first;
- 0 if the events are equal.
-
-
-
-
- Compares this event to another record.
-
- A recorded event.
-
- <0 if the first event precedes the second in the sort order;
- >0 if the second event precedes the first;
- 0 if the events are equal.
-
-
-
-
- Compare the GedcomRecordedEvent against the passed instance for similarity.
-
- The other instance to compare this instance against.
-
- True if other instance matches this instance, otherwise False.
-
-
-
-
- Compare the GedcomRecordedEvent against the passed instance for similarity.
-
- The other instance to compare this instance against.
-
- True if other instance matches this instance, otherwise False.
-
-
-
-
-
-
-
- Updates the changed date and time.
-
-
-
-
- TODO: Doc + i think we might be able to use an ObservableList instead.
-
- TODO: Not sure what uses this yet.
-
-
-
-
-
-
-
- TODO: Doc.
-
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a repository citation.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the repository.
-
-
- The repository.
-
-
-
-
- Gets the call numbers.
-
-
- The call numbers.
-
-
-
-
- Gets the media types.
-
-
- The media types.
-
-
-
-
- Gets or sets the other media types.
-
-
- The other media types.
-
-
-
-
- Deletes this instance.
-
-
-
-
- Generates the XML.
-
- The root.
- The number.
-
-
-
- Outputs this repository citation as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
-
-
-
- An institution or person that has the specified item as part of their collection(s).
-
-
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a repository record.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the name.
-
-
- The name.
-
-
-
-
- Gets or sets the address.
-
-
- The address.
-
-
-
-
- Gets the citations.
-
-
- The citations.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Compares the names of the passed records.
-
- The first repository record.
- The second repository record.
-
- <0 if the first record's name precedes the second in the sort order;
- >0 if the second record's name precedes the first;
- 0 if the names are equal.
-
-
-
-
- Compares this repository record to another record.
-
- A repository record.
-
- <0 if this record precedes the other in the sort order;
- >0 if the other record precedes this one;
- 0 if the records are equal.
-
-
-
-
- Generates the XML.
-
- The root node.
-
-
-
- Outputs this repository record as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise False.
-
-
-
-
- Compares this repository record to another record.
-
- A repository record.
-
- <0 if this record precedes the other in the sort order;
- >0 if the other record precedes this one;
- 0 if the records are equal.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomRepositoryRecord to compare this instance against.
-
- True if instance matches user data, otherwise False.
-
-
-
-
- TODO: Doc.
-
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the parsed text. HACK.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a source citation.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the source.
-
-
- The source.
-
-
-
-
- Gets or sets the page.
-
-
- The page.
-
-
-
-
- Gets or sets the type of the event.
-
-
- The type of the event.
-
-
-
-
- Gets or sets the role.
-
-
- The role.
-
-
-
-
- Gets or sets the certainty.
-
-
- The certainty.
-
-
-
-
- Gets or sets the date.
-
-
- The date.
-
-
-
-
- Gets or sets the text.
-
-
- The text.
-
-
-
-
- Deletes this instance.
-
-
-
-
- Generates the XML.
-
- The root node.
-
-
-
- Outputs this source citation as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomSourceCitation to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compares another source citation to the current instance.
-
- A citation.
-
- <0 if this citation precedes the other in the sort order;
- >0 if the other citation precedes this one;
- 0 if the citations are equal.
-
-
-
-
- Compares another object to the current instance.
-
- A citation.
-
- <0 if this object precedes the other in the sort order;
- >0 if the other object precedes this one;
- 0 if the objects are equal.
-
-
-
-
-
-
-
- TODO: Doc.
-
-
-
-
-
-
- The events recorded.
-
-
-
-
- The agency.
-
-
-
-
- The data notes.
-
-
-
-
- The originator.
-
-
-
-
- The title.
-
-
-
-
- The filed by.
-
-
-
-
- The publication facts.
-
-
-
-
- The text.
-
-
-
-
- The repository citations.
-
-
-
-
- The citations.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
-
-
-
- Gets or sets the originator text. HACK.
-
-
-
-
- Gets or sets the title text.
-
-
-
-
- Gets or sets the publication text.
-
-
-
-
- Gets or sets the text text. TODO: What?.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a source record.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets the events recorded.
-
-
- The events recorded.
-
-
-
-
- Gets or sets the agency.
-
-
- The agency.
-
-
-
-
- Gets the data notes.
-
-
- The data notes.
-
-
-
-
- Gets or sets the originator.
-
-
- The originator.
-
-
-
-
- Gets or sets the title.
-
-
- The title.
-
-
-
-
- Gets or sets the filed by.
-
-
- The filed by.
-
-
-
-
- Gets or sets the publication facts.
-
-
- The publication facts.
-
-
-
-
- Gets or sets the text.
-
-
- The text.
-
-
-
-
- Gets the repository citations.
-
-
- The repository citations.
-
-
-
-
- Gets the citations.
-
-
- The citations.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Compares two source records by title.
-
- The first source record.
- The second source record.
-
- <0 if the first record's title precedes the second in the sort order;
- >0 if the second record's title precedes the first;
- 0 if the titles are equal.
-
-
-
-
- Compares this source record to another record.
-
- A source record.
-
- <0 if the first record precedes the second in the sort order;
- >0 if the second record precedes the first;
- 0 if the records are equal.
-
-
-
-
- Deletes this instance.
-
-
-
-
- Generates the XML.
-
- The root node.
-
-
-
- Outputs this source record as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compares this source record to another record.
-
- A source record.
-
- <0 if the first record precedes the second in the sort order;
- >0 if the second record precedes the first;
- 0 if the records are equal.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomSourceRecord to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomSourceRecord to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
-
-
-
- Details the spouse sealing event which can occur between a husband and wife.
- Sealing is a ritual performed by Latter Day Saint temples to seal familial relationships and
- the promise of family relationships throughout eternity.
-
-
-
-
- The date that this sealing occurred on.
-
-
-
-
- The description for this sealing event.
-
-
-
-
- The place at which this sealing occurred.
-
-
-
-
- The status of this sealing.
-
-
-
-
- The date that the status was last changed.
-
-
-
-
- The temple code.
-
-
-
-
- Gets or sets the date that this sealing occurred on.
-
-
-
-
- Gets or sets the description for this sealing event.
-
-
-
-
- Gets or sets the place that this sealing occurred at.
-
-
-
-
- Gets or sets the status of this sealing at a point in time.
-
-
-
-
- Gets or sets the date that the status was last changed.
-
-
-
-
- Gets or sets the temple code.
-
-
-
-
- Gets the type of the record.
-
-
-
-
- Gets the GEDCOM tag for a spouse sealing record.
-
-
-
-
- Compare two GEDCOM spouse sealing records.
-
- First record to compare.
- Second record to compare.
- 0 if equal, -1 if recorda less than recordb, else 1.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Determines whether the specified , is equal to this instance.
-
- The to compare with this instance.
-
- true if the specified is equal to this instance; otherwise, false .
-
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed-in sealing record to see if they are the same.
-
- The sealing record to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed-in sealing record to see if they are the same.
-
- The sealing record to compare the current instance against.
- True if they match, False otherwise.
-
-
-
-
-
-
- Outputs this instance as a GEDCOM record.
-
- The writer to output to.
-
-
-
- TODO: Doc.
-
-
-
-
-
- The submitter.
-
-
-
-
- The family file.
-
-
-
-
- The temple code.
-
-
-
-
- The generations of ancestors.
-
-
-
-
- The generations of decendants.
-
-
-
-
- The ordinance process flag.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a submission record.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the submitter.
-
-
- The submitter.
-
-
-
-
- Gets or sets the family file.
-
-
- The family file.
-
-
-
-
- Gets or sets the temple code.
-
-
- The temple code.
-
-
-
-
- Gets or sets the generations of ancestors.
-
-
- The generations of ancestors.
-
-
-
-
- Gets or sets the generations of decendants.
-
-
- The generations of decendants.
-
-
-
-
- Gets or sets a value indicating whether [ordinance process flag].
-
-
- true if [ordinance process flag]; otherwise, false .
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomSubmissionRecord to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- An individual or organization who contributes genealogical data to a file or transfers it to someone else.
-
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The database to associate with this record.
-
-
-
- Gets the type of the record.
-
-
- The type of the record.
-
-
-
-
- Gets the GEDCOM tag for a submitter record.
-
-
- The GEDCOM tag.
-
-
-
-
- Gets or sets the name.
-
-
- The name.
-
-
-
-
- Gets or sets the address.
-
-
- The address.
-
-
-
-
- Gets or sets the language preferences.
-
-
- The language preferences.
-
-
-
-
- Gets or sets the registered RFN.
-
-
- The registered RFN.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Outputs this submitter record as a GEDCOM record.
-
- The writer to output to.
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The object to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Compare the user entered data against the passed instance for similarity.
-
- The GedcomSubmitterRecord to compare this instance against.
-
- True if instance matches user data, otherwise false.
-
-
-
-
- Used by a stack to store a tag and level for tracking the parsing process.
-
-
-
- Gets or sets the current tag name.
-
-
- Gets or sets the current tag level.
-
-
-
- Enum helper class for parsing an enum.
-
-
-
- Parses the specified value.
- The enum type to parse.
- The text value to parse.
- The enum equivalent of the passed text.
-
-
- Parses the specified value.
- The enum type to parse.
- The text value to parse.
- if set to true the parsing will not be case sensitive.
- The enum equivalent of the passed text.
-
-
- Parses the specified value.
- The enum type to parse.
- The text value to parse.
- if set to true the parsing will not be case sensitive.
- The default value if all else fails.
- The enum equivalent of the passed text.
-
-
- Parses a string into an enum by comparing against the description attribute of the enum.
- The type of the enum to parse to, normally inferred by the compiler.
- The text value to parse.
- if set to true the parsing will not be case sensitive.
- The enum equivalent of the passed text or a default value if parsing does not succeed.
-
-
- Parses a string into an enum by comparing against the description attribute of the enum.
- The type of the enum to parse to, normally inferred by the compiler.
- The text value to parse.
- if set to true the parsing will not be case sensitive.
- The default value if all else fails.
- The enum equivalent of the passed text or a default value if parsing does not succeed.
-
-
-
- Outputs a string version of an enum by using the attribute.
- Fails over to the enum name if the does not exist.
-
- The enum to output.
- A string representation of the enum.
-
-
-
- Used to track the cross references that are parsed from the GEDCOM file.
- This seems like quite a complex class and I'd like to see if we can benchmark
- and unit test it.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Initializes a new instance of the class.
-
- The size.
-
-
-
- Gets or sets the strings which form the collection.
-
-
-
-
- Gets the with the specified key from the xref collection.
-
- The key for looking up the xref.
- The xref as a string.
-
-
-
- Gets the with the specified key from the xref collection.
-
- The key for looking up the xref.
- The start index.
- The length.
-
- The xref as a string.
-
- ERROR FINDING EXISTING KEY:" + insert.
-
-
-
- Returns a that represents this instance.
-
-
- A that represents this instance.
-
-
-
-
- Finds the specified string.
-
- The string.
- The start index.
- The length.
- The position the string was found at.
- True if string found, false otherwise.
-
-
-
- TODO: Doc.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the database.
-
-
- The database.
-
-
-
-
- Gets or sets the value.
-
-
- The value.
-
-
-
-
- Gets or sets the type of the variation.
-
-
- The type of the variation.
-
-
-
-
- Gets or sets the change date.
-
-
- The change date.
-
-
-
-
- Compares the current and passed-in GedcomVariation to see if they are the same.
-
- The GedcomVariation to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
- A 32-bit signed integer that indicates whether this instance precedes, follows, or appears in the same position in the sort order as the value parameter.
-
-
-
- Compares the current and passed-in GedcomVariation to see if they are the same.
-
- The GedcomVariation to compare the current instance against.
- True if they match, False otherwise.
-
-
-
- Compares the current and passed-in object to see if they are the same.
-
- The object to compare the current instance against.
- True if they match, False otherwise.
-
-
-
-
-
-
- Changeds this instance.
-
-
-
-
- Decodes ANSEL characters into Unicode decomposed characters.
-
-
-
-
- When overridden in a derived class, calculates the number of characters produced by decoding a sequence of bytes from the specified byte array.
-
- The byte array containing the sequence of bytes to decode.
- The index of the first byte to decode.
- The number of bytes to decode.
-
- The number of characters produced by decoding the specified sequence of bytes and any bytes in the internal buffer.
-
-
-
-
- When overridden in a derived class, decodes a sequence of bytes from the specified byte array and any bytes in the internal buffer into the specified character array.
-
- The byte array containing the sequence of bytes to decode.
- The index of the first byte to decode.
- The number of bytes to decode.
- The character array to contain the resulting set of characters.
- The index at which to start writing the resulting set of characters.
-
- The actual number of characters written into .
-
-
-
-
- Decode the ANSEL Code point into the Unicode code point.
-
- The ansel code point.
- The Unicode character (or diacritic) mapped from the passed Ansel code point.
-
-
-
- An encoder/decoder for the the ANSEL/US-MARC character set.
-
-
-
-
- Gets the code page of ANSEL.
-
- The code page identifier of the current .
-
- Windows Latin-1 (close enough!).
-
-
-
-
- Gets the human-readable name of the character set.
-
- The human-readable description of the current .
-
-
-
- Returns a decoder for the ANSEL character set.
-
-
- A that converts an encoded sequence of bytes into a sequence of characters.
-
-
-
-
- When overridden in a derived class, calculates the maximum number of characters produced by decoding the specified number of bytes.
-
- The number of bytes to decode.
-
- The maximum number of characters produced by decoding the specified number of bytes.
-
-
-
-
- When overridden in a derived class, calculates the number of characters produced by decoding a sequence of bytes from the specified byte array.
-
- The byte array containing the sequence of bytes to decode.
- The index of the first byte to decode.
- The number of bytes to decode.
-
- The number of characters produced by decoding the specified sequence of bytes.
-
-
-
-
- When overridden in a derived class, decodes a sequence of bytes from the specified byte array into the specified character array.
-
- The byte array containing the sequence of bytes to decode.
- The index of the first byte to decode.
- The number of bytes to decode.
- The character array to contain the resulting set of characters.
- The index at which to start writing the resulting set of characters.
-
- The actual number of characters written into .
-
-
-
-
- Not Implemented.
-
- The character array containing the set of characters to encode.
- The index of the first character to encode.
- The number of characters to encode.
-
- The number of bytes produced by encoding the specified characters.
-
- This function is not needed and should not be called.
-
-
-
- When overridden in a derived class, calculates the maximum number of bytes produced by encoding the specified number of characters.
-
- The number of characters to encode.
-
- The maximum number of bytes produced by encoding the specified number of characters.
-
-
-
-
- When overridden in a derived class, encodes a set of characters from the specified character array into the specified byte array.
-
- The character array containing the set of characters to encode.
- The index of the first character to encode.
- The number of characters to encode.
- The byte array to contain the resulting sequence of bytes.
- The index at which to start writing the resulting sequence of bytes.
-
- The actual number of bytes written into .
-
- This function is not needed and should not be called.
-
-
-
- Used by unit tests and benchmarks to load and parse GEDCOM files.
-
-
-
-
- Loads the GEDCOM file and parses it.
-
- The file.
- The last error during parsing.
-
-
-
- GedcomParser is responsible for parsing GEDCOM files.
- This class implements GEDCOM 5.5 grammar rules.
- This is probably not the class you want to use unless writing a
- validator application. GedcomRecordReader makes use of this
- class for building up a GedcomDatabase.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Fired if the parser encounters an error.
-
-
-
-
- Fired whenever a full GEDCOM line has been parsed.
-
-
-
-
- Gets the current state the parser is in.
-
-
-
-
- Gets or sets the error state, if any, the parser is in.
-
-
-
-
- Gets the level of the current GEDCOM tag.
-
-
-
-
- Gets the Xref of the current GEDCOM tag (if any).
-
-
-
-
- Gets the current GEDCOM tag.
-
-
-
-
- Gets the value of the current GEDCOM tag, or a pointer to
- another record.
-
-
-
-
- Gets the type of the line value, data or pointer.
-
-
-
-
- Gets or sets the collection of xrefs used in the gedcom file.
- This is used as a cache to lower memory consumption.
- If not set one will be created when parsing.
-
-
-
-
- Gets or sets the collection of xrefs used in the gedcom file.
- This is used as a cache to lower memory consumption.
- Setting this to an XRefIndexedKeyCollection will
- allow on the fly replacement of xrefs.
- If not set one will be created when parsing.
-
-
-
-
- Gets or sets the character set used to encode the GEDCOM file.
-
-
-
-
- Gets or sets a value indicating whether invalid delimiters cause errors.
- If set to true invalid GEDCOM files that use multiple spaces
- to separate level / xrefid / tags will be processed without
- generating an error. royal.ged from Gedcom.pm (http://www.pjcj.net)
- needs this as the tags are indented presumably for readability.
-
-
-
-
- Gets or sets a value indicating whether missing terminators cause an error.
- If set to true GEDCOM lines that do not contain a terminator
- on tags / line values will not cause the parser to generate an error.
-
-
-
-
- Gets or sets a value indicating whether to leave newlines in.
- Some broken apps (Reunion for instance) omit
- CONT (and maybe CONC) values, leading to broken GEDCOM.
- When set to true the parser will deal with this by converting
- the broken line to another CONC.
-
-
-
-
- Gets or sets a value indicating whether to allow tabs as OtherChar.
-
-
-
-
- Gets or sets a value indicating whether to allow line tabs as OtherChar.
-
-
-
-
- Gets or sets a value indicating whether to allow Information Separator One (0x1f) as OtherChar.
-
-
-
-
- Gets or sets a value indicating whether to allow - or _ in tag names.
-
-
-
-
- Obtain a human readable error message for the given error state.
-
- The error state.
- A friendlier string for the error.
-
-
-
- Parses the given data, which should be 1 or more lines, multiple
- calls can be made with multiple lines.
- Events are triggered upon reading a line, or on an error.
- If TagCollection and XrefTagCollection haven't been set
- prior to calling default IndexedKeyCollection objects will be
- used. To support replacing XRefs you need to set XrefTagCollection
- to an instance of XRefIndexedKeyCollection before calling.
-
- Data to parse, expected to be unicode.
- The last error encountered.
-
-
-
- Resets the parser states, use this if the same GedcomParser is
- ready to parse a different gedcom file, or if recovering from
- an error the parser has hit.
-
-
-
-
- GedcomParseState is used to maintain the current parser status
- for GedcomRecordReader.
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets the previous tag name.
-
-
-
-
- Gets the level of the previous tag.
-
-
-
-
- Gets or sets the stack of previous tag names / levels.
-
-
-
-
- Gets or sets the parse stack of current records, back to the last level 0 record.
-
-
-
-
- Gets or sets the current database the GedcomRecordReader is working with.
-
-
-
-
- Obtain the name of the parent GEDCOM tag.
-
-
- A . The level of the current tag.
-
-
- A . The name of the parent GEDCOM tag.
-
-
-
-
- Adds the previous tag.
-
- The name.
- The level.
- Only 99 levels supported, as per GEDCOM spec.
-
-
-
- GedcomRecordReader will read in a given gedcom file
- producing a GedcomDatabase and related objects.
- This is generally what you want to use to read in a GEDCOM
- file for manipulation.
-
-
-
-
- Initializes a new instance of the class.
- Create a GedcomRecordReader for reading a GEDCOM file into a GedcomDatabase.
-
-
-
-
- Fired as each line is parsed from the given file in GedcomRead
-
-
-
-
- Gets or sets the parser to be used when reading the GEDCOM file.
-
-
-
-
- Gets or sets the GEDCOM file being read.
-
-
-
-
- Gets the database the records will be added to.
-
-
-
-
- Gets or sets a value indicating whether xrefs are replaced.
- When reading GEDCOM files into a database the
- xref ids may already exist, settings this to true
- will cause new ids to be generated created for the
- records being read.
-
-
-
-
- Gets percentage progress of GedcomRead.
-
-
-
-
- A static helper for reading a gedcom file and returning the reader in one go.
-
- The gedcom file path.
- The value indicating whether [replace x refs].
- The reader used to load the file.
-
-
-
- Starts reading the gedcom file currently set via the GedcomFile property.
-
- bool indicating if the file was successfully read.
-
-
-
- Starts reading the specified gedcom file.
-
- Filename to read.
- bool indicating if the file was successfully read.
-
-
-
- Used to save a GedcomDatabase to a GEDCOM file.
-
-
-
-
- Initializes a new instance of the class.
- Create a GEDCOM writer for saving a database to a GEDCOM file.
-
-
-
-
- Gets or sets the name of the GEDCOM file being written.
-
-
-
-
- Gets or sets the database for the file being written.
-
-
-
-
- Gets or sets the name of the application that created the GEDCOM file.
-
-
-
-
- Gets or sets the application version that created the GEDCOME file.
-
-
-
-
- Gets or sets the application system identifier.
-
-
-
-
- Gets or sets the owner name for the software that created the GEDCOM.
-
-
-
-
- Gets or sets the corporation address.
-
-
- The corporation address.
-
-
-
-
- Gets or sets a value indicating whether to use the information separator when saving.
-
-
- true if [allow information separator on save]; otherwise, false .
-
-
-
-
- Gets or sets a value indicating whether [allow line tabs save].
-
-
- true if [allow line tabs save]; otherwise, false .
-
-
-
-
- Gets or sets a value indicating whether [allow tabs save].
-
-
- true if [allow tabs save]; otherwise, false .
-
-
-
-
- Helper method to output a standard GEDCOM file without needing to create a writer.
-
- The database to output.
- The file path to output to.
-
-
-
- Helper method to output a standard GEDCOM file without needing to create a writer.
-
- The database to output.
- The stream to write to.
-
-
-
- Outputs the currently set GedcomDatabase to the currently set file.
-
-
-
-
- Outputs a GedcomDatabase to the given file.
-
- The GedcomDatabase to write.
- The filename to write to.
-
-
-
- Outputs a GedcomDatabase to the passed stream.
-
- The GedcomDatabase to write.
- The stream to write to.
-
-
-
- Writes the specified database to the passed writer.
- Not for use outside this class as the writer must be
- responsibly disposed in a using block by the caller.
-
- The database to write.
- The writer to use for outputting the database.
-
-
-
- Stream writer for outputting GEDCOM files. Can be used to output to both memory and files.
-
-
-
-
-
- Initializes a new instance of the class.
-
- The stream to write to.
-
-
-
- Initializes a new instance of the class.
-
- The complete file path to write to. can be a file name.
-
-
-
- Initializes a new instance of the class.
-
- The stream to write to.
- The character encoding to use.
-
-
-
- Initializes a new instance of the class.
-
- The complete file path to write to.
- true to append data to the file; false to overwrite the file. If the specified file does not exist, this parameter has no effect, and the constructor creates a new file.
-
-
-
- Initializes a new instance of the class.
-
- The stream to write to.
- The character encoding to use.
- The buffer size, in bytes.
- true to leave the stream open after the object is disposed; otherwise, false.
-
-
-
- Initializes a new instance of the class.
-
- The complete file path to write to.
- true to append data to the file; false to overwrite the file. If the specified file does not exist, this parameter has no effect, and the constructor creates a new file.
- The character encoding to use.
-
-
-
- Initializes a new instance of the class.
-
- The complete file path to write to.
- true to append data to the file; false to overwrite the file. If the specified file does not exist, this parameter has no effect, and the constructor creates a new file.
- The character encoding to use.
- The buffer size, in bytes.
-
-
-
- Gets or sets a value indicating whether to allow the ASCII information separator character to be written.
-
-
-
-
- Gets or sets a value indicating whether to replace line tabs (ASCII vertical tabs) as spaces when written.
-
-
-
-
- Gets or sets a value indicating whether to replace tabs (ASCII horizontal tabs) as spaces when written.
-
-
-
-
- Writes a character to the stream.
-
- The character to write to the stream.
-
-
-
- Writes a subarray of characters to the stream.
-
- A character array that contains the data to write.
- The character position in the buffer at which to start reading data.
- The maximum number of characters to write.
-
-
-
- Writes the text representation of an object to the text string or stream by calling the ToString method on that object.
-
- The object to write.
-
-
-
- Writes a string to the stream.
-
- The string to write to the stream. If is null, nothing is written.
-
-
-
- Writes a formatted string to the text string or stream, using the same semantics as the method.
-
- A composite format string (see Remarks).
- The object to format and write.
-
-
-
- Writes a formatted string to the text string or stream, using the same semantics as the method.
-
- A composite format string (see Remarks).
- The first object to format and write.
- The second object to format and write.
-
-
-
- Writes a formatted string to the text string or stream, using the same semantics as the method.
-
- A composite format string (see Remarks).
- The first object to format and write.
- The second object to format and write.
- The third object to format and write.
-
-
-
- Writes a character followed by a line terminator to the text string or stream.
-
- The character to write to the text stream.
-
-
-
- Writes a subarray of characters followed by a line terminator to the text string or stream.
-
- The character array from which data is read.
- The character position in at which to start reading data.
- The maximum number of characters to write.
-
-
-
- Writes the text representation of an object by calling the ToString method on that object, followed by a line terminator to the text string or stream.
-
- The object to write. If is null, only the line terminator is written.
-
-
-
- Writes a string followed by a line terminator to the text string or stream.
-
- The string to write. If is null, only the line terminator is written.
-
-
-
- Writes a formatted string and a new line to the text string or stream, using the same semantics as the method.
-
- A composite format string (see Remarks).
- The object to format and write.
-
-
-
- Writes a formatted string and a new line to the text string or stream, using the same semantics as the method.
-
- A composite format string (see Remarks).
- The first object to format and write.
- The second object to format and write.
-
-
-
- Writes out a formatted string and a new line, using the same semantics as .
-
- A composite format string (see Remarks).
- The first object to format and write.
- The second object to format and write.
- The third object to format and write.
-
-
-
- Lists of error strings etc that don't change.
-
-
-
-
- Descriptions for each parse error.
-
-
-
-
- Used to wrap DateTime.Now() so that it can be replaced for unit testing.
-
-
-
-
- Gets the current time or the time under test for unit tests.
-
-
-
-
- Used to set the time to return when SystemTime.Now() is called.
-
- The time you want to return for the unit test.
-
-
-
- Resets SystemTime.Now() to return the real time via DateTime.Now.
-
-
-
-
- TODO: Doc.
-
-
-
-
- Generates a soundex string for the passed value.
-
- The string.
- A string of characters representing the soundex value.
-
-
-
- Encodes the passed character to it's soundex value.
-
- The c.
- The soundex character (as a string).
-
-
-
- Escapes "at" sign.
-
- The string.
-
- The input string with the @ symbol escaped, or the original string if no @ symbol present.
-
-
-
-
- Returns the position of the escaped character in the passed string.
-
- The string.
-
- A count of the total number of escaped characters (the "at" sign) found in the passed string, or 0 if none.
-
-
-
-
- Splits the line text.
-
- The writer.
- The text.
- The level.
- The maximum length.
-
-
-
- Splits the line text.
-
- The writer.
- The text.
- The level.
- The maximum length.
- The maximum splits.
- if set to true [cont].
-
-
-
- Splits the text.
-
- The writer.
- The line.
- The level.
- The maximum length.
-
-
-
- Splits the text.
-
- The writer.
- The line.
- The level.
- The maximum length.
- The maximum splits.
- if set to true [cont].
-
-
-
- TODO: Doc.
-
-
-
-
-
- Initializes a new instance of the class.
-
-
-
-
- Gets or sets the database.
-
-
- The database.
-
-
-
-
- Gets or sets a value indicating whether [replace x refs].
-
-
- true if [replace x refs]; otherwise, false .
-
-
-
-
- Gets the TODO: Doc.
-
-
- The .
-
- The string.
- The start index.
- The length.
- TODO: Doc.
-
-
-
diff --git a/GeneGenie.Gedcom/Helpers/EnumHelper.cs b/GeneGenie.Gedcom/Helpers/EnumHelper.cs
index c32b9d9..c7556d2 100644
--- a/GeneGenie.Gedcom/Helpers/EnumHelper.cs
+++ b/GeneGenie.Gedcom/Helpers/EnumHelper.cs
@@ -115,7 +115,7 @@ public static T ParseByDescription(string value, bool ignoreCase, T defaultVa
}
///
- /// Outputs a string version of an enum by using the attribute.
+ /// Outputs a string version of an enum by using the attribute.
/// Fails over to the enum name if the does not exist.
///
/// The enum to output.
diff --git a/GeneGenie.Gedcom/Parser/GedcomParser.cs b/GeneGenie.Gedcom/Parser/GedcomParser.cs
index 0402035..8b0fa8b 100644
--- a/GeneGenie.Gedcom/Parser/GedcomParser.cs
+++ b/GeneGenie.Gedcom/Parser/GedcomParser.cs
@@ -20,7 +20,7 @@ namespace GeneGenie.Gedcom.Parser
///
public class GedcomParser
{
- // arbitary magic max level number
+ // arbitrary magic max level number
private const int MaxLevel = 99;
private const int MaxXRefLength = 22;
@@ -186,7 +186,7 @@ public GedcomErrorState GedcomParse(string data)
// Tags are always the same, data.Substring was allocating lots
// of memory, instead use a special collection which matches via
- // array index, e.g tagCollection[str, index, length] to avoid
+ // array index, e.g. tagCollection[str, index, length] to avoid
// the extra allocations, and caches the resulting string for
// use again without having to substring
if (TagCollection == null)
@@ -503,7 +503,7 @@ public GedcomErrorState GedcomParse(string data)
// TODO: no line value, but have hit the terminator
// what should this be allowed for?
- // Family Tree Maker outputs emtpy CONT (and CONC?)
+ // Family Tree Maker outputs empty CONT (and CONC?)
else if (Tag == "CONT" || Tag == "CONC")
{
LineValue = " ";
diff --git a/GeneGenie.Gedcom/Parser/GedcomRecordReader.cs b/GeneGenie.Gedcom/Parser/GedcomRecordReader.cs
index a4ac5dc..a17630d 100644
--- a/GeneGenie.Gedcom/Parser/GedcomRecordReader.cs
+++ b/GeneGenie.Gedcom/Parser/GedcomRecordReader.cs
@@ -56,7 +56,7 @@ public GedcomRecordReader()
// we don't care if delims are multiple spaces
Parser.IgnoreInvalidDelim = true;
- // we don't care if lines are missing delimeters
+ // we don't care if lines are missing delimiters
Parser.IgnoreMissingTerms = true;
// apply hack for lines that are just part of the line value
@@ -222,6 +222,8 @@ public bool ReadGedcom(string gedcomFile)
}
}
+ var newlineDelimiter = DetectNewline(gedcomFile, enc);
+
stream = new StreamReader(gedcomFile, enc);
while (!stream.EndOfStream)
@@ -231,8 +233,7 @@ public bool ReadGedcom(string gedcomFile)
if (line != null)
{
- // file may not have same newline as environment so this isn't 100% correct
- read += line.Length + Environment.NewLine.Length;
+ read += line.Length + newlineDelimiter.Length;
Parser.GedcomParse(line);
// to allow for inaccuracy above
@@ -427,7 +428,7 @@ public bool ReadGedcom(string gedcomFile)
case GedcomRecordType.Individual:
// TODO: don't increase ref count on individuals,
// a bit of a hack, only place where it may be
- // needed is on assocciations
+ // needed is on associations
break;
case GedcomRecordType.Family:
// TODO: don't increase ref count on families
@@ -501,6 +502,47 @@ public bool ReadGedcom(string gedcomFile)
return success;
}
+ private static string DetectNewline(string gedcomFile, Encoding enc)
+ {
+ using (var sr = new StreamReader(gedcomFile, enc))
+ {
+ return DetectNewline(sr);
+ }
+ }
+
+ internal static string DetectNewline(StreamReader sr)
+ {
+ int i = 0;
+ while (!sr.EndOfStream && i < 512)
+ {
+ var nextChar = sr.Read();
+
+ if (nextChar == '\r')
+ {
+ nextChar = sr.Read();
+
+ if (nextChar == '\n')
+ {
+ // This is a Windows CRLF formatted line.
+ return "\r\n";
+ }
+
+ // Odd format, just a CR on it's own.
+ return "\r";
+ }
+ else if (nextChar == '\n')
+ {
+ // Looks like Linux / Unix.
+ sr.Read(); // Throw away the LF character.
+ return "\n";
+ }
+
+ i++;
+ }
+
+ return Environment.NewLine;
+ }
+
private void Parser_ParseError(object sender, EventArgs e)
{
string error = GedcomParser.GedcomErrorString(Parser.ErrorState);
@@ -1602,6 +1644,7 @@ private void ReadFamilyRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ familyRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -1959,6 +2002,7 @@ private void ReadIndividualRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ individualRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -2770,6 +2814,7 @@ private void ReadMultimediaRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ multimediaRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -2877,6 +2922,7 @@ private void ReadNoteRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ noteRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -3083,6 +3129,7 @@ private void ReadRepositoryRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ repositoryRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -3237,6 +3284,7 @@ private void ReadSourceRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ sourceRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -3619,6 +3667,7 @@ private void ReadSubmitterRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ submitterRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -3720,6 +3769,7 @@ private void ReadSubmissionRecord()
break;
case "CHAN":
GedcomChangeDate date = new GedcomChangeDate(Database);
+ submissionRecord.ChangeDate = date;
date.Level = level;
parseState.Records.Push(date);
break;
@@ -3757,7 +3807,7 @@ private void ReadEventRecord()
custom.Classification = lineValue;
}
- // TODO: may want to use customs at some point
+ eventRecord.Custom.Add(custom);
parseState.Records.Push(custom);
break;
}
@@ -4513,7 +4563,7 @@ private void ReadFamilyLinkRecord()
}
catch
{
- Debug.WriteLine("Invalid pedegree linkage type: " + lineValue);
+ Debug.WriteLine("Invalid pedigree linkage type: " + lineValue);
childOf.Pedigree = PedigreeLinkageType.Unknown;
}
@@ -4973,7 +5023,7 @@ private string TagMap(string tag)
string ret = tag;
switch (tag)
{
- // we convert _AKA to the admitedly invalid AKA, but we deal
+ // we convert _AKA to the admittedly invalid AKA, but we deal
// with that as a valid tag as it is known to occur in some
// files. Ends up adding a name with a type of aka
case "_AKA":
diff --git a/GeneGenie.Gedcom/Parser/GedcomRecordWriter.cs b/GeneGenie.Gedcom/Parser/GedcomRecordWriter.cs
index 108a5a0..68f467d 100644
--- a/GeneGenie.Gedcom/Parser/GedcomRecordWriter.cs
+++ b/GeneGenie.Gedcom/Parser/GedcomRecordWriter.cs
@@ -41,7 +41,7 @@ public GedcomRecordWriter()
public string ApplicationName { get; set; }
///
- /// Gets or sets the application version that created the GEDCOME file.
+ /// Gets or sets the application version that created the GEDCOM file.
///
public string ApplicationVersion { get; set; }
diff --git a/GeneGenie.Gedcom/Parser/StaticData.cs b/GeneGenie.Gedcom/Parser/StaticData.cs
index 62f8b28..326b44c 100644
--- a/GeneGenie.Gedcom/Parser/StaticData.cs
+++ b/GeneGenie.Gedcom/Parser/StaticData.cs
@@ -22,14 +22,14 @@ public class StaticData
"No Error",
"Level expected but not found",
- "Level needs trailing delimeter",
+ "Level needs trailing delimiter",
"Level is invalid",
- "Xref id needs trailing delimeter",
+ "Xref id needs trailing delimiter",
"Xref too long",
"Tag expected",
- "Tag needs trailing delimeter or newline",
+ "Tag needs trailing delimiter or newline",
"Line value expected",
"Line value needs trailing newline",
diff --git a/GeneGenie.Gedcom/StrongName.snk b/GeneGenie.Gedcom/StrongName.snk
deleted file mode 100644
index a694cf2..0000000
Binary files a/GeneGenie.Gedcom/StrongName.snk and /dev/null differ
diff --git a/GlobalSuppressions.cs b/GlobalSuppressions.cs
deleted file mode 100644
index ab8eab0..0000000
--- a/GlobalSuppressions.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-//
-// Copyright (c) GeneGenie.com. All Rights Reserved.
-// Licensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information.
-//
-
-[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1101:Prefix local calls with this", Justification = "Reviewed")]
diff --git a/README.md b/README.md
index 77aa687..b989542 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
# GeneGenie.Gedcom
-## Current work will be on the new dev branch, this branch is being kept here until that version is stable.
+## Current working dev branch for code quality, .net 7 and improved tests.
-A .Net 6.0 library for loading, saving, working with and analysing family trees stored in the GEDCOM format.
+A .Net library for loading, saving, working with and analysing family trees stored in the GEDCOM format.
Thank you to David A Knight who developed Gedcom.Net from which this project was forked.
@@ -20,7 +20,7 @@ Check the sample project out for working code, basic operations are;
To load a tree into memory use the following static helper.
- var gedcomReader = GedcomRecordReader.CreateReader("Data\\presidents.ged");
+ var gedcomReader = GedcomRecordReader.CreateReader("Data/presidents.ged");
There are other variants of this helper and non static methods that allow you to specify additional parameters such as encoding.
@@ -67,14 +67,24 @@ You'll want to make sure that the file you just read was parsed OK and handle an
GedcomRecordWriter.OutputGedcom(db, "Rewritten.ged");
-### Current build status
-[![AppVeyor branch](https://img.shields.io/appveyor/ci/RyanONeill1970/genegenie-gedcom/master.svg)](https://ci.appveyor.com/project/RyanONeill1970/genegenie-gedcom) [![NuGet](https://img.shields.io/nuget/v/GeneGenie.Gedcom.svg)](https://www.nuget.org/packages/GeneGenie.Gedcom) [![AppVeyor tests](https://img.shields.io/appveyor/tests/RyanONeill1970/genegenie-gedcom.svg)](https://ci.appveyor.com/project/RyanONeill1970/genegenie-gedcom/build/tests)
+## Build status
+[![Build and run tests](https://github.com/TheGeneGenieProject/GeneGenie.Gedcom/actions/workflows/sonar.yml/badge.svg)](https://github.com/TheGeneGenieProject/GeneGenie.Gedcom/actions/workflows/sonar.yml)
### Code quality
-[![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=GeneGenie.Gedcom) [![Quality gate](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=alert_status)](https://sonarcloud.io/dashboard?id=GeneGenie.Gedcom) [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=bugs)](https://sonarcloud.io/component_measures?id=GeneGenie.Gedcom&metric=Reliability) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=vulnerabilities)](https://sonarcloud.io/component_measures?id=GeneGenie.Gedcom&metric=Security) [![Code smells](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=code_smells)](https://sonarcloud.io/component_measures?id=GeneGenie.Gedcom&metric=Maintainability) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=coverage)](https://sonarcloud.io/component_measures?id=GeneGenie.Gedcom&metric=Coverage) [![Duplications](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=duplicated_lines_density)](https://sonarcloud.io/component_measures?id=GeneGenie.Gedcom&metric=Duplications) [![Reliability](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=GeneGenie.Gedcom) [![Security](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=security_rating)](https://sonarcloud.io/dashboard?id=GeneGenie.Gedcom) [![Security](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=sqale_index)](https://sonarcloud.io/dashboard?id=GeneGenie.Gedcom) [![Lines of code](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=ncloc)](https://sonarcloud.io/dashboard?id=GeneGenie.Gedcom)
-
-[![Build stats](https://buildstats.info/appveyor/chart/ryanoneill1970/genegenie-gedcom)](https://ci.appveyor.com/project/ryanoneill1970/genegenie-gedcom/history)
+[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=bugs)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![CodeQL](https://github.com/TheGeneGenieProject/GeneGenie.Gedcom/actions/workflows/codeql.yml/badge.svg)](https://github.com/TheGeneGenieProject/GeneGenie.Gedcom/actions/workflows/codeql.yml)
+[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=coverage)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
+[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=GeneGenie.Gedcom&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=GeneGenie.Gedcom)
## Contributing
We would love your help, see [Contributing.md](Contributing.md) for guidelines.
+
diff --git a/SonarQube.bat b/SonarQube.bat
deleted file mode 100644
index 2d55d40..0000000
--- a/SonarQube.bat
+++ /dev/null
@@ -1,6 +0,0 @@
-dotnet tool install --global dotnet-sonarscanner --version 4.10.0
-dotnet test GeneGenie.Gedcom.Tests\GeneGenie.Gedcom.Tests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput="%CD%\opencover.xml"
-dotnet build-server shutdown
-dotnet sonarscanner begin /k:"GeneGenie.Gedcom" /o:"thegenegenieproject" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.login=%SonarQubeApiKey% /d:sonar.cs.opencover.reportsPaths="%CD%\opencover.xml"
-dotnet build
-dotnet sonarscanner end /d:sonar.login=%SonarQubeApiKey%
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 975b3a6..0000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-version: 1.0.{build}
-image: Visual Studio 2017
-configuration:
- - Release
-before_build:
-- cmd: nuget restore
-build:
- verbosity: minimal
-after_build:
-- cmd: dotnet pack GeneGenie.Gedcom\GeneGenie.Gedcom.csproj --configuration Release --output . --no-build
-artifacts:
-- path: '**/*.nupkg'
- name: nugetpackage
-deploy:
-- provider: NuGet
- api_key:
- secure: bcYrYC8tAmSYcblYfwjk9upKKLg6kEuQbYVAw9knvBSu32OOfmtXPXHwpDqSCadQ
- artifact: nugetpackage
- on:
- branch: master
-
-test_script:
- - cmd: SonarQube.bat
diff --git a/stylecop.json b/stylecop.json
deleted file mode 100644
index b5ef429..0000000
--- a/stylecop.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
- "settings": {
- "documentationRules": {
- "companyName": "GeneGenie.com",
- "copyrightText": "Copyright (c) {companyName}. All Rights Reserved.\r\nLicensed under the GNU Affero General Public License v3.0. See LICENSE in the project root for license information."
- }
- }
-}