今回のメインはdiff。
全体的に大体出来た。
あれがBacklogかBacklogでないかと言われれば、むしろBacklogだったんじゃないかな?
いや!!科学的な見解から言ってもBacklogであった確率が高いね!!
ユニファイド形式のdiff結果を配列にする
<?php public static function diff2array($difftxt) { $lines = SVN_Util::multiline2array($difftxt); $result = array(); $base = 0; $m_i = 0; $p_i = 0; $m_c = 0; $p_c = 0; foreach ($lines as $i=>$line) { if ($i<4) { continue; } switch (substr($line, 0, 1)) { case '@': list($m, $p) = explode(' ', trim($line, '@ ')); list($m_i) = explode(',', trim($m, '-')); list($p_i) = explode(',', trim($p, '+')); $base = $i; if (1<$m_i) { $result[$base] = array( 'mode' => 'skip', 'before' => array( 'num' => '..' ), 'after' => array( 'num' => '..' ) ); } $m_c = 1; $p_c = 1; break; case '-': $result[$base+$m_c] = array( 'mode' => 'delete', 'before' => array( 'num' => $m_i, 'txt' => substr($line, 1) ) ); $m_i++; $m_c++; break; case '+': $result[$base+$p_c]['mode'] = isset($result[$base+$p_c]['before']) ? 'modify' : 'insert'; $result[$base+$p_c]['after'] = array( 'num' => $p_i, 'txt' => substr($line, 1) ); $p_i++; $p_c++; break; default: $m_c = $p_c = max($m_c, $p_c); $result[$base+$m_c] = array( 'mode' => 'keep', 'before' => array( 'num' => $m_i, 'txt' => substr($line, 1) ), 'after' => array( 'num' => $p_i, 'txt' => substr($line, 1) ) ); $m_i++; $p_i++; $m_c++; $p_c++; break; } $i++; } $result = array_values($result); return $result; }