]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
Move bind file format tag to LyXAction.cpp, and rename it.
[lyx.git] / src / TextClass.cpp
index a158116d3eadb8dbd5ef63848a86da701ddf43d3..4465b1b7799b335178f9c2149e09732dfc2f46d5 100644 (file)
@@ -49,6 +49,19 @@ using namespace lyx::support;
 
 namespace lyx {
 
+// Keep the changes documented in the Customization manual. 
+//
+// If you change this format, then you MUST also make sure that
+// your changes do not invalidate the hardcoded layout file in 
+// LayoutFile.cpp. Additions will never do so, but syntax changes
+// could. See LayoutFileList::addEmptyClass() and, especially, the
+// definition of the layoutpost string. 
+// You should also run (or ask someone who has bash to run) the
+// development/updatelayouts.sh script, to update the format of 
+// all of our layout files.
+//
+int const LAYOUT_FORMAT = 31;
+       
 namespace {
 
 class LayoutNamesEqual : public unary_function<Layout, bool> {
@@ -64,9 +77,6 @@ private:
        docstring name_;
 };
 
-// Keep the changes documented in the Customization manual. 
-int const FORMAT = 26;
-
 
 bool layout2layout(FileName const & filename, FileName const & tempfile)
 {
@@ -94,7 +104,7 @@ bool layout2layout(FileName const & filename, FileName const & tempfile)
 }
 
 
-string translateRT(TextClass::ReadType rt) 
+string translateReadType(TextClass::ReadType rt) 
 {
        switch (rt) {
        case TextClass::BASECLASS:
@@ -186,6 +196,7 @@ enum TextClassTags {
        TC_RIGHTMARGIN,
        TC_FLOAT,
        TC_COUNTER,
+       TC_NOCOUNTER,
        TC_IFCOUNTER,
        TC_NOFLOAT,
        TC_TITLELATEXNAME,
@@ -223,6 +234,7 @@ namespace {
                { "input",             TC_INPUT },
                { "insetlayout",       TC_INSETLAYOUT },
                { "leftmargin",        TC_LEFTMARGIN },
+               { "nocounter",         TC_NOCOUNTER },
                { "nofloat",           TC_NOFLOAT },
                { "nostyle",           TC_NOSTYLE },
                { "outputformat",      TC_OUTPUTFORMAT },
@@ -246,7 +258,7 @@ namespace {
 
 bool TextClass::convertLayoutFormat(support::FileName const & filename, ReadType rt)
 {
-       LYXERR(Debug::TCLASS, "Converting layout file to " << FORMAT);
+       LYXERR(Debug::TCLASS, "Converting layout file to " << LAYOUT_FORMAT);
        FileName const tempfile = FileName::tempName("convert_layout");
        bool success = layout2layout(filename, tempfile);
        if (success)
@@ -264,8 +276,8 @@ TextClass::ReturnValues TextClass::readWithoutConv(FileName const & filename, Re
                return ERROR;
        }
 
-       LYXERR(Debug::TCLASS, "Reading " + translateRT(rt) + ": " +
-               to_utf8(makeDisplayPath(filename.absFilename())));
+       LYXERR(Debug::TCLASS, "Reading " + translateReadType(rt) + ": " +
+               to_utf8(makeDisplayPath(filename.absFileName())));
 
        // Define the plain layout used in table cells, ert, etc. Note that 
        // we do this before loading any layout file, so that classes can 
@@ -277,8 +289,8 @@ TextClass::ReturnValues TextClass::readWithoutConv(FileName const & filename, Re
        lexrc.setFile(filename);
        ReturnValues retval = read(lexrc, rt);
        
-       LYXERR(Debug::TCLASS, "Finished reading " + translateRT(rt) + ": " +
-                       to_utf8(makeDisplayPath(filename.absFilename())));
+       LYXERR(Debug::TCLASS, "Finished reading " + translateReadType(rt) + ": " +
+                       to_utf8(makeDisplayPath(filename.absFileName())));
 
        return retval;
 }
@@ -293,7 +305,7 @@ bool TextClass::read(FileName const & filename, ReadType rt)
        bool const worx = convertLayoutFormat(filename, rt);
        if (!worx) {
                LYXERR0 ("Unable to convert " << filename << 
-                       " to format " << FORMAT);
+                       " to format " << LAYOUT_FORMAT);
                return false;
        }
        return true;
@@ -331,7 +343,7 @@ bool TextClass::read(std::string const & str, ReadType rt)
        bool const worx = convertLayoutFormat(tempfile, rt);
        if (!worx) {
                LYXERR0("Unable to convert internal layout information to format " 
-                       << FORMAT);
+                       << LAYOUT_FORMAT);
        }
        tempfile.removeFile();
        return worx;
@@ -406,7 +418,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                                        lexrc.printError("Could not find input file: " + inc);
                                        error = true;
                                } else if (!read(tmp, MERGE)) {
-                                       lexrc.printError("Error reading input file: " + tmp.absFilename());
+                                       lexrc.printError("Error reading input file: " + tmp.absFileName());
                                        error = true;
                                }
                        }
@@ -635,13 +647,21 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
                }
 
                case TC_FLOAT:
-                       error = readFloat(lexrc);
+                       error = !readFloat(lexrc);
                        break;
                
                case TC_CITEFORMAT:
                        readCiteFormat(lexrc);
                        break;
 
+               case TC_NOCOUNTER:
+                       if (lexrc.next()) {
+                               docstring const cnt = lexrc.getDocString();
+                               if (!counters_.remove(cnt))
+                                       LYXERR0("Unable to remove counter: " + to_utf8(cnt));
+                       }
+                       break;
+
                case TC_IFCOUNTER:
                        ifcounter = true;
                case TC_COUNTER:
@@ -685,7 +705,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
 
                // Note that this is triggered the first time through the loop unless
                // we hit a format tag.
-               if (format != FORMAT)
+               if (format != LAYOUT_FORMAT)
                        return FORMAT_MISMATCH;
        }
 
@@ -1036,7 +1056,6 @@ bool TextClass::readFloat(Lexer & lexrc)
                counters_.newCounter(subtype, from_ascii(type),
                                      "\\alph{" + subtype + "}", docstring());
        }
-
        return getout;
 }
 
@@ -1148,7 +1167,7 @@ bool TextClass::load(string const & path) const
 
        if (!loaded_) {
                lyxerr << "Error reading `"
-                      << to_utf8(makeDisplayPath(layout_file.absFilename()))
+                      << to_utf8(makeDisplayPath(layout_file.absFileName()))
                       << "'\n(Check `" << name_
                       << "')\nCheck your installation and "
                          "try Options/Reconfigure..." 
@@ -1289,11 +1308,16 @@ DocumentClass & DocumentClassBundle::makeDocumentClass(
                        continue;
                }
                if (!lm->isAvailable()) {
+                       docstring const prereqs = from_utf8(getStringFromVector(lm->prerequisites(), "\n\t"));
                        docstring const msg =
-                                               bformat(_("The module %1$s requires a package that is\n"
-                                               "not available in your LaTeX installation. LaTeX output\n"
-                                               "may not be possible.\n"), from_utf8(modName));
-                       frontend::Alert::warning(_("Package not available"), msg);
+                               bformat(_("The module %1$s requires a package that is not\n"
+                                       "available in your LaTeX installation, or a converter that\n"
+                                       "you have not installed. LaTeX output may not be possible.\n"
+                                       "Missing prerequisites:\n"
+                                               "\t%2$s\n"
+                                       "See section 3.1.2.3 of the User's Guide for more information."),
+                               from_utf8(modName), prereqs);
+                       frontend::Alert::warning(_("Package not available"), msg, true);
                }
                FileName layout_file = libFileSearch("layouts", lm->getFilename());
                if (!doc_class.read(layout_file, TextClass::MODULE)) {
@@ -1368,7 +1392,7 @@ Layout const & DocumentClass::htmlTOCLayout() const
 
 string const & DocumentClass::getCiteFormat(string const & entry_type) const
 {
-       static string default_format = N_("{%author%[[%author%, ]][[{%editor%[[%editor%, ed., ]]}]]}\"%title%\"{%journal%[[, {!<i>!}%journal%{!</i>!}]][[{%publisher%[[, %publisher%]][[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}.");
+       static string default_format = "{%author%[[%author%, ]][[{%editor%[[%editor%, ed., ]]}]]}\"%title%\"{%journal%[[, {!<i>!}%journal%{!</i>!}]][[{%publisher%[[, %publisher%]][[{%institution%[[, %institution%]]}]]}]]}{%year%[[ (%year%)]]}{%pages%[[, %pages%]]}.";
        
        map<string, string>::const_iterator it = cite_formats_.find(entry_type);
        if (it != cite_formats_.end())