]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Now we can restore the old (and better) behavior of descriptions.
[lyx.git] / src / Buffer.cpp
index ae6d82e94bacc7b8b0d51d7b9ab53b23f2ff550f..d8296e9795a5721e06dec63ab1f0656d794adcb7 100644 (file)
@@ -47,6 +47,7 @@
 #include "output_docbook.h"
 #include "output.h"
 #include "output_latex.h"
+#include "output_xhtml.h"
 #include "output_plaintext.h"
 #include "paragraph_funcs.h"
 #include "Paragraph.h"
@@ -125,7 +126,7 @@ namespace {
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-int const LYX_FORMAT = 360;  // jspitzm: nomencl custom width
+int const LYX_FORMAT = 361;  // jspitzm: bibliography custom width
 
 typedef map<string, bool> DepClean;
 typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
@@ -459,10 +460,12 @@ string Buffer::logName(LogType * type) const
        FileName const fname(addName(temppath(),
                                     onlyFilename(changeExtension(filename,
                                                                  ".log"))));
+
+       // FIXME: how do we know this is the name of the build log?
        FileName const bname(
                addName(path, onlyFilename(
                        changeExtension(filename,
-                                       formats.extension("literate") + ".out"))));
+                                       formats.extension(bufferFormat()) + ".out"))));
 
        // If no Latex log or Build log is newer, show Build log
 
@@ -1335,6 +1338,65 @@ void Buffer::writeDocBookSource(odocstream & os, string const & fname,
 }
 
 
+void Buffer::makeLyXHTMLFile(FileName const & fname,
+                             OutputParams const & runparams,
+                             bool const body_only) const
+{
+       LYXERR(Debug::LATEX, "makeLYXHTMLFile...");
+
+       ofdocstream ofs;
+       if (!openFileWrite(ofs, fname))
+               return;
+
+       writeLyXHTMLSource(ofs, runparams, body_only);
+
+       ofs.close();
+       if (ofs.fail())
+               lyxerr << "File '" << fname << "' was not closed properly." << endl;
+}
+
+
+void Buffer::writeLyXHTMLSource(odocstream & os,
+                            OutputParams const & runparams,
+                            bool const only_body) const
+{
+       LaTeXFeatures features(*this, params(), runparams);
+       validate(features);
+
+       d->texrow.reset();
+
+       if (!only_body) {
+               os << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"" <<
+                       " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
+               // FIXME Language should be set properly.
+               os << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
+               // FIXME Header
+               os << "<head>\n";
+               // FIXME Presumably need to set this right
+               os << "<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\" />\n";
+               // FIXME Get this during validation? What about other meta-data?
+               os << "<title>TBA</title>\n";
+
+               os << features.getTClassHTMLPreamble();
+
+               os << '\n';
+
+               docstring const styleinfo = features.getTClassHTMLStyles();
+               if (!styleinfo.empty()) {
+                       os << "<style type='text/css'>\n";
+                       os << styleinfo;
+                       os << "</style>\n";
+               }
+               os << "</head>\n<body>\n";
+       }
+
+       params().documentClass().counters().reset();
+       xhtmlParagraphs(paragraphs(), *this, os, runparams);
+       if (!only_body)
+               os << "</body>\n</html>\n";
+}
+
+
 // chktex should be run with these flags disabled: 3, 22, 25, 30, 38(?)
 // Other flags: -wall -v0 -x
 int Buffer::runChktex()
@@ -2662,15 +2724,14 @@ void Buffer::autoSave() const
 
 string Buffer::bufferFormat() const
 {
-       if (isDocBook())
-               return "docbook";
-       if (isLiterate())
-               return "literate";
-       if (params().useXetex)
-               return "xetex";
-       if (params().encoding().package() == Encoding::japanese)
-               return "platex";
-       return "latex";
+       string format = params().documentClass().outputFormat();
+       if (format == "latex") {
+               if (params().useXetex)
+                       return "xetex";
+               if (params().encoding().package() == Encoding::japanese)
+                       return "platex";
+       }
+       return format;
 }
 
 
@@ -2741,6 +2802,8 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
        if (backend_format == "text")
                writePlaintextFile(*this, FileName(filename), runparams);
        // no backend
+       else if (backend_format == "xhtml")
+               makeLyXHTMLFile(FileName(filename), runparams);
        else if (backend_format == "lyx")
                writeFile(FileName(filename));
        // Docbook backend
@@ -2870,6 +2933,7 @@ vector<string> Buffer::backends() const
                        v.push_back("pdflatex");
        }
        v.push_back("text");
+       v.push_back("xhtml");
        v.push_back("lyx");
        return v;
 }
@@ -3190,9 +3254,7 @@ static void setLabel(Buffer const & buf, ParIterator & it)
        }
 
        case LABEL_ENUMERATE: {
-               // FIXME: Yes I know this is a really, really! bad solution
-               // (Lgb)
-               docstring enumcounter = from_ascii("enum");
+               docstring enumcounter = layout.counter.empty() ? from_ascii("enum") : layout.counter;
 
                switch (par.itemdepth) {
                case 2:
@@ -3213,31 +3275,9 @@ static void setLabel(Buffer const & buf, ParIterator & it)
                // Maybe we have to reset the enumeration counter.
                if (needEnumCounterReset(it))
                        counters.reset(enumcounter);
-
                counters.step(enumcounter);
 
-               string format;
-
-               switch (par.itemdepth) {
-               case 0:
-                       format = N_("\\arabic{enumi}.");
-                       break;
-               case 1:
-                       format = N_("(\\alph{enumii})");
-                       break;
-               case 2:
-                       format = N_("\\roman{enumiii}.");
-                       break;
-               case 3:
-                       format = N_("\\Alph{enumiv}.");
-                       break;
-               default:
-                       // not a valid enumdepth...
-                       break;
-               }
-
-               par.params().labelString(counters.counterLabel(
-                       par.translateIfPossible(from_ascii(format), bp)));
+               par.params().labelString(counters.theCounter(enumcounter));
 
                break;
        }