Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,4 +105,4 @@ releases may contain breaking changes.
("bulk-editing glosses" and "building a LIFT export from scratch", complete
runnable scripts with verified output) and
a "Differences from the C# libraries" page summarizing where sil-lift
deviates from SIL.Lift/LiftSorter/Chorus behavior and why.
deviates from SIL.Lift/LiftSorter behavior and why.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ byte-identity tests and property-based (Hypothesis) round-trip tests.
rejected with a clear error; one-off migration of legacy files is possible
with the XSLTs in the
[lift-standard](https://github.com/sillsdev/lift-standard) repository.
- No merging (see [Chorus](https://github.com/sillsdev/chorus)) and no LDML
interpretation (writing-system files are carried, not parsed).
- No merging and no LDML interpretation (writing-system files are carried, not
parsed).

## Versioning

Expand Down
7 changes: 3 additions & 4 deletions docs/en/csharp-differences.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
# Differences from the C# libraries

sil-lift is loosely analogous to SIL's C# LIFT tooling — chiefly `SIL.Lift` in [libpalaso](https://github.com/sillsdev/libpalaso) (parser, validator, migrator, `LiftSorter`), `SIL.DictionaryServices` in the same repo (the `LexEntry`/`LexSense` model, with its own LIFT reader/writer, that The Combine and WeSay use), and the LIFT handlers in [Chorus](https://github.com/sillsdev/chorus). It is a fresh implementation, not a port. This page summarizes where behavior deliberately differs.
sil-lift is loosely analogous to SIL's C# LIFT tooling — chiefly `SIL.Lift` in [libpalaso](https://github.com/sillsdev/libpalaso) (parser, validator, migrator, `LiftSorter`) and `SIL.DictionaryServices` in the same repo (the `LexEntry`/`LexSense` model, with its own LIFT reader/writer, that The Combine and WeSay use). It is a fresh implementation, not a port. This page summarizes where behavior deliberately differs.

## Scope

| Capability | C# libraries | sil-lift |
| ------------------ | ---------------------------------- | ---------------------------------------------------------- |
| LIFT versions | 0.10–0.13 (migration built in) | **0.13 only**; older versions rejected with a clear error |
| Version migration | `Migrator` (XSLT chain) | none — use the XSLTs in lift-standard for one-off upgrades |
| 3-way merge / sync | Chorus | out of scope |
| Validation | RELAX NG only (`Validator`) | RELAX NG + ranges schema + semantic checks |
| Streaming | internal entry-granularity parsing | public `open_reader` / `open_writer` API |

Expand All @@ -21,7 +20,7 @@ sil-lift is loosely analogous to SIL's C# LIFT tooling — chiefly `SIL.Lift` in
The strongest deliberate difference. Saving with `SIL.Lift` re-serializes the whole document. sil-lift guarantees:

- an unchanged document saves **byte-identically**, and
- untouched entries keep their exact source bytes even when other entries change — the same per-entry byte chunking Chorus uses, applied automatically.
- untouched entries keep their exact source bytes even when other entries change — per-entry byte chunking, applied automatically.

See [Fidelity guarantees](fidelity.md).

Expand All @@ -48,5 +47,5 @@ The spec repo's `canonicalizeLift.xsl` is not used at all: it collapses whitespa
## Not carried over

- WeSay-specific conveniences (dashboard/config handling around LIFT files).
- `SynchronicMerger` (Chorus update merging) — the byte-chunking idea lives on in the fidelity layer, the merging does not.
- `SynchronicMerger` (LIFT update-file merging) — the byte-chunking idea lives on in the fidelity layer, the merging does not.
- LDML writing-system parsing: files in `WritingSystems/` are treated as opaque folder content.
9 changes: 4 additions & 5 deletions tests/corpus/PROVENANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,10 @@ that script; committed so tests don't depend on regeneration.

## Not fetchable as files

- **chorus / LiftTools test data**: verified at pinned SHAs (`7313dd6…`,
`f3e87cc…`) that neither repo contains any standalone `.lift`/`.lift-ranges`
file — their LIFT test data is inline C# strings. The C# suites remain a
behavioral oracle; targeted extraction into `negative/`/edge-case fixtures
happens as needed.
- **LiftTools test data**: verified at a pinned SHA (`f3e87cc…`) that the repo
contains no standalone `.lift`/`.lift-ranges` file — its LIFT test data is
inline C# strings. The C# suites remain a behavioral oracle; targeted
extraction into `negative/`/edge-case fixtures happens as needed.
- **libpalaso inline edge-case XML**: extracted as needed.
- **Enggano export**: license/permission check pending; not fetched.

Expand Down