#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"
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-int const LYX_FORMAT = 352; // jspitzm: splitindex support
+int const LYX_FORMAT = 361; // jspitzm: bibliography custom width
typedef map<string, bool> DepClean;
typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
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
params().clearRemovedModules();
params().pdfoptions().clear();
params().indiceslist().clear();
+ params().backgroundcolor = lyx::rgbFromHexName("#ffffff");
for (int i = 0; i < 4; ++i) {
params().user_defined_bullet(i) = ITEMIZE_DEFAULTS[i];
}
+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()
// No side effect of file copying and image conversion
runparams.dryrun = true;
- d->texrow.reset();
if (full_source) {
os << "% " << _("Preview source code") << "\n\n";
+ d->texrow.reset();
d->texrow.newline();
d->texrow.newline();
if (isDocBook())
convert<docstring>(par_end - 1))
<< "\n\n";
}
- d->texrow.newline();
- d->texrow.newline();
+ TexRow texrow;
+ texrow.reset();
+ texrow.newline();
+ texrow.newline();
// output paragraphs
if (isDocBook())
docbookParagraphs(paragraphs(), *this, os, runparams);
else
// latex or literate
- latexParagraphs(*this, text(), os, d->texrow, runparams);
+ latexParagraphs(*this, text(), os, texrow, runparams);
}
}
FileName Buffer::getAutosaveFilename() const
{
- string const fpath = isUnnamed() ? lyxrc.document_path : filePath();
+ // if the document is unnamed try to save in the backup dir, else
+ // in the default document path, and as a last try in the filePath,
+ // which will most often be the temporary directory
+ string fpath;
+ if (isUnnamed())
+ fpath = lyxrc.backupdir_path.empty() ? lyxrc.document_path
+ : lyxrc.backupdir_path;
+ if (!isUnnamed() || fpath.empty() || !FileName(fpath).exists())
+ fpath = filePath();
+
string const fname = "#" + d->filename.onlyFileName() + "#";
return makeAbsPath(fname, fpath);
}
}
+void Buffer::moveAutosaveFile(support::FileName const & oldauto) const
+{
+ FileName const newauto = getAutosaveFilename();
+ if (!(oldauto == newauto || oldauto.moveTo(newauto)))
+ LYXERR0("Unable to remove autosave file `" << oldauto << "'!");
+}
+
+
// Perfect target for a thread...
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;
}
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
v.push_back("pdflatex");
}
v.push_back("text");
+ v.push_back("xhtml");
v.push_back("lyx");
return v;
}
// 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 {
}
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:
// 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;
}