From 86dc4696afe661e8a99abe7b95691d6ba9ca2ad7 Mon Sep 17 00:00:00 2001 From: Dekel Tsur Date: Sun, 25 Feb 2001 10:22:54 +0000 Subject: [PATCH] - Add the option to disable babel for documents whose language is equal to default_language - Use \foreignlanguage to locally change the language inside a paragraph git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1617 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/ChangeLog | 10 ++++ src/buffer.C | 26 ++++++--- src/frontends/xforms/ChangeLog | 5 ++ src/frontends/xforms/FormPreferences.C | 31 ++++++++--- src/frontends/xforms/form_preferences.C | 24 +++++++-- src/frontends/xforms/form_preferences.h | 2 + .../xforms/forms/form_preferences.fd | 46 ++++++++++++++-- src/insets/insetquotes.C | 8 ++- src/lyxfont.C | 4 +- src/lyxrc.C | 54 ++++++++++++++++++- src/lyxrc.h | 9 ++++ 11 files changed, 189 insertions(+), 30 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index ee42d94a00..584b326072 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2001-02-23 Dekel Tsur + + * lyxrc.C: Add language_command_local, language_use_babel and + language_global_options. + + * lyxfont.C (latexWriteStartChanges): Use language_command_local. + + * buffer.C (makeLaTeXFile): Use language_use_babel and + language_global_options. + 2001-02-23 Juergen Vigna * lyxfunc.C (Dispatch): removed the whole part of the switch statement diff --git a/src/buffer.C b/src/buffer.C index cd7ff8535c..053bd43b41 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -1541,6 +1541,7 @@ void Buffer::writeFileAscii(ostream & ofs, int linelen) ofs << "\n"; } +bool use_babel; void Buffer::makeLaTeXFile(string const & fname, string const & original_path, @@ -1669,24 +1670,28 @@ void Buffer::makeLaTeXFile(string const & fname, options += "landscape,"; // language should be a parameter to \documentclass - bool use_babel = false; + use_babel = false; + string language_options; if (params.language->babel() == "hebrew" && default_language->babel() != "hebrew") // This seems necessary features.UsedLanguages.insert(default_language); + + if (lyxrc.language_use_babel || #ifdef DO_USE_DEFAULT_LANGUAGE - if (params.language->lang() != "default" || - !features.UsedLanguages.empty()) { + params.language->lang() != "default" || #endif + params.language->lang() != lyxrc.default_language || + !features.UsedLanguages.empty()) { use_babel = true; for (LaTeXFeatures::LanguageList::const_iterator cit = features.UsedLanguages.begin(); cit != features.UsedLanguages.end(); ++cit) - options += (*cit)->babel() + ","; - options += params.language->babel() + ','; -#ifdef DO_USE_DEFAULT_LANGUAGE + language_options += (*cit)->babel() + ','; + language_options += params.language->babel(); + if (lyxrc.language_global_options) + options += language_options + ','; } -#endif // the user-defined options if (!params.options.empty()) { @@ -1868,7 +1873,12 @@ void Buffer::makeLaTeXFile(string const & fname, // We try to load babel late, in case it interferes // with other packages. if (use_babel) { - ofs << lyxrc.language_package << endl; + string tmp = lyxrc.language_package; + if (!lyxrc.language_global_options + && tmp == "\\usepackage{babel}") + tmp = "\\usepackage[" + + language_options + "]{babel}"; + ofs << tmp << "\n"; texrow.newline(); } diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 9b6458d73e..bf2e924489 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,8 @@ +2001-02-23 Dekel Tsur + + * FormPreferences.C: Handle lyxrc.language_use_babel and + lyxrc.language_global_options. + 2001-02-23 Angus Leeming * FormPreferences(GetFrom, GetTo): use size_type rather than int. diff --git a/src/frontends/xforms/FormPreferences.C b/src/frontends/xforms/FormPreferences.C index ef41f316ca..55d351ffaf 100644 --- a/src/frontends/xforms/FormPreferences.C +++ b/src/frontends/xforms/FormPreferences.C @@ -1184,7 +1184,7 @@ bool FormPreferences::Converters::Input() string const FormPreferences::Converters::GetFrom() const { - Formats::FormatList::size_type const i = + ::Formats::FormatList::size_type const i = fl_get_choice(dialog_->choice_from); if (i > 0 && i <= local_formats.size()) @@ -1199,7 +1199,7 @@ string const FormPreferences::Converters::GetFrom() const string const FormPreferences::Converters::GetTo() const { - Formats::FormatList::size_type const i = + ::Formats::FormatList::size_type const i = fl_get_choice(dialog_->choice_from); if (i > 0 && i <= local_formats.size()) @@ -1649,14 +1649,20 @@ void FormPreferences::Language::apply() button = fl_get_button(dialog_->check_rtl_support); lyxrc.rtl_support = static_cast(button); + button = fl_get_button(dialog_->check_mark_foreign); + lyxrc.mark_foreign_language = static_cast(button); + button = fl_get_button(dialog_->check_auto_begin); lyxrc.language_auto_begin = static_cast(button); button = fl_get_button(dialog_->check_auto_end); lyxrc.language_auto_end = static_cast(button); - button = fl_get_button(dialog_->check_mark_foreign); - lyxrc.mark_foreign_language = static_cast(button); + button = fl_get_button(dialog_->check_use_babel); + lyxrc.language_use_babel = static_cast(button); + + button = fl_get_button(dialog_->check_global_options); + lyxrc.language_global_options = static_cast(button); lyxrc.language_package = fl_get_input(dialog_->input_package); lyxrc.language_command_begin = fl_get_input(dialog_->input_command_begin); @@ -1713,6 +1719,8 @@ void FormPreferences::Language::build() setPreHandler(dialog_->check_mark_foreign); setPreHandler(dialog_->check_auto_begin); setPreHandler(dialog_->check_auto_end); + setPreHandler(dialog_->check_use_babel); + setPreHandler(dialog_->check_global_options); setPreHandler(dialog_->input_command_begin); setPreHandler(dialog_->input_command_end); @@ -1737,12 +1745,16 @@ FormPreferences::Language::feedback(FL_OBJECT const * const ob) const str = lyxrc.getDescription(LyXRC::RC_KBMAP_SECONDARY); else if (ob == dialog_->check_rtl_support) str = lyxrc.getDescription(LyXRC::RC_RTL_SUPPORT); + else if (ob == dialog_->check_mark_foreign) + str = lyxrc.getDescription(LyXRC::RC_MARK_FOREIGN_LANGUAGE); else if (ob == dialog_->check_auto_begin) str = lyxrc.getDescription(LyXRC::RC_LANGUAGE_AUTO_BEGIN); else if (ob == dialog_->check_auto_end) str = lyxrc.getDescription(LyXRC::RC_LANGUAGE_AUTO_END); - else if (ob == dialog_->check_mark_foreign) - str = lyxrc.getDescription(LyXRC::RC_MARK_FOREIGN_LANGUAGE); + else if (ob == dialog_->check_use_babel) + str = lyxrc.getDescription(LyXRC::RC_LANGUAGE_USE_BABEL); + else if (ob == dialog_->check_global_options) + str = lyxrc.getDescription(LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS); else if (ob == dialog_->input_package) str = lyxrc.getDescription(LyXRC::RC_LANGUAGE_PACKAGE); else if (ob == dialog_->input_command_begin) @@ -1833,10 +1845,13 @@ void FormPreferences::Language::update() } fl_set_button(dialog_->check_rtl_support, lyxrc.rtl_support); - fl_set_button(dialog_->check_auto_begin, lyxrc.language_auto_begin); - fl_set_button(dialog_->check_auto_end, lyxrc.language_auto_end); fl_set_button(dialog_->check_mark_foreign, lyxrc.mark_foreign_language); + fl_set_button(dialog_->check_auto_begin, lyxrc.language_auto_begin); + fl_set_button(dialog_->check_auto_end, lyxrc.language_auto_end); + fl_set_button(dialog_->check_use_babel, lyxrc.language_use_babel); + fl_set_button(dialog_->check_global_options, + lyxrc.language_global_options); fl_set_input(dialog_->input_package, lyxrc.language_package.c_str()); diff --git a/src/frontends/xforms/form_preferences.C b/src/frontends/xforms/form_preferences.C index 9d8e0936e8..b936d78e07 100644 --- a/src/frontends/xforms/form_preferences.C +++ b/src/frontends/xforms/form_preferences.C @@ -406,7 +406,7 @@ FD_form_language * FormPreferences::build_language() fl_set_object_callback(obj, C_FormBaseInputCB, 0); { char const * const dummy = N_("RtL support|#R"); - fdui->check_rtl_support = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 154, 161, 30, 30, idex(_(dummy))); + fdui->check_rtl_support = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 140, 161, 30, 30, idex(_(dummy))); fl_set_button_shortcut(obj, scex(_(dummy)), 1); } fl_set_object_lsize(obj, FL_NORMAL_SIZE); @@ -414,7 +414,7 @@ FD_form_language * FormPreferences::build_language() fl_set_object_callback(obj, C_FormBaseInputCB, 0); { char const * const dummy = N_("Mark foreign|#M"); - fdui->check_mark_foreign = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 154, 187, 30, 30, idex(_(dummy))); + fdui->check_mark_foreign = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 140, 187, 30, 30, idex(_(dummy))); fl_set_button_shortcut(obj, scex(_(dummy)), 1); } fl_set_object_lsize(obj, FL_NORMAL_SIZE); @@ -422,7 +422,7 @@ FD_form_language * FormPreferences::build_language() fl_set_object_callback(obj, C_FormBaseInputCB, 0); { char const * const dummy = N_("Auto begin|#b"); - fdui->check_auto_begin = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 362, 161, 30, 30, idex(_(dummy))); + fdui->check_auto_begin = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 265, 161, 30, 30, idex(_(dummy))); fl_set_button_shortcut(obj, scex(_(dummy)), 1); } fl_set_object_lsize(obj, FL_NORMAL_SIZE); @@ -430,7 +430,7 @@ FD_form_language * FormPreferences::build_language() fl_set_object_callback(obj, C_FormBaseInputCB, 0); { char const * const dummy = N_("Auto finish|#f"); - fdui->check_auto_end = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 362, 187, 30, 30, idex(_(dummy))); + fdui->check_auto_end = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 265, 187, 30, 30, idex(_(dummy))); fl_set_button_shortcut(obj, scex(_(dummy)), 1); } fl_set_object_lsize(obj, FL_NORMAL_SIZE); @@ -468,6 +468,22 @@ FD_form_language * FormPreferences::build_language() fl_set_object_callback(obj, C_FormBaseInputCB, 0); fdui->button_kbmap2_browse = obj = fl_add_button(FL_NORMAL_BUTTON, 341, 128, 90, 30, _("Browse")); fl_set_object_callback(obj, C_FormBaseInputCB, 0); + { + char const * const dummy = N_("Use babel|#U"); + fdui->check_use_babel = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 390, 161, 30, 30, idex(_(dummy))); + fl_set_button_shortcut(obj, scex(_(dummy)), 1); + } + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_lalign(obj, FL_ALIGN_LEFT); + fl_set_object_callback(obj, C_FormBaseInputCB, 0); + { + char const * const dummy = N_("Global|#G"); + fdui->check_global_options = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 390, 187, 30, 30, idex(_(dummy))); + fl_set_button_shortcut(obj, scex(_(dummy)), 1); + } + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_lalign(obj, FL_ALIGN_LEFT); + fl_set_object_callback(obj, C_FormBaseInputCB, 0); fl_end_form(); fdui->form->fdui = fdui; diff --git a/src/frontends/xforms/form_preferences.h b/src/frontends/xforms/form_preferences.h index d6b0fcb53e..6bab3f4c18 100644 --- a/src/frontends/xforms/form_preferences.h +++ b/src/frontends/xforms/form_preferences.h @@ -124,6 +124,8 @@ struct FD_form_language { FL_OBJECT *input_kbmap2; FL_OBJECT *button_kbmap1_browse; FL_OBJECT *button_kbmap2_browse; + FL_OBJECT *check_use_babel; + FL_OBJECT *check_global_options; }; struct FD_form_colors { ~FD_form_colors(); diff --git a/src/frontends/xforms/forms/form_preferences.fd b/src/frontends/xforms/forms/form_preferences.fd index ab6d12dbb6..3e84690f7b 100644 --- a/src/frontends/xforms/forms/form_preferences.fd +++ b/src/frontends/xforms/forms/form_preferences.fd @@ -924,7 +924,7 @@ argument: 0 Name: form_language Width: 450 Height: 360 -Number of Objects: 14 +Number of Objects: 16 -------------------- class: FL_BOX @@ -1001,7 +1001,7 @@ argument: 0 -------------------- class: FL_CHECKBUTTON type: PUSH_BUTTON -box: 154 161 30 30 +box: 140 161 30 30 boxtype: FL_NO_BOX colors: FL_COL1 FL_YELLOW alignment: FL_ALIGN_LEFT @@ -1019,7 +1019,7 @@ argument: 0 -------------------- class: FL_CHECKBUTTON type: PUSH_BUTTON -box: 154 187 30 30 +box: 140 187 30 30 boxtype: FL_NO_BOX colors: FL_COL1 FL_YELLOW alignment: FL_ALIGN_LEFT @@ -1037,7 +1037,7 @@ argument: 0 -------------------- class: FL_CHECKBUTTON type: PUSH_BUTTON -box: 362 161 30 30 +box: 265 161 30 30 boxtype: FL_NO_BOX colors: FL_COL1 FL_YELLOW alignment: FL_ALIGN_LEFT @@ -1055,7 +1055,7 @@ argument: 0 -------------------- class: FL_CHECKBUTTON type: PUSH_BUTTON -box: 362 187 30 30 +box: 265 187 30 30 boxtype: FL_NO_BOX colors: FL_COL1 FL_YELLOW alignment: FL_ALIGN_LEFT @@ -1178,6 +1178,42 @@ name: button_kbmap2_browse callback: C_FormBaseInputCB argument: 0 +-------------------- +class: FL_CHECKBUTTON +type: PUSH_BUTTON +box: 390 161 30 30 +boxtype: FL_NO_BOX +colors: FL_COL1 FL_YELLOW +alignment: FL_ALIGN_LEFT +style: FL_NORMAL_STYLE +size: FL_NORMAL_SIZE +lcol: FL_BLACK +label: Use babel|#U +shortcut: +resize: FL_RESIZE_ALL +gravity: FL_NoGravity FL_NoGravity +name: check_use_babel +callback: C_FormBaseInputCB +argument: 0 + +-------------------- +class: FL_CHECKBUTTON +type: PUSH_BUTTON +box: 390 187 30 30 +boxtype: FL_NO_BOX +colors: FL_COL1 FL_YELLOW +alignment: FL_ALIGN_LEFT +style: FL_NORMAL_STYLE +size: FL_NORMAL_SIZE +lcol: FL_BLACK +label: Global|#G +shortcut: +resize: FL_RESIZE_ALL +gravity: FL_NoGravity FL_NoGravity +name: check_global_options +callback: C_FormBaseInputCB +argument: 0 + =============== FORM =============== Name: form_colors Width: 450 diff --git a/src/insets/insetquotes.C b/src/insets/insetquotes.C index 41f4be19d5..378649e3f8 100644 --- a/src/insets/insetquotes.C +++ b/src/insets/insetquotes.C @@ -227,16 +227,22 @@ void InsetQuotes::Read(Buffer const *, LyXLex & lex) } +extern bool use_babel; + int InsetQuotes::Latex(Buffer const * buf, ostream & os, bool /*fragile*/, bool) const { - string doclang = buf->GetLanguage()->lang(); + string const doclang = buf->GetLanguage()->lang(); int quoteind = quote_index[side][language]; string qstr; if (lyxrc.fontenc == "T1") { qstr = latex_quote_t1[times][quoteind]; +#ifdef DO_USE_DEFAULT_LANGUAGE } else if (doclang == "default") { +#else + } else if (!use_babel) { +#endif qstr = latex_quote_ot1[times][quoteind]; } else if (language == InsetQuotes::FrenchQ && times == InsetQuotes::DoubleQ diff --git a/src/lyxfont.C b/src/lyxfont.C index 068f76252f..544e6aafb3 100644 --- a/src/lyxfont.C +++ b/src/lyxfont.C @@ -677,8 +677,8 @@ int LyXFont::latexWriteStartChanges(ostream & os, LyXFont const & base, count += 3; } } else { - string tmp = '{' + - subst(lyxrc.language_command_begin, + string tmp = + subst(lyxrc.language_command_local, "$$lang", language()->babel()); os << tmp; count += tmp.length(); diff --git a/src/lyxrc.C b/src/lyxrc.C index 32edd2449a..bfdb1ad4ce 100644 --- a/src/lyxrc.C +++ b/src/lyxrc.C @@ -79,7 +79,10 @@ keyword_item lyxrcTags[] = { { "\\language_auto_end", LyXRC::RC_LANGUAGE_AUTO_END }, { "\\language_command_begin", LyXRC::RC_LANGUAGE_COMMAND_BEGIN }, { "\\language_command_end", LyXRC::RC_LANGUAGE_COMMAND_END }, + { "\\language_command_local", LyXRC::RC_LANGUAGE_COMMAND_LOCAL }, + { "\\language_global_options", LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS }, { "\\language_package", LyXRC::RC_LANGUAGE_PACKAGE }, + { "\\language_use_babel", LyXRC::RC_LANGUAGE_USE_BABEL }, { "\\lastfiles", LyXRC::RC_LASTFILES }, { "\\make_backup", LyXRC::RC_MAKE_BACKUP }, { "\\mark_foreign_language", LyXRC::RC_MARK_FOREIGN_LANGUAGE }, @@ -220,11 +223,14 @@ void LyXRC::setDefaults() { rtl_support = false; auto_number = true; mark_foreign_language = true; - language_package = "\\usepackage{babel}"; language_auto_begin = true; language_auto_end = true; + language_global_options = true; + language_use_babel = true; + language_package = "\\usepackage{babel}"; language_command_begin = "\\selectlanguage{$$lang}"; language_command_end = "\\selectlanguage{$$lang}"; + language_command_local = "\\foreignlanguage{$$lang}{"; default_language = "english"; // new_ask_filename = false; @@ -800,6 +806,14 @@ int LyXRC::read(string const & filename) if (lexrc.next()) language_auto_end = lexrc.GetBool(); break; + case RC_LANGUAGE_GLOBAL_OPTIONS: + if (lexrc.next()) + language_global_options = lexrc.GetBool(); + break; + case RC_LANGUAGE_USE_BABEL: + if (lexrc.next()) + language_use_babel = lexrc.GetBool(); + break; case RC_LANGUAGE_COMMAND_BEGIN: if (lexrc.next()) language_command_begin = lexrc.GetString(); @@ -808,6 +822,10 @@ int LyXRC::read(string const & filename) if (lexrc.next()) language_command_end = lexrc.GetString(); break; + case RC_LANGUAGE_COMMAND_LOCAL: + if (lexrc.next()) + language_command_local = lexrc.GetString(); + break; case RC_RTL_SUPPORT: if (lexrc.next()) rtl_support = lexrc.GetBool(); @@ -1413,6 +1431,19 @@ void LyXRC::output(ostream & os) const os << "\\language_package \"" << language_package << "\"\n"; } + case RC_LANGUAGE_GLOBAL_OPTIONS: + if (language_global_options + != system_lyxrc.language_global_options) { + os << "\\language_global_options \"" + << tostr(language_global_options) + << "\"\n"; + } + case RC_LANGUAGE_USE_BABEL: + if (language_use_babel != system_lyxrc.language_use_babel) { + os << "\\language_use_babel \"" + << tostr(language_use_babel) + << "\"\n"; + } case RC_LANGUAGE_COMMAND_BEGIN: if (language_command_begin != system_lyxrc.language_command_begin) { @@ -1426,6 +1457,13 @@ void LyXRC::output(ostream & os) const os << "\\language_command_end \"" << language_command_end << "\"\n"; } + case RC_LANGUAGE_COMMAND_LOCAL: + if (language_command_local + != system_lyxrc.language_command_local) { + os << "\\language_command_local \"" + << language_command_local + << "\"\n"; + } case RC_LANGUAGE_AUTO_BEGIN: if (language_auto_begin != system_lyxrc.language_auto_begin) { os << "\\language_auto_begin " @@ -1815,6 +1853,14 @@ string const LyXRC::getDescription(LyXRCTags tag) case RC_LANGUAGE_PACKAGE: str = N_("The latex command for loading the language package. E.g. \"\\usepackage{babel}\", \"\\usepackage{omega}\"."); break; + + case RC_LANGUAGE_GLOBAL_OPTIONS: + str = N_("De-select if you don't want the language(s) used as an argument to \\documentclass."); + break; + + case RC_LANGUAGE_USE_BABEL: + str = N_("De-select if you don't want babel to be used when the language of the document is the default language."); + break; case RC_LANGUAGE_AUTO_BEGIN: str = N_("Select if a language switching command is needed at the beginning of the document."); @@ -1831,7 +1877,11 @@ string const LyXRC::getDescription(LyXRCTags tag) case RC_LANGUAGE_COMMAND_END: str = N_("The latex command for changing back to the language of the document."); break; - + + case RC_LANGUAGE_COMMAND_LOCAL: + str = N_("The latex command for local changing of the language."); + break; + case RC_DATE_INSERT_FORMAT: //xgettext:no-c-format str = N_("This accepts the normal strftime formats; see man strftime for full details. E.g.\"%A, %e. %B %Y\"."); diff --git a/src/lyxrc.h b/src/lyxrc.h index 08d573a3ae..5b0882b51e 100644 --- a/src/lyxrc.h +++ b/src/lyxrc.h @@ -105,6 +105,9 @@ enum LyXRCTags { RC_LANGUAGE_AUTO_END, RC_LANGUAGE_COMMAND_BEGIN, RC_LANGUAGE_COMMAND_END, + RC_LANGUAGE_COMMAND_LOCAL, + RC_LANGUAGE_GLOBAL_OPTIONS, + RC_LANGUAGE_USE_BABEL, RC_DATE_INSERT_FORMAT, RC_SHOW_BANNER, RC_WHEEL_JUMP, @@ -302,6 +305,12 @@ enum LyXRCTags { /// string language_command_end; /// + string language_command_local; + /// + bool language_global_options; + /// + bool language_use_babel; + /// bool rtl_support; /// bool auto_number;