Source for file inline.php
Documentation is available at inline.php
* "Inline" diff renderer.
* This class renders diffs in the Wiki-style "inline" format.
* $Horde: framework/Text_Diff/Diff/Renderer/inline.php,v 1.13 2005/06/29 00:21:43 chuck Exp $
* @author Ciprian Popovici
* Number of leading context "lines" to preserve.
var $_leading_context_lines = 10000;
* Number of trailing context "lines" to preserve.
var $_trailing_context_lines = 10000;
* Prefix for inserted text.
var $_ins_prefix = '<ins>';
* Suffix for inserted text.
var $_ins_suffix = '</ins>';
* Prefix for deleted text.
var $_del_prefix = '<del>';
* Suffix for deleted text.
var $_del_suffix = '</del>';
* Header for each change block.
* What are we currently splitting on? Used to recurse to show word-level
var $_split_level = 'lines';
function _blockHeader ($xbeg, $xlen, $ybeg, $ylen)
return $this->_block_header;
function _startBlock ($header)
function _lines ($lines, $prefix = ' ', $encode = true )
if ($this->_split_level == 'words') {
return implode("\n", $lines) . "\n";
$lines[0 ] = $this->_ins_prefix . $lines[0 ];
$lines[count($lines) - 1 ] .= $this->_ins_suffix;
return $this->_lines ($lines, ' ', false );
function _deleted ($lines, $words = false )
$lines[0 ] = $this->_del_prefix . $lines[0 ];
$lines[count($lines) - 1 ] .= $this->_del_suffix;
return $this->_lines ($lines, ' ', false );
function _changed ($orig, $final)
/* If we've already split on words, don't try to do so again - just
if ($this->_split_level == 'words') {
while ($orig[0 ] !== false && $final[0 ] !== false &&
substr($orig[0 ], 0 , 1 ) == ' ' &&
substr($final[0 ], 0 , 1 ) == ' ') {
$prefix .= substr($orig[0 ], 0 , 1 );
$orig[0 ] = substr($orig[0 ], 1 );
$final[0 ] = substr($final[0 ], 1 );
return $prefix . $this->_deleted ($orig) . $this->_added ($final);
/* Non-printing newline marker. */
/* We want to split on word boundaries, but we need to
* preserve whitespace as well. Therefore we split on words,
* but include all blocks of whitespace in the wordlist. */
$diff = &new Text_Diff($this->_splitOnWords ($text1, $nl),
$this->_splitOnWords ($text2, $nl));
/* Get the diff in inline format. */
array ('split_level' => 'words')));
/* Run the diff and get the output. */
return str_replace($nl, "\n", $renderer->render ($diff)) . "\n";
function _splitOnWords ($string, $newlineEscape = "\n")
// Eat a word with any preceding whitespace.
$spaces = strspn($string, " \n", $pos);
$nextpos = strcspn($string, " \n", $pos + $spaces);
$words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
$pos += $spaces + $nextpos;
function _encode (&$string)
Documentation generated on Mon, 11 Mar 2019 14:16:38 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.
|