X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferParams.cpp;h=38ca643400698da1c4247edc177423ac02437896;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=35b49d414214b97903f3fec0ec9d63f8b6040f6b;hpb=ad86f59639b08bca05919122f5e0d91bd6e74934;p=lyx.git diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 35b49d4142..38ca643400 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -28,11 +28,11 @@ #include "ColorSet.h" #include "Converter.h" #include "Encoding.h" -#include "HSpace.h" #include "IndicesList.h" #include "Language.h" #include "LaTeXFeatures.h" #include "LaTeXFonts.h" +#include "Length.h" #include "ModuleList.h" #include "Font.h" #include "Lexer.h" @@ -337,12 +337,12 @@ public: Bullet user_defined_bullets[4]; IndicesList indiceslist; Spacing spacing; + Length parindent; + Length mathindent; /** This is the amount of space used for paragraph_separation "skip", * and for detached paragraphs in "indented" documents. */ - HSpace indentation; VSpace defskip; - HSpace formula_indentation; PDFOptions pdfoptions; LayoutFileIndex baseClass_; FormatList exportableFormatList; @@ -384,8 +384,8 @@ BufferParams::BufferParams() cite_engine_type_ = ENGINE_TYPE_DEFAULT; makeDocumentClass(); paragraph_separation = ParagraphIndentSeparation; - is_formula_indent = false; - formula_indentation = "30pt"; + is_math_indent = false; + math_numbering_side = DEFAULT; quotes_style = InsetQuotesParams::EnglishQuotes; dynamic_quotes = false; fontsize = "default"; @@ -461,6 +461,7 @@ BufferParams::BufferParams() output_sync = false; use_refstyle = true; + use_minted = false; // map current author author_map_[pimpl_->authorlist.get(0).bufferId()] = 0; @@ -629,27 +630,27 @@ PDFOptions const & BufferParams::pdfoptions() const } -HSpace const & BufferParams::getFormulaIndentation() const +Length const & BufferParams::getMathIndent() const { - return pimpl_->formula_indentation; + return pimpl_->mathindent; } -void BufferParams::setFormulaIndentation(HSpace const & indent) +void BufferParams::setMathIndent(Length const & indent) { - pimpl_->formula_indentation = indent; + pimpl_->mathindent = indent; } -HSpace const & BufferParams::getIndentation() const +Length const & BufferParams::getParIndent() const { - return pimpl_->indentation; + return pimpl_->parindent; } -void BufferParams::setIndentation(HSpace const & indent) +void BufferParams::setParIndent(Length const & indent) { - pimpl_->indentation = indent; + pimpl_->parindent = indent; } @@ -667,6 +668,19 @@ void BufferParams::setDefSkip(VSpace const & vs) } +BufferParams::MathNumber BufferParams::getMathNumber() const +{ + if (math_numbering_side != DEFAULT) + return math_numbering_side; + // FIXME: do not hardcode language here + else if (language->lang() == "arabic_arabi" + || documentClass().provides("leqno")) + return LEFT; + else + return RIGHT; +} + + string BufferParams::readToken(Lexer & lex, string const & token, FileName const & filepath) { @@ -836,8 +850,11 @@ string BufferParams::readToken(Lexer & lex, string const & token, paragraph_separation = parseptranslator().find(parsep); } else if (token == "\\paragraph_indentation") { lex.next(); - string indentation = lex.getString(); - pimpl_->indentation = HSpace(indentation); + string parindent = lex.getString(); + if (parindent == "default") + pimpl_->parindent = Length(); + else + pimpl_->parindent = Length(parindent); } else if (token == "\\defskip") { lex.next(); string const defskip = lex.getString(); @@ -845,12 +862,24 @@ string BufferParams::readToken(Lexer & lex, string const & token, if (pimpl_->defskip.kind() == VSpace::DEFSKIP) // that is invalid pimpl_->defskip = VSpace(VSpace::MEDSKIP); - } else if (token == "\\is_formula_indent") { - lex >> is_formula_indent; - } else if (token == "\\formula_indentation") { + } else if (token == "\\is_math_indent") { + lex >> is_math_indent; + } else if (token == "\\math_indentation") { lex.next(); - string formula_indentation = lex.getString(); - pimpl_->formula_indentation = HSpace(formula_indentation); + string mathindent = lex.getString(); + if (mathindent == "default") + pimpl_->mathindent = Length(); + else + pimpl_->mathindent = Length(mathindent); + } else if (token == "\\math_numbering_side") { + string tmp; + lex >> tmp; + if (tmp == "left") + math_numbering_side = LEFT; + else if (tmp == "right") + math_numbering_side = RIGHT; + else + math_numbering_side = DEFAULT; } else if (token == "\\quotes_style") { string qstyle; lex >> qstyle; @@ -1071,6 +1100,8 @@ string BufferParams::readToken(Lexer & lex, string const & token, lex >> output_sync_macro; } else if (token == "\\use_refstyle") { lex >> use_refstyle; + } else if (token == "\\use_minted") { + lex >> use_minted; } else { lyxerr << "BufferParams::readToken(): Unknown token: " << token << endl; @@ -1278,6 +1309,7 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const << "\n\\suppress_date " << convert(suppress_date) << "\n\\justification " << convert(justification) << "\n\\use_refstyle " << use_refstyle + << "\n\\use_minted " << use_minted << '\n'; if (isbackgroundcolor == true) os << "\\backgroundcolor " << lyx::X11hexname(backgroundcolor) << '\n'; @@ -1344,12 +1376,25 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const << "\n\\paragraph_separation " << string_paragraph_separation[paragraph_separation]; if (!paragraph_separation) - os << "\n\\paragraph_indentation " << getIndentation().asLyXCommand(); + os << "\n\\paragraph_indentation " + << (getParIndent().empty() ? "default" : getParIndent().asString()); else os << "\n\\defskip " << getDefSkip().asLyXCommand(); - os << "\n\\is_formula_indent " << is_formula_indent; - if (is_formula_indent) - os << "\n\\formula_indentation " << getFormulaIndentation().asLyXCommand(); + os << "\n\\is_math_indent " << is_math_indent; + if (is_math_indent) + os << "\n\\math_indentation " + << (getMathIndent().empty() ? "default" : getMathIndent().asString()); + os << "\n\\math_numbering_side "; + switch(math_numbering_side) { + case LEFT: + os << "left"; + break; + case RIGHT: + os << "right"; + break; + case DEFAULT: + os << "default"; + } os << "\n\\quotes_style " << string_quotes_style[quotes_style] << "\n\\dynamic_quotes " << dynamic_quotes @@ -1631,9 +1676,21 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, && orientation == ORIENTATION_LANDSCAPE) clsoptions << "landscape,"; - if (is_formula_indent) + if (is_math_indent) clsoptions << "fleqn,"; + switch(math_numbering_side) { + case LEFT: + clsoptions << "leqno,"; + break; + case RIGHT: + clsoptions << "reqno,"; + features.require("amsmath"); + break; + case DEFAULT: + break; + } + // language should be a parameter to \documentclass if (language->babel() == "hebrew" && default_language->babel() != "hebrew") @@ -1951,19 +2008,19 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, } else { // when separation by indentation // only output something when a width is given - if (getIndentation().asLyXCommand() != "default") { + if (!getParIndent().empty()) { os << "\\setlength{\\parindent}{" - << from_utf8(getIndentation().asLatexCommand()) + << from_utf8(getParIndent().asLatexString()) << "}\n"; } } - if (is_formula_indent) { + if (is_math_indent) { // when formula indentation - // only output something when it is not the default of 30pt - if (getFormulaIndentation().asLyXCommand() != "30pt") { + // only output something when it is not the default + if (!getMathIndent().empty()) { os << "\\setlength{\\mathindent}{" - << from_utf8(getFormulaIndentation().asLatexCommand()) + << from_utf8(getMathIndent().asString()) << "}\n"; } } @@ -2205,10 +2262,19 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, } if (features.isRequired("bicaption")) os << "\\usepackage{bicaption}\n"; - if (!listings_params.empty() || features.mustProvide("listings")) - os << "\\usepackage{listings}\n"; + if (!listings_params.empty() + || features.mustProvide("listings") + || features.mustProvide("minted")) { + if (features.mustProvide("listings")) + os << "\\usepackage{listings}\n"; + else + os << "\\usepackage{minted}\n"; + } if (!listings_params.empty()) { - os << "\\lstset{"; + if (features.mustProvide("listings")) + os << "\\lstset{"; + else + os << "\\setminted{"; // do not test validity because listings_params is // supposed to be valid string par = @@ -2305,7 +2371,8 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features, } docstring const i18npreamble = - features.getTClassI18nPreamble(use_babel, use_polyglossia); + features.getTClassI18nPreamble(use_babel, use_polyglossia, + use_minted); if (!i18npreamble.empty()) os << i18npreamble + '\n';