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  }