X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fos_unix.cpp;h=34cfd478a61650ce9bcb0beec5a204886bd34dee;hb=e8c1cb5074e36a344553d57537f8177345a86686;hp=03dfb381c22480c03d08fcfaac692bb7154d4007;hpb=82faa6619239c2e57fba9128899bafe29d728e51;p=lyx.git diff --git a/src/support/os_unix.cpp b/src/support/os_unix.cpp index 03dfb381c2..34cfd478a6 100644 --- a/src/support/os_unix.cpp +++ b/src/support/os_unix.cpp @@ -23,10 +23,13 @@ #include "support/lassert.h" #include +#include #include #ifdef __APPLE__ #include +#include +#include #endif using namespace std; @@ -40,15 +43,16 @@ namespace { int argc_ = 0; char ** argv_ = 0; -} // namespace anon +} // namespace -void init(int argc, char * argv[]) +void init(int argc, char ** argv[]) { argc_ = argc; - argv_ = argv; + argv_ = *argv; // Set environment's default locale setlocale(LC_ALL, ""); + setlocale(LC_NUMERIC, "C"); } @@ -189,23 +193,6 @@ string latex_path_list(string const & p) } -bool is_valid_strftime(string const & p) -{ - string::size_type pos = p.find_first_of('%'); - while (pos != string::npos) { - if (pos + 1 == string::npos) - break; - if (!containsOnly(p.substr(pos + 1, 1), - "aAbBcCdDeEFgGhHIjklmMnOpPrRsStTuUVwWxXyYzZ%+")) - return false; - if (pos + 2 == string::npos) - break; - pos = p.find_first_of('%', pos + 2); - } - return true; -} - - char const * popen_read_mode() { return "r"; @@ -270,43 +257,54 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode, { #ifdef __APPLE__ // Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/ - FSRef fileref; - OSStatus status = - FSPathMakeRef((UInt8 *) filename.c_str(), &fileref, NULL); - if (status != 0) - return false; - // this is what we would like to do but it seems that the // viewer for PDF is often quicktime... //LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor; (void)mode; LSRolesMask role = kLSRolesAll; - FSRef outAppRef; - status = LSGetApplicationForItem(&fileref, role, &outAppRef, NULL); + CFURLRef docURL = CFURLCreateFromFileSystemRepresentation( + NULL, (UInt8 *) filename.c_str(), filename.size(), false); + CFURLRef appURL; + OSStatus status = LSGetApplicationForURL(docURL, role, NULL, &appURL); if (status == kLSApplicationNotFoundErr) return false; - string const texinputs = os::latex_path_list( - replaceCurdirPath(path, lyxrc.texinputs_prefix)); - string const oldval = getEnv("TEXINPUTS"); - string const newval = ".:" + texinputs + ":" + oldval; - if (!path.empty() && !lyxrc.texinputs_prefix.empty()) - setEnv("TEXINPUTS", newval); - - LSLaunchFSRefSpec inLaunchSpec; - inLaunchSpec.appRef = &outAppRef; - inLaunchSpec.numDocs = 1; - inLaunchSpec.itemRefs = &fileref; - inLaunchSpec.passThruParams = NULL; - inLaunchSpec.launchFlags = kLSLaunchDefaults; - inLaunchSpec.asyncRefCon = NULL; - status = LSOpenFromRefSpec(&inLaunchSpec, NULL); - - if (!path.empty() && !lyxrc.texinputs_prefix.empty()) - setEnv("TEXINPUTS", oldval); + CFURLRef docURLs[] = { docURL }; + CFArrayRef launchItems = CFArrayCreate( + NULL, + (const void**)docURLs, sizeof(docURLs) / sizeof(CFURLRef), + NULL); + LSLaunchURLSpec launchUrlSpec = { + appURL, launchItems, NULL, kLSLaunchDefaults, NULL + }; - return status != kLSApplicationNotFoundErr; + string const texinputs = os::latex_path_list( + replaceCurdirPath(path, lyxrc.texinputs_prefix)); + string const otherinputs = os::latex_path_list(path); + string const oldtexinputs = getEnv("TEXINPUTS"); + string const newtexinputs = ".:" + texinputs + ":" + oldtexinputs; + string const oldbibinputs = getEnv("BIBINPUTS"); + string const newbibinputs = ".:" + otherinputs + ":" + oldbibinputs; + string const oldbstinputs = getEnv("BSTINPUTS"); + string const newbstinputs = ".:" + otherinputs + ":" + oldbstinputs; + string const oldtexfonts = getEnv("TEXFONTS"); + string const newtexfonts = ".:" + otherinputs + ":" + oldtexfonts; + if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { + setEnv("TEXINPUTS", newtexinputs); + setEnv("BIBINPUTS", newbibinputs); + setEnv("BSTINPUTS", newbstinputs); + setEnv("TEXFONTS", newtexfonts); + } + status = LSOpenFromURLSpec (&launchUrlSpec, NULL); + CFRelease(launchItems); + if (!path.empty() && !lyxrc.texinputs_prefix.empty()) { + setEnv("TEXINPUTS", oldtexinputs); + setEnv("BIBINPUTS", oldbibinputs); + setEnv("BSTINPUTS", oldbstinputs); + setEnv("TEXFONTS", oldtexfonts); + } + return status == 0; #else // silence compiler warnings (void)filename;