gedcomkit 0.1.9__tar.gz → 0.1.11__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.9 → gedcomkit-0.1.11}/CHANGELOG.md +59 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/Cargo.lock +89 -2
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/Cargo.toml +9 -1
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/PKG-INFO +1 -1
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/README.md +3 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/bindings/gedcomkit-py/Cargo.lock +2 -2
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/bindings/gedcomkit-py/Cargo.toml +1 -1
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/bindings/gedcomkit-py/src/lib.rs +20 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/build.rs +427 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/convert.rs +2 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/dates.rs +6 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/decode.rs +2 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/family.rs +1 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/lib.rs +110 -5
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/validate.rs +2 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/view.rs +16 -2
- gedcomkit-0.1.11/tests/typescript.rs +84 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/LICENSE +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/bindings/gedcomkit-py/LICENSE +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/bindings/gedcomkit-py/README.md +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/bindings/gedcomkit-py/gedcomkit.pyi +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/LICENSE +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/README.md +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/cardinalities.tsv +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/enumerations.tsv +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/enumerationsets.tsv +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/grammar.abnf +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/grammar.gedstruct +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/payloads.tsv +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom-spec/substructures.tsv +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/age-invalid.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/age-valid.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/atsign.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_ascii_1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_ascii_2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_utf16be-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_utf16be-2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_utf16le-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_utf16le-2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_utf8-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_utf8-2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/char_utf8-3.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/date-all.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/date-dual-invalid.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/date-dual-valid.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/enum-ext.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/filename-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/lang-all.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/notes-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/obje-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/obsolete-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/pedi-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/rela_1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/sour-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/tiny-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/5/xref-case.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/age-invalid.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/age-valid.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/atsign.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_ascii_1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_ascii_2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_utf16be-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_utf16be-2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_utf16le-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_utf16le-2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_utf8-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_utf8-2.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/char_utf8-3.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/date-all.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/date-dual-invalid.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/enum-ext.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/filename-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/lang-all.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/notes-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/obje-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/obsolete-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/pedi-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/rela_1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/sour-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/tiny-1.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/7/xref-case.ged +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/LICENSE +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/gedcom7code/UPSTREAM-README.md +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/zip-interop/README.md +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/zip-interop/python-zip64.gdz +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/fixtures/vendored/zip-interop/python-zipfile.gdz +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/pyproject.toml +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/gedzip.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/names.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/schema.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/synthetic.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/src/tags.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/tests/endurance.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/tests/external_charset.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/tests/properties.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/tests/requirement_corpus.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/tests/spec_conformance.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/tests/vendored_corpus.rs +0 -0
- {gedcomkit-0.1.9 → gedcomkit-0.1.11}/tests/version_conversion.rs +0 -0
|
@@ -5,6 +5,65 @@ 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.11] - 2026-09-28
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- A `ts` feature (off by default; implies `serde`) that derives
|
|
13
|
+
`ts_rs::TS` on every type the `serde` feature serializes — the views, the
|
|
14
|
+
date, encoding, conversion, and validation reports — so a caller that
|
|
15
|
+
sends them to a TypeScript frontend can generate its types from these
|
|
16
|
+
definitions rather than keep hand-written copies in step. The definitions
|
|
17
|
+
follow the JSON exactly: camelCase field names, `null` for an absent
|
|
18
|
+
value, and unit enums as their variant names. `StructureView::kind`, a
|
|
19
|
+
`&'static str`, is declared as the five words it can hold
|
|
20
|
+
(`"record" | "event" | "attribute" | "structure" | "unknown"`). Pulls in
|
|
21
|
+
`ts-rs` 12 (MIT) and its proc-macro only when enabled.
|
|
22
|
+
|
|
23
|
+
Two things a caller should know. ts-rs declares a 64-bit integer as
|
|
24
|
+
`bigint` by default, while the JSON carries a number: export with
|
|
25
|
+
`Config::with_large_int("number")` (as `tests/typescript.rs` does) for
|
|
26
|
+
definitions that match what `serde_json` writes. And a
|
|
27
|
+
`#[non_exhaustive]` enum becomes a closed TypeScript union, so a variant
|
|
28
|
+
added in a later patch release — additive in Rust — can break an
|
|
29
|
+
exhaustive `switch` in TypeScript until the definitions are regenerated.
|
|
30
|
+
|
|
31
|
+
## [0.1.10] - 2026-09-27
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- `Node::fit_line_limit`, `Document::fit_line_limit` (the same, addressed by
|
|
36
|
+
a record's cross-reference identifier), and the `MAX_LINE_LENGTH` constant
|
|
37
|
+
for GEDCOM 5.5.1's 255-byte line, for a caller to fit an edited record to
|
|
38
|
+
a pre-7.0 document's line limit just before serializing:
|
|
39
|
+
`set_logical_value` only ever splits a payload across `CONT` at the
|
|
40
|
+
newlines it is given, so a long edited line was otherwise written over
|
|
41
|
+
length. Only nodes with no verbatim source line are touched, checked
|
|
42
|
+
recursively, so a node no caller reached into keeps its exact bytes; a
|
|
43
|
+
pointer payload is never split either. The line is measured with a
|
|
44
|
+
2-byte terminator reserve — wider than `wrap_long_lines`' 1 byte — because
|
|
45
|
+
this is meant for a caller whose own pipeline may keep a source file's
|
|
46
|
+
`\r\n` terminator rather than always writing `\n`. Bound in both language
|
|
47
|
+
bindings as `fit_line_limit` (Python) and `fitLineLimit` (WASM), mirroring
|
|
48
|
+
`wrap_long_lines`/`wrapLongLines`.
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- `Document::next_xref` matched its prefix case-sensitively, so in a file
|
|
53
|
+
using lowercase identifiers (`@i1@`) `next_xref("I")` minted `@I1@` —
|
|
54
|
+
which `Document::record`'s case-insensitive lookup resolves to the
|
|
55
|
+
existing `@i1@`, silently colliding with it. The prefix match is now
|
|
56
|
+
case-insensitive, and the returned identifier is checked against every
|
|
57
|
+
existing xref case-insensitively and advanced past any collision. Its
|
|
58
|
+
doc comment claimed "the lowest unused" identifier while returning one
|
|
59
|
+
past the highest; the comment now says that.
|
|
60
|
+
- The same method minted `highest + 1` with unchecked arithmetic: a hostile
|
|
61
|
+
or fuzzed file carrying `@I18446744073709551615@` (`u64::MAX`) made it
|
|
62
|
+
panic in a debug build and wrap around to `@I0@` in release. Arithmetic
|
|
63
|
+
is now checked throughout, and once the series above the high-water mark
|
|
64
|
+
is exhausted, `next_xref` falls back to the lowest unused number instead
|
|
65
|
+
of overflowing.
|
|
66
|
+
|
|
8
67
|
## [0.1.9] - 2026-09-27
|
|
9
68
|
|
|
10
69
|
### Fixed
|
|
@@ -35,10 +35,11 @@ dependencies = [
|
|
|
35
35
|
|
|
36
36
|
[[package]]
|
|
37
37
|
name = "gedcomkit"
|
|
38
|
-
version = "0.1.
|
|
38
|
+
version = "0.1.11"
|
|
39
39
|
dependencies = [
|
|
40
40
|
"flate2",
|
|
41
41
|
"serde",
|
|
42
|
+
"ts-rs",
|
|
42
43
|
]
|
|
43
44
|
|
|
44
45
|
[[package]]
|
|
@@ -96,7 +97,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
|
|
|
96
97
|
dependencies = [
|
|
97
98
|
"proc-macro2",
|
|
98
99
|
"quote",
|
|
99
|
-
"syn",
|
|
100
|
+
"syn 3.0.5",
|
|
100
101
|
]
|
|
101
102
|
|
|
102
103
|
[[package]]
|
|
@@ -105,6 +106,17 @@ version = "0.3.10"
|
|
|
105
106
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
106
107
|
checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
|
|
107
108
|
|
|
109
|
+
[[package]]
|
|
110
|
+
name = "syn"
|
|
111
|
+
version = "2.0.119"
|
|
112
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
113
|
+
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
|
|
114
|
+
dependencies = [
|
|
115
|
+
"proc-macro2",
|
|
116
|
+
"quote",
|
|
117
|
+
"unicode-ident",
|
|
118
|
+
]
|
|
119
|
+
|
|
108
120
|
[[package]]
|
|
109
121
|
name = "syn"
|
|
110
122
|
version = "3.0.5"
|
|
@@ -116,8 +128,83 @@ dependencies = [
|
|
|
116
128
|
"unicode-ident",
|
|
117
129
|
]
|
|
118
130
|
|
|
131
|
+
[[package]]
|
|
132
|
+
name = "termcolor"
|
|
133
|
+
version = "1.4.1"
|
|
134
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
135
|
+
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
|
|
136
|
+
dependencies = [
|
|
137
|
+
"winapi-util",
|
|
138
|
+
]
|
|
139
|
+
|
|
140
|
+
[[package]]
|
|
141
|
+
name = "thiserror"
|
|
142
|
+
version = "2.0.21"
|
|
143
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
144
|
+
checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
|
|
145
|
+
dependencies = [
|
|
146
|
+
"thiserror-impl",
|
|
147
|
+
]
|
|
148
|
+
|
|
149
|
+
[[package]]
|
|
150
|
+
name = "thiserror-impl"
|
|
151
|
+
version = "2.0.21"
|
|
152
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
153
|
+
checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
|
|
154
|
+
dependencies = [
|
|
155
|
+
"proc-macro2",
|
|
156
|
+
"quote",
|
|
157
|
+
"syn 3.0.5",
|
|
158
|
+
]
|
|
159
|
+
|
|
160
|
+
[[package]]
|
|
161
|
+
name = "ts-rs"
|
|
162
|
+
version = "12.0.1"
|
|
163
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
164
|
+
checksum = "756050066659291d47a554a9f558125db17428b073c5ffce1daf5dcb0f7231d8"
|
|
165
|
+
dependencies = [
|
|
166
|
+
"thiserror",
|
|
167
|
+
"ts-rs-macros",
|
|
168
|
+
]
|
|
169
|
+
|
|
170
|
+
[[package]]
|
|
171
|
+
name = "ts-rs-macros"
|
|
172
|
+
version = "12.0.1"
|
|
173
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
174
|
+
checksum = "38d90eea51bc7988ef9e674bf80a85ba6804739e535e9cab48e4bb34a8b652aa"
|
|
175
|
+
dependencies = [
|
|
176
|
+
"proc-macro2",
|
|
177
|
+
"quote",
|
|
178
|
+
"syn 2.0.119",
|
|
179
|
+
"termcolor",
|
|
180
|
+
]
|
|
181
|
+
|
|
119
182
|
[[package]]
|
|
120
183
|
name = "unicode-ident"
|
|
121
184
|
version = "1.0.24"
|
|
122
185
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
123
186
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
|
187
|
+
|
|
188
|
+
[[package]]
|
|
189
|
+
name = "winapi-util"
|
|
190
|
+
version = "0.1.11"
|
|
191
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
192
|
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
193
|
+
dependencies = [
|
|
194
|
+
"windows-sys",
|
|
195
|
+
]
|
|
196
|
+
|
|
197
|
+
[[package]]
|
|
198
|
+
name = "windows-link"
|
|
199
|
+
version = "0.2.1"
|
|
200
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
201
|
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
|
202
|
+
|
|
203
|
+
[[package]]
|
|
204
|
+
name = "windows-sys"
|
|
205
|
+
version = "0.61.2"
|
|
206
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
207
|
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
|
208
|
+
dependencies = [
|
|
209
|
+
"windows-link",
|
|
210
|
+
]
|
|
@@ -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.11"
|
|
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,6 +42,11 @@ gedzip = ["dep:flate2"]
|
|
|
42
42
|
# Serialization of the read-only views, for callers that send them somewhere —
|
|
43
43
|
# a webview, a JSON API. Off by default: a parser needs no serializer.
|
|
44
44
|
serde = ["dep:serde"]
|
|
45
|
+
# TypeScript definitions of those same serialized shapes (`ts_rs::TS` on every
|
|
46
|
+
# type `serde` serializes), for a caller that generates its frontend's types
|
|
47
|
+
# from them rather than writing them by hand. Off by default, and meant for a
|
|
48
|
+
# build step or a test rather than a shipped binary.
|
|
49
|
+
ts = ["serde", "dep:ts-rs"]
|
|
45
50
|
# Generates a deterministic synthetic tree of any size, for performance and
|
|
46
51
|
# stress fixtures. Off by default: nothing an application ships needs it.
|
|
47
52
|
fixture = []
|
|
@@ -50,6 +55,9 @@ fixture = []
|
|
|
50
55
|
# `rust_backend` keeps deflate in pure Rust, so no system zlib is needed.
|
|
51
56
|
flate2 = { version = "1.1.2", default-features = false, features = ["rust_backend"], optional = true }
|
|
52
57
|
serde = { version = "1", features = ["derive"], optional = true }
|
|
58
|
+
# MIT; its default `serde-compat` reads the serde attributes, so the
|
|
59
|
+
# definitions follow the JSON the `serde` feature writes.
|
|
60
|
+
ts-rs = { version = "12.0.1", optional = true }
|
|
53
61
|
|
|
54
62
|
[lints.rust]
|
|
55
63
|
unsafe_code = "forbid"
|
|
@@ -198,6 +198,9 @@ than dropped.
|
|
|
198
198
|
`default-features = false` the parser core has **no dependencies at all**.
|
|
199
199
|
- `serde` — `Serialize` on the views and reports, for callers that send them
|
|
200
200
|
to a webview or over a wire. Off by default.
|
|
201
|
+
- `ts` — TypeScript definitions of those same serialized shapes
|
|
202
|
+
(`ts_rs::TS`), for a caller that generates its frontend's types from them.
|
|
203
|
+
Implies `serde`. Off by default.
|
|
201
204
|
- `fixture` — a deterministic, corpus-shaped synthetic tree generator of any
|
|
202
205
|
size, for performance and stress tests. Off by default.
|
|
203
206
|
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
|
|
36
36
|
[[package]]
|
|
37
37
|
name = "gedcomkit"
|
|
38
|
-
version = "0.1.
|
|
38
|
+
version = "0.1.11"
|
|
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.11"
|
|
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.11"
|
|
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"
|
|
@@ -167,6 +167,26 @@ impl Gedcom {
|
|
|
167
167
|
wrapped.iter().map(|line| to_py(py, line)).collect()
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
/// Fits one record inside a 5.5.x document's line limit
|
|
171
|
+
/// (`max_line_bytes`, terminator included; 255 is GEDCOM 5.5.1's limit)
|
|
172
|
+
/// by inserting `CONC` lines, addressed by cross-reference identifier.
|
|
173
|
+
/// Call this on a record just edited with `set_logical_value`, since
|
|
174
|
+
/// that only ever splits a payload at the newlines it is given. Returns
|
|
175
|
+
/// whether anything changed; a node still carrying its original,
|
|
176
|
+
/// unedited line is never touched. Raises `KeyError` when no record
|
|
177
|
+
/// answers to `xref`.
|
|
178
|
+
#[pyo3(signature = (xref, max_line_bytes = 255))]
|
|
179
|
+
fn fit_line_limit(&mut self, xref: &str, max_line_bytes: usize) -> PyResult<bool> {
|
|
180
|
+
let changed = self
|
|
181
|
+
.document
|
|
182
|
+
.fit_line_limit(xref, max_line_bytes)
|
|
183
|
+
.map_err(|_| PyKeyError::new_err(xref.to_owned()))?;
|
|
184
|
+
if changed {
|
|
185
|
+
self.graph = None;
|
|
186
|
+
}
|
|
187
|
+
Ok(changed)
|
|
188
|
+
}
|
|
189
|
+
|
|
170
190
|
/// What decoding decided, one line — show it before accepting an import.
|
|
171
191
|
#[getter]
|
|
172
192
|
fn encoding(&self) -> String {
|