string normalize_name(Buffer const & buffer, OutputParams const & runparams,
string const & name, string const & ext)
{
- string const fname = makeAbsPath(name, buffer.filePath());
+ string const fname = makeAbsPath(name, buffer.filePath()).absFilename();
if (absolutePath(name) || !isFileReadable(FileName(fname + ext)))
return name;
else if (!runparams.nice)
string utf8input(to_utf8(input));
string database =
normalize_name(buffer, runparams, utf8input, ".bib");
- string const try_in_file = makeAbsPath(database + ".bib", buffer.filePath());
- bool const not_from_texmf = isFileReadable(FileName(try_in_file));
+ FileName const try_in_file(makeAbsPath(database + ".bib", buffer.filePath()));
+ bool const not_from_texmf = isFileReadable(try_in_file);
if (!runparams.inComment && !runparams.dryrun && !runparams.nice &&
not_from_texmf) {
// mangledFilename() needs the extension
DocFileName const in_file = DocFileName(try_in_file);
database = removeExtension(in_file.mangledFilename());
- FileName const out_file = FileName(makeAbsPath(database + ".bib",
+ FileName const out_file(makeAbsPath(database + ".bib",
buffer.getMasterBuffer()->temppath()));
bool const success = copy(in_file, out_file);
if (!style.empty()) {
string base =
normalize_name(buffer, runparams, style, ".bst");
- string const try_in_file = makeAbsPath(base + ".bst", buffer.filePath());
- bool const not_from_texmf = isFileReadable(FileName(try_in_file));
+ FileName const try_in_file(makeAbsPath(base + ".bst", buffer.filePath()));
+ bool const not_from_texmf = isFileReadable(try_in_file);
// If this style does not come from texmf and we are not
// exporting to .tex copy it to the tmp directory.
// This prevents problems with spaces and 8bit charcaters
// use new style name
DocFileName const in_file = DocFileName(try_in_file);
base = removeExtension(in_file.mangledFilename());
- FileName const out_file = FileName(makeAbsPath(base + ".bst",
+ FileName const out_file(makeAbsPath(base + ".bst",
buffer.getMasterBuffer()->temppath()));
bool const success = copy(in_file, out_file);
if (!success) {
// This method returns a comma separated list of Bibtex entries
void InsetBibtex::fillWithBibKeys(Buffer const & buffer,
- std::vector<std::pair<string, string> > & keys) const
+ std::vector<std::pair<string, docstring> > & keys) const
{
vector<FileName> const files = getFiles(buffer);
for (vector<FileName>::const_iterator it = files.begin();
// you can use the encoding of the main document as long as
// some elements like keys and names are pure ASCII. Therefore
// we convert the file from the buffer encoding.
+ // We don't restrict keys to ASCII in LyX, since our own
+ // InsetBibitem can generate non-ASCII keys, and nonstandard
+ // 8bit clean bibtex forks exist.
idocfstream ifs(it->toFilesystemEncoding().c_str(),
std::ios_base::in,
buffer.params().encoding().iconvName());
docstring linebuf0;
while (getline(ifs, linebuf0)) {
docstring linebuf = trim(linebuf0);
- if (linebuf.empty()) continue;
- if (prefixIs(linebuf, from_ascii("@"))) {
+ if (linebuf.empty())
+ continue;
+ if (prefixIs(linebuf, '@')) {
linebuf = subst(linebuf, '{', '(');
docstring tmp;
linebuf = split(linebuf, tmp, '(');
linebuf = split(linebuf, tmp, ',');
tmp = ltrim(tmp, " \t");
if (!tmp.empty()) {
- // to_ascii because bibtex keys may
- // only consist of ASCII characters
- keys.push_back(pair<string, string>(to_ascii(tmp), string()));
+ // FIXME UNICODE
+ keys.push_back(pair<string, docstring>(
+ to_utf8(tmp), docstring()));
}
}
- } else if (!keys.empty()) {
- // FIXME UNICODE
- keys.back().second += to_utf8(linebuf + '\n');
- }
+ } else if (!keys.empty())
+ keys.back().second += linebuf + '\n';
}
}
}