From f82f9b1cbd7edadc0ce214440902077d17fadeb6 Mon Sep 17 00:00:00 2001 From: Futago-za Ryuu Date: Thu, 12 Dec 2013 03:27:48 +0000 Subject: [PATCH] relative include made the include directive work based on files directory --- Preprocessor.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Preprocessor.js b/Preprocessor.js index 315ea74..a1872ba 100644 --- a/Preprocessor.js +++ b/Preprocessor.js @@ -194,6 +194,13 @@ }).bind(null)(runtimeDefines, inlineDefines, expr); }; + function dirname ( path ) { + return path.replace(/\\/g, '/').split('/').slice(0, -1).join("/"); + } + function relative ( item ) { + return (item.charAt(0) === "/" || item.indexOf("./") === 0) ? item : "/" + item; + } + /** * Preprocesses. * @param {object.} defines Defines @@ -226,9 +233,13 @@ throw(new Error("Failed to resolve include: "+this.baseDir+"/"+include)); } try { - var key = include; - include = require("fs").readFileSync(this.baseDir+"/"+include)+""; - this.includes[key] = include; + var item = include, PATH = require("path"), pp, + include_filename = PATH.join(this.baseDir, relative(item)), + include_dirname = dirname(include_filename); + //console.log("%s > %s", include_dirname, include_filename); + include = require("fs").readFileSync(include_filename) + ""; + pp = new Preprocessor(include, include_dirname); + include = this.includes[item] = pp.process(defines, verbose); } catch (e) { throw(new Error("File not found: "+include+" ("+e+")")); }