Visit this project's SourceForge Project Page
Main Page | Class List | Directories | File List | Class Members | File Members | Related Pages

PhpCompiler.class.php

00001 <?php
00002 
00003 define( "START_TAG" , "/"."*NODEBUG{*"."/" );
00004 define( "END_TAG"   , "/"."*}NODEBUG*"."/" );
00005 
00015 class PhpCompiler
00016 {
00024     var $_UseMakeLibrary;
00025 
00033     var $_UseNoDebugCode;
00034 
00042     var $_UsePhpScrub;
00043 
00053     function & PhpCompiler()
00054     {
00055         $this->_UseMakeLibrary = FALSE;
00056         $this->_UseNoDebugCode = TRUE;
00057         $this->_UsePhpScrub    = TRUE;
00058         return($this);
00059     }
00060 
00074     function ChangeMode($NewModes=array())
00075     {
00076         $name_conversion = array(
00077             "library"    => "_UseMakeLibrary",
00078             "nodebug"    => "_UseNoDebugCode",
00079             "whitespace" => "_UsePhpScrub",
00080             );
00081 
00082         if(!is_array($NewModes))
00083         {
00084             return(FALSE);
00085         }
00086 
00087         foreach($NewModes as $Name => $Value)
00088         {
00089             if(!isset($name_conversion[$Name]))
00090             {
00091                 return(FALSE);
00092             }
00093 
00094             if(!is_bool($Value))
00095             {
00096                 return(FALSE);
00097             }
00098 
00099             $Name = $name_conversion[$Name];
00100             $this->$Name = $Value;
00101         }
00102 
00103         return(TRUE);
00104     }
00105 
00116     function GetModes()
00117     {
00118         return(array(
00119             array(
00120                 "Name"        => "library",
00121                 "Default"     => FALSE,
00122                 "Description" =>
00123                     "Remove extra newlines and php tags"
00124                 ),
00125             array(
00126                 "Name"        => "nodebug",
00127                 "Default"     => TRUE,
00128                 "Description" =>
00129                     "Remove /*NODEBUG{*/.../*}NODEBUG*/ blocks"
00130                 ),
00131             array(
00132                 "Name"        => "whitespace",
00133                 "Default"     => TRUE,
00134                 "Description" =>
00135                     "Pass through 'php -w'"
00136                 ),
00137             ));
00138     }
00139 
00149     function GetErrors()
00150     {
00151         return(array());
00152     }
00153 
00167     function Compile($Input)
00168     {
00169         if(!is_string($Input))
00170         {
00171             return("");
00172         }
00173 
00174         if($this->_UseNoDebugCode)
00175         {
00176             $Input = $this->NoDebugCode($Input);
00177         }
00178         if($this->_UsePhpScrub)
00179         {
00180             $Input = $this->PhpScrub($Input);
00181         }
00182         if($this->_UseMakeLibrary)
00183         {
00184             $Input = $this->MakeLibrary($Input);
00185         }
00186 
00187         return($Input);
00188     }
00189 
00219     function MakeLibrary($Input)
00220     {
00221         $replace = array(
00222             '/\n/s'         => ''          , # Remove all newlines
00223             '/\<\?'.'php/s' => ''          , # Remove all open  tags
00224             '/\?\>/s'       => ''          , # Remove all close tags
00225             '/^/s'          => '<?'.'php ' , # Add beginning open  tag
00226             '/$/s'          => ' ?'.'>'    , # Add ending    close tag
00227             );
00228 
00229         $Input = preg_replace(
00230                 array_keys($replace),
00231                 array_values($replace),
00232                 $Input
00233                 );
00234 
00235         return($Input);
00236     }
00237 
00259     function NoDebugCode($Input)
00260     {
00261         $strlen = strlen($Input);
00262         $inblock = FALSE;
00263         $return = "";
00264         $block = "";
00265         for($x = 0; $x < $strlen; $x++)
00266         {
00267             if(START_TAG == substr($Input, $x, strlen(START_TAG)))
00268             {
00269                 if($block)
00270                 {
00271                     $return .= $block;
00272                     $block = "";
00273                 }
00274 
00275                 $inblock = TRUE;
00276             }
00277             if(END_TAG == substr($Input, $x, strlen(END_TAG)))
00278             {
00279                 if($inblock)
00280                 {
00281                     $inblock = FALSE;
00282                     $block = "";
00283                     $x += strlen(END_TAG);
00284                 }
00285             }
00286             if(!$inblock)
00287             {
00288                 $return .= $Input[$x];
00289             }
00290             else
00291             {
00292                 $block .= $Input[$x];
00293             }
00294         }
00295 
00296         if($return !== $Input)
00297         {
00298             return($this->NoDebugCode($return));
00299         }
00300 
00301         return($return);
00302     }
00303 
00318     function PhpScrub($Input)
00319     {
00320         $Input = escapeshellarg($Input);
00321         $Command = "echo $Input | php -w ";
00322         $Return = shell_exec($Command);
00323         return($Return);
00324     }
00325 }
00326 
00327 return("PhpCompiler");
00328 
00329 ?>



Generously hosted by   SourceForge.net Logo
Generated on Wed Jun 1 11:01:06 2005 for EUrl by   Doxygen 1.4.1