move import manager creation out of parser

This commit is contained in:
Luke Page
2014-09-04 18:35:56 +01:00
parent 4f5a449b0b
commit a46de448a3
4 changed files with 19 additions and 18 deletions

View File

@@ -1,5 +1,5 @@
var contexts = require("../contexts.js");
module.exports = function(environment, env, Parser) {
var contexts = require("./contexts.js");
var getImportManager = module.exports = function(environment, env, Parser) {
var rootFilename = env && env.filename;
return {
paths: env.paths || [], // Search paths, when importing
@@ -68,9 +68,9 @@ module.exports = function(environment, env, Parser) {
if (importOptions.inline) {
fileParsedFunc(null, contents, resolvedFilename);
} else {
new(Parser)(newEnv).parse(contents, function (e, root) {
new(Parser)(newEnv, getImportManager(environment, env, Parser)).parse(contents, function (e, root) {
fileParsedFunc(e, root, resolvedFilename);
}, null, true);
});
}
});
}

View File

@@ -9,7 +9,7 @@ module.exports = function(environment) {
contexts: require("./contexts.js"),
environment: environment
};
less.render = require("./render.js")(less.Parser);
less.render = require("./render.js")(less.Parser, environment);
return less;
};

View File

@@ -1,12 +1,10 @@
var LessError = require('../less-error.js'),
tree = require("../tree/index.js"),
visitor = require("../visitor/index.js"),
getImportManager = require("./imports.js"),
getParserInput = require("./parser-input.js"),
utils = require("../utils.js");
module.exports = function(environment) {
var ParseTree = require("../parse-tree.js")(environment);
//
// less.js - parser
//
@@ -40,12 +38,10 @@ module.exports = function(environment) {
// It also takes care of moving all the indices forwards.
//
//
var Parser = function Parser(env) {
var Parser = function Parser(env, imports) {
var parsers,
parserInput = getParserInput();
var imports = getImportManager(environment, env, Parser);
function expect(arg, msg, index) {
// some older browsers return typeof 'function' for RegExp
var result = (Object.prototype.toString.call(arg) === '[object Function]') ? arg.call(parsers) : parserInput.$(arg);
@@ -97,7 +93,7 @@ var Parser = function Parser(env) {
// @param callback call `callback` when done.
// @param [additionalData] An optional map which can contains vars - a map (key, value) of variables to apply
//
parse: function (str, callback, additionalData, returnSubParseTree) {
parse: function (str, callback, additionalData) {
var root, error = null, globalVars, modifyVars, preText = "";
globalVars = (additionalData && additionalData.globalVars) ? Parser.serializeVars(additionalData.globalVars) + '\n' : '';
@@ -170,8 +166,7 @@ var Parser = function Parser(env) {
return callback(e);
}
else {
return callback(null,
returnSubParseTree ? root : new ParseTree(root, imports));
return callback(null, root);
}
};

View File

@@ -1,7 +1,9 @@
var PromiseConstructor = typeof Promise === 'undefined' ? require('promise') : Promise,
contexts = require("./contexts.js");
contexts = require("./contexts.js"),
getImportManager = require("./imports.js");
var render = function(Parser) {
var render = function(Parser, environment) {
var ParseTree = require("./parse-tree.js")(environment);
return function (input, options, callback) {
options = options || {};
@@ -19,14 +21,18 @@ var render = function(Parser) {
callback(error);
});
} else {
var env = new contexts.parseEnv(options);
var env = new contexts.parseEnv(options),
imports = getImportManager(environment, env, Parser);
var parser = new(Parser)(env);
var parser = new(Parser)(env, imports);
return new PromiseConstructor(function (resolve, reject) {
parser.parse(input, function (e, root) {
if (e) { return reject(e); }
try { resolve(root.toCSS(options)); }
try {
var parseTree = new ParseTree(root, imports);
resolve(parseTree.toCSS(options));
}
catch (err) { reject( err); }
}, options);
});