Ver Mensaje Individual
  #22  
Antiguo 14-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Para quien le pueda interesar, no he podido resistirme a lo siguiente.


Código PHP:
<?php // magic!

/*
    delphi2html PHP class v1.0b

    (w) 2005 David Esperalta Calderón

    Thanks very much to the people of ClubDelphi Forums
    ([url]http://www.clubdelphi.com[/url]) and specially to Román
    from the idea and tutorial. ¡Thanks to all! ;-)

    Comments are welcome in davidesperalta @ gmail.com
    or in the ClubDelphi Forums (see url above)

*/

/*
    // Example usage 1
    //
    $colorize = new delphi2html();
     $file = file('./delphi_unit.pas');
    foreach ($file as $line) $temp .= $line;
     echo $colorize->execute($temp, true, true);

*/

/*
    // Example usage 2
    //
    $colorize = new delphi2html();
    $text = "type\n";
    $text .= " TForm1 = class(TForm)\n";
    $text .= " { Private declarations }\n";
    $text .= " private\n";
    $text .= "    procedure AMethod(param: string);\n";
    $text .= " end;\n";
    echo $colorize->execute($text, true, true);

*/    

class delphi2html {

    
// Style (CSS code)
    //
    
var $css_style =
     
"<style type='text/css'>
         .str { background-color: transparent; color: Green; }
         .idn { background-color: transparent; color: Black; }
         .res { background-color: transparent; color: Navy; font-weight: bold; }
         .com { background-color: transparent; color: Gray; font-style: italic; }
     </style>\n"
;

    
// Reserved keywords in Delphi
    //
    
var $keybords = array (
     
"and""array""as""asm""begin""case""class""const",
     
"constructor""destructor""dispinterface""div""do""downto",
     
"else""end""except""exports""file""finalization""finally",
     
"for""function""goto""if""implementation""in""inherited",
     
"initialization""inline""interface""is""label""library",
     
"mod""nil""not""object""of""or""out""packed""procedure",
     
"program""property""raise""record""repeat""resourcestring",
     
"set""shl""shr""string""then""threadvar""to""try""type",
     
"unit""until""uses""var""while""with""xor""private",
     
"protected""public""published""automated"
    
);

    
// Regular Exp for strings, identifiers and comments tokens.
    //
    
var $reg_exp             "";
    var 
$reg_exp_strings     "('.*?')|";
    var 
$reg_exp_identifiers "([a-z_][a-z0-9_]*)|";
    var 
$reg_exp_comments    "(\{.*?\}|\(\*.*?\*\)|//.*?\n|//.*\$)";

    
// Class constructor.
    //
    
function delphi2html() {

        
$this->reg_exp "#".
         
$this->reg_exp_strings.
         
$this->reg_exp_identifiers.
         
$this->reg_exp_comments ."#si";
    }

    
// Callback function.
    //
    
function replace($matches) {

        switch (
$matches[0])
         {
            case 
$matches[1]: // strings
             
return "<span class='str'>" .$matches[1]. "</span>";
             break;

             case 
$matches[2]: // identifiers
                 
if (in_array($matches[2], $this->keybords))
                    return 
"<span class='res'>" .$matches[2]. "</span>";
                 else
                    return 
"<span class='idn'>" .$matches[2]. "</span>";
                 break;

             case 
$matches[3]: // comments
                 
return "<span class='com'>" .$matches[3]. "</span>";
                 break;
         }
    }

    
// The main public method: execute
    //
    // param: code, string: the delphi source code to colorize.
    // param: add_css_code, boolean: add the CSS code in result.
    // param: add_pre_tags, boolean: add the <pre></pre> HTML tags.
    //
    // return: HTML delphi colorized text.
    //
    
function execute($code$add_css_code true$add_pre_tags true) {

        
$result preg_replace_callback($this->reg_exp,
                    array(
$this'replace'), $code);
        
        if(!
$add_pre_tags) {
            
         if(!
$add_css_code) { return $result; }
         else { return 
$this->css_style $result; }            
        
        } else {
            
         if(!
$add_css_code) { return "<pre>" .$result"</pre>"; }
         else { return 
$this->css_style "<pre>" .$result"</pre>"; }
        
        }            
        
    } 
// function execute

// class delphi2html

?>
Muchas gracias otra vez Román.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 15-12-2005 a las 03:16:28. Razón: Corrección del texto.
Responder Con Cita