Skip to content

Commit 91418eb

Browse files
Copilotjohnml1135
andcommitted
Add verification script and re-condense 3 files needing further reduction
Co-authored-by: johnml1135 <13733556+johnml1135@users.noreply.github.com>
1 parent 49df131 commit 91418eb

3 files changed

Lines changed: 1316 additions & 77 deletions

File tree

Src/LexText/ParserCore/COPILOT.md

Lines changed: 10 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -23,89 +23,22 @@ Morphological parser infrastructure supporting both HermitCrab and XAmple parsin
2323
C# library (net48) with 34 source files (~9K lines total). Contains 3 subprojects: ParserCore (main library), XAmpleManagedWrapper (C# wrapper for XAmple DLL), XAmpleCOMWrapper (C++/CLI COM wrapper for XAmple). Supports pluggable parser architecture via IParser interface (HCParser for HermitCrab, XAmpleParser for legacy XAmple).
2424

2525
## Key Components
26-
27-
### Parser Infrastructure
28-
- **ParserScheduler**: Background thread scheduler with priority queue (5 priority levels: ReloadGrammarAndLexicon, TryAWord, High, Medium, Low). Manages ParserWorker thread, queues ParserWork items, tracks queue counts per priority. Supports TryAWordWork, UpdateWordformWork, BulkParseWork.
29-
- Inputs: LcmCache, PropertyTable (XCore configuration)
30-
- Outputs: ParserUpdateEventArgs events for task progress
31-
- Threading: Single background thread, synchronized queue access
32-
- **ParserWorker**: Executes parse tasks on background thread. Creates active parser (HCParser or XAmpleParser based on MorphologicalDataOA.ActiveParser setting), instantiates ParseFiler for result filing, handles TryAWord() test parses and BulkUpdateOfWordforms() batch processing.
33-
- Inputs: LcmCache, taskUpdateHandler, IdleQueue, dataDir
34-
- Manages: IParser instance, ParseFiler, TaskReport progress
35-
- **ParseFiler**: Files parse results to database (creates IWfiAnalysis objects). Manages parse agent (XAmple or HC), handles WordformUpdatedEventArgs, updates wordforms with new analyses, merges duplicate analyses if enabled.
36-
- Inputs: LcmCache, ICmAgent (parser agent), IdleQueue, TaskReport callback
37-
- Outputs: IWfiAnalysis objects in database
38-
39-
### Parser Implementations
40-
- **HCParser** (IParser): HermitCrab parser implementation using SIL.Machine.Morphology.HermitCrab. Wraps Morpher and Language from SIL.Machine, manages FwXmlTraceManager for trace output, monitors ParserModelChangeListener for model changes. Supports GuessRoots, MergeAnalyses options. Maps HC Word/ShapeNode results to ParseResult/ParseAnalysis/ParseMorph.
41-
- Inputs: LcmCache
42-
- Methods: ParseWord(string), Update(), Reset(), IsUpToDate(), TraceWord(string, TextWriter), TraceWordXml(string, TextWriter)
43-
- Internal constants: CRuleID, FormID, MsaID, PRuleID, SlotID, TemplateID, IsNull, IsPrefix, Env, etc.
44-
- **XAmpleParser** (IParser): Legacy XAmple parser implementation via XAmpleManagedWrapper COM interop. Converts LCModel data to XAmple format using M3ToXAmpleTransformer and XAmplePropertiesPreparer. Invokes native XAmple DLL via IXAmpleWrapper COM interface.
45-
- Inputs: LcmCache, dataDir
46-
- Methods: Same as HCParser (IParser interface)
47-
- **IParser** (interface): Abstract parser contract
48-
- Methods: ParseWord(string word) → ParseResult, TraceWord(string word, TextWriter writer), TraceWordXml(string word, TextWriter writer), Update(), Reset(), IsUpToDate() → bool
49-
50-
### Model Change Detection
51-
- **ParserModelChangeListener**: Monitors LCModel changes via PropChanged events. Tracks changes to phonological features, environments, natural classes, phonemes, morphemes, allomorphs, morphological rules, templates, adhoc prohibitions. Sets ModelChanged flag when morphology/phonology data changes requiring parser reload.
52-
- Inputs: LcmCache (subscribes to PropChanged events)
53-
- Outputs: ModelChanged property, Reset() method
54-
- Monitored classes: PhPhonemeSet, PhEnvironment, PhNaturalClass, PhPhoneme, MoMorphData, LexDb, MoInflAffixSlot, MoAffixAllomorph, MoStemAllomorph, MoForm, MoMorphType, MoAffixProcess, MoCompoundRule, MoInflAffMsa, MoAdhocProhib, etc.
55-
56-
### Data Structures
57-
- **ParseResult**: Top-level parse result container
58-
- Properties: ParseAnalyses (list), ErrorMessages (list)
59-
- **ParseAnalysis**: Single analysis for a wordform
60-
- Properties: ParseMorphs (list), Shape (surface form), ParseSuccess (bool)
61-
- **ParseMorph**: Single morph in an analysis
62-
- Properties: Form (string), Msa (IMoMorphSynAnalysis reference), Morph (IMoForm reference), MsaPartId (Guid), MorphPartId (Guid)
63-
- **TaskReport**: Progress tracking for parse tasks
64-
- Properties: TaskPhase (enum: NotStarted, CheckForChanges, LoadGrammar, ParseWordforms, FileResults, Error), PercentComplete, CurrentTasks, TotalTasks
65-
- Enum TaskPhase values
66-
- **ParserPriority** (enum): Queue priority levels (ReloadGrammarAndLexicon=0, TryAWord=1, High=2, Medium=3, Low=4)
67-
- **ParserUpdateEventArgs**: Event args carrying TaskReport
68-
69-
### XAmple Support (Legacy)
70-
- **XAmpleManagedWrapper/XAmpleWrapper**: C# COM wrapper exposing IXAmpleWrapper interface to native XAmple DLL (XAmpleDLLWrapper P/Invoke calls)
71-
- **XAmpleCOMWrapper**: C++/CLI COM component bridging managed code to native XAmple C++ library (XAmpleWrapperCore)
72-
- **M3ToXAmpleTransformer**: Converts FXT XML export to XAmple grammar format (ANA, DICT files)
73-
- **XAmplePropertiesPreparer**: Prepares XAmple configuration properties (file paths, trace settings)
74-
- **AmpleOptions**: XAmple parser options (TraceOff, TraceMorphs, TraceAnalysis, etc.)
75-
76-
### Reporting and Diagnostics
77-
- **ParserReport**: Report on overall parsing status
78-
- **FwXmlTraceManager**: Manages XML trace output for HermitCrab parser diagnostics
26+
- **ParserScheduler/ParserWorker**: Background thread scheduler with priority queue, executes parse tasks, manages ParserWork items and ParseFiler for result filing
27+
- **HCParser/XAmpleParser**: IParser implementations for HermitCrab (SIL.Machine) and legacy XAmple (COM interop) engines
28+
- **ParseFiler**: Files parse results to database (IWfiAnalysis objects), merges duplicate analyses
29+
- **ParserModelChangeListener**: Monitors LCModel changes via PropChanged events for parser reload detection
30+
- **XAmple wrappers**: XAmpleManagedWrapper (C#), XAmpleCOMWrapper (C++/CLI), M3ToXAmpleTransformer for legacy parser
31+
- **Data structures**: ParseResult, ParseAnalysis, ParseMorph, TaskReport, ParserPriority (enum)
7932

8033
## Technology Stack
81-
- **Languages**: C# (main library), C++/CLI (XAmpleCOMWrapper COM interop)
82-
- **Target framework**: .NET Framework 4.8.x (net48)
83-
- **Key libraries**:
84-
- SIL.Machine.Morphology.HermitCrab (HermitCrab parser engine)
85-
- SIL.LCModel (morphology data model)
86-
- SIL.LCModel.Core (ITsString, ILgWritingSystem)
87-
- SIL.ObjectModel (DisposableBase)
88-
- XCore (PropertyTable, IdleQueue)
89-
- System.Xml.Linq (XML processing for FXT transforms)
90-
- **Native dependencies**: Native XAmple DLL (legacy C++ parser via COM)
34+
C# (net48) and C++/CLI. Key libraries: SIL.Machine.Morphology.HermitCrab, SIL.LCModel, XCore, native XAmple DLL (COM).
9135

9236
## Dependencies
93-
- **External**: SIL.Machine.Morphology.HermitCrab (HermitCrab parser engine), native XAmple DLL (legacy parser), SIL.LCModel (morphology data model), SIL.LCModel.Core (ILgWritingSystem, ITsString), SIL.ObjectModel (DisposableBase), XCore (PropertyTable, IdleQueue), System.Xml.Linq (XML processing)
94-
- **Internal (upstream)**: None (this is a leaf component consumed by UI layers)
95-
- **Consumed by**: LexText/ParserUI (parser UI and testing tools), LexText/Interlinear (automatic parsing of interlinear texts), LexText/Morphology (parser configuration and management)
37+
**Upstream**: SIL.Machine.Morphology.HermitCrab, SIL.LCModel, XCore, native XAmple DLL
38+
**Downstream**: Consumed by ParserUI, Interlinear, Morphology
9639

9740
## Interop & Contracts
98-
- **COM interop**: XAmpleCOMWrapper (C++/CLI) exposes IXAmpleWrapper COM interface
99-
- Purpose: Bridge managed C# to native XAmple C++ parser library
100-
- Key methods: Init(), AmpleParseFile(), SetParameter(), LoadFiles()
101-
- Threading: COM STA required for XAmple parser interaction
102-
- **Native DLL**: XAmpleDLLWrapper P/Invoke calls to native XAmple.dll
103-
- **Managed wrapper**: XAmpleManagedWrapper.dll wraps COM calls for C# consumers
104-
- **Data contracts**:
105-
- FXT XML format for morphology export (consumed by M3ToXAmpleTransformer)
106-
- XAmple ANA/DICT file formats (grammar/lexicon for legacy parser)
107-
- ParseResult/ParseAnalysis/ParseMorph DTOs for parse results
108-
- **Event contracts**: ParserUpdateEventArgs for task progress events
41+
XAmpleCOMWrapper (C++/CLI) exposes IXAmpleWrapper COM interface to native XAmple.dll. Data contracts: ParseResult/ParseAnalysis/ParseMorph DTOs, ParserUpdateEventArgs.
10942

11043
## Threading & Performance
11144
Single background thread (ParserWorker) with 5-level priority queue. Results delivered to UI thread via IdleQueue. XAmple requires STA threading.

0 commit comments

Comments
 (0)