<?php
/**
* @file
* @brief trac wikiページををpukiwiki形式に変換
* @note
* - php -q trac2pukiwiki.php trac-wiki.txt > pukiwiki.txt
* @todo
* - 定義語の変換が不十分 trac「定義語::\n説明文」/ pukiwiki「: 定義語 | 説明文」
*/

mb_internal_encoding('utf-8');
mb_http_input('pass');
mb_http_output('pass');

exit(main($argc, $argv));

function main($argc, $argv)
{
	$file = $argv[1];
	
	$fp = fopen($file, "r") or die("Can't open file. $file");
	while (($buffer = fgets($fp, 4096)) !== false) {
		$buffer = trac2pukiwiki($buffer);
		echo $buffer;
	}
	fclose($fp);
	
	return 0;
}

function trac2pukiwiki($str)
{
	$patterns = array(
		'/(.*)::$/',
		'/\[\[ParentWiki\]\]/',
		'/\[\[PageOutline\]\]/',
		'/\[\[BR\]\]/',
		'/^ \* /',
		'/^   \* /',
		'/^     \* /',
		'/^===(.*)===\s*$/',
		'/^==(.*)==\s*$/',
		'/^=(.*)=\s*$/',
		'/^     1\. /',
		'/^   1\. /',
		'/^ 1\. /',
		'/^>>>(.*?)/',
		'/^>>(.*?)/',
		'/^>(.*?)/',
		'/^\|\| (.*?) \|\| (.*?)/',
		'#\[(http?://[^ ]+) (.*)\]#',
		'/^{{{/',
		'/^}}}/',
		'/\!([A-Z]+[\w]+[A-Z]+[\w]+)/',
		'/^[\s\t]+$/',
		'/[\s\t]+$/',
	);
	$replacements = array(
		': $1 | ',
		'',
		'#contents',
		"&br;",
		'-$1',
		'--$1',
		'---$1',
		"***\$1\n",
		"**\$1\n",
		"*\$1\n",
		'+++$1',
		'++$1',
		'+$1',
		'>>>$1',
		'>>$1',
		'>$1',
		'; $1 \| $2',
		'[[$2>$1]]',
		'#geshi(,number=off){{',
		'}}',
		'$1',
		"\n",
		"\n",
	);

	$result = preg_replace($patterns, $replacements, $str);
	return $result;
}
