* Replace all use of 'slashify_path' with 'internal_path'.

* Specialise 'internal_path' and 'external_path' for Windows and Cygwin.
* Enable LyX to find its system_lyxdir on Windows.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9401 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Angus Leeming 2004-12-20 16:59:33 +00:00
parent f6d14695d4
commit f1e9f57553
16 changed files with 87 additions and 46 deletions

View File

@ -1,3 +1,7 @@
2004-12-19 Angus Leeming <leeming@lyx.org>
* buffer.C (save): s/slashify_path/internal_path/.
2004-12-20 Jürgen Spitzmüller <j.spitzmueller@gmx.de> 2004-12-20 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* lyxfind.C (findChange): do not search for end of pars, because * lyxfind.C (findChange): do not search for end of pars, because

View File

@ -681,7 +681,7 @@ bool Buffer::save() const
s = fileName() + '~'; s = fileName() + '~';
if (!lyxrc.backupdir_path.empty()) if (!lyxrc.backupdir_path.empty())
s = AddName(lyxrc.backupdir_path, s = AddName(lyxrc.backupdir_path,
subst(os::slashify_path(s),'/','!')); subst(os::internal_path(s),'/','!'));
// Rename is the wrong way of making a backup, // Rename is the wrong way of making a backup,
// this is the correct way. // this is the correct way.

View File

@ -1,3 +1,7 @@
2004-12-19 Angus Leeming <leeming@lyx.org>
* lyx_gui.C (start): s/slashify_path/internal_path/
2004-12-19 Georg Baum <Georg.Baum@post.rwth-aachen.de> 2004-12-19 Georg Baum <Georg.Baum@post.rwth-aachen.de>
* ghelpers.C (getDefaultUnit): add return statement to shut up the * ghelpers.C (getDefaultUnit): add return statement to shut up the

View File

@ -345,7 +345,7 @@ void lyx_gui::start(string const & batch, std::vector<string> const & files)
lyxserver = new LyXServer(&view.getLyXFunc(), lyxrc.lyxpipes); lyxserver = new LyXServer(&view.getLyXFunc(), lyxrc.lyxpipes);
lyxsocket = new LyXServerSocket(&view.getLyXFunc(), lyxsocket = new LyXServerSocket(&view.getLyXFunc(),
os::slashify_path(os::getTmpDir() + "/lyxsocket")); os::internal_path(os::getTmpDir() + "/lyxsocket"));
for_each(files.begin(), files.end(), for_each(files.begin(), files.end(),
bind(&BufferView::loadLyXFile, view.view(), _1, true)); bind(&BufferView::loadLyXFile, view.view(), _1, true));

View File

@ -1,3 +1,7 @@
2004-12-19 Angus Leeming <leeming@lyx.org>
* lyx_gui.C (start): s/slashify_path/internal_path/
2004-12-16 Angus Leeming <leeming@lyx.org> 2004-12-16 Angus Leeming <leeming@lyx.org>
* qt_helpers.C (fromqstr): Don't use std::string(0) to construct * qt_helpers.C (fromqstr): Don't use std::string(0) to construct

View File

@ -229,7 +229,7 @@ void start(string const & batch, vector<string> const & files)
lyxserver = new LyXServer(&view.getLyXFunc(), lyxrc.lyxpipes); lyxserver = new LyXServer(&view.getLyXFunc(), lyxrc.lyxpipes);
lyxsocket = new LyXServerSocket(&view.getLyXFunc(), lyxsocket = new LyXServerSocket(&view.getLyXFunc(),
os::slashify_path(os::getTmpDir() + "/lyxsocket")); os::internal_path(os::getTmpDir() + "/lyxsocket"));
for_each(files.begin(), files.end(), for_each(files.begin(), files.end(),
bind(&BufferView::loadLyXFile, view.view(), _1, true)); bind(&BufferView::loadLyXFile, view.view(), _1, true));

View File

@ -1,3 +1,7 @@
2004-12-19 Angus Leeming <leeming@lyx.org>
* lyx_gui.C (start): s/slashify_path/internal_path/
2004-12-16 Jürgen Spitzmüller <j.spitzmueller@gmx.de> 2004-12-16 Jürgen Spitzmüller <j.spitzmueller@gmx.de>
* FormMathsBitmap.C: Do not split strings with blank into two * FormMathsBitmap.C: Do not split strings with blank into two

View File

@ -302,7 +302,7 @@ void start(string const & batch, vector<string> const & files)
lyxserver = new LyXServer(&view->getLyXFunc(), lyxrc.lyxpipes); lyxserver = new LyXServer(&view->getLyXFunc(), lyxrc.lyxpipes);
lyxsocket = new LyXServerSocket(&view->getLyXFunc(), lyxsocket = new LyXServerSocket(&view->getLyXFunc(),
os::slashify_path(os::getTmpDir() + "/lyxsocket")); os::internal_path(os::getTmpDir() + "/lyxsocket"));
for_each(files.begin(), files.end(), for_each(files.begin(), files.end(),
bind(&BufferView::loadLyXFile, view->view(), _1, true)); bind(&BufferView::loadLyXFile, view->view(), _1, true));

View File

@ -1,3 +1,23 @@
2004-12-19 Angus Leeming <leeming@lyx.org>
* path_defines.C.in (setLyxPaths): on a Windows build,
remove the ".exe" extension from the name of the LyX binary when
trying to ascertain the name of the LyX system directory.
(Usually, <path to binary>/../share/<name of binary>/).
* os.h, os_os2.C, os_unix.C, os_win32.C (slashify_path): remove.
* os_win32.C (init): ensure that the name of the lyx executable is
stored internally with a unix-style path.
* os_win32.C (internal_path, external_path): differentiate between
cygwin and windows builds.
* filetools.C (FileOpenSearch, GetEnvPath, createDirectory,
MakeAbsPath, AddName, MakeRelPath, ChangeExtension):
* filename.C (mangledFilename):
s/slashify_path/internal_path/.
2004-12-16 Angus Leeming <leeming@lyx.org> 2004-12-16 Angus Leeming <leeming@lyx.org>
* filename.C (mangledFilename): Given a Windows-style path, don't * filename.C (mangledFilename): Given a Windows-style path, don't

View File

@ -77,7 +77,7 @@ string const FileName::mangledFilename() const
return (*it).second; return (*it).second;
// Now the real work // Now the real work
string mname = os::slashify_path(name_); string mname = os::internal_path(name_);
// Remove the extension. // Remove the extension.
mname = ChangeExtension(name_, string()); mname = ChangeExtension(name_, string());
// Replace '/' in the file name with '_' // Replace '/' in the file name with '_'

View File

@ -185,7 +185,7 @@ string const FileOpenSearch(string const & path, string const & name,
string tmppath = split(path, path_element, ';'); string tmppath = split(path, path_element, ';');
while (notfound && !path_element.empty()) { while (notfound && !path_element.empty()) {
path_element = os::slashify_path(path_element); path_element = os::internal_path(path_element);
if (!suffixIs(path_element, '/')) if (!suffixIs(path_element, '/'))
path_element+= '/'; path_element+= '/';
path_element = subst(path_element, "$$LyX", system_lyxdir()); path_element = subst(path_element, "$$LyX", system_lyxdir());
@ -394,7 +394,7 @@ string const GetEnvPath(string const & name)
#ifndef __EMX__ #ifndef __EMX__
string const pathlist = subst(GetEnv(name), ':', ';'); string const pathlist = subst(GetEnv(name), ':', ';');
#else #else
string const pathlist = os::slashify_path(GetEnv(name)); string const pathlist = os::internal_path(GetEnv(name));
#endif #endif
return rtrim(pathlist, ";"); return rtrim(pathlist, ";");
} }
@ -538,7 +538,7 @@ string const createLyXTmpDir(string const & deflt)
bool createDirectory(string const & path, int permission) bool createDirectory(string const & path, int permission)
{ {
string temp(rtrim(os::slashify_path(path), "/")); string temp(rtrim(os::internal_path(path), "/"));
BOOST_ASSERT(!temp.empty()); BOOST_ASSERT(!temp.empty());
@ -573,7 +573,7 @@ string const MakeAbsPath(string const & RelPath, string const & BasePath)
return RelPath; return RelPath;
// Copies given paths // Copies given paths
string TempRel(os::slashify_path(RelPath)); string TempRel(os::internal_path(RelPath));
// Since TempRel is NOT absolute, we can safely replace "//" with "/" // Since TempRel is NOT absolute, we can safely replace "//" with "/"
TempRel = subst(TempRel, "//", "/"); TempRel = subst(TempRel, "//", "/");
@ -624,7 +624,7 @@ string const MakeAbsPath(string const & RelPath, string const & BasePath)
} }
// returns absolute path // returns absolute path
return os::slashify_path(TempBase); return os::internal_path(TempBase);
} }
@ -639,7 +639,7 @@ string const AddName(string const & path, string const & fname)
string buf; string buf;
if (path != "." && path != "./" && !path.empty()) { if (path != "." && path != "./" && !path.empty()) {
buf = os::slashify_path(path); buf = os::internal_path(path);
if (!suffixIs(path, '/')) if (!suffixIs(path, '/'))
buf += '/'; buf += '/';
} }
@ -840,10 +840,10 @@ string const MakeRelPath(string const & abspath, string const & basepath)
string const AddPath(string const & path, string const & path_2) string const AddPath(string const & path, string const & path_2)
{ {
string buf; string buf;
string const path2 = os::slashify_path(path_2); string const path2 = os::internal_path(path_2);
if (!path.empty() && path != "." && path != "./") { if (!path.empty() && path != "." && path != "./") {
buf = os::slashify_path(path); buf = os::internal_path(path);
if (path[path.length() - 1] != '/') if (path[path.length() - 1] != '/')
buf += '/'; buf += '/';
} }
@ -877,7 +877,7 @@ string const ChangeExtension(string const & oldname, string const & extension)
else else
ext = extension; ext = extension;
return os::slashify_path(oldname.substr(0, last_dot) + ext); return os::internal_path(oldname.substr(0, last_dot) + ext);
} }

View File

@ -47,8 +47,6 @@ std::string current_root();
shell_type shell(); shell_type shell();
// DBCS aware! // DBCS aware!
std::string::size_type common_path(std::string const & p1, std::string const & p2); std::string::size_type common_path(std::string const & p1, std::string const & p2);
// no-op on UNIX, '\\'->'/' on OS/2 and Win32, ':'->'/' on MacOS, etc.
std::string slashify_path(std::string const & p);
// Converts a unix style path to host OS style. // Converts a unix style path to host OS style.
std::string external_path(std::string const & p); std::string external_path(std::string const & p);
// Converts a host OS style path to unix style. // Converts a host OS style path to unix style.

View File

@ -56,7 +56,7 @@ void init(int argc, char * argv[])
if (rc != NO_ERROR) if (rc != NO_ERROR)
exit(rc); exit(rc);
string p = tmp.get(); string p = tmp.get();
p = slashify_path(p); p = internal_path(p);
binname_ = OnlyFilename(p); binname_ = OnlyFilename(p);
binname_.erase(binname_.length()-4, string::npos); binname_.erase(binname_.length()-4, string::npos);
binpath_ = OnlyPath(p); binpath_ = OnlyPath(p);
@ -128,8 +128,8 @@ string::size_type common_path(string const & p1, string const & p2)
COUNTRYCODE cntry; COUNTRYCODE cntry;
cntry.country = 0; cntry.country = 0;
cntry.codepage = cp_; cntry.codepage = cp_;
string temp1 = slashify_path(p1); string temp1 = internal_path(p1);
string temp2 = slashify_path(p2); string temp2 = internal_path(p2);
char * tmp1 = const_cast<char *> (temp1.c_str()); char * tmp1 = const_cast<char *> (temp1.c_str());
char * tmp2 = const_cast<char *> (temp2.c_str()); char * tmp2 = const_cast<char *> (temp2.c_str());
/* rc = */ DosMapCase(p1.length(), &cntry, tmp1); /* rc = */ DosMapCase(p1.length(), &cntry, tmp1);
@ -157,7 +157,7 @@ string::size_type common_path(string const & p1, string const & p2)
} }
string slashify_path(string const & p) string internal_path(string const & p)
{ {
static bool initialized = false; static bool initialized = false;
static bool leadbyte[256] = {false}; static bool leadbyte[256] = {false};
@ -202,12 +202,6 @@ string external_path(string const & p)
} }
string internal_path(string const & p)
{
return p;
}
bool is_absolute_path(string const & p) bool is_absolute_path(string const & p)
{ {
return (p.length() > 1 return (p.length() > 1

View File

@ -96,12 +96,6 @@ string::size_type common_path(string const & p1, string const & p2)
} }
string slashify_path(string const & p)
{
return p;
}
string external_path(string const & p) string external_path(string const & p)
{ {
return p; return p;

View File

@ -49,7 +49,7 @@ void init(int /* argc */, char * argv[])
return; return;
initialized = true; initialized = true;
string tmp = argv[0]; string tmp = internal_path(argv[0]);
binname_ = OnlyFilename(tmp); binname_ = OnlyFilename(tmp);
tmp = ExpandPath(tmp); // This expands ./ and ~/ tmp = ExpandPath(tmp); // This expands ./ and ~/
@ -57,7 +57,7 @@ void init(int /* argc */, char * argv[])
string binsearchpath = GetEnvPath("PATH"); string binsearchpath = GetEnvPath("PATH");
// This will make "src/lyx" work always :-) // This will make "src/lyx" work always :-)
binsearchpath += ";."; binsearchpath += ";.";
tmp = argv[0]; tmp = internal_path(argv[0]);
tmp = FileOpenSearch(binsearchpath, tmp); tmp = FileOpenSearch(binsearchpath, tmp);
} }
@ -113,20 +113,25 @@ string::size_type common_path(string const & p1, string const & p2)
} }
string slashify_path(string const & p)
{
return subst(p, '\\', '/');
}
string external_path(string const & p) string external_path(string const & p)
{ {
string dos_path = p; string dos_path;
#ifdef __CYGWIN__
// Translate from cygwin path syntax to dos path syntax
if (is_absolute_path(p)) { if (is_absolute_path(p)) {
char dp[255]; char dp[MAX_PATH];
cygwin_conv_to_full_win32_path(p.c_str(), dp); cygwin_conv_to_full_win32_path(p.c_str(), dp);
dos_path = subst(dp,'\\','/'); dos_path = !dp ? "" : dp;
} }
else return p;
#else // regular Win32
dos_path = p;
#endif
//No backslashes in LaTeX files
dos_path = subst(dos_path,'\\','/');
lyxerr[Debug::LATEX] lyxerr[Debug::LATEX]
<< "<Win32 path correction> [" << "<Win32 path correction> ["
<< p << "]->>[" << p << "]->>["
@ -141,9 +146,13 @@ string external_path(string const & p)
// the Win32/DOS pathnames into Cygwin pathnames. // the Win32/DOS pathnames into Cygwin pathnames.
string internal_path(string const & p) string internal_path(string const & p)
{ {
char pp[256]; #ifdef __CYGWIN__
char pp[MAX_PATH];
cygwin_conv_to_posix_path(p.c_str(), pp); cygwin_conv_to_posix_path(p.c_str(), pp);
string const posix_path = MakeLatexName(pp); string const posix_path = MakeLatexName(pp);
#else
string const posix_path = subst(p,"\\","/");
#endif
lyxerr[Debug::DEPEND] lyxerr[Debug::DEPEND]
<< "<Win32 path correction> [" << "<Win32 path correction> ["
<< p << "]->>[" << p << "]->>["

View File

@ -217,8 +217,18 @@ bool setLyxPaths()
bool followlink; bool followlink;
do { do {
// Path of binary/../share/name of binary/ // Path of binary/../share/name of binary/
searchpath += NormalizePath(AddPath(binpath, "../share/") + string const exe_name = OnlyFilename(binname);
OnlyFilename(binname)) + ';'; #ifdef _WIN32
string const lyx_system_dir_name =
suffixIs(exe_name, ".exe") ?
ChangeExtension(exe_name, "") :
exe_name;
#else
string const lyx_system_dir_name = exe_name;
#endif
string const shared_dir_name =
NormalizePath(AddPath(binpath, "../share/"));
searchpath += shared_dir_name + lyx_system_dir_name + ';';
// Follow Symlinks // Follow Symlinks
FileInfo file(fullbinpath, true); FileInfo file(fullbinpath, true);