Beispiel #1
0
 static function examineCell($x, $y, $view, $raw, $vcol, $vrow, $vcorner, $cell, $offset = null)
 {
     if ($offset === null) {
         $offset = 0;
     }
     $nested = $view->isHash($raw);
     $cell->category = "";
     $cell->category_given_tr = "";
     $cell->separator = "";
     $cell->pretty_separator = "";
     $cell->conflicted = false;
     $cell->updated = false;
     $cell->meta = $cell->pvalue = $cell->lvalue = $cell->rvalue = null;
     $cell->value = $raw;
     $cell->pretty_value = $cell->value;
     if ($vrow === null) {
         $vrow = "";
     }
     if ($vcol === null) {
         $vcol = "";
     }
     if (strlen($vrow) >= 3 && _hx_char_at($vrow, 0) === "@" && _hx_char_at($vrow, 1) !== "@") {
         $idx = _hx_index_of($vrow, "@", 1);
         if ($idx >= 0) {
             $cell->meta = _hx_substr($vrow, 1, $idx - 1);
             $vrow = _hx_substr($vrow, $idx + 1, strlen($vrow));
             $cell->category = "meta";
         }
     }
     $removed_column = false;
     if ($vrow === ":") {
         $cell->category = "move";
     }
     if ($vrow === "" && $offset === 1 && $y === 0) {
         $cell->category = "index";
     }
     if (_hx_index_of($vcol, "+++", null) >= 0) {
         $cell->category_given_tr = $cell->category = "add";
     } else {
         if (_hx_index_of($vcol, "---", null) >= 0) {
             $cell->category_given_tr = $cell->category = "remove";
             $removed_column = true;
         }
     }
     if ($vrow === "!") {
         $cell->category = "spec";
     } else {
         if ($vrow === "@@") {
             $cell->category = "header";
         } else {
             if ($vrow === "...") {
                 $cell->category = "gap";
             } else {
                 if ($vrow === "+++") {
                     if (!$removed_column) {
                         $cell->category = "add";
                     }
                 } else {
                     if ($vrow === "---") {
                         $cell->category = "remove";
                     } else {
                         if (_hx_index_of($vrow, "->", null) >= 0) {
                             if (!$removed_column) {
                                 $tokens = _hx_explode("!", $vrow);
                                 $full = $vrow;
                                 $part = $tokens[1];
                                 if ($part === null) {
                                     $part = $full;
                                 }
                                 $str = $view->toString($cell->value);
                                 if ($str === null) {
                                     $str = "";
                                 }
                                 if ($nested || _hx_index_of($str, $part, null) >= 0) {
                                     $cat = "modify";
                                     $div = $part;
                                     if ($part !== $full) {
                                         if ($nested) {
                                             $cell->conflicted = $view->hashExists($raw, "theirs");
                                         } else {
                                             $cell->conflicted = _hx_index_of($str, $full, null) >= 0;
                                         }
                                         if ($cell->conflicted) {
                                             $div = $full;
                                             $cat = "conflict";
                                         }
                                     }
                                     $cell->updated = true;
                                     $cell->separator = $div;
                                     $cell->pretty_separator = $div;
                                     if ($nested) {
                                         if ($cell->conflicted) {
                                             $tokens = new _hx_array(array($view->hashGet($raw, "before"), $view->hashGet($raw, "ours"), $view->hashGet($raw, "theirs")));
                                         } else {
                                             $tokens = new _hx_array(array($view->hashGet($raw, "before"), $view->hashGet($raw, "after")));
                                         }
                                     } else {
                                         $cell->pretty_value = $view->toString($cell->pretty_value);
                                         if ($cell->pretty_value === null) {
                                             $cell->pretty_value = "";
                                         }
                                         if ($cell->pretty_value === $div) {
                                             $tokens = new _hx_array(array("", ""));
                                         } else {
                                             $tokens = _hx_explode($div, $cell->pretty_value);
                                         }
                                     }
                                     $pretty_tokens = $tokens;
                                     if ($tokens->length >= 2) {
                                         $pretty_tokens[0] = coopy_DiffRender::markSpaces($tokens[0], $tokens[1]);
                                         $pretty_tokens[1] = coopy_DiffRender::markSpaces($tokens[1], $tokens[0]);
                                     }
                                     if ($tokens->length >= 3) {
                                         $ref = $pretty_tokens[0];
                                         $pretty_tokens[0] = coopy_DiffRender::markSpaces($ref, $tokens[2]);
                                         $pretty_tokens[2] = coopy_DiffRender::markSpaces($tokens[2], $ref);
                                     }
                                     $cell->pretty_separator = chr(8594);
                                     $cell->pretty_value = $pretty_tokens->join($cell->pretty_separator);
                                     $cell->category_given_tr = $cell->category = $cat;
                                     $offset1 = null;
                                     if ($cell->conflicted) {
                                         $offset1 = 1;
                                     } else {
                                         $offset1 = 0;
                                     }
                                     $cell->lvalue = $tokens[$offset1];
                                     $cell->rvalue = $tokens[$offset1 + 1];
                                     if ($cell->conflicted) {
                                         $cell->pvalue = $tokens[0];
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     if ($x === 0 && $offset > 0) {
         $cell->category_given_tr = $cell->category = "index";
     }
 }