/// <summary> /// Loads the user dictionary file /// </summary> private void LoadUserFile() { // load user words _userWords.Clear(); // quit if user file is disabled if (!EnableUserFile) { return; } string userPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "NetSpell"); string filePath = Path.Combine(userPath, _userFile); if (File.Exists(filePath)) { TraceWriter.TraceInfo("Loading User Dictionary:{0}", filePath); FileStream fs = null; try { fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); using (var sr = new StreamReader(fs, Encoding.UTF8)) { fs = null; // read line by line while (sr.Peek() >= 0) { string tempLine = sr.ReadLine().Trim(); if (tempLine.Length > 0) { _userWords.Add(tempLine, tempLine); } } } } finally { if (fs != null) { fs.Dispose(); } } TraceWriter.TraceInfo("Loaded User Dictionary; Words:{0}", _userWords.Count); } }
/// <summary> /// Saves the user dictionary file /// </summary> /// <remarks> /// If the file does not exist, it will be created /// </remarks> private void SaveUserFile() { // quit if user file is disabled if (!EnableUserFile) { return; } string userPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "NetSpell"); if (!Directory.Exists(userPath)) { Directory.CreateDirectory(userPath); } string filePath = Path.Combine(userPath, _userFile); TraceWriter.TraceInfo("Saving User Dictionary:{0}", filePath); FileStream fs = null; try { fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); using (var sw = new StreamWriter(fs, Encoding.UTF8)) { fs = null; sw.NewLine = "\n"; foreach (string tempWord in _userWords.Keys) { sw.WriteLine(tempWord); } } } finally { if (fs != null) { fs.Dispose(); } } TraceWriter.TraceInfo("Saved User Dictionary; Words:{0}", _userWords.Count); }
/// <summary> /// Loads the user dictionary file /// </summary> private void LoadUserFile() { // load user words _userWords.Clear(); // quit if user file is disabled if (!EnableUserFile) { return; } string userPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "NetSpell"); string filePath = Path.Combine(userPath, _userFile); if (File.Exists(filePath)) { TraceWriter.TraceInfo("Loading User Dictionary:{0}", filePath); //IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly(); //fs = new IsolatedStorageFileStream(_UserFile, FileMode.OpenOrCreate, FileAccess.ReadWrite, isf); FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); StreamReader sr = new StreamReader(fs, Encoding.UTF8); // read line by line while (sr.Peek() >= 0) { string tempLine = sr.ReadLine().Trim(); if (tempLine.Length > 0) { _userWords.Add(tempLine, tempLine); } } fs.Close(); sr.Close(); //isf.Close(); TraceWriter.TraceInfo("Loaded User Dictionary; Words:{0}", _userWords.Count); } }
/// <summary> /// Saves the user dictionary file /// </summary> /// <remarks> /// If the file does not exist, it will be created /// </remarks> private void SaveUserFile() { // quit if user file is disabled if (!EnableUserFile) { return; } string userPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "NetSpell"); if (!Directory.Exists(userPath)) { Directory.CreateDirectory(userPath); } string filePath = Path.Combine(userPath, _userFile); TraceWriter.TraceInfo("Saving User Dictionary:{0}", filePath); //IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly(); //FileStream fs = new IsolatedStorageFileStream(_UserFile, FileMode.Create, FileAccess.Write, isf); FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); sw.NewLine = "\n"; foreach (string tempWord in _userWords.Keys) { sw.WriteLine(tempWord); } sw.Close(); fs.Close(); //isf.Close(); TraceWriter.TraceInfo("Saved User Dictionary; Words:{0}", _userWords.Count); }
/// <summary> /// Initializes the dictionary by loading and parsing the /// dictionary file and the user file. /// </summary> public void Initialize() { // clean up data first _baseWords.Clear(); _replaceCharacters.Clear(); _prefixRules.Clear(); _suffixRules.Clear(); _phoneticRules.Clear(); _tryCharacters = ""; // the following is used to split a line by white space Regex _spaceRegx = new Regex(@"[^\s]+", RegexOptions.Compiled); MatchCollection partMatches; string currentSection = ""; AffixRule currentRule = null; string dictionaryPath = Path.Combine(_dictionaryFolder, _dictionaryFile); TraceWriter.TraceInfo("Loading Dictionary:{0}", dictionaryPath); // open dictionary file FileStream fs = null; try { fs = new FileStream(dictionaryPath, FileMode.Open, FileAccess.Read, FileShare.Read); using (var sr = new StreamReader(fs, Encoding.UTF8)) { fs = null; // read line by line while (sr.Peek() >= 0) { string tempLine = sr.ReadLine().Trim(); if (tempLine.Length <= 0) { continue; } // check for section flag if (tempLine.StartsWith("[") && tempLine.EndsWith("]")) { // set current section that is being parsed currentSection = tempLine; continue; } // parse line and place in correct object switch (currentSection) { case "[Copyright]": Copyright += tempLine + "\r\n"; break; case "[Try]": // ISpell try chars TryCharacters += tempLine; break; case "[Replace]": // ISpell replace chars ReplaceCharacters.Add(tempLine); break; case "[Prefix]": // MySpell prefix rules case "[Suffix]": // MySpell suffix rules // split line by white space partMatches = _spaceRegx.Matches(tempLine); // if 3 parts, then new rule if (partMatches.Count == 3) { currentRule = new AffixRule(); // part 1 = affix key currentRule.Name = partMatches[0].Value; // part 2 = combine flag if (partMatches[1].Value == "Y") { currentRule.AllowCombine = true; } // part 3 = entry count, not used if (currentSection == "[Prefix]") { // add to prefix collection PrefixRules.Add(currentRule.Name, currentRule); } else { // add to suffix collection SuffixRules.Add(currentRule.Name, currentRule); } } //if 4 parts, then entry for current rule else if (partMatches.Count == 4) { // part 1 = affix key if (currentRule.Name == partMatches[0].Value) { AffixEntry entry = new AffixEntry(); // part 2 = strip char if (partMatches[1].Value != "0") { entry.StripCharacters = partMatches[1].Value; } // part 3 = add chars entry.AddCharacters = partMatches[2].Value; // part 4 = conditions AffixUtility.EncodeConditions(partMatches[3].Value, entry); currentRule.AffixEntries.Add(entry); } } break; case "[Phonetic]": // ASpell phonetic rules // split line by white space partMatches = _spaceRegx.Matches(tempLine); if (partMatches.Count >= 2) { PhoneticRule rule = new PhoneticRule(); PhoneticUtility.EncodeRule(partMatches[0].Value, ref rule); rule.ReplaceString = partMatches[1].Value; _phoneticRules.Add(rule); } break; case "[Words]": // dictionary word list // splits word into its parts string[] parts = tempLine.Split('/'); Word tempWord = new Word(); // part 1 = base word tempWord.Text = parts[0]; // part 2 = affix keys if (parts.Length >= 2) { tempWord.AffixKeys = parts[1]; } // part 3 = phonetic code if (parts.Length >= 3) { tempWord.PhoneticCode = parts[2]; } BaseWords.Add(tempWord.Text, tempWord); break; } // currentSection switch } // read line // close files } } finally { if (fs != null) { fs.Dispose(); } } TraceWriter.TraceInfo("Dictionary Loaded BaseWords:{0}; PrefixRules:{1}; SuffixRules:{2}; PhoneticRules:{3}", BaseWords.Count, PrefixRules.Count, SuffixRules.Count, PhoneticRules.Count); LoadUserFile(); _initialized = true; }