@@ -28,63 +28,17 @@ C# library (net48) with 22 source files (~19K lines). Complex import pipeline co
2828Import flow: User selects Paratext project → ParatextSfmImporter parses USFM → BookMerger detects differences → User reviews/resolves differences → Import updates LCModel Scripture → UndoImportManager tracks changes for rollback.
2929
3030## Key Components
31-
32- ### Import Management
33- - ** ParatextImportManager** (ParatextImportManager.cs) - Central coordinator for Paratext imports
34- - Entry point: ` ImportParatext(Form mainWnd, LcmCache cache, IScrImportSet importSettings, ...) ` - Static entry point called via reflection
35- - ` ImportSf() ` - Main import workflow with undo task wrapping
36- - ` CompleteImport(ScrReference firstImported) ` - Post-import finalization
37- - Manages UndoImportManager, settings, and UI coordination
38- - ** ParatextImportUi** (ParatextImportUi.cs) - UI presentation and dialogs
39- - ** ParatextSfmImporter** (ParatextSfmImporter.cs) - USFM/SFM file parsing and import logic
40-
41- ### Difference Detection and Merging
42- - ** BookMerger** (BookMerger.cs) - Scripture book comparison and merge engine
43- - ` DetectDifferences(IScrBook bookCurr, IScrBook bookRev, ...) ` - Identify changes between versions
44- - ` MakeParaCorrelationInfo(...) ` - Calculate paragraph correlation factors
45- - Uses ** ParaCorrelationInfo** for tracking paragraph mappings
46- - ** Cluster** (Cluster.cs) - Groups related differences for user review
47- - ` ClusterType ` enum: AddedVerses, MissingVerses, OrphanedVerses, etc.
48- - ** ClusterListHelper** , ** OverlapInfo** , ** SectionHeadCorrelationHelper** - Cluster analysis utilities
49- - ** Difference** (Difference.cs) - Individual Scripture change representation
50- - ` DifferenceType ` enum: SectionHeadAddedToCurrent, TextDifference, VerseMoved, etc.
51- - ** DifferenceList** , ** Comparison** - Difference collections and analysis
52- - ** DiffLocation** (DiffLocation.cs) - Scripture reference and location tracking
53-
54- ### Wrapper Interfaces (Legacy Adaptation)
55- - ** ISCScriptureText** (ISCScriptureText.cs) - Abstracts Paratext text access
56- - ** ISCTextSegment** (ISCTextSegment.cs) - Individual text segment interface
57- - ** ISCTextEnum** (ISCTextEnum.cs) - Enumeration over text segments
58- - ** IBookVersionAgent** (IBookVersionAgent.cs) - Book version comparison contract
59- - ** SCScriptureText** , ** SCTextSegment** , ** SCTextEnum** (SC* .cs) - Implementations wrapping Paratext SDK
60-
61- ### Support Classes
62- - ** ImportedBooks** (ImportedBooks.cs) - Tracks which books were imported in session
63- - ** ImportStyleProxy** (ImportStyleProxy.cs) - Style mapping and proxy creation
64- - ** ScrAnnotationInfo** (ScrAnnotationInfo.cs) - Scripture annotation metadata
65- - ** ScrObjWrapper** (ScrObjWrapper.cs) - Wraps LCModel Scripture objects for comparison
66- - ** UndoImportManager** (UndoImportManager.cs) - Import rollback tracking
67- - ** ReplaceInFilterFixer** (ReplaceInFilterFixer.cs) - Filter updates during import
68- - ** ParatextLoadException** (ParatextLoadException.cs) - Import-specific exceptions
69- - ** ParatextImportExtensions** (ParatextImportExtensions.cs) - Extension methods for import
31+ - ** ParatextImportManager** : Central coordinator, ImportParatext() entry point, manages UndoImportManager
32+ - ** BookMerger/Cluster/Difference** : Detects differences, groups for review, represents individual changes
33+ - ** ISCScriptureText interfaces** : Abstracts Paratext SDK access (ISCTextSegment, ISCTextEnum, IBookVersionAgent)
34+ - ** Support classes** : ImportedBooks, ImportStyleProxy, ScrObjWrapper, UndoImportManager
7035
7136## Technology Stack
72- - ** Language** : C#
73- - ** Target framework** : .NET Framework 4.8.x (net48)
74- - ** Key libraries** :
75- - LCModel (Scripture data model, LcmCache)
76- - LCModel.Core (IScrBook, IScrSection, ITsString)
77- - Common/Controls (UI dialogs, progress indicators)
78- - Common/FwUtils (IApp, utilities)
79- - Common/RootSites (UI integration)
80- - SIL.Reporting (logging)
81- - ** External integration** : Paratext SDK (wrapped via ISCScriptureText interfaces)
82- - ** Resource files** : .resx for localized strings
37+ C# (net48). Key libraries: LCModel, LCModel.Core, Common/Controls, Paratext SDK (wrapped via ISCScriptureText interfaces).
8338
8439## Dependencies
85- - ** Upstream** : LCModel.Core (Scripture, Text, KernelInterfaces), LCModel (cache, domain services, infrastructure), Common/Controls (UI), Common/FwUtils (utilities, IApp), Common/RootSites (UI integration), SIL.Reporting (logging)
86- - ** Downstream consumers** : xWorks (import commands), LexText applications (Scripture import), Common/ScriptureUtils (ParatextHelper coordination)
87- - ** External** : Paratext SDK (not bundled - USFM/project access via wrappers)
40+ ** Upstream** : LCModel, Common/Controls, Paratext SDK
41+ ** Downstream** : xWorks, LexText applications, Common/ScriptureUtils
8842
8943## Interop & Contracts
9044- ** Paratext SDK abstraction** : ISCScriptureText, ISCTextSegment, ISCTextEnum interfaces
@@ -136,38 +90,7 @@ ParatextImportManager.ImportParatext() called via reflection from File→Import
13690- ** Coverage** : USFM parsing, difference detection, merge logic, style handling, undo tracking
13791
13892## Usage Hints
139- - ** Typical import workflow** :
140- 1 . Ensure Paratext project exists and is accessible
141- 2 . In FLEx: File→Import→Paratext Project
142- 3 . Select project and books to import
143- 4 . Review detected differences (additions, changes, deletions)
144- 5 . Resolve conflicts (choose Paratext version, FLEx version, or manual merge)
145- 6 . Complete import (updates Scripture data in LCModel)
146- - ** Difference types** : 33+ types categorized for review
147- - Additions: SectionHeadAddedToCurrent, VersesAddedToCurrent
148- - Deletions: SectionHeadMissingInCurrent, VersesMissingInCurrent
149- - Changes: TextDifference, VerseNumberDifference
150- - Moves: VerseMoved, SectionHeadMoved
151- - ** Cluster grouping** : Related differences grouped for efficient review
152- - AddedVerses cluster: All added verses in a range
153- - MissingVerses cluster: All missing verses in a range
154- - OrphanedVerses cluster: Verses without clear correlation
155- - ** Undo/rollback** : Import wrapped in single UndoTask
156- - Edit→Undo after import rolls back all changes atomically
157- - ** Performance tips** :
158- - Import large books (Psalms, Isaiah) in smaller batches if slow
159- - Review differences carefully; auto-merge can have unexpected results
160- - Use "Accept all" cautiously; review conflicts manually
161- - ** Common pitfalls** :
162- - Paratext project not accessible: Verify Paratext installation and permissions
163- - Style mapping errors: Ensure FW styles exist for USFM markers
164- - Merge conflicts: Manual resolution required for ambiguous changes
165- - Large imports: Can take minutes for books with heavy edits
166- - ** Debugging tips** :
167- - Enable logging (SIL.Reporting) for detailed difference detection traces
168- - Use ParatextImportNoUi tests for reproducing issues without UI
169- - Mock ISCScriptureText for testing without Paratext SDK
170- - ** Extension points** : Implement ISCScriptureText for custom scripture sources
93+ File→Import→Paratext Project, select books, review 33+ difference types (additions/deletions/changes/moves), resolve conflicts, complete import. Import wrapped in single UndoTask for rollback.
17194
17295## Related Folders
17396- ** Common/ScriptureUtils/** : Paratext integration
0 commit comments