-/* This file is part of
- * ======================================================
- *
- * LyX, The Document Processor
- *
- * Copyright 1995 Matthias Ettrich
- * Copyright 1995-2000 The LyX Team.
+/**
+ * \file importer.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
- * ====================================================== */
+ * \author unknown
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ *
+ * Full author contact details are available in file CREDITS.
+ */
#include <config.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
#include "importer.h"
#include "converter.h"
-#include "LyXView.h"
-#include "lyxfunc.h"
-#include "minibuffer.h"
+#include "format.h"
+#include "frontends/LyXView.h"
+#include "funcrequest.h"
+#include "lyx_cb.h"
+
#include "bufferlist.h"
#include "support/filetools.h"
+#include "frontends/Alert.h"
+#include "gettext.h"
+#include "BufferView.h"
+
+using lyx::support::bformat;
+using lyx::support::changeExtension;
+using lyx::support::makeDisplayPath;
+
+using std::find;
+using std::string;
+using std::vector;
+
extern BufferList bufferlist;
-extern void InsertAsciiFile(BufferView *, string const &, bool);
-void Importer::Import(LyXView * lv, string const & filename,
+bool Importer::Import(LyXView * lv, string const & filename,
string const & format)
{
- string displaypath = MakeDisplayPath(filename);
- lv->getMiniBuffer()->Set(_("Importing"), displaypath, "...");
+ string const displaypath = makeDisplayPath(filename);
+ lv->message(bformat(_("Importing %1$s..."), displaypath));
- string lyxfile = ChangeExtension(filename, ".lyx");
+ string const lyxfile = changeExtension(filename, ".lyx");
- bool result = true;
- if (format == "text" || format == "textparagraph") {
- lv->view()->buffer(bufferlist.newFile(lyxfile, string(), true));
- bool as_paragraphs = format == "textparagraph";
- InsertAsciiFile(lv->view(), filename, as_paragraphs);
- lv->getLyXFunc()->Dispatch(LFUN_MARK_OFF);
- } else {
- result = Converter::Convert(0, filename, filename, format, "lyx");
- if (result) {
- Buffer * buffer = bufferlist.loadLyXFile(lyxfile);
- if (buffer)
- lv->view()->buffer(buffer);
- else
- result = false;
+ string loader_format;
+ vector<string> loaders = Loaders();
+ if (find(loaders.begin(), loaders.end(), format) == loaders.end()) {
+ for (vector<string>::const_iterator it = loaders.begin();
+ it != loaders.end(); ++it) {
+ if (converters.isReachable(format, *it)) {
+ if (!converters.convert(0, filename, filename,
+ format, *it))
+ return false;
+ loader_format = *it;
+ break;
+ }
+ }
+ if (loader_format.empty()) {
+ Alert::error(_("Couldn't import file"),
+ bformat(_("No information for importing the format %1$s."),
+ formats.prettyName(format)));
+ return false;
}
+ } else
+ loader_format = format;
+
+
+ if (loader_format == "lyx") {
+ lv->view()->loadLyXFile(lyxfile);
+ } else {
+ lv->view()->newFile(lyxfile, string(), true);
+ bool as_paragraphs = loader_format == "textparagraph";
+ string filename2 = (loader_format == format) ? filename
+ : changeExtension(filename,
+ formats.extension(loader_format));
+ insertAsciiFile(lv->view().get(), filename2, as_paragraphs);
+ lv->dispatch(FuncRequest(LFUN_MARK_OFF));
}
// we are done
- if (result)
- lv->getMiniBuffer()->Set(displaypath, _("imported."));
- else
- lv->getMiniBuffer()->Set(displaypath, _(": import failed."));
+ lv->message(_("imported."));
+ return true;
+}
+
+vector<Format const *> const Importer::GetImportableFormats()
+{
+ vector<string> loaders = Loaders();
+ vector<Format const *> result =
+ converters.getReachableTo(loaders[0], true);
+ for (vector<string>::const_iterator it = loaders.begin() + 1;
+ it != loaders.end(); ++it) {
+ vector<Format const *> r =
+ converters.getReachableTo(*it, false);
+ result.insert(result.end(), r.begin(), r.end());
+ }
+ return result;
}
-bool Importer::IsImportable(string const & format)
+vector<string> const Importer::Loaders()
{
- if (format == "text" || format == "textparagraph")
- return true;
- else
- return Converter::IsReachable(format, "lyx");
+ vector<string> v;
+ v.push_back("lyx");
+ v.push_back("text");
+ v.push_back("textparagraph");
+ return v;
}