DiffMatchPatch\Patch::addContext PHP Method

addContext() public method

Increase the context until it is unique, but don't let the pattern expand beyond Match->maxBits.
public addContext ( PatchObject $patch, string $text )
$patch PatchObject The patch to grow.
$text string Source text.
    public function addContext(PatchObject $patch, $text)
    {
        if (!mb_strlen($text)) {
            return;
        }
        $padding = 0;
        $pattern = mb_substr($text, $patch->getStart1(), $patch->getLength1());
        // Look for the first and last matches of pattern in text.
        // If two different matches are found, increase the pattern length.
        $match = $this->getMatch();
        while ((!$pattern || mb_strpos($text, $pattern) !== mb_strrpos($text, $pattern)) && ($match->getMaxBits() == 0 || mb_strlen($pattern) < $match->getMaxBits() - 2 * $this->getMargin())) {
            $padding += $this->getMargin();
            $pattern = mb_substr($text, max(0, $patch->getStart2() - $padding), $patch->getStart2() + $patch->getLength1() + $padding - max(0, $patch->getStart2() - $padding));
        }
        // Add one chunk for good luck.
        $padding += $this->getMargin();
        // Add the prefix.
        $prefix = mb_substr($text, max(0, $patch->getStart2() - $padding), min($patch->getStart2(), $padding));
        if ($prefix != '') {
            $patch->prependChanges(array(Diff::EQUAL, $prefix));
        }
        // Add the suffix.
        $suffix = mb_substr($text, $patch->getStart2() + $patch->getLength1(), $padding);
        if ($suffix != '') {
            $patch->appendChanges(array(Diff::EQUAL, $suffix));
        }
        // Roll back the start points.
        $prefixLen = mb_strlen($prefix);
        $patch->setStart1($patch->getStart1() - $prefixLen);
        $patch->setStart2($patch->getStart2() - $prefixLen);
        // Extend lengths.
        $suffixLen = mb_strlen($suffix);
        $patch->setLength1($patch->getLength1() + $prefixLen + $suffixLen);
        $patch->setLength2($patch->getLength2() + $prefixLen + $suffixLen);
    }