X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fimporter.C;h=8b7193954714b8cdf0e17414fcc8646f8be44466;hb=ab254289c832cd045c56e6012d14b048618cb833;hp=73a503f9c6f50cd126e541bddeb1f72d14da3555;hpb=8aff605caefaba655e48bc629ed344bb74bcd61a;p=lyx.git diff --git a/src/importer.C b/src/importer.C index 73a503f9c6..8b71939547 100644 --- a/src/importer.C +++ b/src/importer.C @@ -4,7 +4,7 @@ * LyX, The Document Processor * * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. + * Copyright 1995-2001 The LyX Team. * * ====================================================== */ @@ -14,56 +14,112 @@ #pragma implementation #endif +#include + #include "importer.h" #include "converter.h" #include "LyXView.h" #include "lyxfunc.h" -#include "minibuffer.h" + #include "bufferlist.h" #include "support/filetools.h" +#include "lyx_gui_misc.h" //WriteAlert +#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(s1.str().c_str()); - string lyxfile = ChangeExtension(filename, ".lyx"); + string const lyxfile = ChangeExtension(filename, ".lyx"); + + 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()) { + WriteAlert(_("Can not import file"), + _("No information for importing from ") + + formats.PrettyName(format)); + return false; + } + } else + loader_format = format; - bool result = true; - if (format == "text" || format == "textparagraph") { + + 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 = format == "textparagraph"; - InsertAsciiFile(lv->view(), filename, as_paragraphs); + bool as_paragraphs = loader_format == "textparagraph"; + string filename2 = (loader_format == format) ? filename + : ChangeExtension(filename, + formats.Extension(loader_format)); + InsertAsciiFile(lv->view(), filename2, 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; - } } // we are done - if (result) - lv->getMiniBuffer()->Set(displaypath, _("imported.")); - else - lv->getMiniBuffer()->Set(displaypath, _(": import failed.")); - + lv->message(_("imported.")); + return true; } +#if 0 bool Importer::IsImportable(string const & format) { - if (format == "text" || format == "textparagraph") - return true; - else - return Converter::IsReachable(format, "lyx"); + vector loaders = Loaders(); + for (vector::const_iterator it = loaders.begin(); + it != loaders.end(); ++it) + if (converters.IsReachable(format, *it)) + return true; + return false; +} +#endif + + +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; +} + + +vector const Importer::Loaders() +{ + vector v; + v.push_back("lyx"); + v.push_back("text"); + v.push_back("textparagraph"); + return v; }