]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Prevent zombie processes (#8774)
[lyx.git] / src / BufferParams.cpp
index bb2391ca115926533f3487f9fd6c511f0ebb8dba..c98e1f9d9790a28298eed4135fa8a8ff42a36cc2 100644 (file)
@@ -267,6 +267,7 @@ CiteEngineTypeTranslator const init_citeenginetypetranslator()
 {
        CiteEngineTypeTranslator translator("authoryear", ENGINE_TYPE_AUTHORYEAR);
        translator.addPair("numerical", ENGINE_TYPE_NUMERICAL);
+       translator.addPair("default", ENGINE_TYPE_DEFAULT);
        return translator;
 }
 
@@ -360,7 +361,7 @@ BufferParams::BufferParams()
        orientation = ORIENTATION_PORTRAIT;
        use_geometry = false;
        cite_engine_.push_back("basic");
-       cite_engine_type_ = ENGINE_TYPE_NUMERICAL;
+       cite_engine_type_ = ENGINE_TYPE_DEFAULT;
        biblio_style = "plain";
        use_bibtopic = false;
        use_indices = false;
@@ -627,7 +628,9 @@ string BufferParams::readToken(Lexer & lex, string const & token,
        } else if (token == "\\begin_preamble") {
                readPreamble(lex);
        } else if (token == "\\begin_local_layout") {
-               readLocalLayout(lex);
+               readLocalLayout(lex, false);
+       } else if (token == "\\begin_forced_local_layout") {
+               readLocalLayout(lex, true);
        } else if (token == "\\begin_modules") {
                readModules(lex);
        } else if (token == "\\begin_removed_modules") {
@@ -990,6 +993,7 @@ void BufferParams::writeFile(ostream & os) const
           << convert<string>(maintain_unincluded_children) << '\n';
 
        // local layout information
+       string const local_layout = getLocalLayout(false);
        if (!local_layout.empty()) {
                // remove '\n' from the end
                string const tmplocal = rtrim(local_layout, "\n");
@@ -997,6 +1001,14 @@ void BufferParams::writeFile(ostream & os) const
                   << tmplocal
                   << "\n\\end_local_layout\n";
        }
+       string const forced_local_layout = getLocalLayout(true);
+       if (!forced_local_layout.empty()) {
+               // remove '\n' from the end
+               string const tmplocal = rtrim(forced_local_layout, "\n");
+               os << "\\begin_forced_local_layout\n"
+                  << tmplocal
+                  << "\n\\end_forced_local_layout\n";
+       }
 
        // then the text parameters
        if (language != ignore_language)
@@ -2102,13 +2114,15 @@ void BufferParams::makeDocumentClass()
 
        doc_class_ = getDocumentClass(*baseClass(), mods);
 
-       if (!local_layout.empty()) {
-               TextClass::ReturnValues success =
-                       doc_class_->read(local_layout, TextClass::MODULE);
-               if (success != TextClass::OK && success != TextClass::OK_OLDFORMAT) {
-                       docstring const msg = _("Error reading internal layout information");
-                       frontend::Alert::warning(_("Read Error"), msg);
-               }
+       TextClass::ReturnValues success = TextClass::OK;
+       if (!forced_local_layout_.empty())
+               success = doc_class_->read(forced_local_layout_, TextClass::MODULE);
+       if (!local_layout_.empty() &&
+           (success == TextClass::OK || success == TextClass::OK_OLDFORMAT))
+               success = doc_class_->read(local_layout_, TextClass::MODULE);
+       if (success != TextClass::OK && success != TextClass::OK_OLDFORMAT) {
+               docstring const msg = _("Error reading internal layout information");
+               frontend::Alert::warning(_("Read Error"), msg);
        }
 }
 
@@ -2125,6 +2139,24 @@ bool BufferParams::citationModuleCanBeAdded(string const & modName) const
 }
 
 
+std::string BufferParams::getLocalLayout(bool forced) const
+{
+       if (forced)
+               return doc_class_->forcedLayouts();
+       else
+               return local_layout_;
+}
+
+
+void BufferParams::setLocalLayout(string const & layout, bool forced)
+{
+       if (forced)
+               forced_local_layout_ = layout;
+       else
+               local_layout_ = layout;
+}
+
+
 bool BufferParams::addLayoutModule(string const & modName)
 {
        LayoutModuleList::const_iterator it = layout_modules_.begin();
@@ -2284,7 +2316,6 @@ string BufferParams::getDefaultOutputFormat() const
            && default_output_format != "default")
                return default_output_format;
        if (isDocBook()
-           || useNonTeXFonts
            || encoding().package() == Encoding::japanese) {
                vector<Format const *> const formats = exportableFormats(true);
                if (formats.empty())
@@ -2292,6 +2323,8 @@ string BufferParams::getDefaultOutputFormat() const
                // return the first we find
                return formats.front()->name();
        }
+       if (useNonTeXFonts)
+               return lyxrc.default_otf_view_format;
        return lyxrc.default_view_format;
 }
 
@@ -2342,13 +2375,19 @@ void BufferParams::readPreamble(Lexer & lex)
 }
 
 
-void BufferParams::readLocalLayout(Lexer & lex)
+void BufferParams::readLocalLayout(Lexer & lex, bool forced)
 {
-       if (lex.getString() != "\\begin_local_layout")
+       string const expected = forced ? "\\begin_forced_local_layout" :
+                                        "\\begin_local_layout";
+       if (lex.getString() != expected)
                lyxerr << "Error (BufferParams::readLocalLayout):"
                        "consistency check failed." << endl;
 
-       local_layout = lex.getLongString("\\end_local_layout");
+       if (forced)
+               forced_local_layout_ =
+                       lex.getLongString("\\end_forced_local_layout");
+       else
+               local_layout_ = lex.getLongString("\\end_local_layout");
 }