GasWell-front/node_modules/scss/specs/grammarInvoker.js

84 lines
1.9 KiB
JavaScript

var sys = require('sys'),
fs = require('fs'),
ometa = require('ometa'),
creatingParser = false;
var fixReadFile = function(rawFile) {
return rawFile.slice(1).replace(/\\n/g, '\n');
};
var createParser = function(parserInitializer) {
if(!creatingParser) {
creatingParser = true;
//fs.readFile(__dirname + '/../src/cssSelector.ometa', 'utf8', function(err, contents) {
fs.readFile(__dirname + '/../../ometa-js/newLineGrammar.ometa', 'utf8', function(err, contents) {
if(err) {
parserInitializer.setParser(err);
} else {
ometa.createParser(fixReadFile(contents), parserInitializer.setParser);
}
creatingParser = false;
});
}
};
var parserInitializer = (function() {
var createdParser,
parserErr,
queuedCallbacks = [],
that = {};
that.setParser = function(err, parser) {
parserErr = err;
createdParser = parser;
queuedCallbacks.forEach(function(callback) {
callback(parserErr, createdParser);
});
queuedCallbacks = [];
};
that.addCallback = function(callback) {
if(parserErr || createdParser) {
callback(parserErr, createdParser);
} else {
queuedCallbacks.push(callback);
createParser(that);
}
};
that.reset = function() {
createdParser = null;
};
return that;
})();
var parse = function(selector, callback) {
parserInitializer.addCallback(function(err, parser) {
if(err) {
callback(err);
} else {
parser.parse(selector, 'selectors_group', function(err, css) {
if(err) {
callback(err);
} else {
//callback(null, css.toString());
callback(null, css.join(''));
}
});
}
});
};
module.exports.parse = parse;
module.exports.reset = parserInitializer.reset;
var ssss = 'a,\nb';
console.log(ssss);
parse(ssss, function(err, shiznit) {
if(err) {
console.log(err);
}
console.log(shiznit);
});