wp/wp-includes/wp-diff.php
changeset 5 5e2f62d02dcd
parent 0 d970ebf37754
child 7 cf61fcea0001
--- a/wp/wp-includes/wp-diff.php	Mon Jun 08 16:11:51 2015 +0000
+++ b/wp/wp-includes/wp-diff.php	Tue Jun 09 03:35:32 2015 +0200
@@ -28,27 +28,27 @@
 	/**
 	 * @see Text_Diff_Renderer::_leading_context_lines
 	 * @var int
-	 * @access protected
+	 * @access public
 	 * @since 2.6.0
 	 */
-	var $_leading_context_lines  = 10000;
+	public $_leading_context_lines  = 10000;
 
 	/**
 	 * @see Text_Diff_Renderer::_trailing_context_lines
 	 * @var int
-	 * @access protected
+	 * @access public
 	 * @since 2.6.0
 	 */
-	var $_trailing_context_lines = 10000;
+	public $_trailing_context_lines = 10000;
 
 	/**
-	 * {@internal Missing Description}}
+	 * Threshold for when a diff should be saved or omitted.
 	 *
 	 * @var float
 	 * @access protected
 	 * @since 2.6.0
 	 */
-	var $_diff_threshold = 0.6;
+	protected $_diff_threshold = 0.6;
 
 	/**
 	 * Inline display helper object name.
@@ -57,7 +57,7 @@
 	 * @access protected
 	 * @since 2.6.0
 	 */
-	var $inline_diff_renderer = 'WP_Text_Diff_Renderer_inline';
+	protected $inline_diff_renderer = 'WP_Text_Diff_Renderer_inline';
 
 	/**
 	 * Should we show the split view or not
@@ -66,7 +66,9 @@
 	 * @access protected
 	 * @since 3.6.0
 	 */
-	var $_show_split_view = true;
+	protected $_show_split_view = true;
+
+	protected $compat_fields = array( '_show_split_view', 'inline_diff_renderer', '_diff_threshold' );
 
 	/**
 	 * Constructor - Call parent constructor with params array.
@@ -77,7 +79,7 @@
 	 *
 	 * @param array $params
 	 */
-	function __construct( $params = array() ) {
+	public function __construct( $params = array() ) {
 		parent::__construct( $params );
 		if ( isset( $params[ 'show_split_view' ] ) )
 			$this->_show_split_view = $params[ 'show_split_view' ];
@@ -89,7 +91,7 @@
 	 * @param string $header
 	 * @return string
 	 */
-	function _startBlock( $header ) {
+	public function _startBlock( $header ) {
 		return '';
 	}
 
@@ -99,7 +101,7 @@
 	 * @param array $lines
 	 * @param string $prefix
 	 */
-	function _lines( $lines, $prefix=' ' ) {
+	public function _lines( $lines, $prefix=' ' ) {
 	}
 
 	/**
@@ -108,7 +110,7 @@
 	 * @param string $line HTML-escape the value.
 	 * @return string
 	 */
-	function addedLine( $line ) {
+	public function addedLine( $line ) {
 		return "<td class='diff-addedline'>{$line}</td>";
 
 	}
@@ -119,7 +121,7 @@
 	 * @param string $line HTML-escape the value.
 	 * @return string
 	 */
-	function deletedLine( $line ) {
+	public function deletedLine( $line ) {
 		return "<td class='diff-deletedline'>{$line}</td>";
 	}
 
@@ -129,7 +131,7 @@
 	 * @param string $line HTML-escape the value.
 	 * @return string
 	 */
-	function contextLine( $line ) {
+	public function contextLine( $line ) {
 		return "<td class='diff-context'>{$line}</td>";
 	}
 
@@ -138,23 +140,40 @@
 	 *
 	 * @return string
 	 */
-	function emptyLine() {
+	public function emptyLine() {
 		return '<td>&nbsp;</td>';
 	}
 
 	/**
 	 * @ignore
-	 * @access private
+	 * @access public
 	 *
 	 * @param array $lines
 	 * @param bool $encode
 	 * @return string
 	 */
-	function _added( $lines, $encode = true ) {
+	public function _added( $lines, $encode = true ) {
 		$r = '';
 		foreach ($lines as $line) {
-			if ( $encode )
-				$line = htmlspecialchars( $line );
+			if ( $encode ) {
+				$processed_line = htmlspecialchars( $line );
+
+				/**
+				 * Contextually filter a diffed line.
+				 *
+				 * Filters TextDiff processing of diffed line. By default, diffs are processed with
+				 * htmlspecialchars. Use this filter to remove or change the processing. Passes a context
+				 * indicating if the line is added, deleted or unchanged.
+				 *
+				 * @since 4.1.0
+				 *
+				 * @param String $processed_line The processed diffed line.
+				 * @param String $line           The unprocessed diffed line.
+		 		 * @param string null            The line context. Values are 'added', 'deleted' or 'unchanged'.
+				 */
+				$line = apply_filters( 'process_text_diff_html', $processed_line, $line, 'added' );
+			}
+
 			if ( $this->_show_split_view ) {
 				$r .= '<tr>' . $this->emptyLine() . $this->emptyLine() . $this->addedLine( $line ) . "</tr>\n";
 			} else {
@@ -166,17 +185,21 @@
 
 	/**
 	 * @ignore
-	 * @access private
+	 * @access public
 	 *
 	 * @param array $lines
 	 * @param bool $encode
 	 * @return string
 	 */
-	function _deleted( $lines, $encode = true ) {
+	public function _deleted( $lines, $encode = true ) {
 		$r = '';
 		foreach ($lines as $line) {
-			if ( $encode )
-				$line = htmlspecialchars( $line );
+			if ( $encode ) {
+				$processed_line = htmlspecialchars( $line );
+
+				/** This filter is documented in wp-includes/wp-diff.php */
+				$line = apply_filters( 'process_text_diff_html', $processed_line, $line, 'deleted' );
+			}
 			if ( $this->_show_split_view ) {
 				$r .= '<tr>' . $this->deletedLine( $line ) . $this->emptyLine() . $this->emptyLine() . "</tr>\n";
 			} else {
@@ -189,17 +212,21 @@
 
 	/**
 	 * @ignore
-	 * @access private
+	 * @access public
 	 *
 	 * @param array $lines
 	 * @param bool $encode
 	 * @return string
 	 */
-	function _context( $lines, $encode = true ) {
+	public function _context( $lines, $encode = true ) {
 		$r = '';
 		foreach ($lines as $line) {
-			if ( $encode )
-				$line = htmlspecialchars( $line );
+			if ( $encode ) {
+				$processed_line = htmlspecialchars( $line );
+
+				/** This filter is documented in wp-includes/wp-diff.php */
+				$line = apply_filters( 'process_text_diff_html', $processed_line, $line, 'unchanged' );
+			}
 			if (  $this->_show_split_view ) {
 				$r .= '<tr>' . $this->contextLine( $line ) . $this->emptyLine() . $this->contextLine( $line )  . "</tr>\n";
 			} else {
@@ -215,14 +242,14 @@
 	 * (TRAC style) sometimes these lines can actually be deleted or added rows.
 	 * We do additional processing to figure that out
 	 *
-	 * @access private
+	 * @access public
 	 * @since 2.6.0
 	 *
 	 * @param array $orig
 	 * @param array $final
 	 * @return string
 	 */
-	function _changed( $orig, $final ) {
+	public function _changed( $orig, $final ) {
 		$r = '';
 
 		// Does the aforementioned additional processing
@@ -246,7 +273,7 @@
 				$diff = $renderer->render( $text_diff );
 
 				// If they're too different, don't include any <ins> or <dels>
-				if ( $diff_count = preg_match_all( '!(<ins>.*?</ins>|<del>.*?</del>)!', $diff, $diff_matches ) ) {
+				if ( preg_match_all( '!(<ins>.*?</ins>|<del>.*?</del>)!', $diff, $diff_matches ) ) {
 					// length of all text between <ins> or <del>
 					$stripped_matches = strlen(strip_tags( join(' ', $diff_matches[0]) ));
 					// since we count lengith of text between <ins> or <del> (instead of picking just one),
@@ -309,11 +336,11 @@
 	 *
 	 * @since 2.6.0
 	 *
-	 * @param unknown_type $orig
-	 * @param unknown_type $final
-	 * @return unknown
+	 * @param array $orig
+	 * @param array $final
+	 * @return array
 	 */
-	function interleave_changed_lines( $orig, $final ) {
+	public function interleave_changed_lines( $orig, $final ) {
 
 		// Contains all pairwise string comparisons. Keys are such that this need only be a one dimensional array.
 		$matches = array();
@@ -391,48 +418,6 @@
 		}
 
 		return array($orig_matches, $final_matches, $orig_rows, $final_rows);
-
-/*
-		// Debug
-		echo "\n\n\n\n\n";
-
-		echo "-- DEBUG Matches: Orig -> Final --";
-
-		foreach ( $orig_matches as $o => $f ) {
-			echo "\n\n\n\n\n";
-			echo "ORIG: $o, FINAL: $f\n";
-			var_dump($orig[$o],$final[$f]);
-		}
-		echo "\n\n\n\n\n";
-
-		echo "-- DEBUG Matches: Final -> Orig --";
-
-		foreach ( $final_matches as $f => $o ) {
-			echo "\n\n\n\n\n";
-			echo "FINAL: $f, ORIG: $o\n";
-			var_dump($final[$f],$orig[$o]);
-		}
-		echo "\n\n\n\n\n";
-
-		echo "-- DEBUG Rows: Orig -- Final --";
-
-		echo "\n\n\n\n\n";
-		foreach ( $orig_rows as $row => $o ) {
-			if ( $o < 0 )
-				$o = 'X';
-			$f = $final_rows[$row];
-			if ( $f < 0 )
-				$f = 'X';
-			echo "$o -- $f\n";
-		}
-		echo "\n\n\n\n\n";
-
-		echo "-- END DEBUG --";
-
-		echo "\n\n\n\n\n";
-
-		return array($orig_matches, $final_matches, $orig_rows, $final_rows);
-*/
 	}
 
 	/**
@@ -444,7 +429,7 @@
 	 * @param string $string2
 	 * @return int
 	 */
-	function compute_string_distance( $string1, $string2 ) {
+	public function compute_string_distance( $string1, $string2 ) {
 		// Vectors containing character frequency for all chars in each string
 		$chars1 = count_chars($string1);
 		$chars2 = count_chars($string2);
@@ -456,7 +441,7 @@
 		if ( !$string1 )
 			return $difference;
 
-		// Return distance per charcter (of string1)
+		// Return distance per character (of string1).
 		return $difference / strlen($string1);
 	}
 
@@ -468,10 +453,69 @@
 	 * @param int $b
 	 * @return int
 	 */
-	function difference( $a, $b ) {
+	public function difference( $a, $b ) {
 		return abs( $a - $b );
 	}
 
+	/**
+	 * Make private properties readable for backwards compatibility.
+	 *
+	 * @since 4.0.0
+	 * @access public
+	 *
+	 * @param string $name Property to get.
+	 * @return mixed Property.
+	 */
+	public function __get( $name ) {
+		if ( in_array( $name, $this->compat_fields ) ) {
+			return $this->$name;
+		}
+	}
+
+	/**
+	 * Make private properties settable for backwards compatibility.
+	 *
+	 * @since 4.0.0
+	 * @access public
+	 *
+	 * @param string $name  Property to check if set.
+	 * @param mixed  $value Property value.
+	 * @return mixed Newly-set property.
+	 */
+	public function __set( $name, $value ) {
+		if ( in_array( $name, $this->compat_fields ) ) {
+			return $this->$name = $value;
+		}
+	}
+
+	/**
+	 * Make private properties checkable for backwards compatibility.
+	 *
+	 * @since 4.0.0
+	 * @access public
+	 *
+	 * @param string $name Property to check if set.
+	 * @return bool Whether the property is set.
+	 */
+	public function __isset( $name ) {
+		if ( in_array( $name, $this->compat_fields ) ) {
+			return isset( $this->$name );
+		}
+	}
+
+	/**
+	 * Make private properties un-settable for backwards compatibility.
+	 *
+	 * @since 4.0.0
+	 * @access public
+	 *
+	 * @param string $name Property to unset.
+	 */
+	public function __unset( $name ) {
+		if ( in_array( $name, $this->compat_fields ) ) {
+			unset( $this->$name );
+		}
+	}
 }
 
 /**
@@ -490,7 +534,7 @@
 	 * @param string $newlineEscape
 	 * @return string
 	 */
-	function _splitOnWords($string, $newlineEscape = "\n") {
+	public function _splitOnWords($string, $newlineEscape = "\n") {
 		$string = str_replace("\0", '', $string);
 		$words  = preg_split( '/([^\w])/u', $string, -1, PREG_SPLIT_DELIM_CAPTURE );
 		$words  = str_replace( "\n", $newlineEscape, $words );