Skip to content

Commit

Permalink
Add parser for config data
Browse files Browse the repository at this point in the history
  • Loading branch information
aleafs committed Jul 9, 2012
1 parent a70933a commit cab78e2
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 55 deletions.
56 changes: 1 addition & 55 deletions lib/config.js
Expand Up @@ -3,60 +3,6 @@
var Emitter = require('events').EventEmitter;
var Util = require('util');

var parse_ini_data = function (fdata) {
var data = {};
var sect = null;

fdata.split('\n').forEach(function(line) {
line = line.trim();
if (!line.length || ';' == line.slice(0, 1)) {
return;
}

var match = line.match(/^\s*\[([^\]]+)\]\s*$/);
if (match) {
sect = match[1];
data[sect] = {};
} else {
var match = line.match(/^\s*([^=\s]+)\s*=\s*(.*)\s*$/);
if (!match) {
return;
}

var key = match[1];
var tmp = cleanquote(match[2]);
if (sect) {
data[sect][key] = tmp;
} else {
data[key] = tmp;
}
}
});

return data;
};

var cleanquote = function (val) {
if (/^-?(\d|\.)+$/.test(val)) {
return val - 0;
}

var _me = [];

val = val.replace(/^("|')+/, '').replace(/("|')+$/, '');
for (var i = 0; i < val.length; i++) {
var the = val.slice(i, i + 1);
if ('\\' == the) {
i++;
_me.push(val.slice(i, i + 1));
} else {
_me.push(the);
}
}

return _me.join('');
};

exports.create = function (prefix, store) {

var Config = function () {
Expand All @@ -78,7 +24,7 @@ exports.create = function (prefix, store) {
break;

case 'ini':
data = parse_ini_data(data);
data = require(__dirname + '/parser/ini.js').parse(data);
break;

default:
Expand Down
56 changes: 56 additions & 0 deletions lib/parser/ini.js
@@ -0,0 +1,56 @@
/* vim: set expandtab tabstop=2 shiftwidth=2 foldmethod=marker: */

var cleanquote = function (val) {
if (/^-?(\d|\.)+$/.test(val)) {
return val - 0;
}

var _me = [];

val = val.replace(/^("|')+/, '').replace(/("|')+$/, '');
for (var i = 0; i < val.length; i++) {
var the = val.slice(i, i + 1);
if ('\\' == the) {
i++;
_me.push(val.slice(i, i + 1));
} else {
_me.push(the);
}
}

return _me.join('');
};

exports.parse = function (fdata) {
var data = {};
var sect = null;

fdata.split('\n').forEach(function(line) {
line = line.trim();
if (!line.length || ';' == line.slice(0, 1)) {
return;
}

var match = line.match(/^\s*\[([^\]]+)\]\s*$/);
if (match) {
sect = match[1];
data[sect] = {};
} else {
var match = line.match(/^\s*([^=\s]+)\s*=\s*(.*)\s*$/);
if (!match) {
return;
}

var key = match[1];
var tmp = cleanquote(match[2]);
if (sect) {
data[sect][key] = tmp;
} else {
data[key] = tmp;
}
}
});

return data;
};

0 comments on commit cab78e2

Please sign in to comment.