mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-07 12:32:26 +00:00
On Windows, allow loading documents with non-ascii chars in their path
also from command line and from explorer windows. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33561 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
056a614830
commit
3fce202517
10
src/LyX.cpp
10
src/LyX.cpp
@ -273,7 +273,7 @@ int LyX::exec(int & argc, char * argv[])
|
||||
easyParse(argc, argv);
|
||||
|
||||
try {
|
||||
init_package(to_utf8(from_local8bit(argv[0])),
|
||||
init_package(os::utf8_argv(0),
|
||||
cl_system_support, cl_user_support,
|
||||
top_build_dir_is_one_level_up);
|
||||
} catch (ExceptionMessage const & message) {
|
||||
@ -431,7 +431,7 @@ int LyX::init(int & argc, char * argv[])
|
||||
if (argv[argi][0] == '-') {
|
||||
lyxerr << to_utf8(
|
||||
bformat(_("Wrong command line option `%1$s'. Exiting."),
|
||||
from_utf8(argv[argi]))) << endl;
|
||||
from_utf8(os::utf8_argv(argi)))) << endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
@ -445,7 +445,7 @@ int LyX::init(int & argc, char * argv[])
|
||||
|
||||
// Remaining arguments are assumed to be files to load.
|
||||
for (int argi = argc - 1; argi >= 1; --argi)
|
||||
pimpl_->files_to_load_.push_back(to_utf8(from_local8bit(argv[argi])));
|
||||
pimpl_->files_to_load_.push_back(os::utf8_argv(argi));
|
||||
|
||||
if (first_start) {
|
||||
pimpl_->files_to_load_.push_back(
|
||||
@ -1121,9 +1121,9 @@ void LyX::easyParse(int & argc, char * argv[])
|
||||
continue;
|
||||
|
||||
string const arg =
|
||||
(i + 1 < argc) ? to_utf8(from_local8bit(argv[i + 1])) : string();
|
||||
(i + 1 < argc) ? os::utf8_argv(i + 1) : string();
|
||||
string const arg2 =
|
||||
(i + 2 < argc) ? to_utf8(from_local8bit(argv[i + 2])) : string();
|
||||
(i + 2 < argc) ? os::utf8_argv(i + 2) : string();
|
||||
|
||||
string batch;
|
||||
int const remove = 1 + it->second(arg, arg2, batch);
|
||||
|
@ -46,6 +46,9 @@ enum file_access {
|
||||
/// Do some work just once.
|
||||
void init(int argc, char * argv[]);
|
||||
|
||||
/// Returns the i-th program argument in utf8 encoding.
|
||||
std::string utf8_argv(int i);
|
||||
|
||||
/// Returns the name of the NULL device (/dev/null, null).
|
||||
std::string const & nulldev();
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "support/os.h"
|
||||
|
||||
#include "support/FileName.h"
|
||||
#include "support/lassert.h"
|
||||
#include "support/lstrings.h"
|
||||
#include "support/debug.h"
|
||||
|
||||
@ -45,6 +46,9 @@ namespace os {
|
||||
|
||||
namespace {
|
||||
|
||||
int argc_ = 0;
|
||||
char ** argv_ = 0;
|
||||
|
||||
bool windows_style_tex_paths_ = false;
|
||||
|
||||
// In both is_posix_path() and is_windows_path() it is assumed that
|
||||
@ -202,8 +206,11 @@ BOOL terminate_handler(DWORD event)
|
||||
|
||||
} // namespace anon
|
||||
|
||||
void init(int, char *[])
|
||||
void init(int argc, char * argv[])
|
||||
{
|
||||
argc_ = argc;
|
||||
argv_ = argv;
|
||||
|
||||
// Make sure that the TEMP variable is set
|
||||
// and sync the Windows environment.
|
||||
setenv("TEMP", "/tmp", false);
|
||||
@ -214,6 +221,13 @@ void init(int, char *[])
|
||||
}
|
||||
|
||||
|
||||
string utf8_argv(int i)
|
||||
{
|
||||
LASSERT(i < argc_, /**/);
|
||||
return to_utf8(from_local8bit(argv_[i]));
|
||||
}
|
||||
|
||||
|
||||
string current_root()
|
||||
{
|
||||
return string("/");
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "support/docstring.h"
|
||||
#include "support/FileName.h"
|
||||
#include "support/lstrings.h"
|
||||
#include "support/lassert.h"
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
@ -30,8 +31,25 @@ namespace lyx {
|
||||
namespace support {
|
||||
namespace os {
|
||||
|
||||
void init(int, char *[])
|
||||
{}
|
||||
namespace {
|
||||
|
||||
int argc_ = 0;
|
||||
char ** argv_ = 0;
|
||||
|
||||
} // namespace anon
|
||||
|
||||
void init(int argc, char * argv[])
|
||||
{
|
||||
argc_ = argc;
|
||||
argv_ = argv;
|
||||
}
|
||||
|
||||
|
||||
string utf8_argv(int i)
|
||||
{
|
||||
LASSERT(i < argc_, /**/);
|
||||
return to_utf8(from_local8bit(argv_[i]));
|
||||
}
|
||||
|
||||
|
||||
string current_root()
|
||||
|
@ -6,6 +6,7 @@
|
||||
* \author Ruurd A. Reitsma
|
||||
* \author Claus Hentschel
|
||||
* \author Angus Leeming
|
||||
* \author Enrico Forestieri
|
||||
*
|
||||
* Full author contact details are available in file CREDITS.
|
||||
*
|
||||
@ -52,6 +53,11 @@
|
||||
#define ASSOCF_INIT_IGNOREUNKNOWN 0
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
extern void __wgetmainargs(int * argc, wchar_t *** argv, wchar_t *** envp,
|
||||
int expand_wildcards, int * new_mode);
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace lyx {
|
||||
@ -63,6 +69,9 @@ namespace os {
|
||||
|
||||
namespace {
|
||||
|
||||
int argc_ = 0;
|
||||
wchar_t ** argv_ = 0;
|
||||
|
||||
bool windows_style_tex_paths_ = true;
|
||||
|
||||
string cygdrive = "/cygdrive";
|
||||
@ -80,7 +89,7 @@ BOOL terminate_handler(DWORD event)
|
||||
|
||||
} // namespace anon
|
||||
|
||||
void init(int /* argc */, char * argv[])
|
||||
void init(int argc, char * argv[])
|
||||
{
|
||||
/* Note from Angus, 17 Jan 2005:
|
||||
*
|
||||
@ -138,6 +147,13 @@ void init(int /* argc */, char * argv[])
|
||||
* lyx is invoked as a parameter of hidecmd.exe.
|
||||
*/
|
||||
|
||||
|
||||
// Get the wide program arguments array
|
||||
wchar_t ** envp = 0;
|
||||
int newmode = 0;
|
||||
__wgetmainargs(&argc_, &argv_, &envp, -1, &newmode);
|
||||
LASSERT(argc == argc_, /**/);
|
||||
|
||||
// If Cygwin is detected, query the cygdrive prefix.
|
||||
// The cygdrive prefix is needed for translating windows style paths
|
||||
// to posix style paths in LaTeX files when the Cygwin teTeX is used.
|
||||
@ -186,6 +202,13 @@ void init(int /* argc */, char * argv[])
|
||||
}
|
||||
|
||||
|
||||
string utf8_argv(int i)
|
||||
{
|
||||
LASSERT(i < argc_, /**/);
|
||||
return fromqstr(QString::fromWCharArray(argv_[i]));
|
||||
}
|
||||
|
||||
|
||||
string current_root()
|
||||
{
|
||||
// _getdrive returns the current drive (1=A, 2=B, and so on).
|
||||
@ -282,7 +305,7 @@ static QString const get_long_path(QString const & short_path)
|
||||
|
||||
static QString const get_short_path(QString const & long_path, file_access how)
|
||||
{
|
||||
// CreateFileW and GetShortPathNameW needs the path in utf16 encoding.
|
||||
// CreateFileW and GetShortPathNameW need the path in utf16 encoding.
|
||||
if (how == CREATE) {
|
||||
HANDLE h = CreateFileW((wchar_t *) long_path.utf16(),
|
||||
GENERIC_WRITE, 0, NULL, CREATE_NEW,
|
||||
|
Loading…
Reference in New Issue
Block a user