///<summary> /// Constructor. ///</summary> ///<param name="idsInFile"></param> ///<param name="replaceIdsInFile"></param> ///<param name="writingSystemRepository"></param> public static void FindOrphans( IEnumerable <string> idsInFile, IdReplacementStrategy replaceIdsInFile, IWritingSystemRepository writingSystemRepository ) { var originalIds = new List <string>(idsInFile); var updatedIds = new List <string>(idsInFile); foreach (var wsId in originalIds) { // Check if it's in the repo if (writingSystemRepository.Contains(wsId)) { continue; } string newId = wsId; if (writingSystemRepository.WritingSystemIdHasChanged(wsId)) { newId = writingSystemRepository.WritingSystemIdHasChangedTo(wsId); } else { // It's an orphan // Check for the writing system repository compatibility mode if (writingSystemRepository.CompatibilityMode == WritingSystemCompatibility.Flex7V0Compatible) { if (!wsId.StartsWith("x-")) { // Clean it var rfcTagCleaner = new Rfc5646TagCleaner(wsId); rfcTagCleaner.Clean(); newId = rfcTagCleaner.GetCompleteTag(); } } else { // Clean it var rfcTagCleaner = new Rfc5646TagCleaner(wsId); rfcTagCleaner.Clean(); newId = rfcTagCleaner.GetCompleteTag(); } } var conformantWritingSystem = WritingSystemDefinition.Parse(newId); // If it changed, then change if (conformantWritingSystem.Bcp47Tag != wsId) { conformantWritingSystem = WritingSystemDefinition.CreateCopyWithUniqueId(conformantWritingSystem, updatedIds); replaceIdsInFile(wsId, conformantWritingSystem.Bcp47Tag); updatedIds.Remove(wsId); updatedIds.Add(conformantWritingSystem.Bcp47Tag); } // Check if it's in the repo if (writingSystemRepository.Contains(conformantWritingSystem.Bcp47Tag)) { continue; } // It's not in the repo so set it writingSystemRepository.Set(conformantWritingSystem); } writingSystemRepository.Save(); }
public OtherSuggestion(IWritingSystemDefinition primary, IEnumerable <IWritingSystemDefinition> exisitingWritingSystemsForLanguage) { _templateDefinition = WritingSystemDefinition.CreateCopyWithUniqueId(primary, exisitingWritingSystemsForLanguage.Select(ws => ws.Id)); this.Label = string.Format("other input system for {0}", _templateDefinition.LanguageName); }