+ delete_aspell_can_have_error(m.e_speller);
+ delete_aspell_config(m.config);
+ m.config = 0;
+ m.e_speller = 0;
+ } else {
+ PersonalWordList * pd = new PersonalWordList(lang->lang());
+ pd->load();
+ personal_[lang->lang()] = pd;
+ initSessionDictionary(m, pd);
+ }
+
+ spellers_[lang->lang()] = m;
+ return m.e_speller ? to_aspell_speller(m.e_speller) : 0;
+}
+
+
+AspellSpeller * AspellChecker::Private::speller(Language const * lang)
+{
+ Spellers::iterator it = spellers_.find(lang->lang());
+ if (it != spellers_.end()) {
+ Speller aspell = it->second;
+ if (lyxrc.spellchecker_accept_compound != aspell.accept_compound) {
+ // spell checker setting changed... adjust run-together
+ aspell.accept_compound = lyxrc.spellchecker_accept_compound;
+ if (aspell.accept_compound)
+ // Consider run-together words as legal compounds
+ aspell_config_replace(aspell.config, "run-together", "true");
+ else
+ // Report run-together words as errors
+ aspell_config_replace(aspell.config, "run-together", "false");
+ AspellCanHaveError * e_speller = aspell.e_speller;
+ aspell.e_speller = new_aspell_speller(aspell.config);
+ delete_aspell_speller(to_aspell_speller(e_speller));
+ spellers_[lang->lang()] = aspell;
+ }
+ return to_aspell_speller(aspell.e_speller);
+ }
+
+ return addSpeller(lang);
+}
+
+
+int AspellChecker::Private::numDictionaries() const
+{
+ int result = 0;
+ Spellers::const_iterator it = spellers_.begin();
+ Spellers::const_iterator et = spellers_.end();
+
+ for (; it != et; ++it) {
+ Speller aspell = it->second;
+ result += aspell.e_speller != 0;