]> git.lyx.org Git - lyx.git/commitdiff
Format conversion for bind files. This completes the coding part of the
authorRichard Heck <rgheck@comcast.net>
Tue, 18 Jan 2011 15:09:43 +0000 (15:09 +0000)
committerRichard Heck <rgheck@comcast.net>
Tue, 18 Jan 2011 15:09:43 +0000 (15:09 +0000)
rc2rc project. (Was there a bug number for that? I can't find it, if
there was.)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37247 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/GuiApplication.cpp

index e5e7765cb8e50bac9738c4728c75d9eeaf34f8a1..63a5a46e9a4f295410a568f42eef07b46f3035ae 100644 (file)
@@ -2319,10 +2319,12 @@ GuiApplication::ReturnValues GuiApplication::readUIFile(FileName ui_path)
                ui_toolbars,
                ui_toolbarset,
                ui_include,
+               ui_format,
                ui_last
        };
 
        LexerKeyword uitags[] = {
+               { "format", ui_format },
                { "include", ui_include },
                { "menuset", ui_menuset },
                { "toolbars", ui_toolbars },
@@ -2340,15 +2342,40 @@ GuiApplication::ReturnValues GuiApplication::readUIFile(FileName ui_path)
                lex.printTable(lyxerr);
 
        bool error = false;
+       // format before introduction of format tag
+       unsigned int format = 0;
        while (lex.isOK()) {
-               switch (lex.lex()) {
+               int const status = lex.lex();
+
+               // we have to do this check here, outside the switch,
+               // because otherwise we would start reading include files,
+               // e.g., if the first tag we hit was an include tag.
+               if (status == ui_format)
+                       if (lex.next()) {
+                               format = lex.getInteger();
+                               continue;
+                       }
+
+               // this will trigger unless the first tag we hit is a format
+               // tag, with the right format.
+               if (format != LFUN_FORMAT)
+                       return FormatMismatch;
+
+               switch (status) {
+               case Lexer::LEX_FEOF:
+                       continue;
+
                case ui_include: {
                        lex.next(true);
                        QString const file = toqstr(lex.getString());
-                       if (!readUIFile(file, true))
+                       bool const success = readUIFile(file, true);
+                       if (!success) {
+                               LYXERR0("Failed to read inlcuded file: " << fromqstr(file));
                                return ReadError;
+                       }
                        break;
                }
+
                case ui_menuset:
                        d->menus_.read(lex);
                        break;
@@ -2365,10 +2392,13 @@ GuiApplication::ReturnValues GuiApplication::readUIFile(FileName ui_path)
                default:
                        if (!rtrim(lex.getString()).empty())
                                lex.printError("LyX::ReadUIFile: "
-                                                                "Unknown menu tag: `$$Token'");
+                                              "Unknown menu tag: `$$Token'");
+                       else
+                               LYXERR0("Error with status: " << status);
                        error = true;
                        break;
                }
+
        }
        return (error ? ReadError : ReadOK);
 }
@@ -2428,7 +2458,25 @@ bool GuiApplication::readUIFile(QString const & name, bool include)
 
        LYXERR(Debug::INIT, "Found " << name << " in " << ui_path);
 
-       readUIFile(ui_path);
+       ReturnValues retval = readUIFile(ui_path);
+
+       if (retval == FormatMismatch) {
+               LYXERR(Debug::FILES, "Converting ui file to format " << LFUN_FORMAT);
+               FileName const tempfile = FileName::tempName("convert_ui");
+               bool const success = prefs2prefs(ui_path, tempfile, true);
+               if (!success) {
+                       LYXERR0("Unable to convert " << ui_path.absFileName() <<
+                               " to format " << LFUN_FORMAT << ".");
+               } else {
+                       retval = readUIFile(tempfile);
+                       tempfile.removeFile();
+               }
+       }
+
+       if (retval != ReadOK) {
+               LYXERR0("Unable to read UI file: " << ui_path.absFileName());
+               return false;
+       }
 
        if (include)
                return true;