/// <summary> /// Constructor. Reads the file and stores any data needed for corrections later on. /// </summary> public FwDataFixer(string filename, IProgress progress, ErrorLogger logger, ErrorCounter counter) { m_filename = filename; m_progress = progress; errorLogger = logger; errorCounter = counter; m_progress.Minimum = 0; m_progress.Maximum = 1000; m_progress.Position = 0; m_progress.Message = String.Format(Strings.ksReadingTheInputFile, m_filename); m_crt = 0; // The following fixers will be run on each rt element during FixErrorsAndSave() // Note: every change to the file MUST log an error. This is used in FixFwData to set a return code indicating whether anything changed. // This in turn is used in Send/Receive to determine whether we need to re-split the file before committing. // N.B.: Order is important here!!!!!!! m_rtLevelFixers.Add(new DuplicateStyleFixer()); m_rtLevelFixers.Add(new OriginalFixer()); m_rtLevelFixers.Add(new CustomPropertyFixer()); m_rtLevelFixers.Add(new BasicCustomPropertyFixer()); var senseFixer = new GrammaticalSenseFixer(); m_rtLevelFixers.Add(senseFixer); m_rtLevelFixers.Add(new MorphBundleFixer(senseFixer)); // after we've possibly removed MSAs in GrammaticalSenseFixer m_rtLevelFixers.Add(new SequenceFixer()); m_rtLevelFixers.Add(new HomographFixer()); m_rtLevelFixers.Add(new DuplicateWordformFixer()); m_rtLevelFixers.Add(new CustomListNameFixer()); InitializeFixers(m_filename); }
/// <summary> /// Constructor. Reads the file and stores any data needed for corrections later on. /// </summary> public FwDataFixer(string filename, IProgress progress, ErrorLogger logger, ErrorCounter counter) { m_filename = filename; m_progress = progress; errorLogger = logger; errorCounter = counter; m_progress.Minimum = 0; m_progress.Maximum = 1000; m_progress.Position = 0; m_progress.Message = String.Format(Strings.ksReadingTheInputFile, m_filename); m_crt = 0; // The following fixers will be run on each rt element during FixErrorsAndSave() // Note: every change to the file MUST log an error. This is used in FixFwData to set a return code indicating whether anything changed. // This in turn is used in Send/Receive to determine whether we need to re-split the file before committing. // N.B.: Order is important here!!!!!!! m_rtLevelFixers.Add(new DuplicateStyleFixer()); m_rtLevelFixers.Add(new OriginalFixer()); m_rtLevelFixers.Add(new CustomPropertyFixer()); m_rtLevelFixers.Add(new BasicCustomPropertyFixer()); var senseFixer = new GrammaticalSenseFixer(); m_rtLevelFixers.Add(senseFixer); m_rtLevelFixers.Add(new MorphBundleFixer(senseFixer)); // after we've possibly removed MSAs in GrammaticalSenseFixer m_rtLevelFixers.Add(new SequenceFixer()); m_rtLevelFixers.Add(new HomographFixer()); m_rtLevelFixers.Add(new DuplicateWordformFixer()); m_rtLevelFixers.Add(new CustomListNameFixer()); InitializeFixers(m_filename); }
/// <summary> /// Constructor. Reads the file and stores any data needed for corrections later on. /// </summary> public FwDataFixer(string filename, IProgress progress, ErrorLogger logger) { m_filename = filename; m_progress = progress; errorLogger = logger; m_progress.Minimum = 0; m_progress.Maximum = 1000; m_progress.Position = 0; m_progress.Message = String.Format(Strings.ksReadingTheInputFile, m_filename); m_crt = 0; // The following fixers will be run on each rt element during FixErrorsAndSave() // Note: every change to the file MUST log an error. This is used in FixFwData to set a return code indicating whether anything changed. // This in turn is used in Send/Receive to determine whether we need to re-split the file before committing. // N.B.: Order is important here!!!!!!! m_rtLevelFixers.Add(new DuplicateStyleFixer()); m_rtLevelFixers.Add(new OriginalFixer()); m_rtLevelFixers.Add(new CustomPropertyFixer()); m_rtLevelFixers.Add(new BasicCustomPropertyFixer()); var senseFixer = new GrammaticalSenseFixer(); m_rtLevelFixers.Add(senseFixer); m_rtLevelFixers.Add(new MorphBundleFixer(senseFixer)); // after we've possibly removed MSAs in GrammaticalSenseFixer m_rtLevelFixers.Add(new SequenceFixer()); m_rtLevelFixers.Add(new HomographFixer()); m_rtLevelFixers.Add(new DuplicateWordformFixer()); m_rtLevelFixers.Add(new CustomListNameFixer()); using (XmlReader xrdr = XmlReader.Create(m_filename)) { xrdr.MoveToContent(); if (xrdr.Name != "languageproject") { throw new Exception(String.Format("Unexpected outer element (expected <Lists>): {0}", xrdr.Name)); } xrdr.Read(); xrdr.MoveToContent(); if (xrdr.Name == "AdditionalFields") { string customsNode = xrdr.ReadOuterXml(); XElement additionalFieldsElem = XElement.Parse(customsNode); // Give each fixer a chance to gather data on defined custom fields. foreach (var fixer in m_rtLevelFixers) { fixer.InspectAdditionalFieldsElement(additionalFieldsElem); } xrdr.ReadToFollowing("rt"); } while (xrdr.Name == "rt") { string rtXml = xrdr.ReadOuterXml(); XElement rt = XElement.Parse(rtXml); StoreGuidInfoAndOwnership(rt, errorLogger); // Give each fixer a chance to gather data on the first pass, // if it needs two passes to fix its sort of problem. foreach (var fixer in m_rtLevelFixers) { fixer.InspectElement(rt); } xrdr.MoveToContent(); ++m_crt; if (m_progress.Position == m_progress.Maximum) { m_progress.Position = 0; } if ((m_crt % 1000) == 0) { m_progress.Step(1); } } foreach (var fixer in m_rtLevelFixers) { fixer.FinalFixerInitialization(m_owners, m_guids, m_parentToOwnedObjsur, m_rtElementsToDelete); } xrdr.Close(); } }
public MorphBundleFixer(GrammaticalSenseFixer senseFixer) { m_senseFixer = senseFixer; }
public MorphBundleFixer(GrammaticalSenseFixer senseFixer) { m_senseFixer = senseFixer; }
/// <summary> /// Constructor. Reads the file and stores any data needed for corrections later on. /// </summary> public FwDataFixer(string filename, IProgress progress, ErrorLogger logger) { m_filename = filename; m_progress = progress; errorLogger = logger; m_progress.Minimum = 0; m_progress.Maximum = 1000; m_progress.Position = 0; m_progress.Message = String.Format(Strings.ksReadingTheInputFile, m_filename); m_crt = 0; // The following fixers will be run on each rt element during FixErrorsAndSave() // Note: every change to the file MUST log an error. This is used in FixFwData to set a return code indicating whether anything changed. // This in turn is used in Send/Receive to determine whether we need to re-split the file before committing. // N.B.: Order is important here!!!!!!! m_rtLevelFixers.Add(new DuplicateStyleFixer()); m_rtLevelFixers.Add(new OriginalFixer()); m_rtLevelFixers.Add(new CustomPropertyFixer()); m_rtLevelFixers.Add(new BasicCustomPropertyFixer()); var senseFixer = new GrammaticalSenseFixer(); m_rtLevelFixers.Add(senseFixer); m_rtLevelFixers.Add(new MorphBundleFixer(senseFixer)); // after we've possibly removed MSAs in GrammaticalSenseFixer m_rtLevelFixers.Add(new SequenceFixer()); m_rtLevelFixers.Add(new HomographFixer()); m_rtLevelFixers.Add(new DuplicateWordformFixer()); m_rtLevelFixers.Add(new CustomListNameFixer()); using (XmlReader xrdr = XmlReader.Create(m_filename)) { xrdr.MoveToContent(); if (xrdr.Name != "languageproject") throw new Exception(String.Format("Unexpected outer element (expected <Lists>): {0}", xrdr.Name)); xrdr.Read(); xrdr.MoveToContent(); if (xrdr.Name == "AdditionalFields") { string customsNode = xrdr.ReadOuterXml(); XElement additionalFieldsElem = XElement.Parse(customsNode); // Give each fixer a chance to gather data on defined custom fields. foreach (var fixer in m_rtLevelFixers) fixer.InspectAdditionalFieldsElement(additionalFieldsElem); xrdr.ReadToFollowing("rt"); } while (xrdr.Name == "rt") { string rtXml = xrdr.ReadOuterXml(); XElement rt = XElement.Parse(rtXml); StoreGuidInfoAndOwnership(rt, errorLogger); // Give each fixer a chance to gather data on the first pass, // if it needs two passes to fix its sort of problem. foreach (var fixer in m_rtLevelFixers) fixer.InspectElement(rt); xrdr.MoveToContent(); ++m_crt; if (m_progress.Position == m_progress.Maximum) m_progress.Position = 0; if ((m_crt % 1000) == 0) m_progress.Step(1); } foreach (var fixer in m_rtLevelFixers) fixer.FinalFixerInitialization(m_owners, m_guids, m_parentToOwnedObjsur, m_rtElementsToDelete); xrdr.Close(); } }