プログラミング

PHPのソースを色分けするスクリプト

2010年7月11日

jp_SearchJeansTagsで使った、PHPコードを色分けする部分のコードは、次の通り。他でも使えそうなので、メモをかねてここにアップしておくことにする。

	static private function color_code($m){
		static $statements;
		if (!is_array($m) && !isset($statements)) {
			$statements=array('abstract','and','array','as','break',
				'case','catch','class','clone',
				'const','continue','declare','default','do',
				'else','elseif','enddeclare','endfor','endforeach',
				'endif','endswitch','endwhile','extends','final',
				'for','foreach','function','global','goto',
				'if','implements','interface','instanceof',
				'namespace','new','or','private',
				'protected','public','static','switch','throw',
				'try','use','var','while','xor',
				'die','echo','empty','exit','eval',
				'include','include_once','isset','list','require',
				'require_once','return','print','unset');
			$search='/\*[\s\S]*?\*/';            // multi line comments
			$search.='|//.*[\r\n]';              // single line comments
			$search.='|#.*[\r\n]';               // single line comments
			$search.='|\?>[\s\S]*?<\?php';       // strings
			$search.='|\$?(?:[a-z_][a-z0-9_]*)'; // valiables, statements and functions
			$search.='|[0-9]+';                  // numbers
			$search.='|"(?:\\\\.|[^"]*)"';       // strings
			$search.="|'(?:\\\\.|[^']*)'";       // strings
			return substr(preg_replace_callback('@'.$search.'@i',array('self','color_code'),'?>'.$m),2);
		}
		switch(substr($m[0],0,1)){
			case '/':
				return '<span style="color:grey;">'.$m[0].'</span>';
			case '$':
				return '<span style="color:brown;">'.$m[0].'</span>';
			case '"': case "'":
				return '<span style="color:green;">'.$m[0].'</span>';
			case '0': case '1': case '2': case '3': case '4': 
			case '5': case '6': case '7': case '8': case '9': 
				return '<span style="color:red;">'.$m[0].'</span>';
			default:
				if (in_array($m[0],$statements)) return '<span style="color: blue;">'.$m[0].'</span>';
				return $m[0];
		}
	}

使用の際は、半ばあたりの「array('self','color_code')」を変更するべし。

コメント

コメントはありません

コメント送信