: name_(abs_filename)
{
BOOST_ASSERT(empty() || absolutePath(name_));
+#if defined(_WIN32)
BOOST_ASSERT(!contains(name_, '\\'));
+#endif
}
{
name_ = name;
BOOST_ASSERT(absolutePath(name_));
+#if defined(_WIN32)
BOOST_ASSERT(!contains(name_, '\\'));
+#endif
}
string const DocFileName::relFilename(string const & path) const
{
- return makeRelPath(name_, path);
+ // FIXME UNICODE
+ return to_utf8(makeRelPath(from_utf8(name_), from_utf8(path)));
}
string const DocFileName::outputFilename(string const & path) const
{
- return save_abs_path_ ? name_ : makeRelPath(name_, path);
+ // FIXME UNICODE
+ return save_abs_path_ ? name_ : to_utf8(makeRelPath(from_utf8(name_), from_utf8(path)));
}
string mname = os::internal_path(name_);
// Remove the extension.
mname = changeExtension(name_, string());
- // Replace '/' in the file name with '_'
- mname = subst(mname, "/", "_");
- // Replace '.' in the file name with '_'
- mname = subst(mname, ".", "_");
- // Replace ' ' in the file name with '_'
- mname = subst(mname, " ", "_");
- // Replace ':' in the file name with '_'
- mname = subst(mname, ":", "_");
+ // The mangled name must be a valid LaTeX name.
+ // The list of characters to keep is probably over-restrictive,
+ // but it is not really a problem.
+ // Apart from non-ASCII characters, at least the following characters
+ // are forbidden: '/', '.', ' ', and ':'.
+ // On windows it is not possible to create files with '<', '>' or '?'
+ // in the name.
+ static string const keep = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "+,-0123456789;=";
+ string::size_type pos = 0;
+ while ((pos = mname.find_first_not_of(keep, pos)) != string::npos)
+ mname[pos++] = '_';
// Add the extension back on
mname = changeExtension(mname, getExtension(name_));