+ }
+ break;
+ }
+
+ case LFUN_LANGUAGE_BUFFER: {
+ Buffer & buffer = *owner->buffer();
+ Language const * oldL = buffer.params().language;
+ Language const * newL = languages.getLanguage(argument);
+ if (!newL || oldL == newL)
+ break;
+
+ if (oldL->RightToLeft() == newL->RightToLeft()
+ && !buffer.isMultiLingual())
+ buffer.changeLanguage(oldL, newL);
+ else
+ buffer.updateDocLang(newL);
+ break;
+ }
+
+ case LFUN_SAVE_AS_DEFAULT: {
+ string const fname =
+ AddName(AddPath(user_lyxdir(), "templates/"),
+ "defaults.lyx");
+ Buffer defaults(fname);
+
+ istringstream ss(argument);
+ LyXLex lex(0,0);
+ lex.setStream(ss);
+ int const unknown_tokens = defaults.readHeader(lex);
+
+ if (unknown_tokens != 0) {
+ lyxerr << "Warning in LFUN_SAVE_AS_DEFAULT!\n"
+ << unknown_tokens << " unknown token"
+ << (unknown_tokens == 1 ? "" : "s")
+ << endl;
+ }
+
+ if (defaults.writeFile(defaults.fileName()))
+ setMessage(_("Document defaults saved in ")
+ + MakeDisplayPath(fname));
+ else
+ setErrorMessage(_("Unable to save document defaults"));
+ break;
+ }
+
+ case LFUN_BUFFERPARAMS_APPLY: {
+ biblio::CiteEngine const engine =
+ owner->buffer()->params().cite_engine;
+
+ istringstream ss(argument);
+ LyXLex lex(0,0);
+ lex.setStream(ss);
+ int const unknown_tokens =
+ owner->buffer()->readHeader(lex);
+
+ if (unknown_tokens != 0) {
+ lyxerr << "Warning in LFUN_BUFFERPARAMS_APPLY!\n"
+ << unknown_tokens << " unknown token"
+ << (unknown_tokens == 1 ? "" : "s")
+ << endl;
+ }
+ if (engine == owner->buffer()->params().cite_engine)
+ break;
+
+ LCursor & cur = view()->cursor();
+ FuncRequest fr(LFUN_INSET_REFRESH);
+
+ InsetBase & inset = owner->buffer()->inset();
+ InsetIterator it = inset_iterator_begin(inset);
+ InsetIterator const end = inset_iterator_end(inset);
+ for (; it != end; ++it)
+ if (it->lyxCode() == InsetBase::CITE_CODE)
+ it->dispatch(cur, fr);
+ break;
+ }
+
+ case LFUN_TEXTCLASS_APPLY: {
+ Buffer * buffer = owner->buffer();
+
+ lyx::textclass_type const old_class =
+ buffer->params().textclass;
+
+ loadTextclass(argument);
+
+ std::pair<bool, lyx::textclass_type> const tc_pair =
+ textclasslist.NumberOfClass(argument);
+
+ if (!tc_pair.first)
+ break;
+
+ lyx::textclass_type const new_class = tc_pair.second;
+ if (old_class == new_class)
+ // nothing to do
+ break;
+
+ owner->message(_("Converting document to new document class..."));
+ ErrorList el;
+ lyx::cap::SwitchLayoutsBetweenClasses(
+ old_class, new_class,
+ buffer->paragraphs(), el);
+
+ bufferErrors(*buffer, el);
+ view()->showErrorList(_("Class switch"));
+ break;
+ }
+
+ case LFUN_TEXTCLASS_LOAD:
+ loadTextclass(argument);
+ break;
+
+ case LFUN_LYXRC_APPLY: {
+ istringstream ss(argument);
+ bool const success = lyxrc.read(ss) == 0;
+
+ if (!success) {
+ lyxerr << "Warning in LFUN_LYXRC_APPLY!\n"
+ << "Unable to read lyxrc data"
+ << endl;