]> git.lyx.org Git - lyx.git/blobdiff - src/LyXRC.cpp
tex2lyx/text.cpp: code simplification
[lyx.git] / src / LyXRC.cpp
index b0205a3fa25906a8668b70a55c941753fdda5246..b678af0a8bc72c37c8977c178029765412695cc3 100644 (file)
@@ -26,6 +26,7 @@
 #include "LyX.h"
 #include "Mover.h"
 #include "Session.h"
+#include "SpellChecker.h"
 #include "version.h"
 
 #include "graphics/GraphicsTypes.h"
@@ -54,7 +55,7 @@ namespace os = support::os;
 
 namespace {
 
-static unsigned int const LYXRC_FILEFORMAT = 1;
+static unsigned int const LYXRC_FILEFORMAT = 3;
 
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
@@ -192,6 +193,7 @@ LexerKeyword lyxrcTags[] = {
        { "\\template_path", LyXRC::RC_TEMPLATEPATH },
        { "\\tex_allows_spaces", LyXRC::RC_TEX_ALLOWS_SPACES },
        { "\\tex_expects_windows_paths", LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS },
+       { "\\texinputs_prefix", LyXRC::RC_TEXINPUTS_PREFIX },
        { "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
        { "\\ui_file", LyXRC::RC_UIFILE },
        { "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
@@ -227,6 +229,8 @@ void LyXRC::setDefaults()
        bind_file = "cua";
        def_file = "default";
        ui_file = "default";
+       // The current document directory
+       texinputs_prefix = ".";
        // Get printer from the environment. If fail, use default "",
        // assuming that everything is set up correctly.
        printer = getEnv("PRINTER");
@@ -398,11 +402,15 @@ bool LyXRC::read(FileName const & filename, bool check_format)
                LYXERR0 ("Unable to convert " << filename.absFileName() <<
                        " to format " << LYXRC_FILEFORMAT);
                return false;
+       } else {
+               // Keep this in the else branch, such that lexrc2 goes out
+               // of scope and releases the lock on tempfile before we
+               // attempt to remove it. This matters on Windows.
+               Lexer lexrc2(lyxrcTags);
+               lexrc2.setFile(tempfile);
+               LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
+               retval = read(lexrc2, check_format);
        }
-       Lexer lexrc2(lyxrcTags);
-       lexrc2.setFile(tempfile);
-       LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
-       retval = read(lexrc2, check_format);
        tempfile.removeFile();
        return retval == ReadOK;
 }
@@ -499,6 +507,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        lexrc >> tex_allows_spaces;
                        break;
 
+               case RC_TEXINPUTS_PREFIX:
+                       lexrc >> texinputs_prefix;
+                       break;
+
                case RC_KBMAP:
                        lexrc >> use_kbmap;
                        break;
@@ -1080,8 +1092,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        break;
                }
                case RC_FILEFORMAT: {
-                       string format, extension, prettyname, shortcut;
-                       lexrc >> format >> extension >> prettyname >> shortcut;
+                       string format, extensions, prettyname, shortcut;
+                       lexrc >> format >> extensions >> prettyname >> shortcut;
                        string viewer, editor;
                        if (lexrc.next(true))
                                viewer = lexrc.getString();
@@ -1110,6 +1122,8 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                                        flgs |= Format::document;
                                else if (flag == "vector")
                                        flgs |= Format::vector;
+                               else if (flag == "zipped=native")
+                                       flgs |= Format::zipped_native;
                                else if (flag == "menu=export")
                                        flgs |= Format::export_menu;
                                else
@@ -1123,7 +1137,7 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                                else
                                        formats.erase(format);
                        } else {
-                               formats.add(format, extension, prettyname,
+                               formats.add(format, extensions, prettyname,
                                            shortcut, viewer, editor, flgs);
                        }
                        break;
@@ -1139,7 +1153,10 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                }
                case RC_EDITOR_ALTERNATIVES:  {
                        string format, command;
-                       lexrc >> format >> command;
+                       if (lexrc.next())
+                               format = lexrc.getString();
+                       if (lexrc.eatLine())
+                               command = lexrc.getString();
                        editor_alternatives[format].insert(command);
                        break;
                }
@@ -1602,8 +1619,9 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
        case RC_TEX_EXPECTS_WINDOWS_PATHS:
-               if (ignore_system_lyxrc ||
-                   windows_style_tex_paths != system_lyxrc.windows_style_tex_paths) {
+               // Don't write this setting to the preferences file,
+               // but allow temporary changes (bug 7557).
+               if (ignore_system_lyxrc) {
                        os << "\\tex_expects_windows_paths "
                           << convert<string>(windows_style_tex_paths) << '\n';
                }
@@ -1736,7 +1754,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "#\n\n";
 
        case RC_ICON_SET:
-               os << "\\icon_set \"" << icon_set << "\"\n";
                if (ignore_system_lyxrc ||
                    icon_set != system_lyxrc.icon_set) {
                        os << "\\icon_set \"" << icon_set
@@ -2211,6 +2228,14 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                   << "# TEX SECTION #######################################\n"
                   << "#\n\n";
 
+       case RC_TEXINPUTS_PREFIX:
+               if (ignore_system_lyxrc ||
+                   texinputs_prefix != system_lyxrc.texinputs_prefix) {
+                       os << "\\texinputs_prefix \"" << texinputs_prefix << "\"\n";
+               }
+               if (tag != RC_LAST)
+                       break;
+
        case RC_FONT_ENCODING:
                if (ignore_system_lyxrc ||
                    fontenc != system_lyxrc.fontenc) {
@@ -2712,7 +2737,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                        Format const * format =
                                system_formats.getFormat(cit->name());
                        if (!format ||
-                           format->extension() != cit->extension() ||
+                           format->extensions() != cit->extensions() ||
                            format->prettyname() != cit->prettyname() ||
                            format->shortcut() != cit->shortcut() ||
                            format->viewer() != cit->viewer() ||
@@ -2721,7 +2746,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                            format->vectorFormat() != cit->vectorFormat() ||
                            format->inExportMenu() != cit->inExportMenu()) {
                                os << "\\format \"" << cit->name() << "\" \""
-                                  << cit->extension() << "\" \""
+                                  << cit->extensions() << "\" \""
                                   << cit->prettyname() << "\" \""
                                   << cit->shortcut() << "\" \""
                                   << escapeCommand(cit->viewer()) << "\" \""
@@ -2731,6 +2756,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                        flags.push_back("document");
                                if (cit->vectorFormat())
                                        flags.push_back("vector");
+                               if (cit->zippedNative())
+                                       flags.push_back("zipped=native");
                                if (cit->inExportMenu())
                                        flags.push_back("menu=export");
 
@@ -2883,7 +2910,10 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        // if we forget an element.
        LyXRC::LyXRCTags tag = LyXRC::RC_LAST;
        switch (tag) {
+       case LyXRC::RC_LAST:
        case LyXRC::RC_ACCEPT_COMPOUND:
+               if (lyxrc_orig.spellchecker_accept_compound != lyxrc_new.spellchecker_accept_compound)
+                       if (theSpellChecker()) theSpellChecker()->advanceChangeNumber();
        case LyXRC::RC_ALT_LANG:
        case LyXRC::RC_PLAINTEXT_LINELEN:
        case LyXRC::RC_AUTOCORRECTION_MATH:
@@ -2964,7 +2994,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_PARAGRAPH_MARKERS:
        case LyXRC::RC_PATH_PREFIX:
                if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
-                       prependEnvPath("PATH", lyxrc.path_prefix);
+                       prependEnvPath("PATH", lyxrc_new.path_prefix);
                }
        case LyXRC::RC_PREVIEW:
        case LyXRC::RC_PREVIEW_HASHED_LABELS:
@@ -3005,6 +3035,8 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_SHOW_BANNER:
        case LyXRC::RC_OPEN_BUFFERS_IN_TABS:
        case LyXRC::RC_SPELLCHECKER:
+               if (lyxrc_orig.spellchecker != lyxrc_new.spellchecker)
+                       setSpellChecker();
        case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
        case LyXRC::RC_SPELLCHECK_NOTES:
        case LyXRC::RC_SPLITINDEX_COMMAND:
@@ -3015,6 +3047,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
                if (lyxrc_orig.windows_style_tex_paths != lyxrc_new.windows_style_tex_paths) {
                        os::windows_style_tex_paths(lyxrc_new.windows_style_tex_paths);
                }
+       case LyXRC::RC_TEXINPUTS_PREFIX:
        case LyXRC::RC_THESAURUSDIRPATH:
        case LyXRC::RC_UIFILE:
        case LyXRC::RC_USER_EMAIL:
@@ -3042,7 +3075,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_DEFAULT_DECIMAL_POINT:
        case LyXRC::RC_SCROLL_WHEEL_ZOOM:
        case LyXRC::RC_CURSOR_WIDTH:
-       case LyXRC::RC_LAST:
                break;
        }
 }
@@ -3308,7 +3340,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
 
        case RC_PATH_PREFIX:
                str = _("Specify those directories which should be "
-                        "prepended to the PATH environment variable. "
+                        "prepended to the PATH environment variable.\n"
                         "Use the OS native format.");
                break;
 
@@ -3465,6 +3497,13 @@ string const LyXRC::getDescription(LyXRCTags tag)
        case RC_TEX_EXPECTS_WINDOWS_PATHS:
                break;
 
+       case RC_TEXINPUTS_PREFIX:
+               str = _("Specify those directories which should be "
+                        "prepended to the TEXINPUTS environment variable.\n"
+                        "A '.' represents the current document directory. "
+                        "Use the OS native format.");
+               break;
+
        case RC_UIFILE:
                str = _("The UI (user interface) file. Can either specify an absolute path, or LyX will look in its global and local ui/ directories.");
                break;