gedcomkit 0.1.18__tar.gz → 0.1.20__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/CHANGELOG.md +97 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/Cargo.lock +1 -1
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/Cargo.toml +1 -1
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/PKG-INFO +1 -1
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/README.md +2 -6
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/bindings/gedcomkit-py/Cargo.lock +2 -2
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/bindings/gedcomkit-py/Cargo.toml +1 -1
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/bindings/gedcomkit-py/gedcomkit.pyi +27 -2
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/bindings/gedcomkit-py/src/lib.rs +3 -1
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/build.rs +1 -1
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/convert.rs +412 -7
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/dates.rs +578 -72
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/validate.rs +160 -122
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/view.rs +42 -1
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/typescript.rs +1 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/LICENSE +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/bindings/gedcomkit-py/LICENSE +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/bindings/gedcomkit-py/README.md +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/LICENSE +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/README.md +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/cardinalities.tsv +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/enumerations.tsv +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/enumerationsets.tsv +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/grammar.abnf +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/grammar.gedstruct +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/payloads.tsv +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom-spec/substructures.tsv +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/age-invalid.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/age-valid.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/atsign.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_ascii_1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_ascii_2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_utf16be-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_utf16be-2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_utf16le-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_utf16le-2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_utf8-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_utf8-2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/char_utf8-3.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/date-all.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/date-dual-invalid.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/date-dual-valid.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/enum-ext.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/filename-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/lang-all.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/notes-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/obje-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/obsolete-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/pedi-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/rela_1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/sour-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/tiny-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/5/xref-case.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/age-invalid.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/age-valid.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/atsign.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_ascii_1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_ascii_2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_utf16be-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_utf16be-2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_utf16le-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_utf16le-2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_utf8-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_utf8-2.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/char_utf8-3.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/date-all.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/date-dual-invalid.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/enum-ext.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/filename-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/lang-all.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/notes-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/obje-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/obsolete-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/pedi-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/rela_1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/sour-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/tiny-1.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/7/xref-case.ged +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/LICENSE +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/gedcom7code/UPSTREAM-README.md +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/zip-interop/README.md +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/zip-interop/python-zip64.gdz +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/fixtures/vendored/zip-interop/python-zipfile.gdz +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/pyproject.toml +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/decode.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/family.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/gedzip.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/lib.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/names.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/schema.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/synthetic.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/src/tags.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/endurance.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/external_charset.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/properties.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/requirement_corpus.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/spec_conformance.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/vendored_corpus.rs +0 -0
- {gedcomkit-0.1.18 → gedcomkit-0.1.20}/tests/version_conversion.rs +0 -0
|
@@ -7,6 +7,103 @@ rules.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.1.20] - 2026-11-09
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- The date reader reads a calendar named after a qualifier or a range
|
|
15
|
+
word, as both grammars write it: `INT @#DJULIAN@ 2 MAR 1700 (…)`,
|
|
16
|
+
`BEF @#DJULIAN@ 2 JAN 1700`, `ABT JULIAN 1700`, `BET @#DJULIAN@ 1700 AND
|
|
17
|
+
@#DJULIAN@ 1710`. Such a date was left unparsed before, though
|
|
18
|
+
`to_gedcom_5_5_1` writes exactly this form, so what it wrote did not read
|
|
19
|
+
back. A range whose ends name different calendars, or whose unnamed end
|
|
20
|
+
(Gregorian) disagrees with a named one, stays unparsed.
|
|
21
|
+
|
|
22
|
+
## [0.1.19] - 2026-10-17
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- `view::EventView::date_phrase` (`datePhrase` in the serialized view, so
|
|
27
|
+
in both bindings and the TypeScript definitions): the `PHRASE` beneath an
|
|
28
|
+
event's `DATE`, exactly as written. A GEDCOM 7 date with an empty payload
|
|
29
|
+
and a `PHRASE`, or a date with a phrase beside it, showed nothing of the
|
|
30
|
+
phrase before. A 5.5.1 phrase is written inside the payload, which `date`
|
|
31
|
+
already holds. The Python stub gains an `EventView` typed dict naming
|
|
32
|
+
every key of an event.
|
|
33
|
+
- The date reader reads ISO 8601's year and month: `1834-02` is February
|
|
34
|
+
1834, as `1834-02-10` was already 10 February 1834. Only four digits, a
|
|
35
|
+
hyphen and two digits are read, and only when the month is no more than
|
|
36
|
+
the year's last two digits: `1808-10`, `1711-12` and `2010-11` are as
|
|
37
|
+
often a span of years or a dual year as a month, and stay unparsed. So
|
|
38
|
+
does every month of a year ending in 00 (`1800-01` to `1800-12`), and
|
|
39
|
+
the later months of a year ending in 01 to 11 (`2005-06` to `2005-12`).
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- `validate::inspect` no longer reports two events out of order when an
|
|
44
|
+
approximate date's leeway could put them in order, which is how
|
|
45
|
+
`conflicting-vitals` already read them. A birth `ABT 1854` with a
|
|
46
|
+
christening in 1853 was a `christened-before-born` question; it is now
|
|
47
|
+
no finding. The same holds for `died-before-born`, `buried-before-died`,
|
|
48
|
+
`event-after-death`, `event-before-birth`, `married-before-born`,
|
|
49
|
+
`married-after-died` and `child-born-after-mother-died`, each of which
|
|
50
|
+
now reports only what is out of order beyond the leeway, as a
|
|
51
|
+
contradiction (a question for an `EVEN` or `FACT`, as before). Within the
|
|
52
|
+
leeway no other check fires in its place: a marriage in 1849 for somebody
|
|
53
|
+
born about 1850 is not `married-as-a-child`. Bounds (`BEF`, `AFT`, `BET`)
|
|
54
|
+
are read as the ranges they admit, unchanged.
|
|
55
|
+
- `convert::to_version_5_5_1` turns a name type back into 5.5.1's
|
|
56
|
+
spelling: `OTHER` with a one-line `PHRASE` becomes the phrase's words,
|
|
57
|
+
and an enumerated value is written in lower case (`BIRTH` becomes
|
|
58
|
+
`birth`). `OTHER` whose words are themselves an enumerated value (the
|
|
59
|
+
phrase `birth`) stays `other`, its `PHRASE` kept and reported, since the
|
|
60
|
+
words alone would convert back up as `BIRTH`. A `PHRASE` beside any other
|
|
61
|
+
value is kept and reported.
|
|
62
|
+
- `DatePoint::from_ymd` refuses a day its month never has (30 February,
|
|
63
|
+
31 April, day 0). The point is written with no calendar escape, which
|
|
64
|
+
makes it Gregorian, so 29 February is taken only in a Gregorian leap
|
|
65
|
+
year: 2000, not 1900.
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- A range with an end the date reader cannot read is no longer read in
|
|
70
|
+
part. `FROM ABT 1924 TO 1959` was read as `TO 1959`, dropping the start
|
|
71
|
+
without a word, and `BET 1950 AND JULIAN DEC 302` as a range with only
|
|
72
|
+
its first end; `FROM Infant` was a period with neither end. Each is now
|
|
73
|
+
`DateKind::Unparsed`, keeps its text as the phrase, and still offers its
|
|
74
|
+
year to sort by; `to_version_7` keeps it whole as an empty `DATE` with a
|
|
75
|
+
`PHRASE`. A range whose ends are both dates reads as before.
|
|
76
|
+
- The date reader no longer accepts a day its month does not have.
|
|
77
|
+
`1834-02-30` and `30 FEB 1834` were read as 30 February 1834; they are
|
|
78
|
+
now unparsed, as is `29 FEB 1834`. Leap years follow the payload's
|
|
79
|
+
calendar: `@#DJULIAN@ 29 FEB 1900` is read and `@#DGREGORIAN@ 29 FEB
|
|
80
|
+
1900` is not. A payload with no calendar escape keeps the Julian leap
|
|
81
|
+
day, since files often leave the escape off a Julian date, so
|
|
82
|
+
`29 FEB 1900` is still read; ISO 8601's `1900-02-29` is not, since ISO
|
|
83
|
+
8601 is Gregorian by definition. A dual year's leap day is its second
|
|
84
|
+
year's, so `29 FEB 1711/12` and `@#DJULIAN@ 29 FEB 1711/12` are read. A
|
|
85
|
+
Roman or unrecognized calendar is held to the Julian month lengths, and
|
|
86
|
+
no Hebrew or French Republican month has more than 30 days. A numeric
|
|
87
|
+
date with a month or day out of range (`1834-13-05`, `13/05/1834`) is
|
|
88
|
+
unparsed too; before, the piece out of range was dropped and the rest
|
|
89
|
+
read (`1834-13-05` as the year 1834).
|
|
90
|
+
- `convert::to_version_5_5_1` no longer writes `INT (…)`, an interpreted
|
|
91
|
+
date with no date, for a version 7 `DATE` that is empty beside its
|
|
92
|
+
`PHRASE`; 5.5.1 does not allow it. The phrase is written as 5.5.1's date
|
|
93
|
+
phrase, `(FROM ABT 1924 TO 1959)`, or as the date itself when it is
|
|
94
|
+
already one in 5.5.1's grammar that version 7 cannot spell, so a dual
|
|
95
|
+
year (`1740/41`) comes back as the date it was.
|
|
96
|
+
- `convert::to_version_7` / `to_version_7_with` convert a personal name's
|
|
97
|
+
type (`INDI`.`NAME`.`TYPE`), which 5.5.1 writes as free text and version
|
|
98
|
+
7 as an enumeration. A value that is one of version 7's words in any case
|
|
99
|
+
(`aka`, `birth`, `immigrant`, `maiden`, `married`, `professional`,
|
|
100
|
+
`other`) becomes that word in upper case; any other becomes `OTHER`, with
|
|
101
|
+
the text kept verbatim as a `PHRASE`, the way a role has been converted
|
|
102
|
+
since 0.1.13. Before, `TYPE aka` was carried into the 7.0 document as it
|
|
103
|
+
stood, where it is not valid. A type that already has a `PHRASE`, is
|
|
104
|
+
empty, or has a continuation line with substructures is kept and
|
|
105
|
+
reported.
|
|
106
|
+
|
|
10
107
|
## [0.1.18] - 2026-10-16
|
|
11
108
|
|
|
12
109
|
### Added
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# was checked on crates.io, npm, and PyPI before the initial release.
|
|
4
4
|
[package]
|
|
5
5
|
name = "gedcomkit"
|
|
6
|
-
version = "0.1.
|
|
6
|
+
version = "0.1.20"
|
|
7
7
|
description = "A byte-preserving GEDCOM document model: decoding, parsing, readings, version conversion, plausibility checks, and the GEDZIP container, for GEDCOM 5.5 through 7.x."
|
|
8
8
|
edition = "2024"
|
|
9
9
|
# The true minimum, not the workspace's toolchain: a parser library is a leaf
|
|
@@ -42,12 +42,8 @@ npm install gedcomkit
|
|
|
42
42
|
2. Run the gates and release dry run:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
cargo
|
|
46
|
-
cargo
|
|
47
|
-
cargo test --all-features
|
|
48
|
-
cargo test --no-default-features
|
|
49
|
-
cargo check --manifest-path bindings/gedcomkit-wasm/Cargo.toml --target wasm32-unknown-unknown
|
|
50
|
-
cargo check --manifest-path bindings/gedcomkit-py/Cargo.toml
|
|
45
|
+
cargo ci
|
|
46
|
+
cargo +1.88 ci test
|
|
51
47
|
cargo publish --locked --dry-run
|
|
52
48
|
bash scripts/check-release-tag.sh vX.Y.Z
|
|
53
49
|
```
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
|
|
36
36
|
[[package]]
|
|
37
37
|
name = "gedcomkit"
|
|
38
|
-
version = "0.1.
|
|
38
|
+
version = "0.1.20"
|
|
39
39
|
dependencies = [
|
|
40
40
|
"flate2",
|
|
41
41
|
"serde",
|
|
@@ -43,7 +43,7 @@ dependencies = [
|
|
|
43
43
|
|
|
44
44
|
[[package]]
|
|
45
45
|
name = "gedcomkit-py"
|
|
46
|
-
version = "0.1.
|
|
46
|
+
version = "0.1.20"
|
|
47
47
|
dependencies = [
|
|
48
48
|
"gedcomkit",
|
|
49
49
|
"pyo3",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# abi3 keeps it to one wheel per platform across Python versions.
|
|
3
3
|
[package]
|
|
4
4
|
name = "gedcomkit-py"
|
|
5
|
-
version = "0.1.
|
|
5
|
+
version = "0.1.20"
|
|
6
6
|
description = "Python bindings for gedcomkit: an archival-grade GEDCOM library — byte-preserving round-trip, encoding detection, GEDCOM 5.5 through 7.x, GEDZIP."
|
|
7
7
|
edition = "2024"
|
|
8
8
|
rust-version = "1.88"
|
|
@@ -19,6 +19,29 @@ class RecordSpec(TypedDict):
|
|
|
19
19
|
value: NotRequired[str | None]
|
|
20
20
|
children: NotRequired[list[RecordSpec]]
|
|
21
21
|
|
|
22
|
+
class EventView(TypedDict):
|
|
23
|
+
"""One entry of an individual's or a family's ``events``.
|
|
24
|
+
|
|
25
|
+
``date`` is the DATE payload exactly as written. ``datePhrase`` is the
|
|
26
|
+
GEDCOM 7 PHRASE beneath that DATE, or ``None``: beside a date, or the
|
|
27
|
+
only text an empty 7.0 DATE has. A 5.5.1 phrase is part of ``date``.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
tag: str
|
|
31
|
+
label: str
|
|
32
|
+
date: str | None
|
|
33
|
+
datePhrase: str | None
|
|
34
|
+
dateDisplay: str | None
|
|
35
|
+
year: int | None
|
|
36
|
+
sortKey: int | None
|
|
37
|
+
place: str | None
|
|
38
|
+
age: str | None
|
|
39
|
+
cause: str | None
|
|
40
|
+
attribute: bool
|
|
41
|
+
value: str | None
|
|
42
|
+
citations: list[str]
|
|
43
|
+
path: list[int]
|
|
44
|
+
|
|
22
45
|
class WrappedLine(TypedDict):
|
|
23
46
|
record: str
|
|
24
47
|
path: list[int]
|
|
@@ -42,8 +65,10 @@ class Gedcom:
|
|
|
42
65
|
def content_records(self) -> int: ...
|
|
43
66
|
def records(self) -> list[dict[str, Any]]: ...
|
|
44
67
|
def record(self, xref: str) -> dict[str, Any]: ...
|
|
45
|
-
def individuals(self) -> list[dict[str, Any]]:
|
|
46
|
-
|
|
68
|
+
def individuals(self) -> list[dict[str, Any]]:
|
|
69
|
+
"""Every individual's view; each of its ``events`` is an ``EventView``."""
|
|
70
|
+
def families(self) -> list[dict[str, Any]]:
|
|
71
|
+
"""Every family's view; each of its ``events`` is an ``EventView``."""
|
|
47
72
|
def validate(self) -> list[dict[str, Any]]:
|
|
48
73
|
"""Plausibility findings, each with ``record``, ``check``, ``severity``
|
|
49
74
|
and ``message``. ``check`` is the core's stable rule name, such as
|
|
@@ -224,6 +224,8 @@ impl Gedcom {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
/// Every individual, read for display: names, events, families, IDs.
|
|
227
|
+
/// Each event has its `date` payload as written and, beside it,
|
|
228
|
+
/// `datePhrase`: the GEDCOM 7 `PHRASE` under the date, or `None`.
|
|
227
229
|
fn individuals(&self, py: Python<'_>) -> PyResult<Vec<Py<PyAny>>> {
|
|
228
230
|
self.document
|
|
229
231
|
.records_of("INDI")
|
|
@@ -231,7 +233,7 @@ impl Gedcom {
|
|
|
231
233
|
.collect()
|
|
232
234
|
}
|
|
233
235
|
|
|
234
|
-
/// Every family record's view.
|
|
236
|
+
/// Every family record's view, its events shaped as `individuals`' are.
|
|
235
237
|
fn families(&self, py: Python<'_>) -> PyResult<Vec<Py<PyAny>>> {
|
|
236
238
|
self.document
|
|
237
239
|
.records_of("FAM")
|
|
@@ -316,7 +316,7 @@ impl Node {
|
|
|
316
316
|
/// beside a space loses that space on re-joining. Failing that — a run
|
|
317
317
|
/// of spaces wider than the limit, say — the cut falls back to the
|
|
318
318
|
/// latest legal byte boundary instead, which is documented behavior of
|
|
319
|
-
///
|
|
319
|
+
/// the private `cut` this call reuses, not a special case here.
|
|
320
320
|
///
|
|
321
321
|
/// The rendered line is measured in UTF-8 bytes, including level,
|
|
322
322
|
/// optional cross-reference, tag, delimiters, and a terminator reserved
|