+ vector<string> v;
+ if (buffer.params().getLyXTextClass().isTeXClassAvailable()) {
+ v.push_back(bufferFormat(buffer));
+ // FIXME: Don't hardcode format names here, but use a flag
+ if (v.back() == "latex")
+ v.push_back("pdflatex");
+ }
+ v.push_back("text");
+ v.push_back("lyx");
+ return v;
+}
+
+
+/// ask the user what to do if a file already exists
+int checkOverwrite(FileName const & filename)
+{
+ if (fs::exists(filename.toFilesystemEncoding())) {
+ docstring text = bformat(_("The file %1$s already exists.\n\n"
+ "Do you want to over-write that file?"),
+ makeDisplayPath(filename.absFilename()));
+ return Alert::prompt(_("Over-write file?"),
+ text, 0, 2,
+ _("&Over-write"), _("Over-write &all"),
+ _("&Cancel export"));
+ }
+ return 0;
+}
+
+
+enum CopyStatus {
+ SUCCESS,
+ FORCE,
+ CANCEL
+};
+
+
+/** copy file \p sourceFile to \p destFile. If \p force is false, the user
+ * will be asked before existing files are overwritten.
+ * \return
+ * - SUCCESS if this file got copied
+ * - FORCE if subsequent calls should not ask for confirmation before
+ * overwriting files anymore.
+ * - CANCEL if the export should be cancelled
+ */
+CopyStatus copyFile(string const & format,
+ FileName const & sourceFile, FileName const & destFile,
+ string const & latexFile, bool force)
+{
+ CopyStatus ret = force ? FORCE : SUCCESS;
+
+ // Only copy files that are in our tmp dir, all other files would
+ // overwrite themselves. This check could be changed to
+ // boost::filesystem::equivalent(sourceFile, destFile) if export to
+ // other directories than the document directory is desired.
+ if (!prefixIs(onlyPath(sourceFile.absFilename()), package().temp_dir()))
+ return ret;
+
+ if (!force) {
+ switch(checkOverwrite(destFile)) {
+ case 0:
+ ret = SUCCESS;
+ break;
+ case 1:
+ ret = FORCE;
+ break;
+ default:
+ return CANCEL;
+ }
+ }
+
+ Mover const & mover = movers(format);
+ if (!mover.copy(sourceFile, destFile, latexFile))
+ Alert::error(_("Couldn't copy file"),
+ bformat(_("Copying %1$s to %2$s failed."),
+ makeDisplayPath(sourceFile.absFilename()),
+ makeDisplayPath(destFile.absFilename())));
+
+ return ret;
+}
+
+} //namespace anon