X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBuffer.cpp;h=d8296e9795a5721e06dec63ab1f0656d794adcb7;hb=9577dae301866e69016c26300826114a611ea779;hp=b5dc10bd5637d3001fc996405ec5f7e4042f1cfe;hpb=00a62b7c0a21baa53584e3eda58570caab13e399;p=lyx.git diff --git a/src/Buffer.cpp b/src/Buffer.cpp index b5dc10bd56..d8296e9795 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -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 DepClean; typedef map > 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 << "\n"; + // FIXME Language should be set properly. + os << "\n"; + // FIXME Header + os << "\n"; + // FIXME Presumably need to set this right + os << "\n"; + // FIXME Get this during validation? What about other meta-data? + os << "TBA\n"; + + os << features.getTClassHTMLPreamble(); + + os << '\n'; + + docstring const styleinfo = features.getTClassHTMLStyles(); + if (!styleinfo.empty()) { + os << "\n"; + } + os << "\n\n"; + } + + params().documentClass().counters().reset(); + xhtmlParagraphs(paragraphs(), *this, os, runparams); + if (!only_body) + os << "\n\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 Buffer::backends() const v.push_back("pdflatex"); } v.push_back("text"); + v.push_back("xhtml"); v.push_back("lyx"); return v; } @@ -3144,7 +3208,8 @@ static void setLabel(Buffer const & buf, ParIterator & it) // Compute the item depth of the paragraph par.itemdepth = getItemDepth(it); - if (layout.margintype == MARGIN_MANUAL) { + if (layout.margintype == MARGIN_MANUAL + || layout.latextype == LATEX_BIB_ENVIRONMENT) { if (par.params().labelWidthString().empty()) par.params().labelWidthString(par.translateIfPossible(layout.labelstring(), bp)); } else { @@ -3189,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: @@ -3212,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; }