public function parseHunk(DifferentialHunk $hunk)
 {
     $this->parsedHunk = true;
     $lines = $hunk->getChanges();
     $lines = str_replace(array("\t", "\r\n", "\r"), array('  ', "\n", "\n"), $lines);
     $lines = explode("\n", $lines);
     $types = array();
     foreach ($lines as $line_index => $line) {
         if (isset($line[0])) {
             $char = $line[0];
             if ($char == ' ') {
                 $types[$line_index] = null;
             } else {
                 if ($char == '\\' && $line_index > 0) {
                     $types[$line_index] = $types[$line_index - 1];
                 } else {
                     $types[$line_index] = $char;
                 }
             }
         } else {
             $types[$line_index] = null;
         }
     }
     $old_line = $hunk->getOldOffset();
     $new_line = $hunk->getNewOffset();
     $num_lines = count($lines);
     if ($old_line > 1) {
         $this->missingOld[$old_line] = true;
     } else {
         if ($new_line > 1) {
             $this->missingNew[$new_line] = true;
         }
     }
     for ($cursor = 0; $cursor < $num_lines; $cursor++) {
         $type = $types[$cursor];
         $data = array('type' => $type, 'text' => (string) substr($lines[$cursor], 1), 'line' => $new_line);
         switch ($type) {
             case '+':
                 $this->new[] = $data;
                 ++$new_line;
                 break;
             case '-':
                 $data['line'] = $old_line;
                 $this->old[] = $data;
                 ++$old_line;
                 break;
             default:
                 $this->new[] = $data;
                 $data['line'] = $old_line;
                 $this->old[] = $data;
                 ++$new_line;
                 ++$old_line;
                 break;
         }
     }
 }