All pastes #611728 Raw Edit

Piet parser

public php v1 · immutable
·published 2007-07-10 01:20 UTC
rendered paste body
<?phpfunction parsePiet($im) {	$lr=imagecolorallocate($im, 0xFF, 0xC0, 0xC0);	$ly=imagecolorallocate($im, 0xFF, 0xFF, 0xC0);	$lg=imagecolorallocate($im, 0xC0, 0xFF, 0xC0);	$lc=imagecolorallocate($im, 0xC0, 0xFF, 0xFF);	$lb=imagecolorallocate($im, 0xC0, 0xC0, 0xFF);	$lm=imagecolorallocate($im, 0xFF, 0xC0, 0xFF);	$mr=imagecolorallocate($im, 0xFF, 0x00, 0x00);	$my=imagecolorallocate($im, 0xFF, 0xFF, 0x00);	$mg=imagecolorallocate($im, 0x00, 0xFF, 0x00);	$mc=imagecolorallocate($im, 0x00, 0xFF, 0xFF);	$mb=imagecolorallocate($im, 0x00, 0x00, 0xFF);	$mm=imagecolorallocate($im, 0xFF, 0x00, 0xFF);	$dr=imagecolorallocate($im, 0xC0, 0x00, 0x00);	$dy=imagecolorallocate($im, 0xC0, 0xC0, 0x00);	$dg=imagecolorallocate($im, 0x00, 0xC0, 0x00);	$dc=imagecolorallocate($im, 0x00, 0xC0, 0xC0);	$db=imagecolorallocate($im, 0x00, 0x00, 0xC0);	$dm=imagecolorallocate($im, 0xC0, 0x00, 0xC0);	$white=imagecolorallocate($im, 0xFF, 0xFF, 0xFF);	$black=imagecolorallocate($im, 0x00, 0x00, 0x00);	$DPDIR=array("UP"=>array("X"=>0,"Y"=>-1), "DOWN"=>array("X"=>0,"Y"=>1), "LEFT"=>array("X"=>-1,"Y"=>0), "RIGHT"=>array("X"=>1,"Y"=>0));	$CCDIR=array("LEFT"=>1, "RIGHT"=>2);	global $valueStack=array();	global $DP=$DPDIR["RIGHT"];	global $CC=$CCDIR["LEFT"];	global $BLOCKLIST=array();	$X=0;	$Y=0;	global $TERMINATE=FALSE;	while(!$TERMINATE) {		$CODEL=imagecolorat($im, $X, $Y);		$NEXTX=$X+$DP["X"];		$NEXTY=$Y+$DP["Y"];		$DPCCCHANGE=0;		$DPCCCHANGECOUNT=0;		while((!isCodel($im, $NEXTX, $NEXTY)||imagecolorat($im, $NEXTX, $NEXTY)==$black)&&!$TERMINATE) {			if($DPCCCHANGE==0) {				toggleCC();				$DPCCCHANGE=1;				$DPCCCHANGECOUNT++;			} else {				toggleDP();				$DPCCCHANGE=0;				$DPCCCHANGECOUNT++;			}			$NEXTX=$X+$DP["X"];			$NEXTY=$Y+$DP["Y"];			if($DPCCCHANGECOUNT==9) {				$TERMINATE=TRUE;			}		}		if(!$TERMINATE) {			$NEXTCODEL=imagecolorat($im, $NEXTX, $NEXTY);			if($NEXTCODEL!=$CODEL&&$CODEL!=$white) parseCodel($im, $NEXTX, $NEXTY, $CODEL);		}	}}function parseCodel($im, $X, $Y, $origin) {	$CODEL=imagecolorat($im, $X, $Y);	findBlockSize($im, $X, $Y);	$BLOCKSIZE=count($BLOCKLIST);	$BLOCKLIST=array();	$command=0;		}function findBlockSize($im, $X, $Y) {	$CODEL=imagecolorat($im, $X, $Y);	array_push($BLOCKLIST, array($X, $Y);	if(isCodel($im, $X, $Y-1)) {		$UP=imagecolorat($im, $X, $Y-1);		if($UP=$CODEL&&!array_key_exists(array($X, $Y-1), $BLOCKLIST)) {			findBlockSize($im, $X, $Y-1);		}	}	if(isCodel($im, $X, $Y-1)) {		$DOWN=imagecolorat($im, $X, $Y+1);		if($DOWN=$CODEL&&!array_key_exists(array($X, $Y+1), $BLOCKLIST)) {			findBlockSize($im, $X, $Y+1);		}	}	if(isCodel($im, $X, $Y-1)) {		$LEFT=imagecolorat($im, $X-1, $Y);		if($LEFT=$CODEL&&!array_key_exists(array($X-1, $Y), $BLOCKLIST)) {			findBlockSize($im, $X-1, $Y);		}	}	if(isCodel($im, $X, $Y-1)) {		$RIGHT=imagecolorat($im, $X+1, $Y);		if($UP=$CODEL&&!array_key_exists(array($X+1, $Y), $BLOCKLIST)) {			findBlockSize($im, $X+1, $Y);		}	}}function isCodel($im, $X, $Y) {	$XSIZE=imagesx($im);	$YSIZE=imagesy($im);	if($X>0&&$Y>0&&$X<$XSIZE&&$Y<$YSIZE) return TRUE; else return FALSE;}function toggleDP() {	switch($DP) {	case $DPDIR["RIGHT"]:		$DP=$DPDIR["LEFT"];		break;	case $DPDIR["LEFT":		$DP=$DPDIR["DOWN"];		break;	case $DPDIR["DOWN"]:		$DP=$DPDIR["UP"];		break;	case $DPDIR["UP"]:		$DP=$DPDIR["RIGHT"];		break;	}}function toggleCC() {	switch($CC) {	case $CCDIR["LEFT"]:		$CC=$CCDIR["RIGHT"];		break;	case $CCDIR["RIGHT"]:		$CC=$CCDIR["LEFT"];		break;	}}?>