gedcomkit 0.1.6__tar.gz → 0.1.8__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.6 → gedcomkit-0.1.8}/CHANGELOG.md +66 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/Cargo.lock +1 -1
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/Cargo.toml +1 -1
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/PKG-INFO +1 -1
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/bindings/gedcomkit-py/Cargo.lock +2 -2
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/bindings/gedcomkit-py/Cargo.toml +1 -1
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/bindings/gedcomkit-py/gedcomkit.pyi +8 -2
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/bindings/gedcomkit-py/src/lib.rs +25 -5
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/convert.rs +479 -68
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/dates.rs +178 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/LICENSE +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/README.md +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/bindings/gedcomkit-py/LICENSE +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/bindings/gedcomkit-py/README.md +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/LICENSE +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/README.md +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/cardinalities.tsv +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/enumerations.tsv +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/enumerationsets.tsv +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/grammar.abnf +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/grammar.gedstruct +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/payloads.tsv +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom-spec/substructures.tsv +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/age-invalid.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/age-valid.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/atsign.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_ascii_1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_ascii_2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_utf16be-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_utf16be-2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_utf16le-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_utf16le-2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_utf8-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_utf8-2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/char_utf8-3.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/date-all.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/date-dual-invalid.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/date-dual-valid.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/enum-ext.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/filename-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/lang-all.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/notes-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/obje-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/obsolete-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/pedi-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/rela_1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/sour-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/tiny-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/5/xref-case.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/age-invalid.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/age-valid.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/atsign.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_ascii_1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_ascii_2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_utf16be-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_utf16be-2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_utf16le-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_utf16le-2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_utf8-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_utf8-2.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/char_utf8-3.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/date-all.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/date-dual-invalid.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/enum-ext.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/filename-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/lang-all.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/notes-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/obje-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/obsolete-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/pedi-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/rela_1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/sour-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/tiny-1.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/7/xref-case.ged +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/LICENSE +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/gedcom7code/UPSTREAM-README.md +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/zip-interop/README.md +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/zip-interop/python-zip64.gdz +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/fixtures/vendored/zip-interop/python-zipfile.gdz +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/pyproject.toml +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/build.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/decode.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/family.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/gedzip.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/lib.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/names.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/schema.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/synthetic.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/tags.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/validate.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/src/view.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/tests/endurance.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/tests/external_charset.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/tests/properties.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/tests/requirement_corpus.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/tests/spec_conformance.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/tests/vendored_corpus.rs +0 -0
- {gedcomkit-0.1.6 → gedcomkit-0.1.8}/tests/version_conversion.rs +0 -0
|
@@ -5,6 +5,72 @@ format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and
|
|
|
5
5
|
the project uses semantic versioning within the usual pre-1.0 compatibility
|
|
6
6
|
rules.
|
|
7
7
|
|
|
8
|
+
## [0.1.8] - 2026-09-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Python wheels for Windows (x86_64) and macOS (Apple silicon and Intel)
|
|
13
|
+
on PyPI, beside the Linux wheel, so installing on those platforms no
|
|
14
|
+
longer compiles Rust from the source distribution. All three are
|
|
15
|
+
cross-compiled on the Linux release runner — macOS with zig, Windows with
|
|
16
|
+
cargo-xwin — and, being abi3, each serves Python 3.9 onward. (PyO3 links
|
|
17
|
+
`python3.dll` by raw-dylib, so the Windows build needs no Windows Python.)
|
|
18
|
+
|
|
19
|
+
## [0.1.7] - 2026-09-27
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- `dates::GedcomDate::to_gedcom_7`, the reading written in GEDCOM 7.0's own
|
|
24
|
+
date grammar (`about 5 January 1882` → `ABT 5 JAN 1882`), or `None` when
|
|
25
|
+
that grammar cannot hold it without loss — no `INT`, no dual year, and the
|
|
26
|
+
calendar as a bare word (`JULIAN 10 MAR 1700`).
|
|
27
|
+
- Python and JavaScript/WASM: `parse_date` / `parseDate`'s reading gained a
|
|
28
|
+
`gedcom7` key alongside `gedcom551`.
|
|
29
|
+
- `convert::to_version_7_with`'s owned-extension-tags parameter, now exposed
|
|
30
|
+
by both bindings: Python's `Gedcom.to_version7(owned=[(tag, uri), ...])`
|
|
31
|
+
and WASM's `toVersion7([[tag, uri], ...])`, either omittable.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- `convert::to_version_7` now rewrites every `DATE` payload the lenient
|
|
36
|
+
reader understands but that is not version 7's own grammar — `29 May
|
|
37
|
+
1823`, `about 1575`, `13. september 1900`, `<1873>`, `ABT Oct 1803`,
|
|
38
|
+
`1740/41`, `@#DJULIAN@ 10 MAR 1700`, `44 B.C.`, and the like — instead of
|
|
39
|
+
passing most of them through unreported. Each becomes the version 7
|
|
40
|
+
reading (or, when none exists — an unparsed expression, a dual year, a
|
|
41
|
+
calendar version 7 cannot spell — an empty `DATE`), with the original kept
|
|
42
|
+
verbatim in a `PHRASE` substructure and the change named in the report. A
|
|
43
|
+
payload already in version 7's grammar is left untouched, byte for byte.
|
|
44
|
+
- `convert::to_version_7` now converts `OBJE.FILE.FORM`'s file extension
|
|
45
|
+
(`jpg`, `png`, `pdf`, `html`, `txt`, …) to a version 7 media type
|
|
46
|
+
(`image/jpeg`, `image/png`, `application/pdf`, `text/html`,
|
|
47
|
+
`text/plain`, …) and `FORM.MEDI`'s source medium to version 7's
|
|
48
|
+
enumeration, upper case (`PHOTO`, `NEWSPAPER`, …), folding anything else
|
|
49
|
+
into `OTHER` with the original kept as a `PHRASE`. An extension with no
|
|
50
|
+
known media type is kept as written and reported as kept rather than
|
|
51
|
+
guessed. Both are named in the report under new `FILE.FORM` and
|
|
52
|
+
`FORM.MEDI` notes, alongside the existing `OBJE.FORM` note for the move
|
|
53
|
+
from object to file. This covers 5.5.1's own layout, where `FORM` already
|
|
54
|
+
sits under `FILE` and the source medium is `TYPE` (renamed `MEDI`), as
|
|
55
|
+
well as 5.5's `FORM` on the object. Known extensions now include `heic`,
|
|
56
|
+
`webp`, `svg`, `json`, `xml`, `eml` and `mp4`.
|
|
57
|
+
- `convert::to_version_7` percent-encodes a `FILE` path that is not a URI
|
|
58
|
+
reference, as version 7 requires — a space, a backslash, anything outside
|
|
59
|
+
ASCII — and reports it under a `FILE` note. A path that is already a URI
|
|
60
|
+
reference, escapes included, is untouched.
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
|
|
64
|
+
- A `DATE` rewritten by the version 7 conversion no longer keeps the
|
|
65
|
+
`CONT`/`CONC` lines its old payload was split across, which a later read
|
|
66
|
+
folded back into the new payload. A `DATE` that already carries a
|
|
67
|
+
`PHRASE` is left as it is and reported as kept, rather than given a
|
|
68
|
+
second `PHRASE`.
|
|
69
|
+
- `GedcomDate::to_gedcom_7` returns `None` for a Hebrew or French
|
|
70
|
+
Republican date with a month, rather than spelling that month with a
|
|
71
|
+
Gregorian abbreviation (`FRENCH_R 22 MAR 5`). A bare year is still
|
|
72
|
+
written.
|
|
73
|
+
|
|
8
74
|
## [0.1.6] - 2026-09-25
|
|
9
75
|
|
|
10
76
|
### 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.8"
|
|
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
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
|
|
36
36
|
[[package]]
|
|
37
37
|
name = "gedcomkit"
|
|
38
|
-
version = "0.1.
|
|
38
|
+
version = "0.1.8"
|
|
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.8"
|
|
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.8"
|
|
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"
|
|
@@ -60,7 +60,12 @@ class Gedcom:
|
|
|
60
60
|
def set_logical_value(self, xref: str, path: list[int], value: str) -> None: ...
|
|
61
61
|
def to_text(self) -> str: ...
|
|
62
62
|
def to_bytes(self) -> bytes: ...
|
|
63
|
-
def to_version7(
|
|
63
|
+
def to_version7(
|
|
64
|
+
self, owned: list[tuple[str, str]] | None = None
|
|
65
|
+
) -> tuple[Gedcom, list[dict[str, Any]]]:
|
|
66
|
+
"""Convert to GEDCOM 7.0. ``owned`` declares the caller's own
|
|
67
|
+
extension tags as ``(tag, uri)`` pairs; any other extension is
|
|
68
|
+
declared as undocumented rather than dropped."""
|
|
64
69
|
def to_version551(self) -> tuple[Gedcom, list[dict[str, Any]]]: ...
|
|
65
70
|
def __len__(self) -> int: ...
|
|
66
71
|
|
|
@@ -81,4 +86,5 @@ class ArchiveFileWriter:
|
|
|
81
86
|
|
|
82
87
|
def archive_total_size(data: bytes) -> int: ...
|
|
83
88
|
def parse_date(text: str) -> dict[str, Any]:
|
|
84
|
-
"""A date reading; its ``gedcom551``
|
|
89
|
+
"""A date reading; its ``gedcom551`` and ``gedcom7`` keys are the 5.5.1
|
|
90
|
+
and 7.0 spellings, each ``None`` when that grammar cannot hold it."""
|
|
@@ -283,8 +283,24 @@ impl Gedcom {
|
|
|
283
283
|
|
|
284
284
|
/// An explicit conversion to GEDCOM 7.0: the converted document and the
|
|
285
285
|
/// notes naming every construct touched, dropped, or kept.
|
|
286
|
-
|
|
287
|
-
|
|
286
|
+
///
|
|
287
|
+
/// `owned` names the extension tags the caller writes itself, each paired
|
|
288
|
+
/// with the URI it is documented at — `[("_PRIM", "https://example.com/PRIM")]`.
|
|
289
|
+
/// Those are declared by name; any other extension in the file is
|
|
290
|
+
/// declared as undocumented rather than dropped, because it is somebody's
|
|
291
|
+
/// data either way.
|
|
292
|
+
#[pyo3(signature = (owned = None))]
|
|
293
|
+
fn to_version7(
|
|
294
|
+
&self,
|
|
295
|
+
py: Python<'_>,
|
|
296
|
+
owned: Option<Vec<(String, String)>>,
|
|
297
|
+
) -> PyResult<(Self, Vec<Py<PyAny>>)> {
|
|
298
|
+
let owned = owned.unwrap_or_default();
|
|
299
|
+
let owned: Vec<(&str, &str)> = owned
|
|
300
|
+
.iter()
|
|
301
|
+
.map(|(tag, uri)| (tag.as_str(), uri.as_str()))
|
|
302
|
+
.collect();
|
|
303
|
+
let outcome = gedcomkit::convert::to_version_7_with(&self.document, &owned);
|
|
288
304
|
let notes = outcome
|
|
289
305
|
.notes
|
|
290
306
|
.iter()
|
|
@@ -466,20 +482,23 @@ fn os_error(path: &std::path::Path, error: &std::io::Error) -> PyErr {
|
|
|
466
482
|
PyOSError::new_err(format!("{}: {error}", path.display()))
|
|
467
483
|
}
|
|
468
484
|
|
|
469
|
-
/// A date reading, with the
|
|
485
|
+
/// A date reading, with the renderings a caller most often wants.
|
|
470
486
|
#[derive(Serialize)]
|
|
471
487
|
struct DateReading<'a> {
|
|
472
488
|
#[serde(flatten)]
|
|
473
489
|
date: &'a GedcomDate,
|
|
474
490
|
display: String,
|
|
475
491
|
gedcom551: Option<String>,
|
|
492
|
+
gedcom7: Option<String>,
|
|
476
493
|
}
|
|
477
494
|
|
|
478
495
|
/// Reads a date as the library reads any `DATE` payload — every language
|
|
479
496
|
/// and spelling it knows — and returns the reading as a dict: `original`,
|
|
480
497
|
/// `calendar`, `kind`, `earliest`, `latest`, `phrase`, the `display` form,
|
|
481
|
-
///
|
|
482
|
-
/// 1882`),
|
|
498
|
+
/// `gedcom551`, the reading in GEDCOM 5.5.1's own grammar (`ABT 5 JAN
|
|
499
|
+
/// 1882`), and `gedcom7`, the reading in GEDCOM 7.0's own grammar (`ABT 5
|
|
500
|
+
/// JAN 1882`, with no `INT` and no dual year) — either `None` when that
|
|
501
|
+
/// grammar cannot hold it without loss.
|
|
483
502
|
#[pyfunction]
|
|
484
503
|
fn parse_date(py: Python<'_>, text: &str) -> PyResult<Py<PyAny>> {
|
|
485
504
|
let date = GedcomDate::parse(text);
|
|
@@ -488,6 +507,7 @@ fn parse_date(py: Python<'_>, text: &str) -> PyResult<Py<PyAny>> {
|
|
|
488
507
|
&DateReading {
|
|
489
508
|
display: date.display(),
|
|
490
509
|
gedcom551: date.to_gedcom_5_5_1(),
|
|
510
|
+
gedcom7: date.to_gedcom_7(),
|
|
491
511
|
date: &date,
|
|
492
512
|
},
|
|
493
513
|
)
|