]> git.localhorst.tv Git - l2e.git/commitdiff
resolve inclusion path name in Parser
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Sat, 1 Sep 2012 16:28:50 +0000 (18:28 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Sat, 1 Sep 2012 16:28:50 +0000 (18:28 +0200)
Debug/src/loader/subdir.mk
Release/src/loader/subdir.mk
src/loader/Parser.cpp
src/loader/Parser.h
src/loader/utility.cpp [new file with mode: 0644]
src/loader/utility.h [new file with mode: 0644]
test-data/test.l2s

index 89118dfbf9fa6e2c1f8ea4b884cadf5fadbced24..19b1d87a49b12c62dfe96ff1eea278f217d92779 100644 (file)
@@ -7,19 +7,22 @@ CPP_SRCS += \
 ../src/loader/Interpreter.cpp \
 ../src/loader/ParsedSource.cpp \
 ../src/loader/Parser.cpp \
-../src/loader/Tokenizer.cpp 
+../src/loader/Tokenizer.cpp \
+../src/loader/utility.cpp 
 
 OBJS += \
 ./src/loader/Interpreter.o \
 ./src/loader/ParsedSource.o \
 ./src/loader/Parser.o \
-./src/loader/Tokenizer.o 
+./src/loader/Tokenizer.o \
+./src/loader/utility.o 
 
 CPP_DEPS += \
 ./src/loader/Interpreter.d \
 ./src/loader/ParsedSource.d \
 ./src/loader/Parser.d \
-./src/loader/Tokenizer.d 
+./src/loader/Tokenizer.d \
+./src/loader/utility.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
index 50f5baf397d36ca13e511c1af0dc378cad538719..c619e855b19587413a23bb9a7f88013a306862b5 100644 (file)
@@ -7,19 +7,22 @@ CPP_SRCS += \
 ../src/loader/Interpreter.cpp \
 ../src/loader/ParsedSource.cpp \
 ../src/loader/Parser.cpp \
-../src/loader/Tokenizer.cpp 
+../src/loader/Tokenizer.cpp \
+../src/loader/utility.cpp 
 
 OBJS += \
 ./src/loader/Interpreter.o \
 ./src/loader/ParsedSource.o \
 ./src/loader/Parser.o \
-./src/loader/Tokenizer.o 
+./src/loader/Tokenizer.o \
+./src/loader/utility.o 
 
 CPP_DEPS += \
 ./src/loader/Interpreter.d \
 ./src/loader/ParsedSource.d \
 ./src/loader/Parser.d \
-./src/loader/Tokenizer.d 
+./src/loader/Tokenizer.d \
+./src/loader/utility.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
index d6abcc39561e4b70f8fce0ced7ce880580701ad0..bd65200ab8bc674bf983d4791962231d5ab21a40 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "Parser.h"
 
+#include "utility.h"
+
 #include <auto_ptr.h>
 #include <fstream>
 
@@ -17,9 +19,10 @@ using std::vector;
 
 namespace loader {
 
-Parser::Parser(const char *file, ParsedSource &product)
+Parser::Parser(const string &file, ParsedSource &product)
 : file(file)
-, in(file)
+, dirname(Dirname(file))
+, in(this->file.c_str())
 , tok(in)
 , product(product) {
        if (!in) {
@@ -74,7 +77,7 @@ void Parser::ParseExportDirective() {
 void Parser::ParseIncludeDirective() {
        Tokenizer::Token t(GetToken());
        AssertTokenType(t.type, Tokenizer::Token::STRING);
-       Parser sub(t.str.c_str(), product); // TODO: resolve path name
+       Parser sub(CatPath(dirname, t.str), product);
        sub.Parse();
 }
 
index 9e4cbf4551de5bd5e71ffe133e9afdcc5a0c4498..ebfeafaacf0f9c081a0c60512818647ff0311350 100644 (file)
@@ -26,7 +26,7 @@ class PropertyList;
 class Parser {
 
 public:
-       Parser(const char *file, ParsedSource &product);
+       Parser(const std::string &file, ParsedSource &product);
        ~Parser() { }
 private:
        Parser(const Parser &);
@@ -38,12 +38,13 @@ public:
 public:
        class Error: public std::runtime_error {
        public:
-               Error(const char *file, int line, const std::string &msg)
+               Error(const std::string &file, int line, const std::string &msg)
                : std::runtime_error(msg), file(file), line(line) { };
-               const char *File() const { return file; }
+               ~Error() throw() { }
+               const std::string &File() const { return file; }
                int Line() const { return line; }
        private:
-               const char *file;
+               std::string file;
                int line;
        };
 
@@ -73,7 +74,8 @@ private:
        bool BeginOfPropertyList(const Tokenizer::Token &) const;
 
 private:
-       const char *file;
+       std::string file;
+       std::string dirname;
        std::ifstream in;
        Tokenizer tok;
        ParsedSource &product;
diff --git a/src/loader/utility.cpp b/src/loader/utility.cpp
new file mode 100644 (file)
index 0000000..ee88ea0
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * utility.cpp
+ *
+ *  Created on: Sep 1, 2012
+ *      Author: holy
+ */
+
+#include "utility.h"
+
+#include <cstring>
+#include <libgen.h>
+
+using std::string;
+
+namespace loader {
+
+string Dirname(const string &path) {
+       // unix version
+       char *str(new char[path.size() + 1]);
+       std::memcpy(str, path.c_str(), path.size());
+       str[path.size()] = '\0';
+       string dn(dirname(str));
+       delete str;
+       return dn;
+}
+
+string CatPath(const string &lhs, const string &rhs) {
+       // unix version
+       string path(lhs);
+       if (!path.empty() && path[path.size() - 1] != '/') {
+               path += '/';
+       }
+       if (!rhs.empty() && rhs[0] == '/') {
+               path.append(rhs, 1, string::npos);
+       } else {
+               path += rhs;
+       }
+       return path;
+}
+
+}
diff --git a/src/loader/utility.h b/src/loader/utility.h
new file mode 100644 (file)
index 0000000..b8ccd10
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * utility.h
+ *
+ *  Created on: Sep 1, 2012
+ *      Author: holy
+ */
+
+#ifndef LOADER_UTILITY_H_
+#define LOADER_UTILITY_H_
+
+#include <string>
+
+namespace loader {
+
+std::string Dirname(const std::string &path);
+
+std::string CatPath(const std::string &lhs, const std::string &rhs);
+
+}
+
+#endif /* LOADER_UTILITY_H_ */
index 5958c7412cefa5aa35d9f45129adaff8724a83d2..6b03e299f90e806abb2dd9f6f600702895fb5917 100644 (file)
@@ -510,11 +510,11 @@ export Sprite itemTargetCursor {
        offset: <0,64>
 }
 
-include "test-data/spells.l2s"
+include "spells.l2s"
 
 export String spellMenuHeadline "Please choose a spell."
 
-include "test-data/ikaris.l2s"
-include "test-data/items.l2s"
+include "ikaris.l2s"
+include "items.l2s"
 
 export String itemMenuHeadline "Please choose an item."