[LyX/master] Use string value rather than int for \language_package_selection pref

Juergen Spitzmueller <[email protected]> Fri, 24 Apr 2026 11:18:46 +0000
Newsgroups gmane.editors.lyx.cvs
Message-ID <[email protected]>
commit d525f108a1a18023b08acde10ec654cd041340a4
Author: Juergen Spitzmueller <[email protected]>
Date:   Fri Apr 24 13:17:18 2026 +0200

    Use string value rather than int for \language_package_selection pref
    
    The int is obscure and bound to result in bugs
---
 lib/configure.py                      |  2 +-
 lib/scripts/prefs2prefs_prefs.py      | 24 ++++++++++++++++++++++-
 src/LaTeXFeatures.cpp                 | 12 ++++--------
 src/LyXRC.cpp                         | 36 +++++------------------------------
 src/LyXRC.h                           |  9 +--------
 src/frontends/qt/GuiPrefs.cpp         | 27 ++++++++++++++------------
 src/frontends/qt/ui/PrefLanguageUi.ui | 22 +--------------------
 7 files changed, 50 insertions(+), 82 deletions(-)

diff --git a/lib/configure.py b/lib/configure.py
index 9f0d3eecf4..8561a51b7f 100644
--- a/lib/configure.py
+++ b/lib/configure.py
@@ -2081,7 +2081,7 @@ if __name__ == '__main__':
     lyx_check_config = True
     lyx_kpsewhich = True
     outfile = 'lyxrc.defaults'
-    lyxrc_fileformat = 39
+    lyxrc_fileformat = 41
     rc_entries = ''
     lyx_keep_temps = False
     version_suffix = ''
diff --git a/lib/scripts/prefs2prefs_prefs.py b/lib/scripts/prefs2prefs_prefs.py
index a8e5e3a118..c6807ceb08 100644
--- a/lib/scripts/prefs2prefs_prefs.py
+++ b/lib/scripts/prefs2prefs_prefs.py
@@ -178,6 +178,9 @@
 # Incremented to format 40
 #   Rename \experimental:bookmarks_visibility to \bookmarks_visibility
 
+# Incremented to format 41, by spitz
+#   Use proper string values for \language_package_selection
+
 # NOTE: The format should also be updated in LYXRC.cpp and
 # in configure.py (search for lyxrc_fileformat).
 
@@ -529,6 +532,24 @@ def bookmarks_visibility(line):
 ####################################
 
 
+#################################
+# Conversions from LyX 2.5 to 2.6
+
+def rename_langpack(line):
+	line = line.lower()
+	if not line.startswith("\\language_package_selection "):
+		return no_match
+	line = line.replace('0', '"auto"')
+	line = line.replace('1', '"babel"')
+	line = line.replace('2', '"custom"')
+	line = line.replace('3', '"none"')
+	return (True, line)
+
+
+# End conversions for LyX 2.5 to 2.6
+####################################
+
+
 ############################################################
 # Format-conversion map. Also add empty format changes here.
 
@@ -578,5 +599,6 @@ conversions = [
 	[ 37, [remove_fullscreen_widthlimit]],
 	[ 38, []],
 	[ 39, []],
-        [ 40, [bookmarks_visibility]],
+    [ 40, [bookmarks_visibility]],
+    [ 41, [rename_langpack]]
 ]
diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp
index 4bc7f7af4e..cc61cc5f59 100644
--- a/src/LaTeXFeatures.cpp
+++ b/src/LaTeXFeatures.cpp
@@ -621,23 +621,19 @@ LaTeXFeatures::LangPackage LaTeXFeatures::langPackage() const
 	}
 
 	if (local_lp == "default") {
-		switch (lyxrc.language_package_selection) {
-		case LyXRC::LP_AUTO:
+		if (lyxrc.language_package_selection == "auto") {
 			// polyglossia requirement has priority over babel
 			if (polyglossia_required)
 				return LANG_PACK_POLYGLOSSIA;
 			else if (babel_required)
 				return LANG_PACK_BABEL;
-			break;
-		case LyXRC::LP_BABEL:
+		} else if (lyxrc.language_package_selection == "babel") {
 			if (babel_required)
 				return LANG_PACK_BABEL;
-			break;
-		case LyXRC::LP_CUSTOM:
+		} else if (lyxrc.language_package_selection == "custom")
 			return LANG_PACK_CUSTOM;
-		case LyXRC::LP_NONE:
+		else if (lyxrc.language_package_selection == "none")
 			return LANG_PACK_NONE;
-		}
 	}
 
 	return LANG_PACK_NONE;
diff --git a/src/LyXRC.cpp b/src/LyXRC.cpp
index 3adc55a119..b26b948139 100644
--- a/src/LyXRC.cpp
+++ b/src/LyXRC.cpp
@@ -60,7 +60,7 @@ namespace {
 
 // The format should also be updated in configure.py, and conversion code
 // should be added to prefs2prefs_prefs.py.
-static unsigned int const LYXRC_FILEFORMAT = 40; // graduate \\experimental:bookmark_visibility and change default
+static unsigned int const LYXRC_FILEFORMAT = 41; // Use proper string values for \language_package_selection
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
 	{ "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
@@ -830,22 +830,7 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
 			lexrc >> language_global_options;
 			break;
 		case RC_LANGUAGE_PACKAGE_SELECTION:
-			if (lexrc.next()) {
-				switch (lexrc.getInteger()) {
-				case 0:
-					language_package_selection = LP_AUTO;
-					break;
-				case 1:
-					language_package_selection = LP_BABEL;
-					break;
-				case 2:
-					language_package_selection = LP_CUSTOM;
-					break;
-				case 3:
-					language_package_selection = LP_NONE;
-					break;
-				}
-			}
+			lexrc >> language_package_selection;
 			break;
 		case RC_LANGUAGE_COMMAND_BEGIN:
 			lexrc >> language_command_begin;
@@ -2586,21 +2571,10 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
 	case RC_LANGUAGE_PACKAGE_SELECTION:
 		if (ignore_system_lyxrc ||
 		    language_package_selection != system_lyxrc.language_package_selection) {
-			os << "\\language_package_selection ";
-			switch (language_package_selection) {
-			case LP_AUTO:
-				os << "0\n";
+			os << "\\language_package_selection \""
+			    << language_package_selection
+			    << "\"\n";
 				break;
-			case LP_BABEL:
-				os << "1\n";
-				break;
-			case LP_CUSTOM:
-				os << "2\n";
-				break;
-			case LP_NONE:
-				os << "3\n";
-				break;
-			}
 		}
 		if (tag != RC_LAST)
 			break;
diff --git a/src/LyXRC.h b/src/LyXRC.h
index 01b5e99b52..26776dab46 100644
--- a/src/LyXRC.h
+++ b/src/LyXRC.h
@@ -406,14 +406,7 @@ public:
 	///
 	bool language_global_options = true;
 	///
-	enum LangPackageSelection {
-		LP_AUTO = 0,
-		LP_BABEL,
-		LP_CUSTOM,
-		LP_NONE
-	};
-	///
-	LangPackageSelection language_package_selection = LP_AUTO;
+	std::string language_package_selection = "auto";
 	/// bidi cursor movement: true = visual, false = logical
 	bool visual_cursor = false;
 	///
diff --git a/src/frontends/qt/GuiPrefs.cpp b/src/frontends/qt/GuiPrefs.cpp
index f41ade621e..f3dbcb827e 100644
--- a/src/frontends/qt/GuiPrefs.cpp
+++ b/src/frontends/qt/GuiPrefs.cpp
@@ -3270,6 +3270,15 @@ PrefLanguage::PrefLanguage(GuiPreferences * form)
 	defaultLengthUnitCO->addItem(lyx::qt_(unit_name_gui[Length::CM]), Length::CM);
 	defaultLengthUnitCO->addItem(lyx::qt_(unit_name_gui[Length::IN]), Length::IN);
 
+	languagePackageCO->addItem(
+		qt_("Automatic"), toqstr("auto"));
+	languagePackageCO->addItem(
+		qt_("Always Babel"), toqstr("babel"));
+	languagePackageCO->addItem(
+		qt_("Custom"), toqstr("custom"));
+	languagePackageCO->addItem(
+		qt_("None[[language package]]"), toqstr("none"));
+
 	QAbstractItemModel * language_model = guiApp->languageModel();
 	language_model->sort(0);
 	uiLanguageCO->blockSignals(true);
@@ -3332,15 +3341,8 @@ void PrefLanguage::applyRC(LyXRC & rc) const
 	rc.respect_os_kbd_language = respectOSkbdCB->isChecked();
 	rc.language_auto_begin = !explicitDocLangBeginCB->isChecked();
 	rc.language_auto_end = !explicitDocLangEndCB->isChecked();
-	int const p = languagePackageCO->currentIndex();
-	if (p == 0)
-		rc.language_package_selection = LyXRC::LP_AUTO;
-	else if (p == 1)
-		rc.language_package_selection = LyXRC::LP_BABEL;
-	else if (p == 2)
-		rc.language_package_selection = LyXRC::LP_CUSTOM;
-	else if (p == 3)
-		rc.language_package_selection = LyXRC::LP_NONE;
+	rc.language_package_selection =
+		fromqstr(languagePackageCO->itemData(languagePackageCO->currentIndex()).toString());
 	rc.language_custom_package = fromqstr(languagePackageED->text());
 	rc.language_global_options = globalCB->isChecked();
 	rc.language_command_begin = fromqstr(startCommandED->text());
@@ -3365,8 +3367,9 @@ void PrefLanguage::updateRC(LyXRC const & rc)
 	respectOSkbdCB->setChecked(rc.respect_os_kbd_language);
 	explicitDocLangBeginCB->setChecked(!rc.language_auto_begin);
 	explicitDocLangEndCB->setChecked(!rc.language_auto_end);
-	languagePackageCO->setCurrentIndex(rc.language_package_selection);
-	if (languagePackageCO->currentIndex() == 2) {
+	int pos = languagePackageCO->findData(toqstr(rc.language_package_selection));
+	languagePackageCO->setCurrentIndex(pos);
+	if (rc.language_package_selection == "custom") {
 		languagePackageED->setText(toqstr(rc.language_custom_package));
 		languagePackageED->setEnabled(true);
 	} else {
@@ -3385,7 +3388,7 @@ void PrefLanguage::updateRC(LyXRC const & rc)
 		defaultDecimalSepCO->setCurrentIndex(1);
 		defaultDecimalSepED->setText(toqstr(rc.default_decimal_sep));
 	}
-	int pos = defaultLengthUnitCO->findData(int(rc.default_length_unit));
+	pos = defaultLengthUnitCO->findData(int(rc.default_length_unit));
 	defaultLengthUnitCO->setCurrentIndex(pos);
 
 	pos = uiLanguageCO->findData(toqstr(rc.gui_language));
diff --git a/src/frontends/qt/ui/PrefLanguageUi.ui b/src/frontends/qt/ui/PrefLanguageUi.ui
index 4bc6e39f60..aa16fd3724 100644
--- a/src/frontends/qt/ui/PrefLanguageUi.ui
+++ b/src/frontends/qt/ui/PrefLanguageUi.ui
@@ -72,27 +72,7 @@
         <property name="toolTip">
          <string>Select which (LaTeX) language package documents should use by default</string>
         </property>
-        <item>
-         <property name="text">
-          <string>Automatic</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>Always Babel</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>Custom</string>
-         </property>
-        </item>
-        <item>
-         <property name="text">
-          <string>None[[language package]]</string>
-         </property>
-        </item>
-       </widget>
+        </widget>
       </item>
       <item row="0" column="2">
        <widget class="QLineEdit" name="languagePackageED">
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs