#include "WordLangTuple.h"
#include "WordList.h"
-#include "insets/InsetBibitem.h"
#include "insets/InsetBibtex.h"
#include "insets/InsetBranch.h"
#include "insets/InsetInclude.h"
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-int const LYX_FORMAT = 407; // uwestoehr: support for multirow offset
+int const LYX_FORMAT = 410; // rgh: dummy format for list->labeling
typedef map<string, bool> DepClean;
typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache;
/// is autosave needed?
mutable bool bak_clean;
- /// is this a unnamed file (New...)?
+ /// is this an unnamed file (New...)?
bool unnamed;
/// buffer is r/o
}
-void Buffer::setFileName(string const & newfile)
+void Buffer::setFileName(FileName const & fname)
{
- d->filename = makeAbsPath(newfile);
+ d->filename = fname;
setReadonly(d->filename.isReadOnly());
+ saveCheckSum();
updateTitles();
}
params().headsep.erase();
params().footskip.erase();
params().columnsep.erase();
- params().fontsCJK.erase();
+ params().fonts_cjk.erase();
params().listings_params.clear();
params().clearLayoutModules();
params().clearRemovedModules();
}
d->file_fully_loaded = true;
- d->read_only = !fname.isWritable();
- params().compressed = fname.isZippedFile();
+ d->read_only = !d->filename.isWritable();
+ params().compressed = d->filename.isZippedFile();
saveCheckSum();
return ReadSuccess;
}
if (from_format < LYX_FORMAT) {
Alert::error(_("Conversion script failed"),
bformat(_("%1$s is from an older version"
- " of LyX, but the lyx2lyx script"
+ " of LyX and the lyx2lyx script"
" failed to convert it."),
from_utf8(fn.absFileName())));
return LyX2LyXOlderFormat;
} else {
Alert::error(_("Conversion script failed"),
- bformat(_("%1$s is from an newer version"
- " of LyX, but the lyx2lyx script"
+ bformat(_("%1$s is from a newer version"
+ " of LyX and the lyx2lyx script"
" failed to convert it."),
from_utf8(fn.absFileName())));
return LyX2LyXNewerFormat;
// Should probably be moved to somewhere else: BufferView? GuiView?
bool Buffer::save() const
{
+ docstring const file = makeDisplayPath(absFileName(), 20);
+ d->filename.refresh();
+
+ // check the read-only status before moving the file as a backup
+ if (d->filename.exists()) {
+ bool const read_only = !d->filename.isWritable();
+ if (read_only) {
+ Alert::warning(_("File is read-only"),
+ bformat(_("The file %1$s cannot be written because it "
+ "is marked as read-only."), file));
+ return false;
+ }
+ }
+
// ask if the disk file has been externally modified (use checksum method)
if (fileName().exists() && isExternallyModified(checksum_method)) {
- docstring const file = makeDisplayPath(absFileName(), 20);
- docstring text = bformat(_("Document %1$s has been externally modified. Are you sure "
- "you want to overwrite this file?"), file);
+ docstring text =
+ bformat(_("Document %1$s has been externally modified. "
+ "Are you sure you want to overwrite this file?"), file);
int const ret = Alert::prompt(_("Overwrite modified file?"),
text, 1, 1, _("&Overwrite"), _("&Cancel"));
if (ret == 1)
LYXERR0(" " << s);
if (writeFile(FileName(s))) {
markClean();
- user_message += bformat(_(" Saved to %1$s. Phew.\n"), from_utf8(s));
+ user_message += " " + bformat(_("Saved to %1$s. Phew.\n"), from_utf8(s));
return user_message;
} else {
- user_message += _(" Save failed! Trying again...\n");
+ user_message += " " + _("Save failed! Trying again...\n");
}
}
lyxerr << ' ' << s << endl;
if (writeFile(FileName(s))) {
markClean();
- user_message += bformat(_(" Saved to %1$s. Phew.\n"), from_utf8(s));
+ user_message += " " + bformat(_("Saved to %1$s. Phew.\n"), from_utf8(s));
return user_message;
}
- user_message += _(" Save failed! Trying yet again...\n");
+ user_message += " " + _("Save failed! Trying yet again...\n");
// 3) In "/tmp" directory.
// MakeAbsPath to prepend the current
lyxerr << ' ' << s << endl;
if (writeFile(FileName(s))) {
markClean();
- user_message += bformat(_(" Saved to %1$s. Phew.\n"), from_utf8(s));
+ user_message += " " + bformat(_("Saved to %1$s. Phew.\n"), from_utf8(s));
return user_message;
}
- user_message += _(" Save failed! Bummer. Document is lost.");
+ user_message += " " + _("Save failed! Bummer. Document is lost.");
// Don't try again.
markClean();
return user_message;
bool output_preamble, bool output_body) const
{
OutputParams runparams = runparams_in;
- if (params().useXetex)
- runparams.flavor = OutputParams::XETEX;
+
+ // This is necessary for LuaTeX/XeTeX with tex fonts.
+ // See FIXME in BufferParams::encoding()
+ if (runparams.isFullUnicode())
+ runparams.encoding = encodings.fromLyXName("utf8-plain");
string const encoding = runparams.encoding->iconvName();
LYXERR(Debug::LATEX, "makeLaTeXFile encoding: " << encoding << "...");
MacroSet parentMacros;
listParentMacros(parentMacros, features);
+ runparams.use_polyglossia = features.usePolyglossia();
// Write the preamble
runparams.use_babel = params().writeLaTeX(os, features,
d->texrow,
os << "\n<!-- Text Class Preamble -->\n"
<< features.getTClassHTMLPreamble()
- << "\n<!-- Premable Snippets -->\n"
+ << "\n<!-- Preamble Snippets -->\n"
<< from_utf8(features.getPreambleSnippets());
os << "\n<!-- Layout-provided Styles -->\n";
{
//FIXME: This does not work for child documents yet.
LASSERT(code == CITE_CODE, /**/);
+
// Check if the label 'from' appears more than once
- vector<docstring> labels;
- string paramName;
checkBibInfoCache();
+
BiblioInfo const & keys = masterBibInfo();
BiblioInfo::const_iterator bit = keys.begin();
BiblioInfo::const_iterator bend = keys.end();
+ vector<docstring> labels;
for (; bit != bend; ++bit)
// FIXME UNICODE
labels.push_back(bit->first);
- paramName = "key";
if (count(labels.begin(), labels.end(), from) > 1)
return;
+ string const paramName = "key";
for (InsetIterator it = inset_iterator_begin(inset()); it; ++it) {
if (it->lyxCode() == code) {
InsetCommand * inset = it->asInsetCommand();
{
OutputParams runparams(¶ms().encoding());
runparams.nice = true;
- runparams.flavor = params().useXetex ?
+ runparams.flavor = params().useNonTeXFonts ?
OutputParams::XETEX : OutputParams::LATEX;
runparams.linelen = lyxrc.plaintext_linelen;
// No side effect of file copying and image conversion
{
string format = params().documentClass().outputFormat();
if (format == "latex") {
- if (params().useXetex)
+ if (params().useNonTeXFonts)
return "xetex";
if (params().encoding().package() == Encoding::japanese)
return "platex";
string Buffer::getDefaultOutputFormat() const
{
- if (!params().defaultOutputFormat.empty()
- && params().defaultOutputFormat != "default")
- return params().defaultOutputFormat;
+ if (!params().default_output_format.empty()
+ && params().default_output_format != "default")
+ return params().default_output_format;
typedef vector<Format const *> Formats;
Formats formats = exportableFormats(true);
if (isDocBook()
|| isLiterate()
- || params().useXetex
+ || params().useNonTeXFonts
|| params().encoding().package() == Encoding::japanese) {
if (formats.empty())
return string();
// FIXME: Don't hardcode format names here, but use a flag
if (backend_format == "pdflatex")
runparams.flavor = OutputParams::PDFLATEX;
+ else if (backend_format == "luatex")
+ runparams.flavor = OutputParams::LUATEX;
+ else if (backend_format == "xetex")
+ runparams.flavor = OutputParams::XETEX;
}
string filename = latexName(false);
break;
case BufferParams::LaTeX:
runparams.math_flavor = OutputParams::MathAsLaTeX;
- break;
+ break;
}
-
makeLyXHTMLFile(FileName(filename), runparams);
- } else if (backend_format == "lyx")
+ } else if (backend_format == "lyx")
writeFile(FileName(filename));
// Docbook backend
else if (isDocBook()) {
vector<string> v;
v.push_back(bufferFormat());
// FIXME: Don't hardcode format names here, but use a flag
- if (v.back() == "latex")
+ if (v.back() == "latex") {
v.push_back("pdflatex");
+ v.push_back("luatex");
+ v.push_back("xetex");
+ } else if (v.back() == "xetex")
+ v.push_back("luatex");
v.push_back("xhtml");
v.push_back("text");
v.push_back("lyx");
ReadStatus const ret_llf = loadThisLyXFile(emergencyFile);
bool const success = (ret_llf == ReadSuccess);
if (success) {
+ if (isReadonly()) {
+ Alert::warning(_("File is read-only"),
+ bformat(_("An emergency file is succesfully loaded, "
+ "but the original file %1$s is marked read-only. "
+ "Please make sure to save the document as a different "
+ "file."), from_utf8(d->filename.absFileName())));
+ }
markDirty();
str = _("Document was successfully recovered.");
} else
ReadStatus const ret_llf = loadThisLyXFile(autosaveFile);
// the file is not saved if we load the autosave file.
if (ret_llf == ReadSuccess) {
+ if (isReadonly()) {
+ Alert::warning(_("File is read-only"),
+ bformat(_("A backup file is succesfully loaded, "
+ "but the original file %1$s is marked read-only. "
+ "Please make sure to save the document as a "
+ "different file."),
+ from_utf8(d->filename.absFileName())));
+ }
markDirty();
return ReadSuccess;
}
switch(layout.labeltype) {
case LABEL_COUNTER:
if (layout.toclevel <= bp.secnumdepth
- && (layout.latextype != LATEX_ENVIRONMENT
- || it.text()->isFirstInSequence(it.pit()))) {
- counters.step(layout.counter, utype);
- par.params().labelString(
- par.expandLabel(layout, bp));
+ && (layout.latextype != LATEX_ENVIRONMENT
+ || it.text()->isFirstInSequence(it.pit()))) {
+ if (counters.hasCounter(layout.counter))
+ counters.step(layout.counter, utype);
+ par.params().labelString(par.expandLabel(layout, bp));
} else
par.params().labelString(docstring());
break;
FileName const old_auto = getAutosaveFileName();
bool const old_unnamed = isUnnamed();
- setFileName(fn.absFileName());
+ setFileName(fn);
markDirty();
setUnnamed(false);
} else {
// save failed
// reset the old filename and unnamed state
- setFileName(old_name.absFileName());
+ setFileName(old_name);
setUnnamed(old_unnamed);
- saveCheckSum();
return false;
}
}