+ LASSERT(singleton_, /**/);
+ // A cache to translate full language name to language code
+ static string last_language = "auto";
+ static string code;
+ if (lyxrc.gui_language != last_language) {
+ if (lyxrc.gui_language == "auto")
+ code.clear();
+ else {
+ Language const * l = languages.getLanguage(lyxrc.gui_language);
+ code = l ? l->code() : string();
+ }
+ last_language = lyxrc.gui_language;
+ }
+ return singleton_->messages(code);
+}
+
+
+Session & theSession()
+{
+ LASSERT(singleton_, /**/);
+ return *singleton_->pimpl_->session_.get();
+}
+
+
+LaTeXFonts & theLaTeXFonts()
+{
+ LASSERT(singleton_, /**/);
+ if (!singleton_->pimpl_->latexfonts_)
+ singleton_->pimpl_->latexfonts_ = new LaTeXFonts;
+ return *singleton_->pimpl_->latexfonts_;
+}
+
+
+CmdDef & theTopLevelCmdDef()
+{
+ LASSERT(singleton_, /**/);
+ return singleton_->pimpl_->toplevel_cmddef_;
+}
+
+
+SpellChecker * theSpellChecker()
+{
+ if (!singleton_->pimpl_->spell_checker_)
+ setSpellChecker();
+ return singleton_->pimpl_->spell_checker_;
+}
+
+
+void setSpellChecker()
+{
+ SpellChecker::ChangeNumber speller_change_number =singleton_->pimpl_->spell_checker_ ?
+ singleton_->pimpl_->spell_checker_->changeNumber() : 0;
+
+ if (lyxrc.spellchecker == "native") {
+#if defined(USE_MACOSX_PACKAGING)
+ if (!singleton_->pimpl_->apple_spell_checker_)
+ singleton_->pimpl_->apple_spell_checker_ = new AppleSpellChecker;
+ singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->apple_spell_checker_;
+#else
+ singleton_->pimpl_->spell_checker_ = 0;
+#endif
+ } else if (lyxrc.spellchecker == "aspell") {
+#if defined(USE_ASPELL)
+ if (!singleton_->pimpl_->aspell_checker_)
+ singleton_->pimpl_->aspell_checker_ = new AspellChecker;
+ singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->aspell_checker_;
+#else
+ singleton_->pimpl_->spell_checker_ = 0;
+#endif
+ } else if (lyxrc.spellchecker == "enchant") {
+#if defined(USE_ENCHANT)
+ if (!singleton_->pimpl_->enchant_checker_)
+ singleton_->pimpl_->enchant_checker_ = new EnchantChecker;
+ singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->enchant_checker_;
+#else
+ singleton_->pimpl_->spell_checker_ = 0;
+#endif
+ } else if (lyxrc.spellchecker == "hunspell") {
+#if defined(USE_HUNSPELL)
+ if (!singleton_->pimpl_->hunspell_checker_)
+ singleton_->pimpl_->hunspell_checker_ = new HunspellChecker;
+ singleton_->pimpl_->spell_checker_ = singleton_->pimpl_->hunspell_checker_;
+#else
+ singleton_->pimpl_->spell_checker_ = 0;
+#endif
+ } else {
+ singleton_->pimpl_->spell_checker_ = 0;
+ }
+ if (singleton_->pimpl_->spell_checker_) {
+ singleton_->pimpl_->spell_checker_->changeNumber(speller_change_number);
+ singleton_->pimpl_->spell_checker_->advanceChangeNumber();
+ }