Browse Source

fixing relative path bug

dmuratshin 9 years ago
parent
commit
bdbd14250f
2 changed files with 28 additions and 7 deletions
  1. 20 5
      oxygine/src/res/CreateResourceContext.cpp
  2. 8 2
      tools/resbuild/xml_processor.py

+ 20 - 5
oxygine/src/res/CreateResourceContext.cpp

@@ -66,13 +66,28 @@ namespace oxygine
         //_alphaTracking = true;
         //_alphaTracking = true;
     }
     }
 
 
+    const char * isRelative(const char *str)
+    {
+        const char *str_ = str;
+        if (*str == '.')
+        {
+            ++str;
+            if (!*str || *str == '\\' || *str == '/')
+                return str;
+        }
+
+        return 0;
+    }
+
     std::string XmlWalker::connectPath(const char* currentPath, const char* str)
     std::string XmlWalker::connectPath(const char* currentPath, const char* str)
     {
     {
         std::string s;
         std::string s;
-        if (str[0] == '.' && (str[1] == '/' || str[1] == '\\'))
+
+        const char *rl = isRelative(str);
+        if (rl)
         {
         {
             s = currentPath;
             s = currentPath;
-            s += str + 2;
+            s += rl;
             return s;
             return s;
         }
         }
         return str;
         return str;
@@ -82,10 +97,10 @@ namespace oxygine
     std::string XmlWalker::getPath(const char* attrName) const
     std::string XmlWalker::getPath(const char* attrName) const
     {
     {
         const char* str = _root.attribute(attrName).as_string();
         const char* str = _root.attribute(attrName).as_string();
-        if (str[0] == '.' && (str[1] == '/' || str[1] == '\\'))
+        const char *rl = isRelative(str);
+        if (rl)
         {
         {
-            str += 2;
-            return *_xmlFolder + str;
+            return *_xmlFolder + rl;
         }
         }
 
 
         return _path + str;
         return _path + str;

+ 8 - 2
tools/resbuild/xml_processor.py

@@ -43,24 +43,30 @@ class XmlWalker:
 
 
     def getPath(self, attr):
     def getPath(self, attr):
         path = self.root.getAttribute(attr)
         path = self.root.getAttribute(attr)
+
         if path.startswith("./") or path.startswith(".\\"):
         if path.startswith("./") or path.startswith(".\\"):
             return self.xml_folder + path[2:len(path)]
             return self.xml_folder + path[2:len(path)]
 
 
+        if path == ".":
+            return self.xml_folder
+
         return self.path + path
         return self.path + path
 
 
     def setSrcFullPath(self, path):
     def setSrcFullPath(self, path):
         return self.src + path
         return self.src + path
 
 
+
     def checkSetAttributes(self):
     def checkSetAttributes(self):
         self._checkSetAttributes(self.root)
         self._checkSetAttributes(self.root)
 
 
     def _checkSetAttributes(self, node):
     def _checkSetAttributes(self, node):
         path = node.getAttribute("path")
         path = node.getAttribute("path")
         if path:
         if path:
-            if 0:
-                path = ""
             if path.startswith("./") or path.startswith(".\\"):
             if path.startswith("./") or path.startswith(".\\"):
                 path = self.xml_folder + path[2:len(path)]
                 path = self.xml_folder + path[2:len(path)]
+            elif path == ".":
+                path = self.xml_folder
+
             self.path = path + "/"
             self.path = path + "/"
 
 
         scale_factor = node.getAttribute("scale_factor")
         scale_factor = node.getAttribute("scale_factor")