code: function(input, callback) {
  
              var md, line = null, length = 0;
  
              for(;;) {
                  if((md = input.match(this.lineRE))) {
                      // Unfold quoted-printables (vCard 2.1) into a single line before parsing.
                      // "Soft" linebreaks are indicated by a '=' at the end of the line, and do
                      // not affect the underlying data.
                      if(line && line.indexOf('QUOTED-PRINTABLE') != -1 && line.slice(-1) == '=') {
                          line = line.slice(0,-1) + md[1];
                          length = md[0].length;
                      } else {
                          if(line) {
                              this.lexLine(line, callback);   
                          }
                          line = md[1];
                          length = md[0].length;
                      }
                  } else if((md = input.match(this.foldedLineRE))) {
                      if(line) {
                          line += md[1];
                          length = md[0].length;
                      } else {
                          // ignore folded junk.
                      }
                  } else {
                      console.error("Unmatched line: " + line);
                  }
  
                  input = input.slice(length);
  
                  if(! input) {
                      break;
                  }
              }
  
              if(line) {
                  // last line.
                  this.lexLine(line, callback);
              }
  
              line = null;
          }
docs: lex the given input, calling the callback for each line, with the following arguments: * key - key of the statement, such as 'BEGIN', 'FN', 'N', ... * value - value of the statement, i.e. everything after the first ':' * attrs - object containing attributes, such as {"TYPE":"work"}