オプション--xmlをつければXML形式で出力してくれる。
その結果をSimpleXMLElementの第一引数に入れればObjectの出来上がり。
しかも、listでこのオプションを付けると--verboseをつけても出なかった「年」が出るようになる。
↓こんな感じでlistをパースしてたのがバカバカしく思えてきた。
<?php public function buildData($data) { $config = SVN_Config::getInstance(); $list = SVN_Util::multiline2array($data); $href_base = SVN_Util::getHttpBase().SVN_Util::parsePath('path').'/'; if ($config->getOption('verbose') && 0<count($list)) { // 文字有無 $char_list = array(); foreach ($list as $line) { $line = str_split($line); foreach ($line as $i=>$char) { if (!isset($char_list[$i])) { $char_list[$i] = false; } if ($char_list[$i]===false && $char!=' ') { $char_list[$i] = true; } } } // 始まりの位置 $start_list = array(); foreach ($char_list as $i=>$bool) { if ($bool && (!isset($char_list[$i-1]) || $char_list[$i-1]===false)) { $start_list[] = $i; } } // ファイルサイズ有無 $size_exists = true; if (is_numeric($list[0][$start_list[3]])) { $size_exists = false; } // 分割 $result = array(); foreach ($list as $line) { $item = array(); $i = 0; $item['Last_Changed_Rev'] = trim(substr($line, $start_list[$i], $start_list[$i+1]-$start_list[$i])); $i++; $item['Last_Changed_Author'] = trim(substr($line, $start_list[$i], $start_list[$i+1]-$start_list[$i])); $i++; $item['File_Size'] = ''; if ($size_exists) { $item['File_Size'] = trim(substr($line, $start_list[$i], $start_list[$i+1]-$start_list[$i])); $i++; } $item['Last_Changed_Date'] = trim(substr($line, $start_list[$i], $start_list[$i+3]-$start_list[$i])); $item['Last_Changed_Date'] = date($config->getConfig('date_format'), strtotime($item['Last_Changed_Date'])); $i += 3; $item['Path'] = trim(substr($line, $start_list[$i])); $item['Href'] = $href_base.$item['Path']; if ($item['Path']!='./') { $result[] = $item; } } return $result; } $result = array(); foreach ($list as $item) { if ($item!='./') { $result[] = array( 'Path' => $item, 'Href' => $href_base.$item ); } } return $result; }
ライブラリはPearのVersionControl_SVNっぽい感じで自分が使い易いように1から作り直した。
そんな感じでinfo/list/cat/logが出来た。
とりあえず、Backlogのデザインをパクった。
まともにCSS書いたのは3年ぶり位かもしれない。
また朝になってしまった。