当前位置: 首页>>代码示例>>PHP>>正文


PHP Diff\Differ类代码示例

本文整理汇总了PHP中SebastianBergmann\Diff\Differ的典型用法代码示例。如果您正苦于以下问题:PHP Differ类的具体用法?PHP Differ怎么用?PHP Differ使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了Differ类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: testCreate

    public function testCreate()
    {
        $before = <<<'EOD'
unchanged
replaced
unchanged
removed
EOD;
        $after = <<<'EOD'
added
unchanged
replacement
unchanged
EOD;
        $diff = [['added', 1], ['unchanged', 0], ['replaced', 2], ['replacement', 1], ['unchanged', 0], ['removed', 2]];
        $lines = [new Line(Line::ADDED, 'added', -1), new Line(Line::UNCHANGED, 'unchanged', 0), new Line(Line::REMOVED, 'replaced', 1), new Line(Line::ADDED, 'replacement', 1), new Line(Line::UNCHANGED, 'unchanged', 2), new Line(Line::REMOVED, 'removed', 3)];
        $differ = new Differ();
        $array_diff = $differ->diffToArray($before, $after);
        $this->assertEquals($diff, $array_diff);
        $result = Line::createArray($diff);
        $this->assertEquals($lines, $result);
        try {
            $diff[] = ['invalid', 3];
            Line::createArray($diff);
            $this->assertTrue(false, 'An exception was not thrown');
        } catch (\RuntimeException $e) {
            $this->assertEquals('Unsupported diff line type.', $e->getMessage());
        }
    }
开发者ID:bircher,项目名称:php-merge,代码行数:29,代码来源:LineTest.php

示例2: difObj

 public function difObj($obj1, $obj2)
 {
     $differ = new Differ();
     $arr = [];
     foreach ($obj1 as $a => $v) {
         if ($v != $obj2[$a]) {
             if (is_numeric($v) && is_numeric($obj2[$a])) {
                 $arr[$a] = $v;
             } else {
                 /*
                 if (substr_count( $v, "\n" ) > 1 && substr_count( $obj2[$a], "\n" ) > 1)
                 {
                 	$arr[$a] = $differ->diff($v,$obj2[$a]);	
                 }
                 else
                 {	
                 	$arr[$a] = $differ->diff(self::strLine($v),self::strLine($obj2[$a]));
                 }
                 */
                 $arr[$a] = $differ->diff($v, $obj2[$a]);
             }
         }
     }
     return $arr;
 }
开发者ID:evgenmil,项目名称:versioning,代码行数:25,代码来源:Libs.php

示例3: execute

 protected function execute(array $arguments)
 {
     if (isset($arguments[0]) && isset($arguments[1])) {
         $differ = new Differ();
         return $differ->diff($arguments[0], $arguments[1]);
     }
     throw new InvalidArgumentException('strings invalid');
 }
开发者ID:sysatom,项目名称:workflow,代码行数:8,代码来源:DiffText.php

示例4: getDiff

 /**
  * @param string $expected
  * @param string $actual
  * @return string
  */
 private function getDiff($expected = '', $actual = '')
 {
     if (!$actual && !$expected) {
         return '';
     }
     $differ = new Differ('');
     return $differ->diff($expected, $actual);
 }
开发者ID:solutionDrive,项目名称:Codeception,代码行数:13,代码来源:DiffFactory.php

示例5: diffTemplate

 /**
  * @inheritdoc
  */
 public function diffTemplate(Stack $stack)
 {
     $actual_template = $stack->provisioned ? $this->cfn($stack)->getTemplate(['StackName' => $stack->get('name')])->get('TemplateBody') : '{}';
     $new_template = $this->createTemplate($stack);
     $arr_diff = new Differ();
     $diff = $arr_diff->diff(json_encode(json_decode($actual_template, true), JSON_PRETTY_PRINT), json_encode(json_decode($new_template, true), JSON_PRETTY_PRINT));
     return $diff;
 }
开发者ID:sourcestream,项目名称:highcore-api,代码行数:11,代码来源:CloudFormer.php

示例6: getDiff

 /**
  * Get difference of two variables.
  *
  * @param mixed $actual
  *
  * @return string
  */
 protected function getDiff($actual)
 {
     if (is_array($actual) or is_array($this->expected)) {
         $diff = new Diff\Differ('--- Expected' . PHP_EOL . '+++ Actual' . PHP_EOL);
         return $diff->diff(var_export($this->expected, true), var_export($actual, true));
     } else {
         return 'expected ' . $this->formatter($this->expected) . ', but given ' . $this->formatter($actual);
     }
 }
开发者ID:komex,项目名称:unteist,代码行数:16,代码来源:EqualTo.php

示例7: diffFiles

 private function diffFiles($path, $from, $to)
 {
     if (!$this->compareFiles($from, $to)) {
         $differ = new Differ();
         $this->filesystem->put($path, $differ->diff($from, $to));
         $this->diffedFiles[] = $path;
     } else {
         $this->filesystem->put($path, $to);
     }
 }
开发者ID:joecianflone,项目名称:heisenberg-toolkit-installer,代码行数:10,代码来源:Mover.php

示例8: diff

 public function diff($t1, $t2)
 {
     $t1 = str_replace(['<dd>', '</dd>'], [PHP_EOL, ''], $t1);
     $t2 = str_replace(['<dd>', '</dd>'], [PHP_EOL, ''], $t2);
     $differ = new Differ();
     $diffs = $differ->diffToArray($t1, $t2);
     $folders = [new ContextFolder(), new ReplacesFolder(), new TypeFolder(PHP_EOL), new DiffFolder()];
     foreach ($folders as $folder) {
         $diffs = $folder->fold($diffs);
     }
     return $diffs;
 }
开发者ID:ankhzet,项目名称:Ankh,代码行数:12,代码来源:Diff.php

示例9: difference

 /**
  * Returns the diff between two arrays or strings as string.
  *
  * @param array|string $from
  * @param array|string $to
  * @param int          $contextLines
  *
  * @return string
  */
 public function difference($from, $to, $contextLines = 3)
 {
     $tool = new Differ('');
     $diff = $tool->diffToArray($from, $to);
     $inOld = false;
     $i = 0;
     $old = array();
     foreach ($diff as $line) {
         if ($line[1] === 0) {
             if ($inOld === false) {
                 $inOld = $i;
             }
         } else {
             if ($inOld !== false) {
                 if ($i - $inOld > $contextLines) {
                     $old[$inOld] = $i - 1;
                 }
                 $inOld = false;
             }
         }
         ++$i;
     }
     $start = isset($old[0]) ? $old[0] : 0;
     $end = count($diff);
     if ($tmp = array_search($end, $old)) {
         $end = $tmp;
     }
     $contextLinesCounter = 0;
     $contextPreSet = false;
     $buffer = $this->initBuffer();
     for ($i = $start; $i < $end; $i++) {
         if (isset($old[$i])) {
             $i = $old[$i];
         }
         if ($diff[$i][1] === 1) {
             $buffer[] = $this->highlightAdded($diff[$i][0]);
         } else {
             if ($diff[$i][1] === 2) {
                 $buffer[] = $this->highlightRemoved($diff[$i][0]);
                 $contextPreSet = true;
             } else {
                 if ($contextPreSet && $contextLinesCounter >= $contextLines) {
                     break;
                 }
                 $buffer[] = $this->highlightContext($diff[$i][0]);
                 ++$contextLinesCounter;
             }
         }
     }
     return $this->implodeBuffer($buffer);
 }
开发者ID:judgedim,项目名称:mutagenesis,代码行数:60,代码来源:PhpUnitAbstract.php

示例10: additionalFailureDescription

 protected function additionalFailureDescription($other)
 {
     $from = preg_split('(\\r\\n|\\r|\\n)', $this->string);
     $to = preg_split('(\\r\\n|\\r|\\n)', $other);
     foreach ($from as $index => $line) {
         if (isset($to[$index]) && $line !== $to[$index]) {
             $line = $this->createPatternFromFormat($line);
             if (preg_match($line, $to[$index]) > 0) {
                 $from[$index] = $to[$index];
             }
         }
     }
     $this->string = implode("\n", $from);
     $other = implode("\n", $to);
     $differ = new Differ("--- Expected\n+++ Actual\n");
     return $differ->diff($this->string, $other);
 }
开发者ID:noikiy,项目名称:phpunit,代码行数:17,代码来源:StringMatches.php

示例11: execute

 /**
  * @see Command
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $files = $this->getResource($input);
     if (count($files) != 2) {
         throw new \InvalidArgumentException('You have to define 2 files.');
     }
     $results = array();
     foreach ($files as $file) {
         if ($file->isCrypted()) {
             $file = $this->getBackend($input->getOption('configuration-file'))->setIO($this->getIO())->decrypt($file);
         }
     }
     $it = $files->getIterator();
     $output->writeln(sprintf('<info>Diff between <comment>%s</comment> and <comment>%s</comment></info>', $it[0]->getSourceFile(), $it[1]->getSourceFile()));
     $from = $this->clean($it[0]->isCrypted() ? $it[0]->getTargetContent() : $it[0]->getSourceContent());
     $to = $this->clean($it[1]->isCrypted() ? $it[1]->getTargetContent() : $it[1]->getSourceContent());
     if ($from == $to) {
         $output->writeln('no diff.');
     } else {
         $differ = new Differ();
         echo $differ->diff($from, $to);
     }
 }
开发者ID:rezzza,项目名称:vaultage,代码行数:26,代码来源:DiffCommand.php

示例12: getPrettyDiff

 public function getPrettyDiff()
 {
     $prettyDiff = [];
     $differ = new Differ();
     $diffArr = $differ->diffToArray($this->fileChanges[0], $this->fileChanges[1]);
     $buffer = [];
     $lastMutation = false;
     foreach ($diffArr as $i => $diffToken) {
         if ($lastMutation !== false && $i - 3 === $lastMutation) {
             $prettyDiff = array_merge($prettyDiff, $buffer);
             $buffer = [];
         }
         if ($diffToken[1] !== 0) {
             $prettyDiff = array_merge($prettyDiff, $buffer);
             $buffer = [];
             $prettyDiff[] = $this->getPrettyMutation($diffToken);
             $lastMutation = $i;
         } else {
             $buffer[] = $this->getPrettyMutation($diffToken);
         }
         $buffer = array_slice($buffer, -3);
     }
     return implode("\n", $prettyDiff);
 }
开发者ID:EaterOfCode,项目名称:Order,代码行数:24,代码来源:TextDiff.php

示例13: foldReplaces

 public function foldReplaces()
 {
     $marker = chr(1);
     $marker2 = chr(2);
     $del = $this->foldChunks($this->delete, $marker);
     $ins = $this->foldChunks($this->insert, $marker);
     $replacer = function ($match) use($marker2) {
         return str_replace(' ', $marker2, $match[1]);
     };
     $del = preg_replace_callback('#(<\\w+([^>]+)>)#i', $replacer, $del);
     $ins = preg_replace_callback('#(<\\w+([^>]+)>)#i', $replacer, $ins);
     $del = str_replace([' ', '><'], [PHP_EOL, '>' . PHP_EOL . '<'], $del);
     $ins = str_replace([' ', '><'], [PHP_EOL, '>' . PHP_EOL . '<'], $ins);
     $differ = new \SebastianBergmann\Diff\Differ();
     $diffs = $differ->diffToArray($del, $ins);
     $folded = FolderChain::fold([new TypeFolder(' '), new ContextTypeRemover(), new DiffFolder(' ')], $diffs);
     $folded = str_replace($marker, PHP_EOL, $folded);
     $folded = str_replace($marker2, ' ', $folded);
     $this->chunk(3, $folded);
     $this->clearBuffer('delete');
     $this->clearBuffer('insert');
 }
开发者ID:ankhzet,项目名称:Ankh,代码行数:22,代码来源:Diff.php

示例14: getDiff

 /**
  *
  * @return string
  */
 public function getDiff()
 {
     if (!$this->actualAsString && !$this->expectedAsString) {
         return '';
     }
     $differ = new Differ("\n--- Expected\n+++ Actual\n");
     return $differ->diff($this->expectedAsString, $this->actualAsString);
 }
开发者ID:ngitimfoyo,项目名称:Nyari-AppPHP,代码行数:12,代码来源:ComparisonFailure.php

示例15: getConflicts

 /**
  * Get the conflicts from a file which is left with merge conflicts.
  *
  * @param string $file
  *   The file name.
  * @param string $baseText
  *   The original text used for merging.
  * @param string $remoteText
  *   The first chaned text.
  * @param string $localText
  *   The second changed text.
  * @param MergeConflict[] $conflicts
  *   The merge conflicts will be apended to this array.
  * @param string[] $merged
  *   The merged text resolving conflicts by using the first set of changes.
  */
 protected static function getConflicts($file, $baseText, $remoteText, $localText, &$conflicts, &$merged)
 {
     $raw = new \ArrayObject(explode("\n", file_get_contents($file)));
     $lineIterator = $raw->getIterator();
     $state = 'unchanged';
     $conflictIndicator = ['<<<<<<< HEAD' => 'local', '||||||| merged common ancestors' => 'base', '=======' => 'remote', '>>>>>>> original' => 'end conflict'];
     // Create hunks from the text diff.
     $differ = new Differ();
     $remoteDiff = Line::createArray($differ->diffToArray($baseText, $remoteText));
     $localDiff = Line::createArray($differ->diffToArray($baseText, $localText));
     $remote_hunks = new \ArrayObject(Hunk::createArray($remoteDiff));
     $local_hunks = new \ArrayObject(Hunk::createArray($localDiff));
     $remoteIterator = $remote_hunks->getIterator();
     $localIterator = $local_hunks->getIterator();
     $base = [];
     $remote = [];
     $local = [];
     $lineNumber = -1;
     $newLine = 0;
     $skipedLines = 0;
     $addingConflict = false;
     // Loop over all the lines in the file.
     while ($lineIterator->valid()) {
         $line = $lineIterator->current();
         if (array_key_exists(trim($line), $conflictIndicator)) {
             // Check for a line matching a conflict indicator.
             $state = $conflictIndicator[trim($line)];
             $skipedLines++;
             if ($state == 'end conflict') {
                 // We just treated a merge conflict.
                 $conflicts[] = new MergeConflict($base, $remote, $local, $lineNumber, $newLine);
                 if ($lineNumber == -1) {
                     $lineNumber = 0;
                 }
                 $lineNumber += count($base);
                 $newLine += count($remote);
                 $base = [];
                 $remote = [];
                 $local = [];
                 $remoteIterator->next();
                 $localIterator->next();
                 if ($addingConflict) {
                     // Advance the counter for conflicts with adding.
                     $lineNumber++;
                     $newLine++;
                     $addingConflict = false;
                 }
                 $state = 'unchanged';
             }
         } else {
             switch ($state) {
                 case 'local':
                     $local[] = $line;
                     $skipedLines++;
                     break;
                 case 'base':
                     $base[] = $line;
                     $skipedLines++;
                     if ($lineNumber == -1) {
                         $lineNumber = 0;
                     }
                     break;
                 case 'remote':
                     $remote[] = $line;
                     $merged[] = $line;
                     break;
                 case 'unchanged':
                     if ($lineNumber == -1) {
                         $lineNumber = 0;
                     }
                     $merged[] = $line;
                     /** @var Hunk $r */
                     $r = $remoteIterator->current();
                     /** @var Hunk $l */
                     $l = $localIterator->current();
                     if ($r == $l) {
                         // If they are the same, treat only one.
                         $localIterator->next();
                         $l = $localIterator->current();
                     }
                     // A hunk has been successfully merged, so we can just
                     // tally the lines added and removed and skip forward.
                     if ($r && $r->getStart() == $lineNumber) {
                         if (!$r->hasIntersection($l)) {
//.........这里部分代码省略.........
开发者ID:bircher,项目名称:php-merge,代码行数:101,代码来源:GitMerge.php


注:本文中的SebastianBergmann\Diff\Differ类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。