github.com/cloudcredo/cloudrocker@v0.0.0-20160108110610-1320f8cc2dfd/sample-apps/node/node_modules/logfmt/lib/logfmt_parser.js (about) 1 exports.debug = false; 2 3 exports.parse = function(line) { 4 var key = ''; 5 var value = ''; 6 var is_number = true; 7 var in_key = false; 8 var in_value = false; 9 var in_quote = false; 10 var had_quote = false; 11 var object = {}; 12 var debug = exports.debug; 13 14 if(line[line.length - 1] == '\n'){ 15 line = line.slice(0,line.length - 1) 16 } 17 18 for(var i=0; i <= line.length; i++){ 19 20 if((line[i] == ' ' && !in_quote) || i == line.length){ 21 if(in_key && key.length > 0){ 22 object[key] = true; 23 }else if(in_value){ 24 if(value == 'true') value = true; 25 else if(value == 'false') value = false; 26 else if(value === '' && !had_quote) value = null; 27 object[key] = value; 28 value = ''; 29 } 30 31 if(i == line.length) break; 32 else { 33 in_key = false; 34 in_value = false; 35 in_quote = false; 36 had_quote = false; 37 } 38 } 39 40 if(line[i] == '=' && !in_quote){ 41 if(debug) console.log('split') 42 //split 43 in_key = false; 44 in_value = true; 45 } 46 else if(line[i] == '\\'){ 47 i ++ ; 48 value += line[i]; 49 if(debug) console.log('escape: ' + line[i]) 50 } 51 else if(line[i] == '"'){ 52 had_quote = true; 53 in_quote = !in_quote; 54 if(debug) console.log('in quote: ' + in_quote) 55 } 56 else if(line[i] != ' ' && !in_value && !in_key){ 57 if(debug) console.log('start key with: ' + line[i]) 58 in_key = true; 59 key = line[i]; 60 } 61 else if(in_key){ 62 if(debug) console.log('add to key: ' + line[i]) 63 key += line[i] 64 } 65 else if(in_value){ 66 if(debug) console.log('add to value: ' + line[i]) 67 value += line[i]; 68 } 69 } 70 71 return object; 72 }