X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fimporter.C;h=03eb4002b92be0dc35a300a86a8c16468c248f9c;hb=5091380d6bad1686800e384ed1bbb03836a15aab;hp=73a503f9c6f50cd126e541bddeb1f72d14da3555;hpb=8aff605caefaba655e48bc629ed344bb74bcd61a;p=lyx.git diff --git a/src/importer.C b/src/importer.C index 73a503f9c6..03eb4002b9 100644 --- a/src/importer.C +++ b/src/importer.C @@ -1,10 +1,10 @@ /* This file is part of - * ====================================================== - * + * ====================================================== + * * LyX, The Document Processor - * + * * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. + * Copyright 1995-2001 The LyX Team. * * ====================================================== */ @@ -14,56 +14,99 @@ #pragma implementation #endif +#include + #include "importer.h" #include "converter.h" -#include "LyXView.h" -#include "lyxfunc.h" -#include "minibuffer.h" +#include "frontends/LyXView.h" +#include "funcrequest.h" + #include "bufferlist.h" #include "support/filetools.h" +#include "frontends/Alert.h" +#include "gettext.h" +#include "BufferView.h" + +using std::vector; +using std::find; 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); + ostringstream s1; + s1 << _("Importing") << ' ' << displaypath << "..."; + lv->message(STRCONV(s1.str())); - 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 loaders = Loaders(); + if (find(loaders.begin(), loaders.end(), format) == loaders.end()) { + for (vector::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::alert(_("Cannot import file"), + _("No information for importing from ") + + formats.prettyName(format)); + return false; } + } else + loader_format = format; + + + if (loader_format == "lyx") { + Buffer * buffer = bufferlist.loadLyXFile(lyxfile); + if (buffer) + lv->view()->buffer(buffer); + } else { + lv->view()->buffer(bufferlist.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 const Importer::GetImportableFormats() +{ + vector loaders = Loaders(); + vector result = + converters.getReachableTo(loaders[0], true); + for (vector::const_iterator it = loaders.begin() + 1; + it != loaders.end(); ++it) { + vector r = + converters.getReachableTo(*it, false); + result.insert(result.end(), r.begin(), r.end()); + } + return result; } -bool Importer::IsImportable(string const & format) +vector const Importer::Loaders() { - if (format == "text" || format == "textparagraph") - return true; - else - return Converter::IsReachable(format, "lyx"); + vector v; + v.push_back("lyx"); + v.push_back("text"); + v.push_back("textparagraph"); + return v; }