]> git.lyx.org Git - lyx.git/blob - src/LyXRC.cpp
Use libmagic for file format detection if available.
[lyx.git] / src / LyXRC.cpp
1 /**
2  * \file LyXRC.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Lars Gullik Bjønnes
7  * \author Jean-Marc Lasgouttes
8  * \author Angus Leeming
9  * \author John Levon
10  * \author André Pönitz
11  * \author Allan Rae
12  * \author Dekel Tsur
13  *
14  * Full author contact details are available in file CREDITS.
15  */
16
17 #include <config.h>
18
19 #include "LyXRC.h"
20
21 #include "ColorSet.h"
22 #include "Converter.h"
23 #include "FontEnums.h"
24 #include "Format.h"
25 #include "Lexer.h"
26 #include "LyX.h"
27 #include "Mover.h"
28 #include "Session.h"
29 #include "SpellChecker.h"
30 #include "version.h"
31
32 #include "graphics/GraphicsTypes.h"
33
34 #include "support/convert.h"
35 #include "support/debug.h"
36 #include "support/environment.h"
37 #include "support/FileName.h"
38 #include "support/filetools.h"
39 #include "support/gettext.h"
40 #include "support/lstrings.h"
41 #include "support/os.h"
42 #include "support/Package.h"
43 #include "support/userinfo.h"
44
45 #include <fstream>
46 #include <iostream>
47 #include <algorithm>
48
49 using namespace std;
50 using namespace lyx::support;
51
52 namespace lyx {
53
54 namespace os = support::os;
55
56 namespace {
57
58 static unsigned int const LYXRC_FILEFORMAT = 7; // gb: add mime types
59
60 // when adding something to this array keep it sorted!
61 LexerKeyword lyxrcTags[] = {
62         { "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
63         { "\\allow_geometry_session", LyXRC::RC_GEOMETRY_SESSION },
64         { "\\alternate_language", LyXRC::RC_ALT_LANG },
65         { "\\auto_number", LyXRC::RC_AUTO_NUMBER },
66         { "\\auto_region_delete", LyXRC::RC_AUTOREGIONDELETE },
67         { "\\auto_reset_options", LyXRC::RC_AUTORESET_OPTIONS },
68         { "\\autocorrection_math", LyXRC::RC_AUTOCORRECTION_MATH },
69         { "\\autosave", LyXRC::RC_AUTOSAVE },
70         { "\\backupdir_path", LyXRC::RC_BACKUPDIR_PATH },
71         { "\\bibtex_alternatives", LyXRC::RC_BIBTEX_ALTERNATIVES },
72         { "\\bibtex_command", LyXRC::RC_BIBTEX_COMMAND },
73         { "\\bind_file", LyXRC::RC_BINDFILE },
74         { "\\check_lastfiles", LyXRC::RC_CHECKLASTFILES },
75         { "\\chktex_command", LyXRC::RC_CHKTEX_COMMAND },
76         { "\\completion_cursor_text", LyXRC::RC_COMPLETION_CURSOR_TEXT },
77         { "\\completion_inline_delay", LyXRC::RC_COMPLETION_INLINE_DELAY },
78         { "\\completion_inline_dots", LyXRC::RC_COMPLETION_INLINE_DOTS },
79         { "\\completion_inline_math", LyXRC::RC_COMPLETION_INLINE_MATH },
80         { "\\completion_inline_text", LyXRC::RC_COMPLETION_INLINE_TEXT },
81         { "\\completion_minlength", LyXRC::RC_COMPLETION_MINLENGTH },
82         { "\\completion_popup_after_complete", LyXRC::RC_COMPLETION_POPUP_AFTER_COMPLETE },
83         { "\\completion_popup_delay", LyXRC::RC_COMPLETION_POPUP_DELAY },
84         { "\\completion_popup_math", LyXRC::RC_COMPLETION_POPUP_MATH },
85         { "\\completion_popup_text", LyXRC::RC_COMPLETION_POPUP_TEXT },
86         { "\\converter", LyXRC::RC_CONVERTER },
87         { "\\converter_cache_maxage", LyXRC::RC_CONVERTER_CACHE_MAXAGE },
88         { "\\copier", LyXRC::RC_COPIER },
89         { "\\cursor_follows_scrollbar", LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR },
90         { "\\cursor_width", LyXRC::RC_CURSOR_WIDTH },
91         { "\\date_insert_format", LyXRC::RC_DATE_INSERT_FORMAT },
92         { "\\def_file", LyXRC::RC_DEFFILE },
93         { "\\default_decimal_point", LyXRC::RC_DEFAULT_DECIMAL_POINT },
94         { "\\default_language", LyXRC::RC_DEFAULT_LANGUAGE },
95         { "\\default_length_unit", LyXRC::RC_DEFAULT_LENGTH_UNIT },
96         { "\\default_view_format", LyXRC::RC_DEFAULT_VIEW_FORMAT },
97         { "\\dialogs_iconify_with_main", LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN },
98         { "\\display_graphics", LyXRC::RC_DISPLAY_GRAPHICS },
99         { "\\document_path", LyXRC::RC_DOCUMENTPATH },
100         { "\\editor_alternatives", LyXRC::RC_EDITOR_ALTERNATIVES },
101         { "\\escape_chars", LyXRC::RC_ESC_CHARS },
102         { "\\example_path", LyXRC::RC_EXAMPLEPATH },
103         { "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
104         { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
105         { "\\force_paint_single_char", LyXRC::RC_FORCE_PAINT_SINGLE_CHAR },
106         { "\\format", LyXRC::RC_FILEFORMAT },
107         { "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
108         { "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
109         { "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
110         { "\\fullscreen_menubar", LyXRC::RC_FULL_SCREEN_MENUBAR },
111         { "\\fullscreen_scrollbar", LyXRC::RC_FULL_SCREEN_SCROLLBAR },
112         { "\\fullscreen_tabbar", LyXRC::RC_FULL_SCREEN_TABBAR },
113         { "\\fullscreen_toolbars", LyXRC::RC_FULL_SCREEN_TOOLBARS },
114         { "\\fullscreen_width", LyXRC::RC_FULL_SCREEN_WIDTH },
115         { "\\group_layouts", LyXRC::RC_GROUP_LAYOUTS },
116         { "\\gui_language", LyXRC::RC_GUI_LANGUAGE },
117         { "\\hunspelldir_path", LyXRC::RC_HUNSPELLDIR_PATH },
118         { "\\icon_set", LyXRC::RC_ICON_SET },
119         { "\\index_alternatives", LyXRC::RC_INDEX_ALTERNATIVES },
120         { "\\index_command", LyXRC::RC_INDEX_COMMAND },
121         { "\\input", LyXRC::RC_INPUT },
122         { "\\jbibtex_command", LyXRC::RC_JBIBTEX_COMMAND },
123         { "\\jindex_command", LyXRC::RC_JINDEX_COMMAND },
124         { "\\kbmap", LyXRC::RC_KBMAP },
125         { "\\kbmap_primary", LyXRC::RC_KBMAP_PRIMARY },
126         { "\\kbmap_secondary", LyXRC::RC_KBMAP_SECONDARY },
127         { "\\language_auto_begin", LyXRC::RC_LANGUAGE_AUTO_BEGIN },
128         { "\\language_auto_end", LyXRC::RC_LANGUAGE_AUTO_END },
129         { "\\language_command_begin", LyXRC::RC_LANGUAGE_COMMAND_BEGIN },
130         { "\\language_command_end", LyXRC::RC_LANGUAGE_COMMAND_END },
131         { "\\language_command_local", LyXRC::RC_LANGUAGE_COMMAND_LOCAL },
132         { "\\language_custom_package", LyXRC::RC_LANGUAGE_CUSTOM_PACKAGE },
133         { "\\language_global_options", LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS },
134         { "\\language_package_selection", LyXRC::RC_LANGUAGE_PACKAGE_SELECTION },
135         { "\\load_session", LyXRC::RC_LOADSESSION },
136         { "\\mac_dontswap_ctrl_meta", LyXRC::RC_MAC_DONTSWAP_CTRL_META },
137         { "\\mac_like_word_movement", LyXRC::RC_MAC_LIKE_WORD_MOVEMENT },
138         { "\\macro_edit_style", LyXRC::RC_MACRO_EDIT_STYLE },
139         { "\\make_backup", LyXRC::RC_MAKE_BACKUP },
140         { "\\mark_foreign_language", LyXRC::RC_MARK_FOREIGN_LANGUAGE },
141         { "\\mouse_wheel_speed", LyXRC::RC_MOUSE_WHEEL_SPEED },
142         { "\\nomencl_command", LyXRC::RC_NOMENCL_COMMAND },
143         { "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
144         { "\\open_buffers_in_tabs", LyXRC::RC_OPEN_BUFFERS_IN_TABS },
145         { "\\paragraph_markers", LyXRC::RC_PARAGRAPH_MARKERS },
146         { "\\path_prefix", LyXRC::RC_PATH_PREFIX },
147         { "\\plaintext_linelen", LyXRC::RC_PLAINTEXT_LINELEN },
148         { "\\preview", LyXRC::RC_PREVIEW },
149         { "\\preview_hashed_labels", LyXRC::RC_PREVIEW_HASHED_LABELS },
150         { "\\preview_scale_factor", LyXRC::RC_PREVIEW_SCALE_FACTOR },
151         { "\\print_adapt_output", LyXRC::RC_PRINT_ADAPTOUTPUT },
152         { "\\print_collcopies_flag", LyXRC::RC_PRINTCOLLCOPIESFLAG },
153         { "\\print_command", LyXRC::RC_PRINT_COMMAND },
154         { "\\print_copies_flag", LyXRC::RC_PRINTCOPIESFLAG },
155         { "\\print_evenpage_flag", LyXRC::RC_PRINTEVENPAGEFLAG },
156         { "\\print_extra_options", LyXRC::RC_PRINTEXSTRAOPTIONS },
157         { "\\print_file_extension", LyXRC::RC_PRINTFILEEXTENSION },
158         { "\\print_landscape_flag", LyXRC::RC_PRINTLANDSCAPEFLAG },
159         { "\\print_oddpage_flag", LyXRC::RC_PRINTODDPAGEFLAG },
160         { "\\print_pagerange_flag", LyXRC::RC_PRINTPAGERANGEFLAG },
161         { "\\print_paper_dimension_flag", LyXRC::RC_PRINTPAPERDIMENSIONFLAG },
162         { "\\print_paper_flag", LyXRC::RC_PRINTPAPERFLAG },
163         { "\\print_reverse_flag", LyXRC::RC_PRINTREVERSEFLAG },
164         { "\\print_spool_command", LyXRC::RC_PRINTSPOOL_COMMAND },
165         { "\\print_spool_printerprefix", LyXRC::RC_PRINTSPOOL_PRINTERPREFIX },
166         { "\\print_to_file", LyXRC::RC_PRINTTOFILE },
167         { "\\print_to_printer", LyXRC::RC_PRINTTOPRINTER },
168         { "\\printer", LyXRC::RC_PRINTER },
169         { "\\rtl", LyXRC::RC_RTL_SUPPORT },
170         { "\\save_compressed", LyXRC::RC_SAVE_COMPRESSED },
171         { "\\screen_dpi", LyXRC::RC_SCREEN_DPI },
172         { "\\screen_font_roman", LyXRC::RC_SCREEN_FONT_ROMAN },
173         { "\\screen_font_roman_foundry", LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY },
174         { "\\screen_font_sans", LyXRC::RC_SCREEN_FONT_SANS },
175         { "\\screen_font_sans_foundry", LyXRC::RC_SCREEN_FONT_SANS_FOUNDRY },
176         { "\\screen_font_scalable", LyXRC::RC_SCREEN_FONT_SCALABLE },
177         { "\\screen_font_sizes", LyXRC::RC_SCREEN_FONT_SIZES },
178         { "\\screen_font_typewriter", LyXRC::RC_SCREEN_FONT_TYPEWRITER },
179         { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY },
180         { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM },
181         { "\\scroll_below_document", LyXRC::RC_SCROLL_BELOW_DOCUMENT },
182         { "\\scroll_wheel_zoom", LyXRC::RC_SCROLL_WHEEL_ZOOM },
183         { "\\serverpipe", LyXRC::RC_SERVERPIPE },
184         { "\\set_color", LyXRC::RC_SET_COLOR },
185         { "\\show_banner", LyXRC::RC_SHOW_BANNER },
186         { "\\single_close_tab_button", LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON },
187         { "\\single_instance", LyXRC::RC_SINGLE_INSTANCE },
188         { "\\sort_layouts", LyXRC::RC_SORT_LAYOUTS },
189         { "\\spellcheck_continuously", LyXRC::RC_SPELLCHECK_CONTINUOUSLY },
190         { "\\spellcheck_notes", LyXRC::RC_SPELLCHECK_NOTES },
191         { "\\spellchecker", LyXRC::RC_SPELLCHECKER },
192         { "\\splitindex_command", LyXRC::RC_SPLITINDEX_COMMAND },
193         { "\\tempdir_path", LyXRC::RC_TEMPDIRPATH },
194         { "\\template_path", LyXRC::RC_TEMPLATEPATH },
195         { "\\tex_allows_spaces", LyXRC::RC_TEX_ALLOWS_SPACES },
196         { "\\tex_expects_windows_paths", LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS },
197         { "\\texinputs_prefix", LyXRC::RC_TEXINPUTS_PREFIX },
198         { "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
199         { "\\ui_file", LyXRC::RC_UIFILE },
200         { "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
201         { "\\use_lastfilepos", LyXRC::RC_USELASTFILEPOS },
202         { "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
203         { "\\use_qimage", LyXRC::RC_USE_QIMAGE },
204         // compatibility with versions older than 1.4.0 only
205         { "\\use_system_colors", LyXRC::RC_USE_SYSTEM_COLORS },
206         { "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
207         { "\\user_email", LyXRC::RC_USER_EMAIL },
208         { "\\user_name", LyXRC::RC_USER_NAME },
209         { "\\view_dvi_paper_option", LyXRC::RC_VIEWDVI_PAPEROPTION },
210         // compatibility with versions older than 1.4.0 only
211         { "\\viewer", LyXRC::RC_VIEWER},
212         { "\\viewer_alternatives", LyXRC::RC_VIEWER_ALTERNATIVES },
213         { "\\visual_cursor", LyXRC::RC_VISUAL_CURSOR },
214         { "format", LyXRC::RC_LYXRCFORMAT }
215 };
216
217 const int lyxrcCount = sizeof(lyxrcTags) / sizeof(lyxrcTags[0]);
218
219 } // namespace anon
220
221
222 LyXRC::LyXRC()
223 {
224         setDefaults();
225 }
226
227
228 void LyXRC::setDefaults()
229 {
230         icon_set = string();
231         bind_file = "cua";
232         def_file = "default";
233         ui_file = "default";
234         // The current document directory
235         texinputs_prefix = ".";
236         // Get printer from the environment. If fail, use default "",
237         // assuming that everything is set up correctly.
238         printer = getEnv("PRINTER");
239         print_adapt_output = false;
240         print_command = "dvips";
241         print_evenpage_flag = "-B";
242         print_oddpage_flag = "-A";
243         print_pagerange_flag = "-pp";
244         print_copies_flag = "-c";
245         print_collcopies_flag = "-C";
246         print_reverse_flag = "-r";
247         print_landscape_flag = "-t landscape";
248         print_to_printer = "-P";
249         print_to_file = "-o ";
250         print_file_extension = ".ps";
251         print_paper_flag = "-t";
252         print_paper_dimension_flag = "-T";
253         document_path.erase();
254         view_dvi_paper_option.erase();
255         default_view_format = "pdf2";
256         chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
257         bibtex_command = "bibtex";
258         fontenc = "default";
259         index_command = "makeindex -c -q";
260         nomencl_command = "makeindex -s nomencl.ist";
261         dpi = 75;
262         // Because a screen is typically wider than a piece of paper:
263         zoom = 150;
264         allow_geometry_session = true;
265         // Default LaTeX font size:
266         font_sizes[FONT_SIZE_TINY] = "5.0";
267         font_sizes[FONT_SIZE_SCRIPT] = "7.0";
268         font_sizes[FONT_SIZE_FOOTNOTE] = "8.0";
269         font_sizes[FONT_SIZE_SMALL] = "9.0";
270         font_sizes[FONT_SIZE_NORMAL] = "10.0";
271         font_sizes[FONT_SIZE_LARGE] = "12.0";
272         font_sizes[FONT_SIZE_LARGER] = "14.4";
273         font_sizes[FONT_SIZE_LARGEST] = "17.26";
274         font_sizes[FONT_SIZE_HUGE] = "20.74";
275         font_sizes[FONT_SIZE_HUGER] = "24.88";
276         use_scalable_fonts = true;
277         roman_font_name = "";
278         sans_font_name = "";
279         typewriter_font_name = "";
280         autosave = 300;
281         auto_region_delete = true;
282         auto_reset_options = false;
283         plaintext_linelen = 65;
284         mouse_wheel_speed = 1.0;
285         num_lastfiles = maxlastfiles;
286         check_lastfiles = true;
287         use_lastfilepos = true;
288         load_session = false;
289         make_backup = true;
290         save_compressed = false;
291         backupdir_path.erase();
292         display_graphics = true;
293         // Spellchecker settings:
294 // FIXME: this check should test the target platform (darwin)
295 #if defined(USE_MACOSX_PACKAGING)
296         spellchecker = "native";
297 #elif defined(USE_ASPELL)
298         spellchecker = "aspell";
299 #elif defined(USE_HUNSPELL)
300         spellchecker = "hunspell";
301 #else
302         spellchecker = "aspell";
303 #endif
304         spellchecker_accept_compound = false;
305         spellcheck_continuously = false;
306         completion_minlength = 6;
307         spellcheck_notes = true;
308         use_kbmap = false;
309         rtl_support = true;
310         visual_cursor = false;
311         auto_number = true;
312         mark_foreign_language = true;
313         language_auto_begin = true;
314         language_auto_end = true;
315         language_global_options = true;
316         language_package_selection = LP_AUTO;
317         language_custom_package = "\\usepackage{babel}";
318         language_command_begin = "\\selectlanguage{$$lang}";
319         language_command_local = "\\foreignlanguage{$$lang}{";
320         sort_layouts = false;
321         group_layouts = true;
322         default_language = "english";
323         gui_language = "auto";
324         show_banner = true;
325         windows_style_tex_paths = false;
326         tex_allows_spaces = false;
327         date_insert_format = "%x";
328         cursor_follows_scrollbar = false;
329         scroll_below_document = false;
330         scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
331         paragraph_markers = false;
332         mac_dontswap_ctrl_meta = false;
333         mac_like_word_movement = false;
334         macro_edit_style = MACRO_EDIT_INLINE_BOX;
335         dialogs_iconify_with_main = false;
336         preview = PREVIEW_OFF;
337         preview_hashed_labels  = false;
338         preview_scale_factor = 1.0;
339         use_converter_cache = true;
340         use_system_colors = false;
341         use_tooltip = true;
342         use_pixmap_cache = false;
343         use_qimage = true;
344         converter_cache_maxage = 6 * 30 * 24 * 3600; // 6 months
345         user_name = to_utf8(support::user_name());
346         user_email = to_utf8(support::user_email());
347         open_buffers_in_tabs = true;
348         single_close_tab_button = false;
349         single_instance = true;
350         forward_search_dvi = string();
351         forward_search_pdf = string();
352         export_overwrite = NO_FILES;
353
354         // Fullscreen settings
355         full_screen_limit = false;
356         full_screen_toolbars = true;
357         full_screen_tabbar = true;
358         full_screen_menubar = true;
359         full_screen_scrollbar = true;
360         full_screen_width = 700;
361
362         completion_cursor_text = true;
363         completion_popup_math = true;
364         completion_popup_text = false;
365         completion_popup_delay = 2.0;
366         completion_popup_after_complete = true;
367         autocorrection_math = false;
368         completion_inline_math = true;
369         completion_inline_text = false;
370         completion_inline_dots = -1;
371         completion_inline_delay = 0.2;
372         default_decimal_point = ".";
373         default_length_unit = Length::CM;
374         cursor_width = 1;
375 }
376
377
378 namespace {
379
380 void oldFontFormat(string & family, string & foundry)
381 {
382         if (family.empty() || family[0] != '-')
383                 return;
384         foundry = token(family, '-', 1);
385         family = token(family, '-', 2);
386         if (foundry == "*")
387                 foundry.erase();
388 }
389
390 } // namespace anon
391
392
393 bool LyXRC::read(FileName const & filename, bool check_format)
394 {
395         Lexer lexrc(lyxrcTags);
396         lexrc.setFile(filename);
397         LYXERR(Debug::LYXRC, "Reading '" << filename << "'...");
398         ReturnValues retval = read(lexrc, check_format);
399         if (!check_format || retval != FormatMismatch)
400                 return retval == ReadOK;
401
402         LYXERR(Debug::FILES, "Converting LyXRC file to " << LYXRC_FILEFORMAT);
403         FileName const tempfile = FileName::tempName("convert_lyxrc");
404         bool const success = prefs2prefs(filename, tempfile, false);
405         if (!success) {
406                 LYXERR0 ("Unable to convert " << filename.absFileName() <<
407                         " to format " << LYXRC_FILEFORMAT);
408                 return false;
409         } else {
410                 // Keep this in the else branch, such that lexrc2 goes out
411                 // of scope and releases the lock on tempfile before we
412                 // attempt to remove it. This matters on Windows.
413                 Lexer lexrc2(lyxrcTags);
414                 lexrc2.setFile(tempfile);
415                 LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
416                 retval = read(lexrc2, check_format);
417         }
418         tempfile.removeFile();
419         return retval == ReadOK;
420 }
421
422
423 // don't need to worry about conversion, because this is always
424 // from an internal source
425 bool LyXRC::read(istream & is)
426 {
427         Lexer lexrc(lyxrcTags);
428         lexrc.setStream(is);
429         LYXERR(Debug::LYXRC, "Reading istream...");
430         return read(lexrc, false) == ReadOK;
431 }
432
433
434 LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
435 {
436         if (lyxerr.debugging(Debug::PARSER))
437                 lexrc.printTable(lyxerr);
438
439         if (!lexrc.isOK())
440                 return ReadError;
441
442         // default for current rowpainter capabilities
443         force_paint_single_char = true;
444
445         // format prior to 2.0 and introduction of format tag
446         unsigned int format = 0;
447
448         while (lexrc.isOK()) {
449                 // By using two switches we take advantage of the compiler
450                 // telling us if we have missed a LyXRCTags element in
451                 // the second switch.
452                 // Note that this also shows a problem with Lexer since it
453                 // helps us avoid taking advantage of the strictness of the
454                 // compiler.
455
456                 int le = lexrc.lex();
457                 switch (le) {
458                 case Lexer::LEX_UNDEF:
459                         lexrc.printError("Unknown tag `$$Token'");
460                         continue;
461                 case Lexer::LEX_FEOF:
462                         continue;
463                 default:
464                         break;
465                 }
466                 switch (static_cast<LyXRCTags>(le)) {
467                 case RC_LYXRCFORMAT:
468                         if (lexrc.next())
469                                 format = lexrc.getInteger();
470                         break;
471                 case RC_INPUT: // Include file
472                         if (lexrc.next()) {
473                                 FileName const tmp =
474                                         libFileSearch(string(),
475                                                       lexrc.getString());
476                                 if (read(tmp, check_format)) {
477                                         lexrc.printError(
478                                             "Error reading included file: " + tmp.absFileName());
479                                 }
480                         }
481                         break;
482                 case RC_BINDFILE:
483                         if (lexrc.next())
484                                 bind_file = os::internal_path(lexrc.getString());
485                         break;
486
487                 case RC_DEFFILE:
488                         if (lexrc.next())
489                                 def_file = os::internal_path(lexrc.getString());
490                         break;
491
492                 case RC_UIFILE:
493                         if (lexrc.next())
494                                 ui_file = os::internal_path(lexrc.getString());
495                         break;
496
497                 case RC_AUTORESET_OPTIONS:
498                         lexrc >> auto_reset_options;
499                         break;
500
501                 case RC_DISPLAY_GRAPHICS:
502                         if (lexrc.next())
503                                 display_graphics = lexrc.getString() == "true";
504                         break;
505
506                 case RC_TEX_EXPECTS_WINDOWS_PATHS:
507                         lexrc >> windows_style_tex_paths;
508                         break;
509
510                 case RC_TEX_ALLOWS_SPACES:
511                         lexrc >> tex_allows_spaces;
512                         break;
513
514                 case RC_TEXINPUTS_PREFIX:
515                         lexrc >> texinputs_prefix;
516                         break;
517
518                 case RC_KBMAP:
519                         lexrc >> use_kbmap;
520                         break;
521
522                 case RC_KBMAP_PRIMARY:
523                         if (lexrc.next()) {
524                                 string const kmap(os::internal_path(lexrc.getString()));
525                                 if (!libFileSearch("kbd", kmap, "kmap").empty()
526                                           || kmap.empty()) {
527                                         primary_kbmap = kmap;
528                                 } else {
529                                         lexrc.printError("LyX: Keymap `$$Token' not found");
530                                 }
531                         }
532                         break;
533
534                 case RC_KBMAP_SECONDARY:
535                         if (lexrc.next()) {
536                                 string const kmap(os::internal_path(lexrc.getString()));
537                                 if (!libFileSearch("kbd", kmap, "kmap").empty()
538                                           || kmap.empty()) {
539                                         secondary_kbmap = kmap;
540                                 } else {
541                                         lexrc.printError("LyX: Keymap `$$Token' not found");
542                                 }
543                         }
544                         break;
545
546                 case RC_FONT_ENCODING:
547                         lexrc >> fontenc;
548                         break;
549
550                 case RC_FORCE_PAINT_SINGLE_CHAR:
551                         lexrc >> force_paint_single_char;
552                         break;
553
554                 case RC_PRINTER:
555                         lexrc >> printer;
556                         break;
557
558                 case RC_PRINT_COMMAND:
559                         if (lexrc.next(true)) {
560                                 print_command = lexrc.getString();
561                         }
562                         break;
563
564                 case RC_PRINTEVENPAGEFLAG:
565                         lexrc >> print_evenpage_flag;
566                         break;
567
568                 case RC_PRINTODDPAGEFLAG:
569                         lexrc >> print_oddpage_flag;
570                         break;
571
572                 case RC_PRINTPAGERANGEFLAG:
573                         lexrc >> print_pagerange_flag;
574                         break;
575
576                 case RC_PRINTCOPIESFLAG:
577                         lexrc >> print_copies_flag;
578                         break;
579
580                 case RC_PRINTCOLLCOPIESFLAG:
581                         lexrc >> print_collcopies_flag;
582                         break;
583
584                 case RC_PRINTREVERSEFLAG:
585                         lexrc >> print_reverse_flag;
586                         break;
587
588                 case RC_PRINTLANDSCAPEFLAG:
589                         lexrc >> print_landscape_flag;
590                         break;
591
592                 case RC_PRINTTOPRINTER:
593                         lexrc >> print_to_printer;
594                         break;
595
596                 case RC_PRINT_ADAPTOUTPUT:
597                         lexrc >> print_adapt_output;
598                         break;
599
600                 case RC_PRINTTOFILE:
601                         if (lexrc.next()) {
602                                 print_to_file = os::internal_path(lexrc.getString());
603                         }
604                         break;
605
606                 case RC_PRINTFILEEXTENSION:
607                         lexrc >> print_file_extension;
608                         break;
609
610                 case RC_PRINTEXSTRAOPTIONS:
611                         lexrc >> print_extra_options;
612                         break;
613
614                 case RC_PRINTSPOOL_COMMAND:
615                         if (lexrc.next(true)) {
616                                 print_spool_command = lexrc.getString();
617                         }
618                         break;
619
620                 case RC_PRINTSPOOL_PRINTERPREFIX:
621                         lexrc >> print_spool_printerprefix;
622                         break;
623
624                 case RC_PRINTPAPERDIMENSIONFLAG:
625                         lexrc >> print_paper_dimension_flag;
626                         break;
627
628                 case RC_PRINTPAPERFLAG:
629                         lexrc >> print_paper_flag;
630                         break;
631
632                 case RC_VIEWDVI_PAPEROPTION:
633                         if (lexrc.next())
634                                 view_dvi_paper_option = lexrc.getString();
635                         else
636                                 view_dvi_paper_option.erase();
637                         break;
638
639                 case RC_CHKTEX_COMMAND:
640                         if (lexrc.next(true)) {
641                                 chktex_command = lexrc.getString();
642                         }
643                         break;
644
645                 case RC_BIBTEX_ALTERNATIVES:
646                         if (lexrc.next(true)) {
647                                 bibtex_alternatives.insert(lexrc.getString());
648                         }
649                         break;
650
651                 case RC_BIBTEX_COMMAND:
652                         if (lexrc.next(true)) {
653                                 bibtex_command = lexrc.getString();
654                         }
655                         break;
656
657                 case RC_JBIBTEX_COMMAND:
658                         if (lexrc.next(true)) {
659                                 jbibtex_command = lexrc.getString();
660                         }
661                         break;
662
663                 case RC_INDEX_ALTERNATIVES:
664                         if (lexrc.next(true)) {
665                                 index_alternatives.insert(lexrc.getString());
666                         }
667                         break;
668
669                 case RC_INDEX_COMMAND:
670                         if (lexrc.next(true)) {
671                                 index_command = lexrc.getString();
672                         }
673                         break;
674
675                 case RC_JINDEX_COMMAND:
676                         if (lexrc.next(true)) {
677                                 jindex_command = lexrc.getString();
678                         }
679                         break;
680
681                 case RC_SPLITINDEX_COMMAND:
682                         if (lexrc.next(true)) {
683                                 splitindex_command = lexrc.getString();
684                         }
685                         break;
686
687                 case RC_NOMENCL_COMMAND:
688                         if (lexrc.next(true)) {
689                                 nomencl_command = lexrc.getString();
690                         }
691                         break;
692
693                 case RC_SCREEN_DPI:
694                         lexrc >> dpi;
695                         break;
696
697                 case RC_SCREEN_ZOOM:
698                         lexrc >> zoom;
699                         break;
700
701                 case RC_GEOMETRY_SESSION:
702                         lexrc >> allow_geometry_session;
703                         break;
704
705                 case RC_SCREEN_FONT_SIZES:
706                         lexrc >> font_sizes[FONT_SIZE_TINY];
707                         lexrc >> font_sizes[FONT_SIZE_SCRIPT];
708                         lexrc >> font_sizes[FONT_SIZE_FOOTNOTE];
709                         lexrc >> font_sizes[FONT_SIZE_SMALL];
710                         lexrc >> font_sizes[FONT_SIZE_NORMAL];
711                         lexrc >> font_sizes[FONT_SIZE_LARGE];
712                         lexrc >> font_sizes[FONT_SIZE_LARGER];
713                         lexrc >> font_sizes[FONT_SIZE_LARGEST];
714                         lexrc >> font_sizes[FONT_SIZE_HUGE];
715                         lexrc >> font_sizes[FONT_SIZE_HUGER];
716                         break;
717
718                 case RC_SCREEN_FONT_SCALABLE:
719                         lexrc >> use_scalable_fonts;
720                         break;
721
722                 case RC_AUTOSAVE:
723                         lexrc >> autosave;
724                         break;
725
726                 case RC_DOCUMENTPATH:
727                         if (lexrc.next()) {
728                                 document_path = os::internal_path(lexrc.getString());
729                                 document_path = expandPath(document_path);
730                         }
731                         break;
732
733                 case RC_EXAMPLEPATH:
734                         if (lexrc.next()) {
735                                 example_path = os::internal_path(lexrc.getString());
736                                 example_path = expandPath(example_path);
737                         }
738                         break;
739
740                 case RC_TEMPLATEPATH:
741                         if (lexrc.next()) {
742                                 template_path = os::internal_path(lexrc.getString());
743                                 template_path = expandPath(template_path);
744                         }
745                         break;
746
747                 case RC_TEMPDIRPATH:
748                         if (lexrc.next()) {
749                                 tempdir_path = os::internal_path(lexrc.getString());
750                                 tempdir_path = expandPath(tempdir_path);
751                         }
752                         break;
753
754                 case RC_THESAURUSDIRPATH:
755                         if (lexrc.next()) {
756                                 thesaurusdir_path = os::internal_path(lexrc.getString());
757                                 thesaurusdir_path = expandPath(thesaurusdir_path);
758                         }
759                         break;
760
761                 case RC_HUNSPELLDIR_PATH:
762                         if (lexrc.next()) {
763                                 hunspelldir_path = os::internal_path(lexrc.getString());
764                                 hunspelldir_path = expandPath(hunspelldir_path);
765                         }
766                         break;
767
768                 case RC_USELASTFILEPOS:
769                         lexrc >> use_lastfilepos;
770                         break;
771
772                 case RC_LOADSESSION:
773                         lexrc >> load_session;
774                         break;
775
776                 case RC_MOUSE_WHEEL_SPEED:
777                         lexrc >> mouse_wheel_speed;
778                         break;
779
780                 case RC_COMPLETION_INLINE_DELAY:
781                         lexrc >> completion_inline_delay;
782                         break;
783
784                 case RC_COMPLETION_INLINE_MATH:
785                         lexrc >> completion_inline_math;
786                         break;
787
788                 case RC_COMPLETION_INLINE_TEXT:
789                         lexrc >> completion_inline_text;
790                         break;
791
792                 case RC_COMPLETION_INLINE_DOTS:
793                         lexrc >> completion_inline_dots;
794                         break;
795
796                 case RC_AUTOCORRECTION_MATH:
797                         lexrc >> autocorrection_math;
798                         break;
799
800                 case RC_COMPLETION_POPUP_DELAY:
801                         lexrc >> completion_popup_delay;
802                         break;
803
804                 case RC_COMPLETION_POPUP_MATH:
805                         lexrc >> completion_popup_math;
806                         break;
807
808                 case RC_COMPLETION_POPUP_TEXT:
809                         lexrc >> completion_popup_text;
810                         break;
811
812                 case RC_COMPLETION_CURSOR_TEXT:
813                         lexrc >> completion_cursor_text;
814                         break;
815
816                 case RC_COMPLETION_POPUP_AFTER_COMPLETE:
817                         lexrc >> completion_popup_after_complete;
818                         break;
819
820                 case RC_COMPLETION_MINLENGTH:
821                         lexrc >> completion_minlength;
822                         break;
823
824                 case RC_NUMLASTFILES:
825                         lexrc >> num_lastfiles;
826                         break;
827
828                 case RC_CHECKLASTFILES:
829                         lexrc >> check_lastfiles;
830                         break;
831
832                 case RC_ICON_SET:
833                         lexrc >> icon_set;
834                         break;
835
836                 case RC_SCREEN_FONT_ROMAN:
837                         if (lexrc.next()) {
838                                 roman_font_name = lexrc.getString();
839                                 oldFontFormat(roman_font_name,
840                                               roman_font_foundry);
841                         }
842                         break;
843
844                 case RC_SCREEN_FONT_SANS:
845                         if (lexrc.next()) {
846                                 sans_font_name = lexrc.getString();
847                                 oldFontFormat(sans_font_name, sans_font_foundry);
848                         }
849                         break;
850
851                 case RC_SCREEN_FONT_TYPEWRITER:
852                         if (lexrc.next()) {
853                                 typewriter_font_name = lexrc.getString();
854                                 oldFontFormat(typewriter_font_name,
855                                               typewriter_font_foundry);
856                         }
857                         break;
858
859                 case RC_SCREEN_FONT_ROMAN_FOUNDRY:
860                         lexrc >> roman_font_foundry;
861                         break;
862
863                 case RC_SCREEN_FONT_SANS_FOUNDRY:
864                         lexrc >> sans_font_foundry;
865                         break;
866
867                 case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
868                         lexrc >> typewriter_font_foundry;
869                         break;
870
871                 case RC_SET_COLOR: {
872                         if (!lexrc.next()) {
873                                 lexrc.printError("Missing color tag.");
874                                 break;
875                         }
876                         string lyx_name = lexrc.getString();
877
878                         if (!lexrc.next()) {
879                                 lexrc.printError("Missing color name for color: `$$Token'");
880                                 break;
881                         }
882                         string x11_name = lexrc.getString();
883
884                         ColorCode const col =
885                                 lcolor.getFromLyXName(lyx_name);
886                         if (col == Color_none ||
887                             col == Color_inherit ||
888                             col == Color_ignore)
889                                 break;
890
891                         if (!lcolor.setColor(col, x11_name))
892                                 LYXERR0("Bad lyxrc set_color for " << lyx_name);
893                         break;
894                 }
895
896                 case RC_AUTOREGIONDELETE:
897                         // Auto region delete defaults to true
898                         lexrc >> auto_region_delete;
899                         break;
900
901                 case RC_SERVERPIPE:
902                         if (lexrc.next()) {
903                                 lyxpipes = os::internal_path(lexrc.getString());
904                                 lyxpipes = expandPath(lyxpipes);
905                         }
906                         break;
907
908                 case RC_CURSOR_FOLLOWS_SCROLLBAR:
909                         lexrc >> cursor_follows_scrollbar;
910                         break;
911
912                 case RC_CURSOR_WIDTH:
913                         lexrc >> cursor_width;
914                         break;
915
916                 case RC_SCROLL_BELOW_DOCUMENT:
917                         lexrc >> scroll_below_document;
918                         break;
919
920                 case RC_PARAGRAPH_MARKERS:
921                         lexrc >> paragraph_markers;
922                         break;
923
924                 case RC_MAC_DONTSWAP_CTRL_META:
925                         lexrc >> mac_dontswap_ctrl_meta;
926                         break;
927
928                 case RC_MAC_LIKE_WORD_MOVEMENT:
929                         lexrc >> mac_like_word_movement;
930                         break;
931
932                 case RC_MACRO_EDIT_STYLE:
933                         if (lexrc.next()) {
934                                 switch (lexrc.getInteger()) {
935                                 case 0: macro_edit_style = MACRO_EDIT_INLINE_BOX; break;
936                                 case 1: macro_edit_style = MACRO_EDIT_INLINE; break;
937                                 case 2: macro_edit_style = MACRO_EDIT_LIST; break;
938                                 }
939                         }
940                         break;
941
942                 case RC_DIALOGS_ICONIFY_WITH_MAIN:
943                         lexrc >> dialogs_iconify_with_main;
944                         break;
945
946                 case RC_PLAINTEXT_LINELEN:
947                         lexrc >> plaintext_linelen;
948                         break;
949                         // Spellchecker settings:
950                 case RC_ACCEPT_COMPOUND:
951                         lexrc >> spellchecker_accept_compound;
952                         break;
953                 case RC_USE_SYSTEM_COLORS:
954                         lexrc >> use_system_colors;
955                         break;
956                 case RC_USE_TOOLTIP:
957                         lexrc >> use_tooltip;
958                         break;
959                 case RC_USE_PIXMAP_CACHE:
960                         lexrc >> use_pixmap_cache;
961                         break;
962                 case RC_USE_QIMAGE:
963                         lexrc >> use_qimage;
964                         break;
965                 case RC_SPELLCHECKER:
966                         lexrc >> spellchecker;
967                         break;
968                 case RC_ALT_LANG:
969                         lexrc >> spellchecker_alt_lang;
970                         break;
971                 case RC_ESC_CHARS:
972                         lexrc >> spellchecker_esc_chars;
973                         break;
974                 case RC_SPELLCHECK_CONTINUOUSLY:
975                         lexrc >> spellcheck_continuously;
976                         break;
977                 case RC_SPELLCHECK_NOTES:
978                         lexrc >> spellcheck_notes;
979                         break;
980                 case RC_MAKE_BACKUP:
981                         lexrc >> make_backup;
982                         break;
983                 case RC_SAVE_COMPRESSED:
984                         lexrc >> save_compressed;
985                         break;
986                 case RC_BACKUPDIR_PATH:
987                         if (lexrc.next()) {
988                                 backupdir_path = os::internal_path(lexrc.getString());
989                                 backupdir_path = expandPath(backupdir_path);
990                         }
991                         break;
992                 case RC_DEFAULT_DECIMAL_POINT:
993                         lexrc >> default_decimal_point;
994                         break;
995                 case RC_DEFAULT_LENGTH_UNIT:
996                         if (lexrc.next())
997                                 default_length_unit = (Length::UNIT) lexrc.getInteger();
998                         break;
999                 case RC_DATE_INSERT_FORMAT:
1000                         lexrc >> date_insert_format;
1001                         break;
1002                 case RC_LANGUAGE_CUSTOM_PACKAGE:
1003                         lexrc >> language_custom_package;
1004                         break;
1005                 case RC_LANGUAGE_AUTO_BEGIN:
1006                         lexrc >> language_auto_begin;
1007                         break;
1008                 case RC_LANGUAGE_AUTO_END:
1009                         lexrc >> language_auto_end;
1010                         break;
1011                 case RC_LANGUAGE_GLOBAL_OPTIONS:
1012                         lexrc >> language_global_options;
1013                         break;
1014                 case RC_LANGUAGE_PACKAGE_SELECTION:
1015                         if (lexrc.next()) {
1016                                 switch (lexrc.getInteger()) {
1017                                 case 0:
1018                                         language_package_selection = LP_AUTO;
1019                                         break;
1020                                 case 1:
1021                                         language_package_selection = LP_BABEL;
1022                                         break;
1023                                 case 2:
1024                                         language_package_selection = LP_CUSTOM;
1025                                         break;
1026                                 case 3:
1027                                         language_package_selection = LP_NONE;
1028                                         break;
1029                                 }
1030                         }
1031                         break;
1032                 case RC_LANGUAGE_COMMAND_BEGIN:
1033                         lexrc >> language_command_begin;
1034                         break;
1035                 case RC_LANGUAGE_COMMAND_END:
1036                         lexrc >> language_command_end;
1037                         break;
1038                 case RC_LANGUAGE_COMMAND_LOCAL:
1039                         lexrc >> language_command_local;
1040                         break;
1041                 case RC_RTL_SUPPORT:
1042                         lexrc >> rtl_support;
1043                         break;
1044                 case RC_VISUAL_CURSOR:
1045                         lexrc >> visual_cursor;
1046                         break;
1047                 case RC_AUTO_NUMBER:
1048                         lexrc >> auto_number;
1049                         break;
1050                 case RC_MARK_FOREIGN_LANGUAGE:
1051                         lexrc >> mark_foreign_language;
1052                         break;
1053
1054                 case RC_COPIER: {
1055                         string fmt, command;
1056                         if (lexrc.next())
1057                                 fmt = lexrc.getString();
1058                         if (lexrc.next(true))
1059                                 command = lexrc.getString();
1060                         setMover(fmt, command);
1061                         break;
1062                 }
1063
1064                 case RC_CONVERTER: {
1065                         string from, to, command, flags;
1066                         if (lexrc.next())
1067                                 from = lexrc.getString();
1068                         if (lexrc.next())
1069                                 to = lexrc.getString();
1070                         if (lexrc.next(true))
1071                                 command = lexrc.getString();
1072                         if (lexrc.next())
1073                                 flags = lexrc.getString();
1074                         if (command.empty())
1075                                 theConverters().erase(from, to);
1076                         else
1077                                 theConverters().add(from, to, command, flags);
1078                         break;
1079                 }
1080                 // compatibility with versions older than 1.4.0 only
1081                 case RC_VIEWER: {
1082                         string format, command;
1083                         lexrc >> format >> command;
1084                         formats.setViewer(format, command);
1085                         break;
1086                 }
1087                 case RC_FILEFORMAT: {
1088                         bool ok = true;
1089                         string format, extensions, prettyname, shortcut;
1090                         if (!(lexrc >> format >> extensions))
1091                                 ok = false;
1092                         if (ok && lexrc.next(true))
1093                                 prettyname  = lexrc.getString();
1094                         else
1095                                 ok = false;
1096                         if (ok)
1097                                 if(!(lexrc >> shortcut))
1098                                         ok = false;
1099                         string viewer, editor;
1100                         if (ok && lexrc.next(true))
1101                                 viewer = lexrc.getString();
1102                         else
1103                                 ok = false;
1104                         if (ok && lexrc.next(true))
1105                                 editor = lexrc.getString();
1106                         else
1107                                 ok = false;
1108                         string flags, mime;
1109                         if (!(lexrc >> flags >> mime))
1110                                 ok = false;
1111                         int flgs = Format::none;
1112                         while (!flags.empty()) {
1113                                 string flag;
1114                                 flags = split(flags, flag, ',');
1115                                 if (flag == "document")
1116                                         flgs |= Format::document;
1117                                 else if (flag == "vector")
1118                                         flgs |= Format::vector;
1119                                 else if (flag == "zipped=native")
1120                                         flgs |= Format::zipped_native;
1121                                 else if (flag == "menu=export")
1122                                         flgs |= Format::export_menu;
1123                                 else
1124                                         LYXERR0("Ignoring unknown flag `"
1125                                                << flag << "' for format `"
1126                                                << format << "'.");
1127                         }
1128                         if (!ok)
1129                                 LYXERR0("Syntax error in format " << format);
1130                         else if (prettyname.empty()) {
1131                                 if (theConverters().formatIsUsed(format))
1132                                         LYXERR0("Can't delete format " << format);
1133                                 else
1134                                         formats.erase(format);
1135                         } else {
1136                                 formats.add(format, extensions, prettyname,
1137                                             shortcut, viewer, editor, mime, flgs);
1138                         }
1139                         break;
1140                 }
1141                 case RC_VIEWER_ALTERNATIVES:  {
1142                         string format, command;
1143                         if (lexrc.next())
1144                                 format = lexrc.getString();
1145                         if (lexrc.eatLine())
1146                                 command = lexrc.getString();
1147                         viewer_alternatives[format].insert(command);
1148                         break;
1149                 }
1150                 case RC_EDITOR_ALTERNATIVES:  {
1151                         string format, command;
1152                         if (lexrc.next())
1153                                 format = lexrc.getString();
1154                         if (lexrc.eatLine())
1155                                 command = lexrc.getString();
1156                         editor_alternatives[format].insert(command);
1157                         break;
1158                 }
1159
1160                 case RC_DEFAULT_VIEW_FORMAT:
1161                         lexrc >> default_view_format;
1162                         break;
1163
1164                 case RC_DEFAULT_LANGUAGE:
1165                         lexrc >> default_language;
1166                         break;
1167
1168                 case RC_GUI_LANGUAGE:
1169                         lexrc >> gui_language;
1170                         break;
1171
1172                 case RC_SHOW_BANNER:
1173                         lexrc >> show_banner;
1174                         break;
1175
1176                 case RC_PREVIEW:
1177                         if (lexrc.next()) {
1178                                 string const tmp = lexrc.getString();
1179                                 if (tmp == "true" || tmp == "on")
1180                                         preview = PREVIEW_ON;
1181                                 else if (tmp == "no_math")
1182                                         preview = PREVIEW_NO_MATH;
1183                                 else {
1184                                         preview = PREVIEW_OFF;
1185                                         if (tmp != "false" && tmp != "off")
1186                                                 LYXERR0("Unrecognized preview status \""
1187                                                        << tmp << '\n');
1188                                 }
1189                         }
1190                         break;
1191
1192                 case RC_PREVIEW_HASHED_LABELS:
1193                         lexrc >> preview_hashed_labels;
1194                         break;
1195
1196                 case RC_PREVIEW_SCALE_FACTOR:
1197                         lexrc >> preview_scale_factor;
1198                         break;
1199
1200                 case RC_USER_NAME:
1201                         lexrc >> user_name;
1202                         break;
1203                 case RC_USER_EMAIL:
1204                         lexrc >> user_email;
1205                         break;
1206
1207                 case RC_PATH_PREFIX:
1208                         lexrc >> path_prefix;
1209                         break;
1210
1211                 case RC_USE_CONVERTER_CACHE:
1212                         lexrc >> use_converter_cache;
1213                         break;
1214                 case RC_CONVERTER_CACHE_MAXAGE:
1215                         lexrc >> converter_cache_maxage;
1216                         break;
1217
1218                 case RC_SORT_LAYOUTS:
1219                         lexrc >> sort_layouts;
1220                         break;
1221                 case RC_GROUP_LAYOUTS:
1222                         lexrc >> group_layouts;
1223                         break;
1224                 case RC_FULL_SCREEN_LIMIT:
1225                         lexrc >> full_screen_limit;
1226                         break;
1227                 case RC_FULL_SCREEN_TOOLBARS:
1228                         lexrc >> full_screen_toolbars;
1229                         break;
1230                 case RC_FULL_SCREEN_SCROLLBAR:
1231                         lexrc >> full_screen_scrollbar;
1232                         break;
1233                 case RC_FULL_SCREEN_TABBAR:
1234                         lexrc >> full_screen_tabbar;
1235                         break;
1236                 case RC_FULL_SCREEN_MENUBAR:
1237                         lexrc >> full_screen_menubar;
1238                         break;
1239                 case RC_FULL_SCREEN_WIDTH:
1240                         lexrc >> full_screen_width;
1241                         break;
1242                 case RC_OPEN_BUFFERS_IN_TABS:
1243                         lexrc >> open_buffers_in_tabs;
1244                         break;
1245                 case RC_SINGLE_CLOSE_TAB_BUTTON:
1246                         lexrc >> single_close_tab_button;
1247                         break;
1248                 case RC_SINGLE_INSTANCE:
1249                         lexrc >> single_instance;
1250                         if (run_mode == PREFERRED)
1251                                 run_mode = single_instance ? USE_REMOTE : NEW_INSTANCE;
1252                         break;
1253                 case RC_FORWARD_SEARCH_DVI:
1254                         if (lexrc.next(true))
1255                                 forward_search_dvi = lexrc.getString();
1256                         break;
1257                 case RC_FORWARD_SEARCH_PDF:
1258                         if (lexrc.next(true))
1259                                 forward_search_pdf = lexrc.getString();
1260                         break;
1261                 case RC_EXPORT_OVERWRITE:
1262                         if (lexrc.next()) {
1263                                 string const tmp = lexrc.getString();
1264                                 if (tmp == "all" || tmp == "true")
1265                                         export_overwrite = ALL_FILES;
1266                                 else if (tmp == "main")
1267                                         export_overwrite = MAIN_FILE;
1268                                 else {
1269                                         export_overwrite = NO_FILES;
1270                                         if (tmp != "ask" && tmp != "false")
1271                                                 LYXERR0("Unrecognized export_overwrite status \""
1272                                                        << tmp << '"');
1273                                 }
1274                         }
1275                         break;
1276                 case RC_SCROLL_WHEEL_ZOOM:
1277                         if (lexrc.next()) {
1278                                 string const tmp = lexrc.getString();
1279                                 if (tmp == "ctrl")
1280                                         scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_CTRL;
1281                                 else if (tmp == "shift")
1282                                         scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_SHIFT;
1283                                 else if (tmp == "alt")
1284                                         scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_ALT;
1285                                 else {
1286                                         scroll_wheel_zoom = SCROLL_WHEEL_ZOOM_OFF;
1287                                         if (tmp != "off" && tmp != "false")
1288                                                 LYXERR0("Unrecognized scroll_wheel_zoom status \""
1289                                                        << tmp << '"');
1290                                 }
1291                         }
1292                         break;
1293
1294                 case RC_LAST:
1295                         break; // this is just a dummy
1296                 }
1297
1298                 // This is triggered the first time through the loop unless
1299                 // we hit a format tag.
1300                 if (check_format && format != LYXRC_FILEFORMAT)
1301                         return FormatMismatch;
1302         }
1303
1304         /// Update converters data-structures
1305         theConverters().update(formats);
1306         theConverters().buildGraph();
1307
1308         return ReadOK;
1309 }
1310
1311
1312 void LyXRC::write(FileName const & filename, bool ignore_system_lyxrc) const
1313 {
1314         ofstream ofs(filename.toFilesystemEncoding().c_str());
1315         if (ofs)
1316                 write(ofs, ignore_system_lyxrc);
1317 }
1318
1319
1320 void LyXRC::print() const
1321 {
1322         if (lyxerr.debugging())
1323                 write(lyxerr, false);
1324         else
1325                 write(cout, false);
1326 }
1327
1328
1329 class SameMover {
1330 public:
1331         typedef pair<string, SpecialisedMover> Data;
1332
1333         SameMover(Data const & comparison)
1334                 : comparison_(comparison) {}
1335
1336         bool operator()(Data const & data) const
1337         {
1338                 return data.first == comparison_.first &&
1339                         data.second.command() == comparison_.second.command();
1340         }
1341
1342 private:
1343         Data comparison_;
1344 };
1345
1346
1347 namespace {
1348
1349         // Escape \ and " so that LyXLex can read the string later
1350         string escapeCommand(string const & str) {
1351                 return subst(subst(str , "\\", "\\\\"),
1352                              "\"", "\\\"");
1353         }
1354
1355 }
1356
1357
1358 void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) const
1359 {
1360         LyXRCTags tag = RC_LAST;
1361
1362         if (!name.empty()) {
1363                 for (int i = 0; i != lyxrcCount; ++i)
1364                         if ("\\" + name == lyxrcTags[i].tag)
1365                                 tag = static_cast<LyXRCTags>(lyxrcTags[i].code);
1366         }
1367
1368         if (tag == RC_LAST)
1369                 os << "# LyX " << lyx_version
1370                    << " generated this file. If you want to make your own\n"
1371                    << "# modifications you should do them from inside LyX and save.\n\n"
1372                    << "Format " << LYXRC_FILEFORMAT << "\n\n";
1373
1374         // Why the switch you might ask. It is a trick to ensure that all
1375         // the elements in the LyXRCTags enum are handled. As you can see
1376         // there are no breaks at all. So it is just a huge fall-through.
1377         // The nice thing is that we will get a warning from the compiler
1378         // if we forget an element.
1379         switch (tag) {
1380         case RC_LAST:
1381         case RC_INPUT:
1382                 // input/include files are not done here
1383         case RC_LYXRCFORMAT:
1384         case RC_BINDFILE:
1385                 if (ignore_system_lyxrc ||
1386                     bind_file != system_lyxrc.bind_file) {
1387                         string const path = os::external_path(bind_file);
1388                         os << "\\bind_file \"" << path << "\"\n";
1389                 }
1390                 if (tag != RC_LAST)
1391                         break;
1392
1393         case RC_DEFFILE:
1394                 if (ignore_system_lyxrc ||
1395                     def_file != system_lyxrc.def_file) {
1396                         string const path = os::external_path(def_file);
1397                         os << "\\def_file \"" << path << "\"\n";
1398                 }
1399                 if (tag != RC_LAST)
1400                         break;
1401
1402                 //
1403                 // Misc Section
1404                 //
1405                 os << "\n#\n"
1406                    << "# MISC SECTION ######################################\n"
1407                    << "#\n\n";
1408                 // bind files are not done here.
1409
1410         case RC_PATH_PREFIX:
1411                 if (ignore_system_lyxrc ||
1412                     path_prefix != system_lyxrc.path_prefix) {
1413                         os << "\\path_prefix \"" << path_prefix << "\"\n";
1414                 }
1415                 if (tag != RC_LAST)
1416                         break;
1417         case RC_UIFILE:
1418                 if (ignore_system_lyxrc ||
1419                     ui_file != system_lyxrc.ui_file) {
1420                         string const path = os::external_path(ui_file);
1421                         os << "\\ui_file \"" << path << "\"\n";
1422                 }
1423                 if (tag != RC_LAST)
1424                         break;
1425         case RC_AUTOREGIONDELETE:
1426                 if (ignore_system_lyxrc ||
1427                     auto_region_delete != system_lyxrc.auto_region_delete) {
1428                         os << "# Set to false to inhibit automatic replacement of\n"
1429                            << "# the current selection.\n"
1430                            << "\\auto_region_delete " << convert<string>(auto_region_delete)
1431                            << '\n';
1432                 }
1433                 if (tag != RC_LAST)
1434                         break;
1435         case RC_AUTORESET_OPTIONS:
1436                 if (ignore_system_lyxrc ||
1437                     auto_reset_options != system_lyxrc.auto_reset_options) {
1438                         os << "# Set to false to inhibit automatic reset of\n"
1439                            << "# the class options to defaults on class change.\n"
1440                            << "\\auto_reset_options "
1441                            << convert<string>(auto_reset_options)
1442                            << '\n';
1443                 }
1444                 if (tag != RC_LAST)
1445                         break;
1446         case RC_AUTOSAVE:
1447                 if (ignore_system_lyxrc ||
1448                     autosave != system_lyxrc.autosave) {
1449                         os << "# The time interval between auto-saves in seconds.\n"
1450                            << "\\autosave " << autosave << '\n';
1451                 }
1452                 if (tag != RC_LAST)
1453                         break;
1454         case RC_DISPLAY_GRAPHICS:
1455                 if (ignore_system_lyxrc ||
1456                     display_graphics != system_lyxrc.display_graphics) {
1457                         os << "# Display graphics within LyX\n"
1458                            << "# true|false\n"
1459                            << "\\display_graphics "
1460                            << (display_graphics ? "true" : "false")
1461                            << '\n';
1462                 }
1463                 if (tag != RC_LAST)
1464                         break;
1465         case RC_SORT_LAYOUTS:
1466                 if (ignore_system_lyxrc ||
1467                     sort_layouts != system_lyxrc.sort_layouts) {
1468                         os << "# Sort layouts alphabetically.\n"
1469                            << "\\sort_layouts " << convert<string>(sort_layouts) << '\n';
1470                 }
1471                 if (tag != RC_LAST)
1472                         break;
1473         case RC_GROUP_LAYOUTS:
1474                 if (ignore_system_lyxrc ||
1475                     group_layouts != system_lyxrc.group_layouts) {
1476                         os << "# Group layouts by their category.\n"
1477                            << "\\group_layouts " << convert<string>(group_layouts) << '\n';
1478                 }
1479                 if (tag != RC_LAST)
1480                         break;
1481         case RC_VIEWDVI_PAPEROPTION:
1482                 if (ignore_system_lyxrc ||
1483                     view_dvi_paper_option
1484                     != system_lyxrc.view_dvi_paper_option) {
1485                         os << "# Options used to specify paper size to the\n"
1486                            << "# view_dvi_command (e.g. -paper)\n"
1487                            << "\\view_dvi_paper_option \""
1488                            << view_dvi_paper_option << "\"\n";
1489                 }
1490                 if (tag != RC_LAST)
1491                         break;
1492         case RC_CHKTEX_COMMAND:
1493                 if (ignore_system_lyxrc ||
1494                     chktex_command != system_lyxrc.chktex_command) {
1495                         os << "\\chktex_command \"" << escapeCommand(chktex_command) << "\"\n";
1496                 }
1497                 if (tag != RC_LAST)
1498                         break;
1499         case RC_BIBTEX_ALTERNATIVES: {
1500                 CommandSet::const_iterator it = bibtex_alternatives.begin();
1501                 CommandSet::const_iterator end = bibtex_alternatives.end();
1502                 for ( ; it != end; ++it) {
1503                         if (ignore_system_lyxrc
1504                             || !system_lyxrc.bibtex_alternatives.count(*it))
1505                                 os << "\\bibtex_alternatives \""
1506                                    << *it << "\"\n";
1507                 }
1508                 if (tag != RC_LAST)
1509                         break;
1510         }
1511         case RC_BIBTEX_COMMAND:
1512                 if (ignore_system_lyxrc ||
1513                     bibtex_command != system_lyxrc.bibtex_command) {
1514                         os << "\\bibtex_command \"" << escapeCommand(bibtex_command) << "\"\n";
1515                 }
1516                 if (tag != RC_LAST)
1517                         break;
1518         case RC_JBIBTEX_COMMAND:
1519                 if (ignore_system_lyxrc ||
1520                     jbibtex_command != system_lyxrc.jbibtex_command) {
1521                         os << "\\jbibtex_command \"" << escapeCommand(jbibtex_command) << "\"\n";
1522                 }
1523                 if (tag != RC_LAST)
1524                         break;
1525         case RC_INDEX_ALTERNATIVES: {
1526                 CommandSet::const_iterator it = index_alternatives.begin();
1527                 CommandSet::const_iterator end = index_alternatives.end();
1528                 for ( ; it != end; ++it) {
1529                         if (ignore_system_lyxrc
1530                             || !system_lyxrc.index_alternatives.count(*it))
1531                                 os << "\\index_alternatives \""
1532                                    << *it << "\"\n";
1533                 }
1534                 if (tag != RC_LAST)
1535                         break;
1536         }
1537         case RC_INDEX_COMMAND:
1538                 if (ignore_system_lyxrc ||
1539                     index_command != system_lyxrc.index_command) {
1540                         os << "\\index_command \"" << escapeCommand(index_command) << "\"\n";
1541                 }
1542                 if (tag != RC_LAST)
1543                         break;
1544         case RC_JINDEX_COMMAND:
1545                 if (ignore_system_lyxrc ||
1546                     jindex_command != system_lyxrc.jindex_command) {
1547                         os << "\\jindex_command \"" << escapeCommand(jindex_command) << "\"\n";
1548                 }
1549                 if (tag != RC_LAST)
1550                         break;
1551         case RC_SPLITINDEX_COMMAND:
1552                 if (ignore_system_lyxrc ||
1553                     splitindex_command != system_lyxrc.splitindex_command) {
1554                         os << "\\splitindex_command \"" << escapeCommand(splitindex_command) << "\"\n";
1555                 }
1556                 if (tag != RC_LAST)
1557                         break;
1558         case RC_NOMENCL_COMMAND:
1559                 if (ignore_system_lyxrc ||
1560                     nomencl_command != system_lyxrc.nomencl_command) {
1561                         os << "\\nomencl_command \"" << escapeCommand(nomencl_command) << "\"\n";
1562                 }
1563                 if (tag != RC_LAST)
1564                         break;
1565         case RC_TEX_EXPECTS_WINDOWS_PATHS:
1566                 // Don't write this setting to the preferences file,
1567                 // but allow temporary changes (bug 7557).
1568                 if (ignore_system_lyxrc) {
1569                         os << "\\tex_expects_windows_paths "
1570                            << convert<string>(windows_style_tex_paths) << '\n';
1571                 }
1572                 if (tag != RC_LAST)
1573                         break;
1574         case RC_TEX_ALLOWS_SPACES:
1575                 if (tex_allows_spaces != system_lyxrc.tex_allows_spaces) {
1576                         os << "\\tex_allows_spaces "
1577                            << convert<string>(tex_allows_spaces) << '\n';
1578                 }
1579                 if (tag != RC_LAST)
1580                         break;
1581         case RC_KBMAP:
1582                 if (ignore_system_lyxrc ||
1583                     use_kbmap != system_lyxrc.use_kbmap) {
1584                         os << "\\kbmap " << convert<string>(use_kbmap) << '\n';
1585                 }
1586                 if (tag != RC_LAST)
1587                         break;
1588         case RC_KBMAP_PRIMARY:
1589                 if (ignore_system_lyxrc ||
1590                     primary_kbmap != system_lyxrc.primary_kbmap) {
1591                         string const path = os::external_path(primary_kbmap);
1592                         os << "\\kbmap_primary \"" << path << "\"\n";
1593                 }
1594                 if (tag != RC_LAST)
1595                         break;
1596         case RC_KBMAP_SECONDARY:
1597                 if (ignore_system_lyxrc ||
1598                     secondary_kbmap != system_lyxrc.secondary_kbmap) {
1599                         string const path = os::external_path(secondary_kbmap);
1600                         os << "\\kbmap_secondary \"" << path << "\"\n";
1601                 }
1602                 if (tag != RC_LAST)
1603                         break;
1604         case RC_SERVERPIPE:
1605                 if (ignore_system_lyxrc ||
1606                     lyxpipes != system_lyxrc.lyxpipes) {
1607                         string const path = os::external_path(lyxpipes);
1608                         os << "\\serverpipe \"" << path << "\"\n";
1609                 }
1610                 if (tag != RC_LAST)
1611                         break;
1612         case RC_DATE_INSERT_FORMAT:
1613                 if (ignore_system_lyxrc ||
1614                     date_insert_format != system_lyxrc.date_insert_format) {
1615                         os << "\\date_insert_format \"" << date_insert_format
1616                            << "\"\n";
1617                 }
1618                 if (tag != RC_LAST)
1619                         break;
1620
1621         case RC_USER_NAME:
1622                 os << "\\user_name \"" << user_name << "\"\n";
1623                 if (tag != RC_LAST)
1624                         break;
1625
1626         case RC_USER_EMAIL:
1627                 os << "\\user_email \"" << user_email << "\"\n";
1628                 if (tag != RC_LAST)
1629                         break;
1630
1631         case RC_SHOW_BANNER:
1632                 if (ignore_system_lyxrc ||
1633                     show_banner != system_lyxrc.show_banner) {
1634                         os << "\\show_banner " << convert<string>(show_banner) << '\n';
1635                 }
1636                 if (tag != RC_LAST)
1637                         break;
1638
1639         case RC_PREVIEW:
1640                 if (ignore_system_lyxrc ||
1641                     preview != system_lyxrc.preview) {
1642                         string status;
1643                         switch (preview) {
1644                         case PREVIEW_ON:
1645                                 status = "on";
1646                                 break;
1647                         case PREVIEW_NO_MATH:
1648                                 status = "no_math";
1649                                 break;
1650                         case PREVIEW_OFF:
1651                                 status = "off";
1652                                 break;
1653                         }
1654                         os << "\\preview " << status << '\n';
1655                 }
1656                 if (tag != RC_LAST)
1657                         break;
1658
1659         case RC_PREVIEW_HASHED_LABELS:
1660                 if (ignore_system_lyxrc ||
1661                     preview_hashed_labels !=
1662                     system_lyxrc.preview_hashed_labels) {
1663                         os << "\\preview_hashed_labels "
1664                            << convert<string>(preview_hashed_labels) << '\n';
1665                 }
1666                 if (tag != RC_LAST)
1667                         break;
1668
1669         case RC_PREVIEW_SCALE_FACTOR:
1670                 if (ignore_system_lyxrc ||
1671                     preview_scale_factor != system_lyxrc.preview_scale_factor) {
1672                         os << "\\preview_scale_factor "
1673                            << preview_scale_factor << '\n';
1674                 }
1675                 if (tag != RC_LAST)
1676                         break;
1677
1678         case RC_USE_CONVERTER_CACHE:
1679                 if (ignore_system_lyxrc ||
1680                     use_converter_cache != system_lyxrc.use_converter_cache) {
1681                         os << "\\use_converter_cache "
1682                            << convert<string>(use_converter_cache) << '\n';
1683                 }
1684                 if (tag != RC_LAST)
1685                         break;
1686
1687         case RC_CONVERTER_CACHE_MAXAGE:
1688                 if (ignore_system_lyxrc ||
1689                     converter_cache_maxage != system_lyxrc.converter_cache_maxage) {
1690                         os << "\\converter_cache_maxage "
1691                            << converter_cache_maxage << '\n';
1692                 }
1693                 if (tag != RC_LAST)
1694                         break;
1695
1696                 os << "\n#\n"
1697                    << "# SCREEN & FONTS SECTION ############################\n"
1698                    << "#\n\n";
1699
1700         case RC_ICON_SET:
1701                 if (ignore_system_lyxrc ||
1702                     icon_set != system_lyxrc.icon_set) {
1703                         os << "\\icon_set \"" << icon_set
1704                            << "\"\n";
1705                 }
1706                 if (tag != RC_LAST)
1707                         break;
1708
1709         case RC_SCREEN_DPI:
1710                 if (ignore_system_lyxrc ||
1711                     dpi != system_lyxrc.dpi) {
1712                         os << "\\screen_dpi " << dpi << '\n';
1713                 }
1714                 if (tag != RC_LAST)
1715                         break;
1716         case RC_SCREEN_ZOOM:
1717                 if (ignore_system_lyxrc ||
1718                     zoom != system_lyxrc.zoom) {
1719                         os << "\\screen_zoom " << zoom << '\n';
1720                 }
1721                 if (tag != RC_LAST)
1722                         break;
1723         case RC_GEOMETRY_SESSION:
1724                 if (ignore_system_lyxrc ||
1725                     allow_geometry_session != system_lyxrc.allow_geometry_session) {
1726                         os << "\\allow_geometry_session " << convert<string>(allow_geometry_session)
1727                            << '\n';
1728                 }
1729                 if (tag != RC_LAST)
1730                         break;
1731         case RC_CURSOR_FOLLOWS_SCROLLBAR:
1732                 if (ignore_system_lyxrc ||
1733                     cursor_follows_scrollbar
1734                     != system_lyxrc.cursor_follows_scrollbar) {
1735                         os << "\\cursor_follows_scrollbar "
1736                            << convert<string>(cursor_follows_scrollbar) << '\n';
1737                 }
1738                 if (tag != RC_LAST)
1739                         break;
1740         case RC_CURSOR_WIDTH:
1741                 if (ignore_system_lyxrc ||
1742                         cursor_width
1743                         != system_lyxrc.cursor_width) {
1744                         os << "\\cursor_width "
1745                         << cursor_width << '\n';
1746                 }
1747                 if (tag != RC_LAST)
1748                         break;
1749         case RC_SCROLL_BELOW_DOCUMENT:
1750                 if (ignore_system_lyxrc ||
1751                     scroll_below_document
1752                     != system_lyxrc.scroll_below_document) {
1753                         os << "\\scroll_below_document "
1754                            << convert<string>(scroll_below_document) << '\n';
1755                 }
1756                 if (tag != RC_LAST)
1757                         break;
1758         case RC_PARAGRAPH_MARKERS:
1759                 if (ignore_system_lyxrc ||
1760                         paragraph_markers
1761                     != system_lyxrc.paragraph_markers) {
1762                         os << "\\paragraph_markers "
1763                            << convert<string>(paragraph_markers) << '\n';
1764                 }
1765                 if (tag != RC_LAST)
1766                         break;
1767         case RC_MAC_DONTSWAP_CTRL_META:
1768                 if (ignore_system_lyxrc ||
1769                     mac_dontswap_ctrl_meta
1770                     != system_lyxrc.mac_dontswap_ctrl_meta) {
1771                         os << "\\mac_dontswap_ctrl_meta "
1772                            << convert<string>(mac_dontswap_ctrl_meta) << '\n';
1773                 }
1774                 if (tag != RC_LAST)
1775                         break;
1776         case RC_MAC_LIKE_WORD_MOVEMENT:
1777                 if (ignore_system_lyxrc ||
1778                     mac_like_word_movement
1779                     != system_lyxrc.mac_like_word_movement) {
1780                         os << "\\mac_like_word_movement "
1781                            << convert<string>(mac_like_word_movement) << '\n';
1782                 }
1783                 if (tag != RC_LAST)
1784                         break;
1785         case RC_MACRO_EDIT_STYLE:
1786                 if (ignore_system_lyxrc ||
1787                     macro_edit_style
1788                     != system_lyxrc.macro_edit_style) {
1789                         os << "\\macro_edit_style ";
1790                         switch (macro_edit_style) {
1791                         case MACRO_EDIT_INLINE_BOX: os << "0\n"; break;
1792                         case MACRO_EDIT_INLINE: os << "1\n"; break;
1793                         case MACRO_EDIT_LIST: os << "2\n"; break;
1794                         }
1795                 }
1796                 if (tag != RC_LAST)
1797                         break;
1798         case RC_DIALOGS_ICONIFY_WITH_MAIN:
1799                 if (ignore_system_lyxrc ||
1800                     dialogs_iconify_with_main
1801                    != system_lyxrc.dialogs_iconify_with_main) {
1802                         os << "\\dialogs_iconify_with_main "
1803                           <<  convert<string>(dialogs_iconify_with_main) << '\n';
1804                 }
1805                 if (tag != RC_LAST)
1806                         break;
1807         case RC_SCREEN_FONT_ROMAN:
1808                 if (ignore_system_lyxrc ||
1809                     roman_font_name != system_lyxrc.roman_font_name) {
1810                         os << "\\screen_font_roman \"" << roman_font_name
1811                            << "\"\n";
1812                 }
1813                 if (tag != RC_LAST)
1814                         break;
1815         case RC_SCREEN_FONT_ROMAN_FOUNDRY:
1816                 if (ignore_system_lyxrc ||
1817                     roman_font_foundry != system_lyxrc.roman_font_foundry) {
1818                         os << "\\screen_font_roman_foundry \"" << roman_font_foundry
1819                            << "\"\n";
1820                 }
1821                 if (tag != RC_LAST)
1822                         break;
1823         case RC_SCREEN_FONT_SANS:
1824                 if (ignore_system_lyxrc ||
1825                     sans_font_name != system_lyxrc.sans_font_name) {
1826                         os << "\\screen_font_sans \"" << sans_font_name
1827                            << "\"\n";
1828                 }
1829                 if (tag != RC_LAST)
1830                         break;
1831         case RC_SCREEN_FONT_SANS_FOUNDRY:
1832                 if (ignore_system_lyxrc ||
1833                     sans_font_foundry != system_lyxrc.sans_font_foundry) {
1834                         os << "\\screen_font_sans_foundry \"" << sans_font_foundry
1835                            << "\"\n";
1836                 }
1837                 if (tag != RC_LAST)
1838                         break;
1839         case RC_SCREEN_FONT_TYPEWRITER:
1840                 if (ignore_system_lyxrc ||
1841                     typewriter_font_name != system_lyxrc.typewriter_font_name) {
1842                         os << "\\screen_font_typewriter \""
1843                            << typewriter_font_name << "\"\n";
1844                 }
1845                 if (tag != RC_LAST)
1846                         break;
1847         case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
1848                 if (ignore_system_lyxrc ||
1849                     typewriter_font_foundry != system_lyxrc.typewriter_font_foundry) {
1850                         os << "\\screen_font_typewriter_foundry \""
1851                            << typewriter_font_foundry << "\"\n";
1852                 }
1853                 if (tag != RC_LAST)
1854                         break;
1855
1856         case RC_SCREEN_FONT_SCALABLE:
1857                 if (ignore_system_lyxrc ||
1858                     use_scalable_fonts != system_lyxrc.use_scalable_fonts) {
1859                         os << "\\screen_font_scalable "
1860                            << convert<string>(use_scalable_fonts)
1861                            << '\n';
1862                 }
1863                 if (tag != RC_LAST)
1864                         break;
1865         case RC_SCREEN_FONT_SIZES:
1866                 if (ignore_system_lyxrc ||
1867                     font_sizes[FONT_SIZE_TINY]
1868                     != system_lyxrc.font_sizes[FONT_SIZE_TINY] ||
1869                     font_sizes[FONT_SIZE_SCRIPT]
1870                     != system_lyxrc.font_sizes[FONT_SIZE_SCRIPT] ||
1871                     font_sizes[FONT_SIZE_FOOTNOTE]
1872                     != system_lyxrc.font_sizes[FONT_SIZE_FOOTNOTE] ||
1873                     font_sizes[FONT_SIZE_SMALL]
1874                     != system_lyxrc.font_sizes[FONT_SIZE_SMALL] ||
1875                     font_sizes[FONT_SIZE_NORMAL]
1876                     != system_lyxrc.font_sizes[FONT_SIZE_NORMAL] ||
1877                     font_sizes[FONT_SIZE_LARGE]
1878                     != system_lyxrc.font_sizes[FONT_SIZE_LARGE] ||
1879                     font_sizes[FONT_SIZE_LARGER]
1880                     != system_lyxrc.font_sizes[FONT_SIZE_LARGER] ||
1881                     font_sizes[FONT_SIZE_LARGEST]
1882                     != system_lyxrc.font_sizes[FONT_SIZE_LARGEST] ||
1883                     font_sizes[FONT_SIZE_HUGE]
1884                     != system_lyxrc.font_sizes[FONT_SIZE_HUGE] ||
1885                     font_sizes[FONT_SIZE_HUGER]
1886                     != system_lyxrc.font_sizes[FONT_SIZE_HUGER]) {
1887                         os.setf(ios::fixed);
1888                         os.precision(2);
1889                         os << "\\screen_font_sizes"
1890                            << ' ' << font_sizes[FONT_SIZE_TINY]
1891                            << ' ' << font_sizes[FONT_SIZE_SCRIPT]
1892                            << ' ' << font_sizes[FONT_SIZE_FOOTNOTE]
1893                            << ' ' << font_sizes[FONT_SIZE_SMALL]
1894                            << ' ' << font_sizes[FONT_SIZE_NORMAL]
1895                            << ' ' << font_sizes[FONT_SIZE_LARGE]
1896                            << ' ' << font_sizes[FONT_SIZE_LARGER]
1897                            << ' ' << font_sizes[FONT_SIZE_LARGEST]
1898                            << ' ' << font_sizes[FONT_SIZE_HUGE]
1899                            << ' ' << font_sizes[FONT_SIZE_HUGER]
1900                            << '\n';
1901                 }
1902                 if (tag != RC_LAST)
1903                         break;
1904         case RC_FULL_SCREEN_LIMIT:
1905                 if (ignore_system_lyxrc ||
1906                     full_screen_limit != system_lyxrc.full_screen_limit) {
1907                         os << "\\fullscreen_limit "
1908                            << convert<string>(full_screen_limit)
1909                            << '\n';
1910                 }
1911                 if (tag != RC_LAST)
1912                         break;
1913         case RC_FULL_SCREEN_TOOLBARS:
1914                 if (ignore_system_lyxrc ||
1915                     full_screen_toolbars != system_lyxrc.full_screen_toolbars) {
1916                         os << "\\fullscreen_toolbars "
1917                            << convert<string>(full_screen_toolbars)
1918                            << '\n';
1919                 }
1920                 if (tag != RC_LAST)
1921                         break;
1922         case RC_FULL_SCREEN_SCROLLBAR:
1923                 if (ignore_system_lyxrc ||
1924                     full_screen_scrollbar != system_lyxrc.full_screen_scrollbar) {
1925                         os << "\\fullscreen_scrollbar "
1926                            << convert<string>(full_screen_scrollbar)
1927                            << '\n';
1928                 }
1929                 if (tag != RC_LAST)
1930                         break;
1931         case RC_FULL_SCREEN_TABBAR:
1932                 if (ignore_system_lyxrc ||
1933                     full_screen_tabbar != system_lyxrc.full_screen_tabbar) {
1934                         os << "\\fullscreen_tabbar "
1935                            << convert<string>(full_screen_tabbar)
1936                            << '\n';
1937                 }
1938                 if (tag != RC_LAST)
1939                         break;
1940         case RC_FULL_SCREEN_MENUBAR:
1941                 if (ignore_system_lyxrc ||
1942                     full_screen_menubar != system_lyxrc.full_screen_menubar) {
1943                         os << "\\fullscreen_menubar "
1944                            << convert<string>(full_screen_menubar)
1945                            << '\n';
1946                 }
1947                 if (tag != RC_LAST)
1948                         break;
1949         case RC_FULL_SCREEN_WIDTH:
1950                 if (ignore_system_lyxrc ||
1951                     full_screen_width != system_lyxrc.full_screen_width) {
1952                         os << "\\fullscreen_width "
1953                            << convert<string>(full_screen_width)
1954                            << '\n';
1955                 }
1956                 if (tag != RC_LAST)
1957                         break;
1958         case RC_OPEN_BUFFERS_IN_TABS:
1959                 if (ignore_system_lyxrc ||
1960                     open_buffers_in_tabs != system_lyxrc.open_buffers_in_tabs) {
1961                         os << "\\open_buffers_in_tabs "
1962                            << convert<string>(open_buffers_in_tabs)
1963                            << '\n';
1964                 }
1965                 if (tag != RC_LAST)
1966                         break;
1967         case RC_SINGLE_CLOSE_TAB_BUTTON:
1968                 if (ignore_system_lyxrc ||
1969                     single_close_tab_button != system_lyxrc.single_close_tab_button) {
1970                         os << "\\single_close_tab_button "
1971                            << convert<string>(single_close_tab_button)
1972                            << '\n';
1973                 }
1974                 if (tag != RC_LAST)
1975                         break;
1976         case RC_SINGLE_INSTANCE:
1977                 if (ignore_system_lyxrc ||
1978                     single_instance != system_lyxrc.single_instance) {
1979                         os << "\\single_instance "
1980                            << convert<string>(single_instance)
1981                            << '\n';
1982                 }
1983                 if (tag != RC_LAST)
1984                         break;
1985         case RC_FORWARD_SEARCH_DVI:
1986                 if (ignore_system_lyxrc ||
1987                     forward_search_dvi != system_lyxrc.forward_search_dvi) {
1988                         os << "\\forward_search_dvi \"" << escapeCommand(forward_search_dvi) << "\"\n";
1989                 }
1990                 if (tag != RC_LAST)
1991                         break;
1992         case RC_FORWARD_SEARCH_PDF:
1993                 if (ignore_system_lyxrc ||
1994                     forward_search_pdf != system_lyxrc.forward_search_pdf) {
1995                         os << "\\forward_search_pdf \"" << escapeCommand(forward_search_pdf) << "\"\n";
1996                 }
1997                 if (tag != RC_LAST)
1998                         break;
1999
2000         os << "\n#\n"
2001                         << "# COLOR SECTION ###################################\n"
2002                         << "#\n\n";
2003
2004         case RC_SET_COLOR:
2005                 for (int i = 0; i < Color_ignore; ++i) {
2006                         ColorCode lc = static_cast<ColorCode>(i);
2007                         string const col = lcolor.getX11Name(lc);
2008                         if (ignore_system_lyxrc
2009                             || col != system_lcolor.getX11Name(lc)) {
2010                                 os << "\\set_color \""
2011                                    << lcolor.getLyXName(lc) << "\" \""
2012                                    << col << "\"\n";
2013                         }
2014                 }
2015                 if (tag != RC_LAST)
2016                         break;
2017
2018                 os << "\n#\n"
2019                    << "# PRINTER SECTION ###################################\n"
2020                    << "#\n\n";
2021
2022         case RC_PRINTER:
2023                 if (ignore_system_lyxrc ||
2024                     printer != system_lyxrc.printer) {
2025                         os << "\\printer \"" << printer << "\"\n";
2026                 }
2027                 if (tag != RC_LAST)
2028                         break;
2029         case RC_PRINT_ADAPTOUTPUT:
2030                 if (ignore_system_lyxrc ||
2031                     print_adapt_output != system_lyxrc.print_adapt_output) {
2032                         os << "\\print_adapt_output "
2033                            << convert<string>(print_adapt_output)
2034                            << '\n';
2035                 }
2036                 if (tag != RC_LAST)
2037                         break;
2038         case RC_PRINT_COMMAND:
2039                 if (ignore_system_lyxrc ||
2040                     print_command != system_lyxrc.print_command) {
2041                         os << "\\print_command \"" << escapeCommand(print_command) << "\"\n";
2042                 }
2043                 if (tag != RC_LAST)
2044                         break;
2045         case RC_PRINTEXSTRAOPTIONS:
2046                 if (ignore_system_lyxrc ||
2047                     print_extra_options != system_lyxrc.print_extra_options) {
2048                         os << "\\print_extra_options \"" << print_extra_options
2049                            << "\"\n";
2050                 }
2051                 if (tag != RC_LAST)
2052                         break;
2053         case RC_PRINTSPOOL_COMMAND:
2054                 if (ignore_system_lyxrc ||
2055                     print_spool_command != system_lyxrc.print_spool_command) {
2056                         os << "\\print_spool_command \"" << escapeCommand(print_spool_command)
2057                            << "\"\n";
2058                 }
2059                 if (tag != RC_LAST)
2060                         break;
2061         case RC_PRINTSPOOL_PRINTERPREFIX:
2062                 if (ignore_system_lyxrc ||
2063                     print_spool_printerprefix
2064                     != system_lyxrc.print_spool_printerprefix) {
2065                         os << "\\print_spool_printerprefix \""
2066                            << print_spool_printerprefix << "\"\n";
2067                 }
2068                 if (tag != RC_LAST)
2069                         break;
2070         case RC_PRINTEVENPAGEFLAG:
2071                 if (ignore_system_lyxrc ||
2072                     print_evenpage_flag != system_lyxrc.print_evenpage_flag) {
2073                         os << "\\print_evenpage_flag \"" << print_evenpage_flag
2074                            << "\"\n";
2075                 }
2076                 if (tag != RC_LAST)
2077                         break;
2078         case RC_PRINTODDPAGEFLAG:
2079                 if (ignore_system_lyxrc ||
2080                     print_oddpage_flag != system_lyxrc.print_oddpage_flag) {
2081                         os << "\\print_oddpage_flag \"" << print_oddpage_flag
2082                            << "\"\n";
2083                 }
2084                 if (tag != RC_LAST)
2085                         break;
2086         case RC_PRINTREVERSEFLAG:
2087                 if (ignore_system_lyxrc ||
2088                     print_reverse_flag != system_lyxrc.print_reverse_flag) {
2089                         os << "\\print_reverse_flag \"" << print_reverse_flag
2090                            << "\"\n";
2091                 }
2092                 if (tag != RC_LAST)
2093                         break;
2094         case RC_PRINTLANDSCAPEFLAG:
2095                 if (ignore_system_lyxrc ||
2096                     print_landscape_flag != system_lyxrc.print_landscape_flag) {
2097                         os << "\\print_landscape_flag \"" << print_landscape_flag
2098                            << "\"\n";
2099                 }
2100                 if (tag != RC_LAST)
2101                         break;
2102         case RC_PRINTPAGERANGEFLAG:
2103                 if (ignore_system_lyxrc ||
2104                     print_pagerange_flag != system_lyxrc.print_pagerange_flag) {
2105                         os << "\\print_pagerange_flag \"" << print_pagerange_flag
2106                            << "\"\n";
2107                 }
2108                 if (tag != RC_LAST)
2109                         break;
2110         case RC_PRINTCOPIESFLAG:
2111                 if (ignore_system_lyxrc ||
2112                     print_copies_flag != system_lyxrc.print_copies_flag) {
2113                         os << "\\print_copies_flag \"" << print_copies_flag
2114                            << "\"\n";
2115                 }
2116                 if (tag != RC_LAST)
2117                         break;
2118         case RC_PRINTCOLLCOPIESFLAG:
2119                 if (ignore_system_lyxrc ||
2120                     print_collcopies_flag
2121                     != system_lyxrc.print_collcopies_flag) {
2122                         os << "\\print_collcopies_flag \""
2123                            << print_collcopies_flag
2124                            << "\"\n";
2125                 }
2126                 if (tag != RC_LAST)
2127                         break;
2128         case RC_PRINTPAPERFLAG:
2129                 if (ignore_system_lyxrc ||
2130                     print_paper_flag != system_lyxrc.print_paper_flag) {
2131                         os << "\\print_paper_flag \"" << print_paper_flag
2132                            << "\"\n";
2133                 }
2134                 if (tag != RC_LAST)
2135                         break;
2136         case RC_PRINTPAPERDIMENSIONFLAG:
2137                 if (ignore_system_lyxrc ||
2138                     print_paper_dimension_flag
2139                     != system_lyxrc.print_paper_dimension_flag) {
2140                         os << "\\print_paper_dimension_flag \""
2141                            << print_paper_dimension_flag << "\"\n";
2142                 }
2143                 if (tag != RC_LAST)
2144                         break;
2145         case RC_PRINTTOPRINTER:
2146                 if (ignore_system_lyxrc ||
2147                     print_to_printer != system_lyxrc.print_to_printer) {
2148                         os << "\\print_to_printer \"" << print_to_printer
2149                            << "\"\n";
2150                 }
2151                 if (tag != RC_LAST)
2152                         break;
2153         case RC_PRINTTOFILE:
2154                 if (ignore_system_lyxrc ||
2155                     print_to_file != system_lyxrc.print_to_file) {
2156                         string const path = os::external_path(print_to_file);
2157                         os << "\\print_to_file \"" << path << "\"\n";
2158                 }
2159                 if (tag != RC_LAST)
2160                         break;
2161         case RC_PRINTFILEEXTENSION:
2162                 if (ignore_system_lyxrc ||
2163                     print_file_extension != system_lyxrc.print_file_extension) {
2164                         os << "\\print_file_extension \""
2165                            << print_file_extension
2166                            << "\"\n";
2167                 }
2168                 if (tag != RC_LAST)
2169                         break;
2170
2171                 os << "\n#\n"
2172                    << "# TEX SECTION #######################################\n"
2173                    << "#\n\n";
2174
2175         case RC_TEXINPUTS_PREFIX:
2176                 if (ignore_system_lyxrc ||
2177                     texinputs_prefix != system_lyxrc.texinputs_prefix) {
2178                         os << "\\texinputs_prefix \"" << texinputs_prefix << "\"\n";
2179                 }
2180                 if (tag != RC_LAST)
2181                         break;
2182
2183         case RC_FONT_ENCODING:
2184                 if (ignore_system_lyxrc ||
2185                     fontenc != system_lyxrc.fontenc) {
2186                         os << "\\font_encoding \"" << fontenc << "\"\n";
2187                 }
2188                 if (tag != RC_LAST)
2189                         break;
2190
2191         case RC_FORCE_PAINT_SINGLE_CHAR:
2192                 if (ignore_system_lyxrc ||
2193                     force_paint_single_char != system_lyxrc.force_paint_single_char) {
2194                         os << "\\force_paint_single_char \"" << force_paint_single_char << "\"\n";
2195                 }
2196                 if (tag != RC_LAST)
2197                         break;
2198
2199                 os << "\n#\n"
2200                    << "# FILE SECTION ######################################\n"
2201                    << "#\n\n";
2202
2203         case RC_DOCUMENTPATH:
2204                 if (ignore_system_lyxrc ||
2205                     document_path != system_lyxrc.document_path) {
2206                         string const path = os::external_path(document_path);
2207                         os << "\\document_path \"" << path << "\"\n";
2208                 }
2209                 if (tag != RC_LAST)
2210                         break;
2211         case RC_USELASTFILEPOS:
2212                 if (ignore_system_lyxrc ||
2213                     use_lastfilepos != system_lyxrc.use_lastfilepos) {
2214                         os << "\\use_lastfilepos " << convert<string>(use_lastfilepos)
2215                            << '\n';
2216                 }
2217                 if (tag != RC_LAST)
2218                         break;
2219         case RC_LOADSESSION:
2220                 if (ignore_system_lyxrc ||
2221                     load_session != system_lyxrc.load_session) {
2222                         os << "\\load_session " << convert<string>(load_session)
2223                            << "\n";
2224                 }
2225                 if (tag != RC_LAST)
2226                         break;
2227         case RC_MOUSE_WHEEL_SPEED:
2228                 if (ignore_system_lyxrc ||
2229                     mouse_wheel_speed != system_lyxrc.mouse_wheel_speed) {
2230                         os << "\\mouse_wheel_speed " << mouse_wheel_speed << '\n';
2231                 }
2232                 if (tag != RC_LAST)
2233                         break;
2234         case RC_COMPLETION_INLINE_DELAY:
2235                 if (ignore_system_lyxrc ||
2236                     completion_inline_delay != system_lyxrc.completion_inline_delay) {
2237                         os << "\\completion_inline_delay " << completion_inline_delay << '\n';
2238                 }
2239                 if (tag != RC_LAST)
2240                         break;
2241         case RC_COMPLETION_INLINE_MATH:
2242                 if (ignore_system_lyxrc ||
2243                     completion_inline_math != system_lyxrc.completion_inline_math) {
2244                         os << "\\completion_inline_math "
2245                                 << convert<string>(completion_inline_math) << '\n';
2246                 }
2247                 if (tag != RC_LAST)
2248                         break;
2249         case RC_COMPLETION_INLINE_TEXT:
2250                 if (ignore_system_lyxrc ||
2251                     completion_inline_text != system_lyxrc.completion_inline_text) {
2252                         os << "\\completion_inline_text "
2253                                 << convert<string>(completion_inline_text) << '\n';
2254                 }
2255                 if (tag != RC_LAST)
2256                         break;
2257         case RC_COMPLETION_INLINE_DOTS:
2258                 if (ignore_system_lyxrc ||
2259                     completion_inline_dots != system_lyxrc.completion_inline_dots) {
2260                         os << "\\completion_inline_dots "
2261                                 << convert<string>(completion_inline_dots) << '\n';
2262                 }
2263                 if (tag != RC_LAST)
2264                         break;
2265         case RC_AUTOCORRECTION_MATH:
2266                 if (ignore_system_lyxrc ||
2267                     autocorrection_math != system_lyxrc.autocorrection_math) {
2268                         os << "\\autocorrection_math "
2269                                 << convert<string>(autocorrection_math) << '\n';
2270                 }
2271                 if (tag != RC_LAST)
2272                         break;
2273         case RC_COMPLETION_POPUP_DELAY:
2274                 if (ignore_system_lyxrc ||
2275                     completion_popup_delay != system_lyxrc.completion_popup_delay) {
2276                         os << "\\completion_popup_delay " << completion_popup_delay << '\n';
2277                 }
2278                 if (tag != RC_LAST)
2279                         break;
2280         case RC_COMPLETION_POPUP_MATH:
2281                 if (ignore_system_lyxrc ||
2282                     completion_popup_math != system_lyxrc.completion_popup_math) {
2283                         os << "\\completion_popup_math "
2284                                 << convert<string>(completion_popup_math) << '\n';
2285                 }
2286                 if (tag != RC_LAST)
2287                         break;
2288         case RC_COMPLETION_POPUP_TEXT:
2289                 if (ignore_system_lyxrc ||
2290                     completion_popup_text != system_lyxrc.completion_popup_text) {
2291                         os << "\\completion_popup_text "
2292                                 << convert<string>(completion_popup_text) << '\n';
2293                 }
2294                 if (tag != RC_LAST)
2295                         break;
2296         case RC_COMPLETION_CURSOR_TEXT:
2297                 if (ignore_system_lyxrc ||
2298                     completion_cursor_text != system_lyxrc.completion_cursor_text) {
2299                         os << "\\completion_cursor_text "
2300                            << convert<string>(completion_cursor_text) << '\n';
2301                 }
2302                 if (tag != RC_LAST)
2303                         break;
2304         case RC_COMPLETION_POPUP_AFTER_COMPLETE:
2305                 if (ignore_system_lyxrc ||
2306                     completion_popup_after_complete
2307                     != system_lyxrc.completion_popup_after_complete) {
2308                         os << "\\completion_popup_after_complete "
2309                                 << convert<string>(completion_popup_after_complete) << '\n';
2310                 }
2311                 if (tag != RC_LAST)
2312                         break;
2313         case RC_COMPLETION_MINLENGTH:
2314                 if (ignore_system_lyxrc ||
2315                         completion_minlength != system_lyxrc.completion_minlength) {
2316                         os << "\\completion_minlength " << convert<string>(completion_minlength)
2317                         << '\n';
2318                 }
2319                 if (tag != RC_LAST)
2320                         break;
2321                         
2322                 case RC_NUMLASTFILES:
2323                 if (ignore_system_lyxrc ||
2324                     num_lastfiles != system_lyxrc.num_lastfiles) {
2325                         os << "\\num_lastfiles " << num_lastfiles << '\n';
2326                 }
2327                 if (tag != RC_LAST)
2328                         break;
2329         case RC_CHECKLASTFILES:
2330                 if (ignore_system_lyxrc ||
2331                     check_lastfiles != system_lyxrc.check_lastfiles) {
2332                         os << "\\check_lastfiles " << convert<string>(check_lastfiles)
2333                            << '\n';
2334                 }
2335                 if (tag != RC_LAST)
2336                         break;
2337         case RC_EXAMPLEPATH:
2338                 if (ignore_system_lyxrc ||
2339                     example_path != system_lyxrc.example_path) {
2340                         string const path = os::external_path(example_path);
2341                         os << "\\example_path \"" << path << "\"\n";
2342                 }
2343                 if (tag != RC_LAST)
2344                         break;
2345         case RC_TEMPLATEPATH:
2346                 if (ignore_system_lyxrc ||
2347                     template_path != system_lyxrc.template_path) {
2348                         string const path = os::external_path(template_path);
2349                         os << "\\template_path \"" << path << "\"\n";
2350                 }
2351                 if (tag != RC_LAST)
2352                         break;
2353         case RC_TEMPDIRPATH:
2354                 if (ignore_system_lyxrc ||
2355                     tempdir_path != system_lyxrc.tempdir_path) {
2356                         string const path = os::external_path(tempdir_path);
2357                         os << "\\tempdir_path \"" << path << "\"\n";
2358                 }
2359                 if (tag != RC_LAST)
2360                         break;
2361         case RC_THESAURUSDIRPATH:
2362                 if (ignore_system_lyxrc ||
2363                     thesaurusdir_path != system_lyxrc.thesaurusdir_path) {
2364                         string const path = os::external_path(thesaurusdir_path);
2365                         os << "\\thesaurusdir_path \"" << path << "\"\n";
2366                 }
2367                 if (tag != RC_LAST)
2368                         break;
2369         case RC_HUNSPELLDIR_PATH:
2370                 if (ignore_system_lyxrc ||
2371                     hunspelldir_path != system_lyxrc.hunspelldir_path) {
2372                         string const path = os::external_path(hunspelldir_path);
2373                         os << "\\hunspelldir_path \"" << path << "\"\n";
2374                 }
2375                 if (tag != RC_LAST)
2376                         break;
2377         case RC_PLAINTEXT_LINELEN:
2378                 if (ignore_system_lyxrc ||
2379                     plaintext_linelen != system_lyxrc.plaintext_linelen) {
2380                         os << "\\plaintext_linelen " << plaintext_linelen << '\n';
2381                 }
2382                 if (tag != RC_LAST)
2383                         break;
2384         case RC_MAKE_BACKUP:
2385                 if (ignore_system_lyxrc ||
2386                     make_backup != system_lyxrc.make_backup) {
2387                         os << "\\make_backup " << convert<string>(make_backup) << '\n';
2388                 }
2389                 if (tag != RC_LAST)
2390                         break;
2391         case RC_SAVE_COMPRESSED:
2392                 if (ignore_system_lyxrc ||
2393                     save_compressed != system_lyxrc.save_compressed) {
2394                         os << "\\save_compressed " << convert<string>(save_compressed) << '\n';
2395                 }
2396                 if (tag != RC_LAST)
2397                         break;
2398         case RC_BACKUPDIR_PATH:
2399                 if (ignore_system_lyxrc ||
2400                     backupdir_path != system_lyxrc.backupdir_path) {
2401                         string const path = os::external_path(backupdir_path);
2402                         os << "\\backupdir_path \"" << path << "\"\n";
2403                 }
2404                 if (tag != RC_LAST)
2405                         break;
2406
2407                 os << "\n#\n"
2408                    << "# PLAIN TEXT EXPORT SECTION ##############################\n"
2409                    << "#\n\n";
2410
2411                 os << "\n#\n"
2412                    << "# SPELLCHECKER SECTION ##############################\n"
2413                    << "#\n\n";
2414
2415         case RC_ACCEPT_COMPOUND:
2416                 if (ignore_system_lyxrc ||
2417                     spellchecker_accept_compound != system_lyxrc.spellchecker_accept_compound) {
2418                         os << "\\accept_compound " << convert<string>(spellchecker_accept_compound)
2419                            << '\n';
2420                 }
2421                 if (tag != RC_LAST)
2422                         break;
2423         case RC_ALT_LANG:
2424                 if (ignore_system_lyxrc ||
2425                     spellchecker_alt_lang != system_lyxrc.spellchecker_alt_lang) {
2426                         os << "\\alternate_language \"" << spellchecker_alt_lang
2427                            << "\"\n";
2428                 }
2429                 if (tag != RC_LAST)
2430                         break;
2431         case RC_ESC_CHARS:
2432                 if (ignore_system_lyxrc ||
2433                     spellchecker_esc_chars != system_lyxrc.spellchecker_esc_chars) {
2434                         os << "\\escape_chars \"" << spellchecker_esc_chars << "\"\n";
2435                 }
2436                 if (tag != RC_LAST)
2437                         break;
2438         case RC_USE_SYSTEM_COLORS:
2439                 if (ignore_system_lyxrc ||
2440                     use_system_colors != system_lyxrc.use_system_colors) {
2441                         os << "\\use_system_colors "
2442                            << convert<string>(use_system_colors)
2443                            << '\n';
2444                 }
2445                 if (tag != RC_LAST)
2446                         break;
2447         case RC_USE_TOOLTIP:
2448                 if (ignore_system_lyxrc ||
2449                     use_tooltip != system_lyxrc.use_tooltip) {
2450                         os << "\\use_tooltip "
2451                            << convert<string>(use_tooltip)
2452                            << '\n';
2453                 }
2454                 if (tag != RC_LAST)
2455                         break;
2456         case RC_USE_PIXMAP_CACHE:
2457                 if (ignore_system_lyxrc ||
2458                     use_pixmap_cache != system_lyxrc.use_pixmap_cache) {
2459                         os << "\\use_pixmap_cache "
2460                            << convert<string>(use_pixmap_cache)
2461                            << '\n';
2462                 }
2463                 if (tag != RC_LAST)
2464                         break;
2465         case RC_USE_QIMAGE:
2466                 if (ignore_system_lyxrc ||
2467                     use_qimage != system_lyxrc.use_qimage) {
2468                         os << "\\use_qimage "
2469                            << convert<string>(use_qimage)
2470                            << '\n';
2471                 }
2472                 if (tag != RC_LAST)
2473                         break;
2474
2475                 os << "\n#\n"
2476                    << "# LANGUAGE SUPPORT SECTION ##########################\n"
2477                    << "#\n\n";
2478                 if (tag != RC_LAST)
2479                         break;
2480
2481         case RC_DEFAULT_DECIMAL_POINT:
2482                 if (ignore_system_lyxrc ||
2483                     default_decimal_point != system_lyxrc.default_decimal_point) {
2484                         os << "\\default_decimal_point " << default_decimal_point << '\n';
2485                 }
2486                 if (tag != RC_LAST)
2487                         break;
2488
2489         case RC_DEFAULT_LENGTH_UNIT:
2490                 if (ignore_system_lyxrc ||
2491                     default_length_unit != system_lyxrc.default_length_unit) {
2492                         os << "\\default_length_unit " << int(default_length_unit) << '\n';
2493                 }
2494                 if (tag != RC_LAST)
2495                         break;
2496
2497         case RC_SPELLCHECKER:
2498                 if (ignore_system_lyxrc ||
2499                     spellchecker != system_lyxrc.spellchecker) {
2500                         os << "\\spellchecker " << spellchecker << '\n';
2501                 }
2502                 if (tag != RC_LAST)
2503                         break;
2504
2505         case RC_SPELLCHECK_CONTINUOUSLY:
2506                 if (ignore_system_lyxrc ||
2507                     spellcheck_continuously != system_lyxrc.spellcheck_continuously) {
2508                         os << "\\spellcheck_continuously " << convert<string>(spellcheck_continuously)
2509                            << '\n';
2510                 }
2511                 if (tag != RC_LAST)
2512                         break;
2513
2514         case RC_SPELLCHECK_NOTES:
2515                 if (ignore_system_lyxrc ||
2516                     spellcheck_notes != system_lyxrc.spellcheck_notes) {
2517                         os << "\\spellcheck_notes " << convert<string>(spellcheck_notes)
2518                            << '\n';
2519                 }
2520                 if (tag != RC_LAST)
2521                         break;
2522
2523         case RC_RTL_SUPPORT:
2524                 if (ignore_system_lyxrc ||
2525                     rtl_support != system_lyxrc.rtl_support) {
2526                         os << "\\rtl " << convert<string>(rtl_support) << '\n';
2527                 }
2528                 if (tag != RC_LAST)
2529                         break;
2530         case RC_VISUAL_CURSOR:
2531                 if (ignore_system_lyxrc ||
2532                         visual_cursor != system_lyxrc.visual_cursor) {
2533                         os << "\\visual_cursor " << convert<string>(visual_cursor) << '\n';
2534                 }
2535                 if (tag != RC_LAST)
2536                         break;
2537         case RC_LANGUAGE_CUSTOM_PACKAGE:
2538                 if (ignore_system_lyxrc ||
2539                     language_custom_package != system_lyxrc.language_custom_package) {
2540                         os << "\\language_custom_package \"" << language_custom_package
2541                            << "\"\n";
2542                 }
2543                 if (tag != RC_LAST)
2544                         break;
2545         case RC_LANGUAGE_GLOBAL_OPTIONS:
2546                 if (ignore_system_lyxrc ||
2547                     language_global_options
2548                     != system_lyxrc.language_global_options) {
2549                         os << "\\language_global_options \""
2550                            << convert<string>(language_global_options)
2551                            << "\"\n";
2552                 }
2553                 if (tag != RC_LAST)
2554                         break;
2555         case RC_LANGUAGE_PACKAGE_SELECTION:
2556                 if (ignore_system_lyxrc ||
2557                     language_package_selection != system_lyxrc.language_package_selection) {
2558                         os << "\\language_package_selection ";
2559                         switch (language_package_selection) {
2560                         case LP_AUTO:
2561                                 os << "0\n";
2562                                 break;
2563                         case LP_BABEL:
2564                                 os << "1\n";
2565                                 break;
2566                         case LP_CUSTOM:
2567                                 os << "2\n";
2568                                 break;
2569                         case LP_NONE:
2570                                 os << "3\n";
2571                                 break;
2572                         }
2573                 }
2574                 if (tag != RC_LAST)
2575                         break;
2576         case RC_LANGUAGE_COMMAND_BEGIN:
2577                 if (ignore_system_lyxrc ||
2578                     language_command_begin
2579                     != system_lyxrc.language_command_begin) {
2580                         os << "\\language_command_begin \""
2581                            << language_command_begin
2582                            << "\"\n";
2583                 }
2584                 if (tag != RC_LAST)
2585                         break;
2586         case RC_LANGUAGE_COMMAND_END:
2587                 if (ignore_system_lyxrc ||
2588                     language_command_end
2589                     != system_lyxrc.language_command_end) {
2590                         os << "\\language_command_end \"" << language_command_end
2591                            << "\"\n";
2592                 }
2593                 if (tag != RC_LAST)
2594                         break;
2595         case RC_LANGUAGE_COMMAND_LOCAL:
2596                 if (ignore_system_lyxrc ||
2597                     language_command_local
2598                     != system_lyxrc.language_command_local) {
2599                         os << "\\language_command_local \""
2600                            << language_command_local
2601                            << "\"\n";
2602                 }
2603                 if (tag != RC_LAST)
2604                         break;
2605         case RC_LANGUAGE_AUTO_BEGIN:
2606                 if (ignore_system_lyxrc ||
2607                     language_auto_begin != system_lyxrc.language_auto_begin) {
2608                         os << "\\language_auto_begin "
2609                            << convert<string>(language_auto_begin) << '\n';
2610                 }
2611                 if (tag != RC_LAST)
2612                         break;
2613         case RC_LANGUAGE_AUTO_END:
2614                 if (ignore_system_lyxrc ||
2615                     language_auto_end != system_lyxrc.language_auto_end) {
2616                         os << "\\language_auto_end "
2617                            << convert<string>(language_auto_end) << '\n';
2618                 }
2619                 if (tag != RC_LAST)
2620                         break;
2621         case RC_MARK_FOREIGN_LANGUAGE:
2622                 if (ignore_system_lyxrc ||
2623                     mark_foreign_language
2624                     != system_lyxrc.mark_foreign_language) {
2625                         os << "\\mark_foreign_language " <<
2626                                 convert<string>(mark_foreign_language) << '\n';
2627                 }
2628                 if (tag != RC_LAST)
2629                         break;
2630
2631                 os << "\n#\n"
2632                    << "# 2nd MISC SUPPORT SECTION ##########################\n"
2633                    << "#\n\n";
2634
2635         case RC_AUTO_NUMBER:
2636                 if (ignore_system_lyxrc ||
2637                     auto_number != system_lyxrc.auto_number) {
2638                         os << "\\auto_number " << convert<string>(auto_number) << '\n';
2639                 }
2640                 if (tag != RC_LAST)
2641                         break;
2642         case RC_DEFAULT_LANGUAGE:
2643                 if (ignore_system_lyxrc ||
2644                     default_language != system_lyxrc.default_language) {
2645                         os << "\\default_language " << default_language << '\n';
2646                 }
2647                 if (tag != RC_LAST)
2648                         break;
2649         case RC_GUI_LANGUAGE:
2650                 if (ignore_system_lyxrc ||
2651                     gui_language != system_lyxrc.gui_language) {
2652                         os << "\\gui_language " << gui_language << '\n';
2653                 }
2654                 if (tag != RC_LAST)
2655                         break;
2656         case RC_EXPORT_OVERWRITE:
2657                 if (ignore_system_lyxrc ||
2658                     export_overwrite != system_lyxrc.export_overwrite) {
2659                         string status;
2660                         switch (export_overwrite) {
2661                         case NO_FILES:
2662                                 status = "ask";
2663                                 break;
2664                         case MAIN_FILE:
2665                                 status = "main";
2666                                 break;
2667                         case ALL_FILES:
2668                                 status = "all";
2669                                 break;
2670                         }
2671                         os << "\\export_overwrite " << status << '\n';
2672                 }
2673                 if (tag != RC_LAST)
2674                         break;
2675
2676         case RC_SCROLL_WHEEL_ZOOM:
2677                 if (ignore_system_lyxrc ||
2678                         scroll_wheel_zoom != system_lyxrc.scroll_wheel_zoom) {
2679                         string status;
2680                         switch (scroll_wheel_zoom) {
2681                         case SCROLL_WHEEL_ZOOM_OFF:
2682                                 status = "off";
2683                                 break;
2684                         case SCROLL_WHEEL_ZOOM_CTRL:
2685                                 status = "ctrl";
2686                                 break;
2687                         case SCROLL_WHEEL_ZOOM_SHIFT:
2688                                 status = "shift";
2689                                 break;
2690                         case SCROLL_WHEEL_ZOOM_ALT:
2691                                 status = "alt";
2692                                 break;
2693                         }
2694                         os << "\\scroll_wheel_zoom " << status << '\n';
2695                 }
2696                 if (tag != RC_LAST)
2697                         break;
2698
2699                 os << "\n#\n"
2700                    << "# FORMATS SECTION ##########################\n"
2701                    << "#\n\n";
2702
2703         case RC_FILEFORMAT:
2704                 // New/modified formats
2705                 for (Formats::const_iterator cit = formats.begin();
2706                      cit != formats.end(); ++cit) {
2707                         Format const * format =
2708                                 system_formats.getFormat(cit->name());
2709                         if (!format ||
2710                             format->extensions() != cit->extensions() ||
2711                             format->prettyname() != cit->prettyname() ||
2712                             format->shortcut() != cit->shortcut() ||
2713                             format->viewer() != cit->viewer() ||
2714                             format->editor() != cit->editor() ||
2715                             format->documentFormat() != cit->documentFormat() ||
2716                             format->vectorFormat() != cit->vectorFormat() ||
2717                             format->inExportMenu() != cit->inExportMenu() ||
2718                             format->mime() != cit->mime()) {
2719                                 os << "\\format \"" << cit->name() << "\" \""
2720                                    << cit->extensions() << "\" \""
2721                                    << cit->prettyname() << "\" \""
2722                                    << cit->shortcut() << "\" \""
2723                                    << escapeCommand(cit->viewer()) << "\" \""
2724                                    << escapeCommand(cit->editor()) << "\" \"";
2725                                 vector<string> flags;
2726                                 if (cit->documentFormat())
2727                                         flags.push_back("document");
2728                                 if (cit->vectorFormat())
2729                                         flags.push_back("vector");
2730                                 if (cit->zippedNative())
2731                                         flags.push_back("zipped=native");
2732                                 if (cit->inExportMenu())
2733                                         flags.push_back("menu=export");
2734
2735                                 os << getStringFromVector(flags);
2736                                 os << "\" \"" << cit->mime() << "\"\n";
2737                         }
2738                 }
2739
2740                 // Look for deleted formats
2741                 for (Formats::const_iterator cit = system_formats.begin();
2742                      cit != system_formats.end(); ++cit)
2743                         if (!formats.getFormat(cit->name()))
2744                                 os << "\\format \"" << cit->name()
2745                                    << "\" \"\" \"\" \"\" \"\" \"\" \"\" \"\"\n";
2746                 if (tag != RC_LAST)
2747                         break;
2748         case RC_VIEWER_ALTERNATIVES: {
2749                 Alternatives::const_iterator it = viewer_alternatives.begin();
2750                 Alternatives::const_iterator const en = viewer_alternatives.end();
2751                 Alternatives::const_iterator const sysend =
2752                                 system_lyxrc.viewer_alternatives.end();
2753                 for (; it != en; ++it) {
2754                         string const & fmt = it->first;
2755                         CommandSet const & cmd = it->second;
2756                         CommandSet::const_iterator sit = cmd.begin();
2757                         CommandSet::const_iterator const sen = cmd.end();
2758                         Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ?
2759                                         system_lyxrc.viewer_alternatives.begin() : // we won't use it in this case
2760                                         system_lyxrc.viewer_alternatives.find(fmt);
2761                         for (; sit != sen; ++sit) {
2762                                 string const & cmd = *sit;
2763                                 if (ignore_system_lyxrc
2764                                     || sysfmt == sysend               // format not found
2765                                          || sysfmt->second.count(cmd) == 0 // this command not found
2766                                    )
2767                                         os << "\\viewer_alternatives " << fmt << " " << cmd << "\n";
2768                         }
2769                 }
2770                 if (tag != RC_LAST)
2771                         break;
2772         }
2773         case RC_EDITOR_ALTERNATIVES: {
2774                 Alternatives::const_iterator it = editor_alternatives.begin();
2775                 Alternatives::const_iterator const en = editor_alternatives.end();
2776                 Alternatives::const_iterator const sysend =
2777                                 system_lyxrc.editor_alternatives.end();
2778                 for (; it != en; ++it) {
2779                         string const & fmt = it->first;
2780                         CommandSet const & cmd = it->second;
2781                         CommandSet::const_iterator sit = cmd.begin();
2782                         CommandSet::const_iterator const sen = cmd.end();
2783                         Alternatives::const_iterator const sysfmt = ignore_system_lyxrc ?
2784                                         system_lyxrc.editor_alternatives.begin() : // we won't use it in this case
2785                                         system_lyxrc.editor_alternatives.find(fmt);
2786                         for (; sit != sen; ++sit) {
2787                                 string const & cmd = *sit;
2788                                 if (ignore_system_lyxrc
2789                                     || sysfmt == sysend               // format not found
2790                                     || sysfmt->second.count(cmd) == 0 // this command not found
2791                                    )
2792                                         os << "\\editor_alternatives " << fmt << " " << cmd << "\n";
2793                         }
2794                 }
2795                 if (tag != RC_LAST)
2796                         break;
2797         }
2798         case RC_DEFAULT_VIEW_FORMAT:
2799                 if (ignore_system_lyxrc ||
2800                     default_view_format != system_lyxrc.default_view_format) {
2801                         os << "\\default_view_format " << default_view_format << '\n';
2802                 }
2803                 if (tag != RC_LAST)
2804                         break;
2805         case RC_VIEWER:
2806                 // Ignore it
2807                 if (tag != RC_LAST)
2808                         break;
2809
2810                 os << "\n#\n"
2811                    << "# CONVERTERS SECTION ##########################\n"
2812                    << "#\n\n";
2813
2814         case RC_CONVERTER:
2815                 // Look for new converters
2816                 for (Converters::const_iterator cit = theConverters().begin();
2817                      cit != theConverters().end(); ++cit) {
2818                         Converter const * converter =
2819                                 theSystemConverters().getConverter(cit->from,
2820                                                                cit->to);
2821                         if (!converter ||
2822                             converter->command != cit->command ||
2823                             converter->flags != cit->flags)
2824                                 os << "\\converter \"" << cit->from << "\" \""
2825                                    << cit->to << "\" \""
2826                                    << escapeCommand(cit->command) << "\" \""
2827                                    << cit->flags << "\"\n";
2828                 }
2829
2830                 // New/modifed converters
2831                 for (Converters::const_iterator cit = theSystemConverters().begin();
2832                      cit != theSystemConverters().end(); ++cit)
2833                         if (!theConverters().getConverter(cit->from, cit->to))
2834                                 os << "\\converter \"" << cit->from
2835                                    << "\" \"" << cit->to << "\" \"\" \"\"\n";
2836                 if (tag != RC_LAST)
2837                         break;
2838
2839         case RC_COPIER:
2840                 if (tag == RC_LAST)
2841                         os << "\n#\n"
2842                            << "# COPIERS SECTION ##########################\n"
2843                            << "#\n\n";
2844
2845                 // Look for new movers
2846                 Movers::const_iterator const sysbegin = theSystemMovers().begin();
2847                 Movers::const_iterator const sysend = theSystemMovers().end();
2848                 Movers::const_iterator it = theMovers().begin();
2849                 Movers::const_iterator end = theMovers().end();
2850
2851                 for (; it != end; ++it) {
2852                         Movers::const_iterator const sysit =
2853                                 find_if(sysbegin, sysend, SameMover(*it));
2854                         if (sysit == sysend) {
2855                                 string const & fmt = it->first;
2856                                 string const & command =
2857                                         it->second.command();
2858
2859                                 os << "\\copier " << fmt
2860                                    << " \"" << escapeCommand(command) << "\"\n";
2861                         }
2862                 }
2863                 if (tag != RC_LAST)
2864                         break;
2865
2866                 // We don't actually delete SpecialisedMover(s) from the
2867                 // map, just clear their 'command', so there's no need
2868                 // to test for anything else.
2869         }
2870
2871         os.flush();
2872 }
2873
2874
2875 void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
2876 {
2877         // Why the switch you might ask. It is a trick to ensure that all
2878         // the elements in the LyXRCTags enum is handled. As you can see
2879         // there are no breaks at all. So it is just a huge fall-through.
2880         // The nice thing is that we will get a warning from the compiler
2881         // if we forget an element.
2882         LyXRC::LyXRCTags tag = LyXRC::RC_LAST;
2883         switch (tag) {
2884         case LyXRC::RC_LAST:
2885         case LyXRC::RC_ACCEPT_COMPOUND:
2886                 if (lyxrc_orig.spellchecker_accept_compound != lyxrc_new.spellchecker_accept_compound)
2887                         if (theSpellChecker()) theSpellChecker()->advanceChangeNumber();
2888         case LyXRC::RC_ALT_LANG:
2889         case LyXRC::RC_PLAINTEXT_LINELEN:
2890         case LyXRC::RC_AUTOCORRECTION_MATH:
2891         case LyXRC::RC_AUTOREGIONDELETE:
2892         case LyXRC::RC_AUTORESET_OPTIONS:
2893         case LyXRC::RC_AUTOSAVE:
2894         case LyXRC::RC_AUTO_NUMBER:
2895         case LyXRC::RC_BACKUPDIR_PATH:
2896         case LyXRC::RC_BIBTEX_ALTERNATIVES:
2897         case LyXRC::RC_BIBTEX_COMMAND:
2898         case LyXRC::RC_BINDFILE:
2899         case LyXRC::RC_CHECKLASTFILES:
2900         case LyXRC::RC_COMPLETION_CURSOR_TEXT:
2901         case LyXRC::RC_COMPLETION_INLINE_DELAY:
2902         case LyXRC::RC_COMPLETION_INLINE_DOTS:
2903         case LyXRC::RC_COMPLETION_INLINE_MATH:
2904         case LyXRC::RC_COMPLETION_INLINE_TEXT:
2905         case LyXRC::RC_COMPLETION_POPUP_AFTER_COMPLETE:
2906         case LyXRC::RC_COMPLETION_POPUP_DELAY:
2907         case LyXRC::RC_COMPLETION_POPUP_MATH:
2908         case LyXRC::RC_COMPLETION_POPUP_TEXT:
2909         case LyXRC::RC_COMPLETION_MINLENGTH:
2910         case LyXRC::RC_USELASTFILEPOS:
2911         case LyXRC::RC_LOADSESSION:
2912         case LyXRC::RC_CHKTEX_COMMAND:
2913         case LyXRC::RC_CONVERTER:
2914         case LyXRC::RC_CONVERTER_CACHE_MAXAGE:
2915         case LyXRC::RC_COPIER:
2916         case LyXRC::RC_CURSOR_FOLLOWS_SCROLLBAR:
2917         case LyXRC::RC_SCROLL_BELOW_DOCUMENT:
2918         case LyXRC::RC_DATE_INSERT_FORMAT:
2919         case LyXRC::RC_DEFAULT_LANGUAGE:
2920         case LyXRC::RC_GUI_LANGUAGE:
2921         case LyXRC::RC_DEFAULT_VIEW_FORMAT:
2922         case LyXRC::RC_DEFFILE:
2923         case LyXRC::RC_DIALOGS_ICONIFY_WITH_MAIN:
2924         case LyXRC::RC_DISPLAY_GRAPHICS:
2925         case LyXRC::RC_DOCUMENTPATH:
2926                 if (lyxrc_orig.document_path != lyxrc_new.document_path) {
2927                         FileName path(lyxrc_new.document_path);
2928                         if (path.exists() && path.isDirectory())
2929                                 package().document_dir() = FileName(lyxrc.document_path);
2930                 }
2931         case LyXRC::RC_EDITOR_ALTERNATIVES:
2932         case LyXRC::RC_ESC_CHARS:
2933         case LyXRC::RC_EXAMPLEPATH:
2934         case LyXRC::RC_FONT_ENCODING:
2935         case LyXRC::RC_FORCE_PAINT_SINGLE_CHAR:
2936         case LyXRC::RC_FILEFORMAT:
2937         case LyXRC::RC_GROUP_LAYOUTS:
2938         case LyXRC::RC_HUNSPELLDIR_PATH:
2939         case LyXRC::RC_ICON_SET:
2940         case LyXRC::RC_INDEX_ALTERNATIVES:
2941         case LyXRC::RC_INDEX_COMMAND:
2942         case LyXRC::RC_JBIBTEX_COMMAND:
2943         case LyXRC::RC_JINDEX_COMMAND:
2944         case LyXRC::RC_NOMENCL_COMMAND:
2945         case LyXRC::RC_INPUT:
2946         case LyXRC::RC_KBMAP:
2947         case LyXRC::RC_KBMAP_PRIMARY:
2948         case LyXRC::RC_KBMAP_SECONDARY:
2949         case LyXRC::RC_LANGUAGE_AUTO_BEGIN:
2950         case LyXRC::RC_LANGUAGE_AUTO_END:
2951         case LyXRC::RC_LANGUAGE_COMMAND_BEGIN:
2952         case LyXRC::RC_LANGUAGE_COMMAND_END:
2953         case LyXRC::RC_LANGUAGE_COMMAND_LOCAL:
2954         case LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS:
2955         case LyXRC::RC_LANGUAGE_CUSTOM_PACKAGE:
2956         case LyXRC::RC_LANGUAGE_PACKAGE_SELECTION:
2957         case LyXRC::RC_LYXRCFORMAT:
2958         case LyXRC::RC_MAC_DONTSWAP_CTRL_META:
2959         case LyXRC::RC_MAC_LIKE_WORD_MOVEMENT:
2960         case LyXRC::RC_MACRO_EDIT_STYLE:
2961         case LyXRC::RC_MAKE_BACKUP:
2962         case LyXRC::RC_MARK_FOREIGN_LANGUAGE:
2963         case LyXRC::RC_MOUSE_WHEEL_SPEED:
2964         case LyXRC::RC_NUMLASTFILES:
2965         case LyXRC::RC_PARAGRAPH_MARKERS:
2966         case LyXRC::RC_PATH_PREFIX:
2967                 if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
2968                         prependEnvPath("PATH", lyxrc_new.path_prefix);
2969                 }
2970         case LyXRC::RC_PREVIEW:
2971         case LyXRC::RC_PREVIEW_HASHED_LABELS:
2972         case LyXRC::RC_PREVIEW_SCALE_FACTOR:
2973         case LyXRC::RC_PRINTCOLLCOPIESFLAG:
2974         case LyXRC::RC_PRINTCOPIESFLAG:
2975         case LyXRC::RC_PRINTER:
2976         case LyXRC::RC_PRINTEVENPAGEFLAG:
2977         case LyXRC::RC_PRINTEXSTRAOPTIONS:
2978         case LyXRC::RC_PRINTFILEEXTENSION:
2979         case LyXRC::RC_PRINTLANDSCAPEFLAG:
2980         case LyXRC::RC_PRINTODDPAGEFLAG:
2981         case LyXRC::RC_PRINTPAGERANGEFLAG:
2982         case LyXRC::RC_PRINTPAPERDIMENSIONFLAG:
2983         case LyXRC::RC_PRINTPAPERFLAG:
2984         case LyXRC::RC_PRINTREVERSEFLAG:
2985         case LyXRC::RC_PRINTSPOOL_COMMAND:
2986         case LyXRC::RC_PRINTSPOOL_PRINTERPREFIX:
2987         case LyXRC::RC_PRINTTOFILE:
2988         case LyXRC::RC_PRINTTOPRINTER:
2989         case LyXRC::RC_PRINT_ADAPTOUTPUT:
2990         case LyXRC::RC_PRINT_COMMAND:
2991         case LyXRC::RC_RTL_SUPPORT:
2992         case LyXRC::RC_SAVE_COMPRESSED:
2993         case LyXRC::RC_SCREEN_DPI:
2994         case LyXRC::RC_SCREEN_FONT_ROMAN:
2995         case LyXRC::RC_SCREEN_FONT_ROMAN_FOUNDRY:
2996         case LyXRC::RC_SCREEN_FONT_SANS:
2997         case LyXRC::RC_SCREEN_FONT_SANS_FOUNDRY:
2998         case LyXRC::RC_SCREEN_FONT_SCALABLE:
2999         case LyXRC::RC_SCREEN_FONT_SIZES:
3000         case LyXRC::RC_SCREEN_FONT_TYPEWRITER:
3001         case LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
3002         case LyXRC::RC_GEOMETRY_SESSION:
3003         case LyXRC::RC_SCREEN_ZOOM:
3004         case LyXRC::RC_SERVERPIPE:
3005         case LyXRC::RC_SET_COLOR:
3006         case LyXRC::RC_SHOW_BANNER:
3007         case LyXRC::RC_OPEN_BUFFERS_IN_TABS:
3008         case LyXRC::RC_SPELLCHECKER:
3009                 if (lyxrc_orig.spellchecker != lyxrc_new.spellchecker)
3010                         setSpellChecker();
3011         case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
3012         case LyXRC::RC_SPELLCHECK_NOTES:
3013         case LyXRC::RC_SPLITINDEX_COMMAND:
3014         case LyXRC::RC_TEMPDIRPATH:
3015         case LyXRC::RC_TEMPLATEPATH:
3016         case LyXRC::RC_TEX_ALLOWS_SPACES:
3017         case LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS:
3018                 if (lyxrc_orig.windows_style_tex_paths != lyxrc_new.windows_style_tex_paths) {
3019                         os::windows_style_tex_paths(lyxrc_new.windows_style_tex_paths);
3020                 }
3021         case LyXRC::RC_TEXINPUTS_PREFIX:
3022         case LyXRC::RC_THESAURUSDIRPATH:
3023         case LyXRC::RC_UIFILE:
3024         case LyXRC::RC_USER_EMAIL:
3025         case LyXRC::RC_USER_NAME:
3026         case LyXRC::RC_USE_CONVERTER_CACHE:
3027         case LyXRC::RC_USE_SYSTEM_COLORS:
3028         case LyXRC::RC_USE_TOOLTIP:
3029         case LyXRC::RC_USE_PIXMAP_CACHE:
3030         case LyXRC::RC_USE_QIMAGE:
3031         case LyXRC::RC_VIEWDVI_PAPEROPTION:
3032         case LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON:
3033         case LyXRC::RC_SINGLE_INSTANCE:
3034         case LyXRC::RC_SORT_LAYOUTS:
3035         case LyXRC::RC_FULL_SCREEN_LIMIT:
3036         case LyXRC::RC_FULL_SCREEN_SCROLLBAR:
3037         case LyXRC::RC_FULL_SCREEN_MENUBAR:
3038         case LyXRC::RC_FULL_SCREEN_TABBAR:
3039         case LyXRC::RC_FULL_SCREEN_TOOLBARS:
3040         case LyXRC::RC_FULL_SCREEN_WIDTH:
3041         case LyXRC::RC_VISUAL_CURSOR:
3042         case LyXRC::RC_VIEWER:
3043         case LyXRC::RC_VIEWER_ALTERNATIVES:
3044         case LyXRC::RC_FORWARD_SEARCH_DVI:
3045         case LyXRC::RC_FORWARD_SEARCH_PDF:
3046         case LyXRC::RC_EXPORT_OVERWRITE:
3047         case LyXRC::RC_DEFAULT_DECIMAL_POINT:
3048         case LyXRC::RC_DEFAULT_LENGTH_UNIT:
3049         case LyXRC::RC_SCROLL_WHEEL_ZOOM:
3050         case LyXRC::RC_CURSOR_WIDTH:
3051                 break;
3052         }
3053 }
3054
3055
3056 #if 0
3057 string const LyXRC::getDescription(LyXRCTags tag)
3058 {
3059         docstring str;
3060
3061         switch (tag) {
3062         case RC_ACCEPT_COMPOUND:
3063                 str = _("Consider run-together words, such as \"diskdrive\" for \"disk drive\", as legal words?");
3064                 break;
3065
3066         case RC_ALT_LANG:
3067                 str = _("Specify an alternate language. The default is to use the language of the document.");
3068                 break;
3069
3070         case RC_PLAINTEXT_LINELEN:
3071                 str = _("The maximum line length of exported plain text/LaTeX/SGML files. If set to 0, paragraphs are output in a single line; if the line length is > 0, paragraphs are separated by a blank line.");
3072                 break;
3073
3074         case RC_AUTOREGIONDELETE:
3075                 str = _("De-select if you don't want the current selection to be replaced automatically by what you type.");
3076                 break;
3077
3078         case RC_AUTORESET_OPTIONS:
3079                 str = _("De-select if you don't want the class options to be reset to defaults after class change.");
3080                 break;
3081
3082         case RC_AUTOSAVE:
3083                 str = _("The time interval between auto-saves (in seconds). 0 means no auto-save.");
3084                 break;
3085
3086         case RC_AUTO_NUMBER:
3087                 break;
3088
3089         case RC_BACKUPDIR_PATH:
3090                 str = _("The path for storing backup files. If it is an empty string, LyX will store the backup file in the same directory as the original file.");
3091                 break;
3092
3093         case RC_BIBTEX_COMMAND:
3094                 str = _("Define the options of bibtex (cf. man bibtex) or select an alternative compiler (e.g. mlbibtex or bibulus).");
3095                 break;
3096
3097         case RC_JBIBTEX_COMMAND:
3098                 str = _("Define the options of the bibtex program for PLaTeX (Japanese LaTeX).");
3099                 break;
3100
3101         case RC_BINDFILE:
3102                 str = _("Keybindings file. Can either specify an absolute path, or LyX will look in its global and local bind/ directories.");
3103                 break;
3104
3105         case RC_CHECKLASTFILES:
3106                 str = _("Select to check whether the lastfiles still exist.");
3107                 break;
3108
3109         case RC_CHKTEX_COMMAND:
3110                 str = _("Define how to run chktex. E.g. \"chktex -n11 -n1 -n3 -n6 -n9 -22 -n25 -n30 -n38\" Refer to the ChkTeX documentation.");
3111                 break;
3112
3113         case RC_CONVERTER:
3114                 break;
3115
3116         case RC_COPIER:
3117                 break;
3118
3119         case RC_CURSOR_FOLLOWS_SCROLLBAR:
3120                 str = _("LyX normally doesn't update the cursor position if you move the scrollbar. Set to true if you'd prefer to always have the cursor on screen.");
3121                 break;
3122
3123         case RC_CURSOR_WIDTH:
3124                 str = _("Configure the width of the text cursor. Automatic zoom-controlled cursor width used when set to 0.");
3125                 break;
3126
3127         case RC_SCROLL_BELOW_DOCUMENT:
3128                 str = _("LyX normally doesn't allow the user to scroll further than the bottom of the document. Set to true if you prefer to scroll the bottom of the document to the top of the screen");
3129                 break;
3130
3131         case RC_MAC_DONTSWAP_CTRL_META:
3132                 str = _("Make Apple key act as Meta and Control key as Ctrl.");
3133                 break;
3134
3135         case RC_MAC_LIKE_WORD_MOVEMENT:
3136                 str = _("Use the Mac OS X conventions for the word-level cursor movement");
3137                 break;
3138
3139         case RC_SHOW_MACRO_LABEL:
3140                 str = _("Show a small box around a Math Macro with the macro name when the cursor is inside.");
3141                 break;
3142
3143         case RC_DATE_INSERT_FORMAT:
3144                 //xgettext:no-c-format
3145                 str = _("This accepts the normal strftime formats; see man strftime for full details. E.g.\"%A, %e. %B %Y\".");
3146                 break;
3147
3148         case RC_DEFFILE:
3149                 str = _("Command definition file. Can either specify an absolute path, or LyX will look in its global and local commands/ directories.");
3150                 break;
3151
3152         case RC_DEFAULT_VIEW_FORMAT:
3153                 str = _("The default format used with LFUN_BUFFER_[VIEW|UPDATE].");
3154                 break;
3155
3156         case RC_DEFAULT_LANGUAGE:
3157                 str = _("New documents will be assigned this language.");
3158                 break;
3159
3160         case RC_DIALOGS_ICONIFY_WITH_MAIN:
3161                 str = _("Iconify the dialogs when the main window is iconified. (Affects only dialogs shown after the change has been made.)");
3162                 break;
3163
3164         case RC_DISPLAY_GRAPHICS:
3165                 str = _("Select how LyX will display any graphics.");
3166                 break;
3167
3168         case RC_DOCUMENTPATH:
3169                 str = _("The default path for your documents. An empty value selects the directory LyX was started from.");
3170                 break;
3171
3172         case RC_ESC_CHARS:
3173                 str = _("Specify additional chars that can be part of a word.");
3174                 break;
3175
3176         case RC_EXAMPLEPATH:
3177                 str = _("The path that LyX will set when offering to choose an example. An empty value selects the directory LyX was started from.");
3178                 break;
3179
3180         case RC_FONT_ENCODING:
3181                 str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
3182                 break;
3183
3184         case RC_FORCE_PAINT_SINGLE_CHAR:
3185                 str = _("Disable any kerning and ligatures for text drawing on screen.");
3186                 break;
3187
3188         case RC_FILEFORMAT:
3189                 break;
3190
3191         case RC_INDEX_COMMAND:
3192                 str = _("Define the options of makeindex (cf. man makeindex) or select an alternative compiler. E.g., using xindy/make-rules, the command string would be \"makeindex.sh -m $$lang\".");
3193                 break;
3194
3195         case RC_JINDEX_COMMAND:
3196                 str = _("Define the options of the index program for PLaTeX (Japanese LaTeX).");
3197                 break;
3198
3199         case RC_NOMENCL_COMMAND:
3200                 str = _("Define the options of makeindex (cf. man makeindex) to be used for nomenclatures. This might differ from the index processing options.");
3201                 break;
3202
3203         case RC_INPUT:
3204                 break;
3205
3206         case RC_KBMAP:
3207         case RC_KBMAP_PRIMARY:
3208         case RC_KBMAP_SECONDARY:
3209                 str = _("Use this to set the correct mapping file for your keyboard. You'll need this if you for instance want to type German documents on an American keyboard.");
3210                 break;
3211
3212         case RC_LANGUAGE_AUTO_BEGIN:
3213                 str = _("Select if a language switching command is needed at the beginning of the document.");
3214                 break;
3215
3216         case RC_LANGUAGE_AUTO_END:
3217                 str = _("Select if a language switching command is needed at the end of the document.");
3218                 break;
3219
3220         case RC_LANGUAGE_COMMAND_BEGIN:
3221                 str = _("The LaTeX command for changing from the language of the document to another language. E.g. \\selectlanguage{$$lang} where $$lang is substituted by the name of the second language.");
3222                 break;
3223
3224         case RC_LANGUAGE_COMMAND_END:
3225                 str = _("The LaTeX command for changing back to the language of the document.");
3226                 break;
3227
3228         case RC_LANGUAGE_COMMAND_LOCAL:
3229                 str = _("The LaTeX command for local changing of the language.");
3230                 break;
3231
3232         case RC_LANGUAGE_GLOBAL_OPTIONS:
3233                 str = _("De-select if you don't want the language(s) used as an argument to \\documentclass.");
3234                 break;
3235
3236         case RC_LANGUAGE_CUSTOM_PACKAGE:
3237                 str = _("The LaTeX command for loading the language package. E.g. \"\\usepackage{babel}\", \"\\usepackage{omega}\".");
3238                 break;
3239
3240         case RC_LANGUAGE_PACKAGE_SELECTION:
3241                 str = _("De-select if you don't want babel to be used when the language of the document is the default language.");
3242                 break;
3243
3244         case RC_USELASTFILEPOS:
3245                 str = _("De-select if you do not want LyX to scroll to saved position.");
3246                 break;
3247
3248         case RC_LOADSESSION:
3249                 str = _("De-select to prevent loading files opened from the last LyX session.");
3250                 break;
3251
3252         case RC_MAKE_BACKUP:
3253                 str = _("De-select if you don't want LyX to create backup files.");
3254                 break;
3255
3256         case RC_MARK_FOREIGN_LANGUAGE:
3257                 str = _("Select to control the highlighting of words with a language foreign to that of the document.");
3258                 break;
3259
3260         case RC_MOUSE_WHEEL_SPEED:
3261                 str = bformat(_("The scrolling speed of the mouse wheel."),
3262                       maxlastfiles);
3263                 break;
3264
3265         case RC_COMPLETION_POPUP_DELAY:
3266                 str = _("The completion popup delay.");
3267                 break;
3268
3269         case RC_COMPLETION_POPUP_MATH:
3270                 str = _("Select to display the completion popup in math mode.");
3271                 break;
3272
3273         case RC_COMPLETION_POPUP_TEXT:
3274                 str = _("Select to display the completion popup in text mode.");
3275                 break;
3276
3277         case RC_COMPLETION_POPUP_AFTER_COMPLETE:
3278                 str = _("Show the completion popup without delay after non-unique completion attempt.");
3279                 break;
3280
3281         case RC_COMPLETION_POPUP_TEXT:
3282                 str = _("Show a small triangle on the cursor to indicate that a completion is available.");
3283                 break;
3284
3285         case RC_COMPLETION_POPUP_DELAY:
3286                 str = _("The inline completion delay.");
3287                 break;
3288
3289         case RC_COMPLETION_INLINE_MATH:
3290                 str = _("Select to display the inline completion in math mode.");
3291                 break;
3292
3293         case RC_COMPLETION_INLINE_TEXT:
3294                 str = _("Select to display the inline completion in text mode.");
3295                 break;
3296
3297         case RC_COMPLETION_INLINE_DOTS:
3298                 str = _("Use \"...\" to shorten long completions.");
3299                 break;
3300
3301         case RC_AUTOCORRECTION_MATH:
3302                 str = _("Allow TeXMacs shorthand, like => converting to \Rightarrow.");
3303                 break;
3304
3305         case RC_NUMLASTFILES:
3306                 str = bformat(_("Maximal number of lastfiles. Up to %1$d can appear in the file menu."),
3307                         maxlastfiles);
3308                 break;
3309
3310         case RC_PATH_PREFIX:
3311                 str = _("Specify those directories which should be "
3312                          "prepended to the PATH environment variable.\n"
3313                          "Use the OS native format.");
3314                 break;
3315
3316         case RC_PREVIEW:
3317                 str = _("Shows a typeset preview of things such as math");
3318                 break;
3319
3320         case RC_PREVIEW_HASHED_LABELS:
3321                 str = _("Previewed equations will have \"(#)\" labels rather than numbered ones");
3322                 break;
3323
3324         case RC_PREVIEW_SCALE_FACTOR:
3325                 str = _("Scale the preview size to suit.");
3326                 break;
3327
3328         case RC_PRINTCOLLCOPIESFLAG:
3329                 str = _("The option for specifying whether the copies should be collated.");
3330                 break;
3331
3332         case RC_PRINTCOPIESFLAG:
3333                 str = _("The option for specifying the number of copies to print.");
3334                 break;
3335
3336         case RC_PRINTER:
3337                 str = _("The default printer to print on. If none is specified, LyX will use the environment variable PRINTER.");
3338                 break;
3339
3340         case RC_PRINTEVENPAGEFLAG:
3341                 str = _("The option to print only even pages.");
3342                 break;
3343
3344         case RC_PRINTEXSTRAOPTIONS:
3345                 str = _("Extra options to pass to printing program after everything else, but before the filename of the DVI file to be printed.");
3346                 break;
3347
3348         case RC_PRINTFILEEXTENSION:
3349                 str = _("Extension of printer program output file. Usually \".ps\".");
3350                 break;
3351
3352         case RC_PRINTLANDSCAPEFLAG:
3353                 str = _("The option to print out in landscape.");
3354                 break;
3355
3356         case RC_PRINTODDPAGEFLAG:
3357                 str = _("The option to print only odd pages.");
3358                 break;
3359
3360         case RC_PRINTPAGERANGEFLAG:
3361                 str = _("The option for specifying a comma-separated list of pages to print.");
3362                 break;
3363
3364         case RC_PRINTPAPERDIMENSIONFLAG:
3365                                    str = _("Option to specify the dimensions of the print paper.");
3366                 break;
3367
3368         case RC_PRINTPAPERFLAG:
3369                 str = _("The option to specify paper type.");
3370                 break;
3371
3372         case RC_PRINTREVERSEFLAG:
3373                 str = _("The option to reverse the order of the pages printed.");
3374                 break;
3375
3376         case RC_PRINTSPOOL_COMMAND:
3377                 str = _("When set, this printer option automatically prints to a file and then calls a separate print spooling program on that file with the given name and arguments.");
3378                 break;
3379
3380         case RC_PRINTSPOOL_PRINTERPREFIX:
3381                 str = _("If you specify a printer name in the print dialog, the following argument is prepended along with the printer name after the spool command.");
3382                 break;
3383
3384         case RC_PRINTTOFILE:
3385                 str = _("Option to pass to the print program to print to a file.");
3386                 break;
3387
3388         case RC_PRINTTOPRINTER:
3389                 str = _("Option to pass to the print program to print on a specific printer.");
3390                 break;
3391
3392         case RC_PRINT_ADAPTOUTPUT:
3393                 str = _("Select for LyX to pass the name of the destination printer to your print command.");
3394                 break;
3395
3396         case RC_PRINT_COMMAND:
3397                 str = _("Your favorite print program, e.g. \"dvips\", \"dvilj4\".");
3398                 break;
3399
3400         case RC_RTL_SUPPORT:
3401                 str = _("Select to enable support of right-to-left languages (e.g. Hebrew, Arabic).");
3402                 break;
3403
3404         case RC_VISUAL_CURSOR:
3405                 str = _("Select to have visual bidi cursor movement, unselect for logical movement.");
3406                 break;
3407
3408         case RC_SCREEN_DPI:
3409                 str = _("DPI (dots per inch) of your monitor is auto-detected by LyX. If that goes wrong, override the setting here.");
3410                 break;
3411
3412         case RC_SCREEN_FONT_ROMAN:
3413         case RC_SCREEN_FONT_SANS:
3414         case RC_SCREEN_FONT_TYPEWRITER:
3415                 str = _("The screen fonts used to display the text while editing.");
3416                 break;
3417
3418         case RC_SCREEN_FONT_ROMAN_FOUNDRY:
3419         case RC_SCREEN_FONT_SANS_FOUNDRY:
3420         case RC_SCREEN_FONT_TYPEWRITER_FOUNDRY:
3421                 break;
3422
3423         case RC_SCREEN_FONT_SCALABLE:
3424                 str = _("Allow bitmap fonts to be resized. If you are using a bitmap font, selecting this option may make some fonts look blocky in LyX. Deselecting this option makes LyX use the nearest bitmap font size available, instead of scaling.");
3425                 break;
3426
3427         case RC_SCREEN_FONT_SIZES:
3428                 str = _("The font sizes used for calculating the scaling of the screen fonts.");
3429                 break;
3430
3431         case RC_SCREEN_ZOOM:
3432                 //xgettext:no-c-format
3433                 str = _("The zoom percentage for screen fonts. A setting of 100% will make the fonts roughly the same size as on paper.");
3434                 break;
3435
3436         case RC_GEOMETRY_SESSION:
3437                 str = _("Allow session manager to save and restore windows geometry.");
3438                 break;
3439
3440         case RC_SERVERPIPE:
3441                 str = _("This starts the lyxserver. The pipes get an additional extension \".in\" and \".out\". Only for advanced users.");
3442                 break;
3443
3444         case RC_SET_COLOR:
3445                 break;
3446
3447         case RC_SHOW_BANNER:
3448                 str = _("De-select if you don't want the startup banner.");
3449                 break;
3450
3451         case RC_TEMPDIRPATH:
3452                 str = _("LyX will place its temporary directories in this path. They will be deleted when you quit LyX.");
3453                 break;
3454
3455         case RC_THESAURUSDIRPATH:
3456                 str = _("This is the place where the files of the thesaurus library reside.");
3457                 break;
3458
3459         case RC_TEMPLATEPATH:
3460                 str = _("The path that LyX will set when offering to choose a template. An empty value selects the directory LyX was started from.");
3461                 break;
3462
3463         case RC_TEX_ALLOWS_SPACES:
3464                 break;
3465
3466         case RC_TEX_EXPECTS_WINDOWS_PATHS:
3467                 break;
3468
3469         case RC_TEXINPUTS_PREFIX:
3470                 str = _("Specify those directories which should be "
3471                          "prepended to the TEXINPUTS environment variable.\n"
3472                          "A '.' represents the current document directory. "
3473                          "Use the OS native format.");
3474                 break;
3475
3476         case RC_UIFILE:
3477                 str = _("The UI (user interface) file. Can either specify an absolute path, or LyX will look in its global and local ui/ directories.");
3478                 break;
3479
3480         case RC_USER_EMAIL:
3481                 break;
3482
3483         case RC_USER_NAME:
3484                 break;
3485
3486         case RC_USE_USE_SYSTEM_COLORS:
3487                 str = _("Enable use the system colors for some things like main window background and selection.");
3488                 break;
3489
3490         case RC_USE_TOOLTIP:
3491                 str = _("Enable the automatic appearance of tool tips in the work area.");
3492                 break;
3493
3494         case RC_USE_PIXMAP_CACHE:
3495                 str = _("Enable the pixmap cache that might improve performance on Mac and Windows.");
3496                 break;
3497
3498         case RC_VIEWDVI_PAPEROPTION:
3499                 _("Specify the paper command to DVI viewer (leave empty or use \"-paper\")");
3500                 break;
3501
3502         case RC_VIEWER:
3503                 break;
3504
3505         case RC_LAST:
3506                 break;
3507         }
3508
3509         return str;
3510 }
3511 #endif
3512
3513
3514 // The global instance
3515 LyXRC lyxrc;
3516
3517 // The global copy of the system lyxrc entries (everything except preferences)
3518 LyXRC system_lyxrc;
3519
3520
3521 } // namespace lyx