當前位置: 首頁>>代碼示例>>PHP>>正文


PHP Text_Diff::_getTempDir方法代碼示例

本文整理匯總了PHP中Text_Diff::_getTempDir方法的典型用法代碼示例。如果您正苦於以下問題:PHP Text_Diff::_getTempDir方法的具體用法?PHP Text_Diff::_getTempDir怎麽用?PHP Text_Diff::_getTempDir使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在Text_Diff的用法示例。


在下文中一共展示了Text_Diff::_getTempDir方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。

示例1: diff

 /**
  * Returns the array of differences.
  *
  * @param array $from_lines lines of text from old file
  * @param array $to_lines   lines of text from new file
  *
  * @return array all changes made (array with Text_Diff_Op_* objects)
  */
 function diff($from_lines, $to_lines)
 {
     array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
     array_walk($to_lines, array('Text_Diff', 'trimNewlines'));
     $temp_dir = Text_Diff::_getTempDir();
     // Execute gnu diff or similar to get a standard diff file.
     $from_file = tempnam($temp_dir, 'Text_Diff');
     $to_file = tempnam($temp_dir, 'Text_Diff');
     $fp = fopen($from_file, 'w');
     fwrite($fp, implode("\n", $from_lines));
     fclose($fp);
     $fp = fopen($to_file, 'w');
     fwrite($fp, implode("\n", $to_lines));
     fclose($fp);
     $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
     unlink($from_file);
     unlink($to_file);
     if (is_null($diff)) {
         // No changes were made
         return array(new Text_Diff_Op_copy($from_lines));
     }
     $from_line_no = 1;
     $to_line_no = 1;
     $edits = array();
     // Get changed lines by parsing something like:
     // 0a1,2
     // 1,2c4,6
     // 1,5d6
     preg_match_all('#^(\\d+)(?:,(\\d+))?([adc])(\\d+)(?:,(\\d+))?$#m', $diff, $matches, PREG_SET_ORDER);
     foreach ($matches as $match) {
         if (!isset($match[5])) {
             // This paren is not set every time (see regex).
             $match[5] = false;
         }
         if ($match[3] == 'a') {
             $from_line_no--;
         }
         if ($match[3] == 'd') {
             $to_line_no--;
         }
         if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
             // copied lines
             assert('$match[1] - $from_line_no == $match[4] - $to_line_no');
             array_push($edits, new Text_Diff_Op_copy($this->_getLines($from_lines, $from_line_no, $match[1] - 1), $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
         }
         switch ($match[3]) {
             case 'd':
                 // deleted lines
                 array_push($edits, new Text_Diff_Op_delete($this->_getLines($from_lines, $from_line_no, $match[2])));
                 $to_line_no++;
                 break;
             case 'c':
                 // changed lines
                 array_push($edits, new Text_Diff_Op_change($this->_getLines($from_lines, $from_line_no, $match[2]), $this->_getLines($to_lines, $to_line_no, $match[5])));
                 break;
             case 'a':
                 // added lines
                 array_push($edits, new Text_Diff_Op_add($this->_getLines($to_lines, $to_line_no, $match[5])));
                 $from_line_no++;
                 break;
         }
     }
     if (!empty($from_lines)) {
         // Some lines might still be pending. Add them as copied
         array_push($edits, new Text_Diff_Op_copy($this->_getLines($from_lines, $from_line_no, $from_line_no + count($from_lines) - 1), $this->_getLines($to_lines, $to_line_no, $to_line_no + count($to_lines) - 1)));
     }
     return $edits;
 }
開發者ID:nagyist,項目名稱:laura-wordpress,代碼行數:76,代碼來源:shell.php


注:本文中的Text_Diff::_getTempDir方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。