mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 05:25:26 +00:00
Handle multiple files in file and localfile BibTeX field (#12896)
This commit is contained in:
parent
4dd91308d1
commit
117e259f0a
@ -688,30 +688,46 @@ void BibTeXInfo::getLocators(docstring & doi, docstring & url, docstring & file)
|
||||
|
||||
// Jabref case, field has a format:
|
||||
// Description:Location:Filetype;Description:Location:Filetype...
|
||||
// We will grab only first pdf
|
||||
// We will strip out the locations and return an \n-separated list
|
||||
if (!file.empty()) {
|
||||
docstring ret, filedest, tmp;
|
||||
ret = split(file, tmp, ':');
|
||||
tmp = split(ret, filedest, ':');
|
||||
//TODO howto deal with relative directories?
|
||||
FileName f(to_utf8(filedest));
|
||||
if (f.exists())
|
||||
file = "file:///" + filedest;
|
||||
docstring filelist;
|
||||
vector<docstring> files = getVectorFromString(file, from_ascii(";"));
|
||||
for (auto const & f : files) {
|
||||
docstring ret, filedest, tmp;
|
||||
ret = split(f, tmp, ':');
|
||||
tmp = split(ret, filedest, ':');
|
||||
// TODO howto deal with relative directories?
|
||||
FileName fn(to_utf8(filedest));
|
||||
if (fn.exists()) {
|
||||
if (!filelist.empty())
|
||||
filelist += '\n';
|
||||
filelist += "file:///" + filedest;
|
||||
}
|
||||
}
|
||||
if (!filelist.empty())
|
||||
file = filelist;
|
||||
}
|
||||
|
||||
// kbibtex case, format:
|
||||
// file1.pdf;file2.pdf
|
||||
// We will grab only first pdf
|
||||
// We will strip out the locations and return an \n-separated list
|
||||
docstring kfile;
|
||||
if (file.empty())
|
||||
kfile = operator[]("localfile");
|
||||
if (!kfile.empty()) {
|
||||
docstring filedest, tmp;
|
||||
tmp = split(kfile, filedest, ';');
|
||||
//TODO howto deal with relative directories?
|
||||
FileName f(to_utf8(filedest));
|
||||
if (f.exists())
|
||||
file = "file:///" + filedest;
|
||||
docstring filelist;
|
||||
vector<docstring> files = getVectorFromString(kfile, from_ascii(";"));
|
||||
for (auto const & f : files) {
|
||||
// TODO howto deal with relative directories?
|
||||
FileName fn(to_utf8(f));
|
||||
if (fn.exists()) {
|
||||
if (!filelist.empty())
|
||||
filelist += '\n';
|
||||
filelist = "file:///" + f;
|
||||
}
|
||||
}
|
||||
if (!filelist.empty())
|
||||
file = filelist;
|
||||
}
|
||||
|
||||
if (!url.empty())
|
||||
|
@ -299,10 +299,11 @@ void showDirectory(FileName const & directory)
|
||||
|
||||
void showTarget(string const & target_in, Buffer const & buf)
|
||||
{
|
||||
LYXERR(Debug::INSETS, "Showtarget:" << target_in << "\n");
|
||||
LYXERR(Debug::INSETS, "Showtarget: " << target_in << "\n");
|
||||
|
||||
string target = target_in;
|
||||
string const & docpath = buf.absFileName();
|
||||
vector<string> targets;
|
||||
|
||||
bool const is_external = prefixIs(target, "EXTERNAL ");
|
||||
if (is_external) {
|
||||
@ -320,13 +321,19 @@ void showTarget(string const & target_in, Buffer const & buf)
|
||||
return;
|
||||
}
|
||||
// lyxpaperview returns a \n-separated list of paths
|
||||
vector<string> targets = getVectorFromString(rtrim(ret.result, "\n"), "\n");
|
||||
targets = getVectorFromString(rtrim(ret.result, "\n"), "\n");
|
||||
if (targets.empty()) {
|
||||
frontend::Alert::error(_("Could not open file"),
|
||||
bformat(_("No file was found using the pattern `%1$s'."),
|
||||
from_utf8(tar)));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (prefixIs(target, "file://")) {
|
||||
// file might have a \n-separated list of paths
|
||||
targets = getVectorFromString(target, "\n");
|
||||
}
|
||||
if (!targets.empty()) {
|
||||
if (targets.size() > 1) {
|
||||
QStringList files;
|
||||
for (auto const & t : targets)
|
||||
|
@ -946,6 +946,8 @@ string const getExtension(string const & name)
|
||||
|
||||
docstring const provideScheme(docstring const & name, docstring const & scheme)
|
||||
{
|
||||
if (prefixIs(name, scheme + "://"))
|
||||
return name;
|
||||
QUrl url(toqstr(name));
|
||||
if (!url.scheme().isEmpty())
|
||||
// Has a scheme. Return as is.
|
||||
|
Loading…
Reference in New Issue
Block a user