From f27d5aa9ae5f3f89c4e2923dae1592a116988906 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrgen=20Spitzm=C3=BCller?= Date: Thu, 3 Feb 2011 14:17:31 +0000 Subject: [PATCH] * Allow to set language package on a per-document basis (fixes bug 2909). File format change. Commit approved by Pavel on trac. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37457 a592a061-630c-0410-9148-cb99ea01b6c8 --- development/FORMAT | 5 + lib/lyx2lyx/lyx_2_0.py | 26 +++- src/Buffer.cpp | 2 +- src/BufferParams.cpp | 10 +- src/BufferParams.h | 2 + src/LaTeXFeatures.cpp | 29 +++-- src/frontends/qt4/GuiDocument.cpp | 42 +++++++ src/frontends/qt4/GuiDocument.h | 1 + src/frontends/qt4/ui/LanguageUi.ui | 195 +++++++++++++++++------------ 9 files changed, 219 insertions(+), 93 deletions(-) diff --git a/development/FORMAT b/development/FORMAT index 3620035bcd..b6bf232572 100644 --- a/development/FORMAT +++ b/development/FORMAT @@ -11,6 +11,11 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx. ----------------------- +2011-02-03 Jürgen Spitzmüller + * Format incremented to 411 + New buffer param \language_package to allow per-document + language package selection (bug 2909). + 2010-11-26 Richard Heck * Format incremented to 410 (r36520) Rename "\\begin_layout Labeling" to "\\begin_layout List" diff --git a/lib/lyx2lyx/lyx_2_0.py b/lib/lyx2lyx/lyx_2_0.py index 22050f8ca7..56cd8e0f44 100644 --- a/lib/lyx2lyx/lyx_2_0.py +++ b/lib/lyx2lyx/lyx_2_0.py @@ -2416,6 +2416,26 @@ def revert_labeling(document): document.body[i] = "\\begin_layout List" +def revert_langpack(document): + " revert \\language_package parameter " + i = 0 + i = find_token(document.header, "\\language_package", 0) + if i == -1: + document.warning("Malformed document. No \\language_package param!") + return + + del document.header[i] + + +def convert_langpack(document): + " Add \\language_package parameter " + i = find_token(document.header, "\language" , 0) + if i == -1: + document.warning("Malformed document. No \\language defined!") + return + + document.header.insert(i + 1, "\\language_package default") + ## # Conversion hub # @@ -2485,10 +2505,12 @@ convert = [[346, []], [407, []], [408, []], [409, [convert_use_xetex]], - [410, []] + [410, []], + [411, [convert_langpack]] ] -revert = [[409, [revert_labeling]], +revert = [[409, [revert_langpack]], + [409, [revert_labeling]], [408, [revert_use_xetex]], [407, [revert_script]], [406, [revert_multirowOffset]], diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 23c16406f4..1f923e43eb 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -127,7 +127,7 @@ namespace { // Do not remove the comment below, so we get merge conflict in // independent branches. Instead add your own. -int const LYX_FORMAT = 410; // rgh: dummy format for list->labeling +int const LYX_FORMAT = 411; // spitz: lang_package buffer param typedef map DepClean; typedef map > RefCache; diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 3ecf73184c..5ba89b9587 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -385,6 +385,7 @@ BufferParams::BufferParams() fonts_sans_scale = 100; fonts_typewriter_scale = 100; inputenc = "auto"; + lang_package = "default"; graphics_driver = "default"; default_output_format = "default"; bibtex_command = "default"; @@ -601,6 +602,9 @@ string BufferParams::readToken(Lexer & lex, string const & token, lex >> suppress_date; } else if (token == "\\language") { readLanguage(lex); + } else if (token == "\\language_package") { + lex.eatLine(); + lang_package = lex.getString(); } else if (token == "\\inputencoding") { lex >> inputenc; } else if (token == "\\graphics") { @@ -945,7 +949,8 @@ void BufferParams::writeFile(ostream & os) const // then the text parameters if (language != ignore_language) os << "\\language " << language->lang() << '\n'; - os << "\\inputencoding " << inputenc + os << "\\language_package " << lang_package + << "\n\\inputencoding " << inputenc << "\n\\fontencoding " << fontenc << "\n\\font_roman " << fonts_roman << "\n\\font_sans " << fonts_sans @@ -2442,6 +2447,9 @@ string const BufferParams::font_encoding() const string BufferParams::babelCall(string const & lang_opts, bool const langoptions) const { + if (lang_package != "auto" && lang_package != "babel" + && lang_package != "default" && lang_package != "none") + return lang_package; if (lyxrc.language_package_selection == LyXRC::LP_CUSTOM) return lyxrc.language_custom_package; // suppress the babel call if there is no BabelName defined diff --git a/src/BufferParams.h b/src/BufferParams.h index 2606e6fc31..386ef5739b 100644 --- a/src/BufferParams.h +++ b/src/BufferParams.h @@ -236,6 +236,8 @@ public: int tocdepth; /// Language const * language; + /// language package + std::string lang_package; /// BranchList: BranchList & branchlist(); BranchList const & branchlist() const; diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index ac9c1ca4a4..7ac0734ab6 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -294,20 +294,31 @@ bool LaTeXFeatures::useBabel() const { if (usePolyglossia()) return false; - return (lyxrc.language_package_selection != LyXRC::LP_NONE) - || (bufferParams().language->lang() != lyxrc.default_language - && !bufferParams().language->babel().empty()) - || this->hasLanguages(); + if (bufferParams().lang_package == "default") + return (lyxrc.language_package_selection != LyXRC::LP_NONE) + || (bufferParams().language->lang() != lyxrc.default_language + && !bufferParams().language->babel().empty()) + || this->hasLanguages(); + return (bufferParams().lang_package != "none") + || (bufferParams().language->lang() != lyxrc.default_language + && !bufferParams().language->babel().empty()) + || this->hasLanguages(); } bool LaTeXFeatures::usePolyglossia() const { - return (lyxrc.language_package_selection == LyXRC::LP_AUTO) - && isRequired("polyglossia") - && isAvailable("polyglossia") - && !params_.documentClass().provides("babel") - && this->hasPolyglossiaLanguages(); + if (bufferParams().lang_package == "default") + return (lyxrc.language_package_selection == LyXRC::LP_AUTO) + && isRequired("polyglossia") + && isAvailable("polyglossia") + && !params_.documentClass().provides("babel") + && this->hasPolyglossiaLanguages(); + return (bufferParams().lang_package == "auto") + && isRequired("polyglossia") + && isAvailable("polyglossia") + && !params_.documentClass().provides("babel") + && this->hasPolyglossiaLanguages(); } diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index 97f79af9ce..66275db367 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -964,6 +964,12 @@ GuiDocument::GuiDocument(GuiView & lv) this, SLOT(change_adaptor())); connect(langModule->quoteStyleCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); + connect(langModule->languagePackageCO, SIGNAL(activated(int)), + this, SLOT(change_adaptor())); + connect(langModule->languagePackageED, SIGNAL(textChanged(QString)), + this, SLOT(change_adaptor())); + connect(langModule->languagePackageCO, SIGNAL(currentIndexChanged(int)), + this, SLOT(languagePackageChanged(int))); QAbstractItemModel * language_model = guiApp->languageModel(); // FIXME: it would be nice if sorting was enabled/disabled via a checkbox. @@ -988,6 +994,17 @@ GuiDocument::GuiDocument(GuiView & lv) langModule->quoteStyleCO->addItem(qt_("<>")); langModule->quoteStyleCO->addItem(qt_(">>text<<")); + langModule->languagePackageCO->addItem( + qt_("Default"), toqstr("default")); + langModule->languagePackageCO->addItem( + qt_("Automatic"), toqstr("auto")); + langModule->languagePackageCO->addItem( + qt_("Always Babel"), toqstr("babel")); + langModule->languagePackageCO->addItem( + qt_("Custom"), toqstr("custom")); + langModule->languagePackageCO->addItem( + qt_("None[[language package]]"), toqstr("none")); + // color colorModule = new UiWidget; @@ -1877,6 +1894,13 @@ void GuiDocument::classChanged() } +void GuiDocument::languagePackageChanged(int i) +{ + langModule->languagePackageED->setEnabled( + langModule->languagePackageCO->itemData(i).toString() == "custom"); +} + + void GuiDocument::bibtexChanged(int n) { biblioModule->bibtexOptionsED->setEnabled(n != 0); @@ -2202,6 +2226,14 @@ void GuiDocument::applyView() QString const lang = langModule->languageCO->itemData( langModule->languageCO->currentIndex()).toString(); bp_.language = lyx::languages.getLanguage(fromqstr(lang)); + + QString const pack = langModule->languagePackageCO->itemData( + langModule->languagePackageCO->currentIndex()).toString(); + if (pack == "custom") + bp_.lang_package = + fromqstr(langModule->languagePackageED->text()); + else + bp_.lang_package = fromqstr(pack); //color bp_.backgroundcolor = set_backgroundcolor; @@ -2614,6 +2646,16 @@ void GuiDocument::paramsToDialog() langModule->defaultencodingRB->setChecked(default_enc); langModule->otherencodingRB->setChecked(!default_enc); + int const p = langModule->languagePackageCO->findData(toqstr(bp_.lang_package)); + if (p == -1) { + langModule->languagePackageCO->setCurrentIndex( + langModule->languagePackageCO->findData("custom")); + langModule->languagePackageED->setText(toqstr(bp_.lang_package)); + } else { + langModule->languagePackageCO->setCurrentIndex(p); + langModule->languagePackageED->clear(); + } + //color if (bp_.isfontcolor) { colorModule->fontColorPB->setStyleSheet( diff --git a/src/frontends/qt4/GuiDocument.h b/src/frontends/qt4/GuiDocument.h index a05adfb45c..b438f5f7de 100644 --- a/src/frontends/qt4/GuiDocument.h +++ b/src/frontends/qt4/GuiDocument.h @@ -104,6 +104,7 @@ private Q_SLOTS: void browseLayout(); void browseMaster(); void classChanged(); + void languagePackageChanged(int); void bibtexChanged(int); void updateModuleInfo(); void modulesChanged(); diff --git a/src/frontends/qt4/ui/LanguageUi.ui b/src/frontends/qt4/ui/LanguageUi.ui index 8ed17185f8..4ac3b3312d 100644 --- a/src/frontends/qt4/ui/LanguageUi.ui +++ b/src/frontends/qt4/ui/LanguageUi.ui @@ -1,55 +1,95 @@ - + LanguageUi - - + + 0 0 - 257 - 257 + 335 + 282 - + - - - 9 - - - 6 - - - - + + + + + &Language: + + + languageCO + + + + + + + 20 + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 71 + 23 + + + + + + + + &Quote Style: + + + quoteStyleCO + + + + + + + + + Encoding - + true - - + + 9 - + 6 - - - + + + Language &Default - + true - + - + Qt::Horizontal - + 81 22 @@ -57,19 +97,19 @@ - - - + + + &Other: - - - + + + false - + false @@ -77,61 +117,56 @@ - - - + + + + + + Language pac&kage: + + + languagePackageCO + + + + + + + Select which language package LyX should use + + + + + + + Enter the command to load the language package (default: babel) + + + + + + + + Qt::Horizontal - - QSizePolicy::MinimumExpanding - - + - 71 - 23 + 38 + 20 - - - - &Language: - - - languageCO - - - - - - - &Quote Style: - - - quoteStyleCO - - - - - - - - - - 20 - - - - + - + Qt::Vertical - + QSizePolicy::Expanding - + 71 171 @@ -149,7 +184,7 @@ encodingCO - qt_i18n.h + qt_i18n.h @@ -159,11 +194,11 @@ encodingCO setEnabled(bool) - + 34 149 - + 107 145 -- 2.39.2