73 lines
1.7 KiB
JavaScript
73 lines
1.7 KiB
JavaScript
|
exports.debug = false;
|
||
|
|
||
|
exports.parse = function(line) {
|
||
|
var key = '';
|
||
|
var value = '';
|
||
|
var is_number = true;
|
||
|
var in_key = false;
|
||
|
var in_value = false;
|
||
|
var in_quote = false;
|
||
|
var had_quote = false;
|
||
|
var object = {};
|
||
|
var debug = exports.debug;
|
||
|
|
||
|
if(line[line.length - 1] == '\n'){
|
||
|
line = line.slice(0,line.length - 1)
|
||
|
}
|
||
|
|
||
|
for(var i=0; i <= line.length; i++){
|
||
|
|
||
|
if((line[i] == ' ' && !in_quote) || i == line.length){
|
||
|
if(in_key && key.length > 0){
|
||
|
object[key] = true;
|
||
|
}else if(in_value){
|
||
|
if(value == 'true') value = true;
|
||
|
else if(value == 'false') value = false;
|
||
|
else if(value === '' && !had_quote) value = null;
|
||
|
object[key] = value;
|
||
|
value = '';
|
||
|
}
|
||
|
|
||
|
if(i == line.length) break;
|
||
|
else {
|
||
|
in_key = false;
|
||
|
in_value = false;
|
||
|
in_quote = false;
|
||
|
had_quote = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(line[i] == '=' && !in_quote){
|
||
|
if(debug) console.log('split')
|
||
|
//split
|
||
|
in_key = false;
|
||
|
in_value = true;
|
||
|
}
|
||
|
else if(line[i] == '\\'){
|
||
|
i ++ ;
|
||
|
value += line[i];
|
||
|
if(debug) console.log('escape: ' + line[i])
|
||
|
}
|
||
|
else if(line[i] == '"'){
|
||
|
had_quote = true;
|
||
|
in_quote = !in_quote;
|
||
|
if(debug) console.log('in quote: ' + in_quote)
|
||
|
}
|
||
|
else if(line[i] != ' ' && !in_value && !in_key){
|
||
|
if(debug) console.log('start key with: ' + line[i])
|
||
|
in_key = true;
|
||
|
key = line[i];
|
||
|
}
|
||
|
else if(in_key){
|
||
|
if(debug) console.log('add to key: ' + line[i])
|
||
|
key += line[i]
|
||
|
}
|
||
|
else if(in_value){
|
||
|
if(debug) console.log('add to value: ' + line[i])
|
||
|
value += line[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return object;
|
||
|
}
|