diff --git a/core/lib/Drupal/Component/Diff/DiffEngine.php b/core/lib/Drupal/Component/Diff/DiffEngine.php
index 07d6d943c664f86b8c9172649b420a1d8710ab71..cead529c3ad2f9896baffc25679d95156c5ce6ed 100644
--- a/core/lib/Drupal/Component/Diff/DiffEngine.php
+++ b/core/lib/Drupal/Component/Diff/DiffEngine.php
@@ -8,9 +8,11 @@
  * You may copy this code freely under the conditions of the GPL.
  */
 
-define('USE_ASSERTS', FALSE);
-
 use Drupal\Component\Utility\Settings;
+use Drupal\Component\Utility\String;
+use Drupal\Component\Utility\Unicode;
+
+define('USE_ASSERTS', FALSE);
 
 /**
  * @todo document
@@ -240,7 +242,7 @@ function diff($from_lines, $to_lines) {
    * Returns the whole line if it's small enough, or the MD5 hash otherwise.
    */
   function _line_hash($line) {
-    if (drupal_strlen($line) > $this->MAX_XREF_LENGTH()) {
+    if (Unicode::strlen($line) > $this->MAX_XREF_LENGTH()) {
       return md5($line);
     }
     else {
@@ -995,7 +997,7 @@ function addWords($words, $tag = '') {
       }
       if ($word[0] == "\n") {
         $this->_flushLine($tag);
-        $word = drupal_substr($word, 1);
+        $word = Unicode::substr($word, 1);
       }
       assert(!strstr($word, "\n"));
       $this->_group .= $word;
@@ -1039,7 +1041,7 @@ function _split($lines) {
         $words[] = "\n";
         $stripped[] = "\n";
       }
-      if ( drupal_strlen( $line ) > $this->MAX_LINE_LENGTH() ) {
+      if ( Unicode::strlen( $line ) > $this->MAX_LINE_LENGTH() ) {
         $words[] = $line;
         $stripped[] = $line;
       }
@@ -1222,140 +1224,3 @@ function _changed($orig, $closing) {
     }
   }
 }
-
-/**
- * Drupal inline Diff formatter.
- * @private
- * @subpackage DifferenceEngine
- */
-class DrupalDiffInline {
-  var $a;
-  var $b;
-
-  /**
-   * Constructor.
-   */
-  function __construct($a, $b) {
-    $this->a = $a;
-    $this->b = $b;
-  }
-
-  /**
-   * Render differences inline using HTML markup.
-   */
-  function render() {
-    $a = preg_split('/(<[^>]+?>| )/', $this->a, -1, PREG_SPLIT_DELIM_CAPTURE);
-    $b = preg_split('/(<[^>]+?>| )/', $this->b, -1, PREG_SPLIT_DELIM_CAPTURE);
-    $diff = new Diff($a, $b);
-    $diff->edits = $this->process_edits($diff->edits);
-
-    // Assemble highlighted output
-    $output = '';
-    foreach ($diff->edits as $chunk) {
-      switch ($chunk->type) {
-        case 'copy':
-          $output .= implode('', $chunk->closing);
-          break;
-        case 'delete':
-          foreach ($chunk->orig as $i => $piece) {
-            if (strpos($piece, '<') === 0 && drupal_substr($piece, drupal_strlen($piece) - 1) === '>') {
-              $output .= $piece;
-            }
-            else {
-              $diff_inline_chunk = array(
-                '#theme' => 'diff_inline_chunk',
-                '#text' => $piece,
-                '#type' => $chunk->type,
-              );
-              $output .= drupal_render($diff_inline_chunk);
-            }
-          }
-          break;
-        default:
-          $chunk->closing = $this->process_chunk($chunk->closing);
-          foreach ($chunk->closing as $i => $piece) {
-            if ($piece === ' ' || (strpos($piece, '<') === 0 && drupal_substr($piece, drupal_strlen($piece) - 1) === '>' && drupal_strtolower(drupal_substr($piece, 1, 3)) != 'img')) {
-              $output .= $piece;
-            }
-            else {
-              $diff_inline_chunk = array(
-                '#theme' => 'diff_inline_chunk',
-                '#text' => $piece,
-                '#type' => $chunk->type,
-              );
-              $output .= drupal_render($diff_inline_chunk);
-            }
-          }
-          break;
-      }
-    }
-    return $output;
-  }
-
-  /**
-   * Merge chunk segments between tag delimiters.
-   */
-  function process_chunk($chunk) {
-    $processed = array();
-    $j = 0;
-    foreach ($chunk as $i => $piece) {
-      $next = isset($chunk[$i+1]) ? $chunk[$i+1] : NULL;
-      if (!isset($processed[$j])) {
-        $processed[$j] = '';
-      }
-      if (strpos($piece, '<') === 0 && drupal_substr($piece, drupal_strlen($piece) - 1) === '>') {
-        $processed[$j] = $piece;
-        $j++;
-      }
-      elseif (isset($next) && strpos($next, '<') === 0 && drupal_substr($next, drupal_strlen($next) - 1) === '>') {
-        $processed[$j] .= $piece;
-        $j++;
-      }
-      else {
-        $processed[$j] .= $piece;
-      }
-    }
-    return $processed;
-  }
-
-  /**
-   * Merge copy and equivalent edits into intelligible chunks.
-   */
-  function process_edits($edits) {
-    $processed = array();
-    $current = array_shift($edits);
-
-    // Make two passes -- first merge space delimiter copies back into their originals.
-    while ($chunk = array_shift($edits)) {
-      if ($chunk->type == 'copy' && $chunk->orig === array(' ')) {
-        $current->orig = array_merge((array) $current->orig, (array) $chunk->orig);
-        $current->closing = array_merge((array) $current->closing, (array) $chunk->closing);
-      }
-      else {
-        $processed[] = $current;
-        $current = $chunk;
-      }
-    }
-    $processed[] = $current;
-
-    // Initial setup
-    $edits = $processed;
-    $processed = array();
-    $current = array_shift($edits);
-
-    // Second, merge equivalent chunks into each other.
-    while ($chunk = array_shift($edits)) {
-      if ($current->type == $chunk->type) {
-        $current->orig = array_merge((array) $current->orig, (array) $chunk->orig);
-        $current->closing = array_merge((array) $current->closing, (array) $chunk->closing);
-      }
-      else {
-        $processed[] = $current;
-        $current = $chunk;
-      }
-    }
-    $processed[] = $current;
-
-    return $processed;
-  }
-}