}
+double Buffer::fontScalingFactor() const
+{
+ return isExporting() ? 75.0 * params().html_math_img_scale
+ : 0.01 * lyxrc.dpi * lyxrc.zoom * lyxrc.preview_scale_factor * params().display_pixel_ratio;
+}
+
+
ParagraphList & Buffer::paragraphs()
{
return text().paragraphs();
// we first write the file to a new name, then move it to its
// proper location once that has been done successfully. that
// way we preserve the original file if something goes wrong.
- TempFile tempfile(fileName().onlyPath(), "tmpXXXXXX.lyx");
- FileName savefile(tempfile.name());
+ string const justname = fileName().onlyFileNameWithoutExt();
+ boost::scoped_ptr<TempFile>
+ tempfile(new TempFile(fileName().onlyPath(),
+ justname + "-XXXXXX.lyx"));
+ bool const symlink = fileName().isSymLink();
+ if (!symlink)
+ tempfile->setAutoRemove(false);
+ FileName savefile(tempfile->name());
LYXERR(Debug::FILES, "Saving to " << savefile.absFileName());
if (!writeFile(savefile))
return false;
// we will set this to false if we fail
bool made_backup = true;
- bool const symlink = fileName().isSymLink();
+
+ FileName backupName(absFileName() + '~');
if (lyxrc.make_backup) {
- FileName backupName(absFileName() + '~');
if (!lyxrc.backupdir_path.empty()) {
string const mangledName =
subst(subst(backupName.absFileName(), '/', '!'), ':', '!');
}
}
+ // Destroy tempfile since it keeps the file locked on windows (bug 9234)
+ // Only do this if tempfile is not in autoremove mode
+ if (!symlink)
+ tempfile.reset();
// If we have no symlink, we can simply rename the temp file.
// Otherwise, we need to copy it so the symlink stays intact.
- if (!symlink)
- tempfile.setAutoRemove(false);
- if (made_backup &&
- (symlink ? savefile.copyTo(fileName(), true) : savefile.moveTo(fileName()))) {
+ if (made_backup && symlink ? savefile.copyTo(fileName(), true) :
+ savefile.moveTo(fileName()))
+ {
// saveCheckSum() was already called by writeFile(), but the
// time stamp is invalidated by copying/moving
saveCheckSum();
markClean();
return true;
}
- // else
- Alert::error(_("Write failure"),
- bformat(_("Cannot move saved file to:\n %1$s.\n"
- "But the file has successfully been saved as:\n %2$s."),
- from_utf8(fileName().absFileName()),
- from_utf8(savefile.absFileName())));
+ // else we saved the file, but failed to move it to the right location.
+
+ if (lyxrc.make_backup && made_backup && !symlink) {
+ // the original file was moved to filename.lyx~, so it will look
+ // to the user as if it was deleted. (see bug #9234.) we could try
+ // to restore it, but that would basically mean trying to do again
+ // what we just failed to do. better to leave things as they are.
+ Alert::error(_("Write failure"),
+ bformat(_("The file has successfully been saved as:\n %1$s.\n"
+ "But LyX could not move it to:\n %2$s.\n"
+ "Your original file has been backed up to:\n %3$s"),
+ from_utf8(savefile.absFileName()),
+ from_utf8(fileName().absFileName()),
+ from_utf8(backupName.absFileName())));
+ } else {
+ // either we did not try to make a backup, or else we tried and failed,
+ // or else the original file was a symlink, in which case it was copied,
+ // not moved. so the original file is intact.
+ Alert::error(_("Write failure"),
+ bformat(_("Cannot move saved file to:\n %1$s.\n"
+ "But the file has successfully been saved as:\n %2$s."),
+ from_utf8(fileName().absFileName()),
+ from_utf8(savefile.absFileName())));
+ }
return false;
}
// how to check if close went ok?
// Following is an attempt... (BE 20001011)
- // good() returns false if any error occured, including some
+ // good() returns false if any error occurred, including some
// formatting error.
// bad() returns true if something bad happened in the buffer,
// which should include file system full errors.
writeLaTeXSource(os, original_path, runparams, output);
}
catch (EncodingException const & e) {
- odocstringstream ods;
- ods.put(e.failed_char);
+ docstring const failed(1, e.failed_char);
ostringstream oss;
oss << "0x" << hex << e.failed_char << dec;
docstring msg = bformat(_("Could not find LaTeX command for character '%1$s'"
" (code point %2$s)"),
- ods.str(), from_utf8(oss.str()));
+ failed, from_utf8(oss.str()));
errorList.push_back(ErrorItem(msg, _("Some characters of your document are probably not "
"representable in the chosen encoding.\n"
"Changing the document encoding to utf8 could help."),
OutputParams runparams = runparams_in;
+ // This is necessary for LuaTeX/XeTeX with tex fonts.
+ // See FIXME in BufferParams::encoding()
+ if (runparams.isFullUnicode())
+ runparams.encoding = encodings.fromLyXName("utf8-plain");
+
// If we are compiling a file standalone, even if this is the
// child of some other buffer, let's cut the link here, so the
// file is really independent and no concurring settings from
bool const activate = (func.action() == LFUN_BRANCH_ACTIVATE
|| func.action() == LFUN_BRANCH_MASTER_ACTIVATE);
if (branch->isSelected() != activate) {
- buf->undo().recordUndoFullDocument(CursorData());
+ buf->undo().recordUndoBufferParams(CursorData());
branch->setSelected(activate);
dr.setError(false);
dr.screenUpdate(Update::Force);
msg += ("\n");
msg += bformat(_("Branch \"%1$s\" already exists."), branch_name);
} else {
- undo().recordUndoFullDocument(CursorData());
+ undo().recordUndoBufferParams(CursorData());
branch_list.add(branch_name);
branch = branch_list.find(branch_name);
string const x11hexname = X11hexname(branch->color());
Graph::EdgePath::const_iterator it = path.begin();
Graph::EdgePath::const_iterator en = path.end();
for (; it != en; ++it)
- if (theConverters().get(*it).nice) {
+ if (theConverters().get(*it).nice()) {
need_nice_file = true;
break;
}
return preview(format, update_unincluded);
}
+
Buffer::ExportStatus Buffer::preview(string const & format, bool includeall) const
{
MarkAsExporting exporting(this);