]> git.lyx.org Git - lyx.git/blobdiff - src/support/os_unix.C
hopefully fix tex2lyx linking.
[lyx.git] / src / support / os_unix.C
index 26778e85df79af5971816055c481c41ead7132dd..fb266089fc9bb87a0688127842e14ca14a2d41eb 100644 (file)
-// os_unix.C
+/**
+ * \file os_unix.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Ruurd A. Reitsma
+ *
+ * Full author contact details are available in file CREDITS.
+ *
+ * Various OS specific functions
+ */
 
-// Various OS specific functions
 #include <config.h>
 
-#include "os.h"
-#include "support/filetools.h"
-#include "support/lstrings.h"
-
-string os::binpath_ = string();
-string os::binname_ = string();
-string os::tmpdir_ = string();
-os::shell_type os::_shell = os::UNIX;
-unsigned long os::cp_ = 0;
-
-void os::init(int * /*argc*/, char ** argv[]) /* :cp_(0), _shell(os::UNIX) */ {
-       static bool initialized = false;
-
-       if (initialized)
-               return;
-
-       initialized = true;
-       string tmp = *argv[0];
-       binname_ = OnlyFilename(tmp);
-       tmp = ExpandPath(tmp); // This expands ./ and ~/
-       if (!os::is_absolute_path(tmp)) {
-               string binsearchpath = GetEnvPath("PATH");
-               // This will make "src/lyx" work always :-)
-               binsearchpath += ";.";
-               tmp = FileOpenSearch(binsearchpath, tmp);
-       }
+#include "support/os.h"
 
-       tmp = MakeAbsPath(OnlyPath(tmp));
+#ifdef __APPLE__
+#include <Carbon/Carbon.h>
+#endif
 
-       // In case we are running in place and compiled with shared libraries
-       if (suffixIs(tmp, "/.libs/"))
-               tmp.erase(tmp.length() - 6, string::npos);
-       binpath_ = tmp;
-}
+using std::string;
+
+
+namespace lyx {
+namespace support {
+namespace os {
+
+void init(int, char *[])
+{}
 
-void os::warn(string /*mesg*/) {
-       return;
-}
 
-string os::current_root() {
-       return string("/");
+string current_root()
+{
+       return "/";
 }
 
-string::size_type os::common_path(string const &p1, string const &p2) {
-       string::size_type i = 0,
-                       p1_len = p1.length(),
-                       p2_len = p2.length();
-       while (i < p1_len && i < p2_len && p1[i] == p2[i]) ++i;
+
+string::size_type common_path(string const & p1, string const & p2)
+{
+       string::size_type i = 0;
+       string::size_type p1_len = p1.length();
+       string::size_type p2_len = p2.length();
+       while (i < p1_len && i < p2_len && p1[i] == p2[i])
+               ++i;
        if ((i < p1_len && i < p2_len)
            || (i < p1_len && p1[i] != '/' && i == p2_len)
-           || (i < p2_len && p2[i] != '/' && i == p1_len)) {
-               if (i) --i;     // here was the last match
-               while (i && p1[i] != '/') --i;
+           || (i < p2_len && p2[i] != '/' && i == p1_len))
+       {
+               if (i)
+                       --i;     // here was the last match
+               while (i && p1[i] != '/')
+                       --i;
        }
        return i;
 }
 
-string os::slashify_path(string p) {
+
+string external_path(string const & p)
+{
        return p;
 }
 
-string os::external_path(string const &p) {
+
+string internal_path(string const & p)
+{
        return p;
 }
 
-string os::internal_path(string const &p) {
+
+string external_path_list(string const & p)
+{
        return p;
 }
 
-bool os::is_absolute_path(string const & p)
+
+string internal_path_list(string const & p)
 {
-       return (!p.empty() && p[0] == '/');
+       return p;
 }
 
-// returns a string suitable to be passed to fopen when
-// reading a file
-char const * os::read_mode()
+
+string latex_path(string const & p)
 {
-       return "r";
+       return p;
 }
 
-// returns a string suitable to be passed to popen when
-// reading a pipe
-char const * os::popen_read_mode()
+
+bool is_absolute_path(string const & p)
+{
+       return !p.empty() && p[0] == '/';
+}
+
+
+char const * popen_read_mode()
 {
        return "r";
 }
+
+
+string const & nulldev()
+{
+       static string const nulldev_ = "/dev/null";
+       return nulldev_;
+}
+
+
+shell_type shell()
+{
+       return UNIX;
+}
+
+
+char path_separator()
+{
+       return ':';
+}
+
+
+void windows_style_tex_paths(bool)
+{}
+
+bool canAutoOpenFile(string const & ext, auto_open_mode const mode)
+{
+#ifdef __APPLE__
+// Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/
+       CFStringRef cfs_ext = CFStringCreateWithBytes(kCFAllocatorDefault,
+                                       (UInt8 *) ext.c_str(), ext.length(),
+                                       kCFStringEncodingISOLatin1, false);
+       LSRolesMask role = (mode == VIEW) ? kLSRolesViewer :  kLSRolesEditor;
+       FSRef outAppRef;
+       OSStatus status = 
+               LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator,
+                                       cfs_ext, role, &outAppRef, NULL);
+       CFRelease(cfs_ext);
+
+       return status != kLSApplicationNotFoundErr;
+#else
+       // silence compiler warnings
+       (void)ext;
+       (void)mode;
+
+       // currently, no default viewer is tried for non-windows system
+       // support for KDE/Gnome/Macintosh may be added later
+       return false;
+#endif
+}
+
+
+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;
+        
+       LSRolesMask role = (mode == VIEW) ? kLSRolesViewer :  kLSRolesEditor;
+       FSRef outAppRef;
+
+       status = LSGetApplicationForItem(&fileref, role, &outAppRef, NULL);
+       if (status == kLSApplicationNotFoundErr)
+               return false;
+
+       LSLaunchFSRefSpec inLaunchSpec;
+       inLaunchSpec.appRef = &outAppRef;
+       inLaunchSpec.numDocs = 1;
+       inLaunchSpec.itemRefs = &fileref;
+       inLaunchSpec.passThruParams = NULL;
+       inLaunchSpec.launchFlags = kLSLaunchDefaults;
+       inLaunchSpec.asyncRefCon = NULL;
+       status = LSOpenFromRefSpec(&inLaunchSpec, NULL);
+
+       return status != kLSApplicationNotFoundErr;     
+#else
+       // silence compiler warnings
+       (void)filename;
+       (void)mode;
+
+       // currently, no default viewer is tried for non-windows system
+       // support for KDE/Gnome/Macintosh may be added later
+       return false;
+#endif
+}
+
+} // namespace os
+} // namespace support
+} // namespace lyx