示例#1
0
 /**
  * This is the recursive function which is responsible for
  * handling/increasing granularity.
  *
  * Incrementally increasing the granularity is key to compute the
  * overall diff in a very efficient way.
  */
 private function _processGranularity($from_segment, $to_segment)
 {
     $delimiters = $this->granularityStack[$this->stackpointer++];
     $has_next_stage = $this->stackpointer < count($this->granularityStack);
     foreach (FineDiff::doFragmentDiff($from_segment, $to_segment, $delimiters) as $fragment_edit) {
         // increase granularity
         if ($fragment_edit instanceof FineDiffReplaceOp && $has_next_stage) {
             $this->_processGranularity(substr($this->from_text, $this->from_offset, $fragment_edit->getFromLen()), $fragment_edit->getText());
         } else {
             if ($fragment_edit instanceof FineDiffCopyOp && $this->last_edit instanceof FineDiffCopyOp) {
                 $this->edits[count($this->edits) - 1]->increase($fragment_edit->getFromLen());
                 $this->from_offset += $fragment_edit->getFromLen();
             } else {
                 /* $fragment_edit instanceof FineDiffCopyOp */
                 /* $fragment_edit instanceof FineDiffDeleteOp */
                 /* $fragment_edit instanceof FineDiffInsertOp */
                 $this->edits[] = $this->last_edit = $fragment_edit;
                 $this->from_offset += $fragment_edit->getFromLen();
             }
         }
     }
     $this->stackpointer--;
 }