nhz.lib
Version:
NHZ Library
53 lines (46 loc) • 1.25 kB
JavaScript
var AbstractMapper, declarations, property, rule, rules;
AbstractMapper = require('abstract-mapper');
property = /([-_a-z][-_a-z0-9]*)\s*:\s*(.*\)|.*?)\s*(?=;|\s*$)/gmi;
rule = /([-._@a-z][-_a-z0-9]*[^{}]*?)\s*\{([^{}]+|([^{}]+\{[^{}]+\}\s*)+)\}/gmi;
declarations = new AbstractMapper([
function($, result) {
if (result == null) {
result = {};
}
return {
result: result
};
}, function($) {
return $.replace(property, (function(_this) {
return function($0, name, value) {
return _this.result[name] = value;
};
})(this));
}, function() {
return this.result;
}
]);
rules = new AbstractMapper([
function($, result) {
if (result == null) {
result = {};
}
return {
result: result
};
}, function($) {
return $.replace(rule, (function(_this) {
return function($0, name, block) {
var base, base1;
if ((name.substr(0, 1)) === '@') {
return rules(block, ((base = _this.result)[name] || (base[name] = {})));
} else {
return declarations(block, ((base1 = _this.result)[name] || (base1[name] = {})));
}
};
})(this));
}, function() {
return this.result;
}
]);
module.exports = rules;