Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Colorear o formatear palabras reservadas (BBCode)

Hola compañeros, estoy tratando de crear unas etiquetas (tags) con BBCode, y tengo lo siguiente:

Código:
<div class="post" id="msg_4"><div class="codeheader">Texto:</div><div class="code"><pre style="margin-top: 0; display: inline;">{content}</div>
donde {content} es el contenido a formatear, ahora, quería saber si conocen algún javascript que coloree o formatee algunas palabras específicas o reservadas para implementarla junto al código BBCode.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 03-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Traté de implementar este código que conseguí aquí en el club:

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 (
     
"Piedra""Tijeras""Lápiz""Hoja"
    
);

    
// 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

?>
Mi código BBCode:

Código PHP:
<div class="post" id="msg_4"><div class="codeheader">Texto:</div><div class="code"><pre style="margin-top: 0; display: inline;"><?php $colorize = new delphi2html();
     echo 
$colorize->execute({content}, truetrue); ?></div>
¿Problema?:

Cita:
Fatal error: Cannot redeclare class delphi2html in C:\AppServ\www\smf\Sources\Delphi.php on line 41
lo que hice fue, grabé ese código en un archivo Texto.php, y lo incluí en el php donde se usa los tags.

¿A qué se debe ese error?.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 03-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
¡Buenos Días!, poniendo el hilo de primero para que algún alma caritativa me ayude .

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 03-11-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hay que aclarar un par de cosas, al menos. La clase que has mostrado más arriba está escrita en PHP y funcionará con PHP, pero, no con JavaScript. El código que tienes que resaltar parece puro HTML, y, contiene una especie de "clave" ({content}) que acaso deberá ser reemplazada por el verdadero contenido, o sea el código fuente que se va a mostrar.

Ahora bien, PHP y Javascript son hasta cierto punto incompatibles, porque, el primero funciona en el servidor, y, el segundo lo hace en el cliente o navegador. Si tienes acceso al código fuente PHP del sistema que usas (que creo que sí) entonces tal vez podrías usar la clase "Delphi2Html", pero, si se trata de trabajar en el cliente, con Javascript, entonces no podrías usarla así como así.

Desde luego hay soluciones para "resaltar" código fuente utilizando Javascript, como pueda ser la que ofrece SHJS (no es la que yo conocía, pero, apareció tras una búsqueda en Google, y es que debe haber varias soluciones similares), así que es cuestión de aclarar un poco más las cosas. De todas formas, no te digo nada que no sepas ya, pero, ¿qué hay de algún plugin para el sistema de foros que estás usando? Igual podrías partir de ahí... o intentar aclarar qué tipo de solución necesitas: Javascript o PHP.
Responder Con Cita
  #5  
Antiguo 03-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola Dec, pos sí estoy usando PHP no Javascript, yo sólo sugerí si existía alguno, lo que hice fue es que en el archivo donde se maneja las etiquetas de dicho foro hice un include (include 'delphi2html.php') y en el código HTML donde te muestro puse a ejecutar la función execute de la clase y al correr el foro me ocasionó dicho error, repito, no estoy trabajando con javascript sino PHP.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 03-11-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Pues ciñéndonos al error, de lo que se trata es de que no puede declararse dos veces la misma clase, es decir, puede ser que se esté incluyendo dos veces el archivo que contiene la clase, o puede ser que exista otra clase que se llame igual. Sería cuestión de buscar qué puede estar ocurriendo, pero, una solución para salir del paso sería usar "include_once" o "require_once" en lugar de "include" o "require", puesto que así nos aseguraríamos de que no incluímos el archivo de la clase sino una sola vez.

Por otro lado, si estás trabajando del lado del servidor, la clase en cuestión no parece muy complicada (y eso que la escribí yo hace tiempo) y sólo precisa una cadena como argumento en su método principal "Execute()". El mismo método retorna el código fuente una vez "resaltado", así que en principio no me parece muy complicado su uso, si bien dependerá del entorno en que te estés moviendo, y que yo desconozco, me temo.
Responder Con Cita
  #7  
Antiguo 03-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, tengo este array que crea la etiqueta del archivo origina y le hice unas modificacionesl:

Código PHP:
array(
            'tag' => 'texto',
            'type' => 'unparsed_content',
            'content' => '<div class="codeheader">' . $txt['smf238'] . ':</div><div class="code">' . ($context['browser']['is_gecko'] ? '<pre style="margin-top: 0; display: inline;"><? $colorize = new delphi2html(); echo $colorize->execute("$1",true,true); ?></pre>' : '$1') . '</div>',
            'block_level' => true,                        
            ),
Resultado:

Cita:
execute("Hoja de maquina y Lápiz de carbon",true,true); ?>
esa es la cita que muestra sin coloreado. Lo que hice fue poner la clase directo en el archivo php original en vez de include y require ya que me daba cierto problema.

Saludos,
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 03-11-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No entiendo muy bien qué es "Hoja de maquina y Lápiz de carbon". ¿Es el código a colorear? Pero ahí no hay código que colorear... Por otro lado, tendrías que hacer alguna prueba para asegurarte de que en "$1" recibes el código fuente a colorear, puesto que, recibiéndolo, el asunto debería funcionar más o menos. Y digo más o menos porque estamos hablando de aplicar un determinado estilo a ciertas etiquetas HTML. Ahora bien, no estamos solos en la página, y otros estilos pueden ser aplicados, que, incluso tengan mayor relevancia que los nuestros.

Debes asegurarte (mirando el código HTML resultante) de que estás obteniendo el resultado adecuado, o qué resultado estás obteniendo.
Responder Con Cita
  #9  
Antiguo 03-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola Dec, ya pude conseguir un mod para el SMF y me ha funcionado de pelos, y se llama Geshi y GeshiSmf, gracias por tu ayuda amigo.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #10  
Antiguo 03-11-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ya te dije yo que... era raro que no hubiera algo ya hecho, y basándose, precisamente, en Geshi, como otros muchos proyectos.
Responder Con Cita
  #11  
Antiguo 04-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola,

Ya te dije yo que... era raro que no hubiera algo ya hecho, y basándose, precisamente, en Geshi, como otros muchos proyectos.
Hola Dec, estoy teniendo problemas agregando una linea, según la documentación debe ser así:

Código PHP:
$geshi->set_line_style('background: red;''background: blue;'true); 
y me ocurre este error:

Cita:
Parse error: syntax error, unexpected T_STRING in C:\AppServ\www\smf\Sources\Subs.php on line 1180
También dice que puede ser así:

Código PHP:
$geshi->set_line_style('background: #fcfcfc;''background: #f0f0f0;'); 
y también me ocurre el mismo error:

Cita:
Parse error: syntax error, unexpected T_STRING in C:\AppServ\www\smf\Sources\Subs.php on line 1180
tengo tiempo que no manejo php , el problema está en el sintaxis de esa línea, he probado de todo y nada.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #12  
Antiguo 04-11-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

La sintaxis de esa línea parece correcta, o me equivoco. ¿Qué pasa exactamente en la línea 1180 del archivo "Subs.php"? Igual debes mirar por ahí, porque, ya digo, no parece que haya ningún error de sintaxis en el código que muestras. ¿Funciona el asunto si no usas ese método de Geshi? ¿Falla también?
Responder Con Cita
  #13  
Antiguo 04-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
La línea 1180 es esa misma, la cuestión funciona si quito la línea, pero es una opción que quiero tener, lo que no entiendo es porque da ese error.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #14  
Antiguo 04-11-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Supongo que revisaste la documentación de Geshi a este respecto. No sé. Por lo visto hay varias formas de usar el método que te da problemas, mejor dicho, los parámetros del mismo varían, según otras opciones de Geshi. Igual por ahí van los tiros. Me sorprende el error (aunque no estoy trabajando con ello) porque, personalmente, no veo error de sintaxis en esa línea en concreto... e igual está ahí a punto de comerme.
Responder Con Cita
  #15  
Antiguo 04-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola,

Supongo que revisaste la documentación de Geshi a este respecto. No sé. Por lo visto hay varias formas de usar el método que te da problemas, mejor dicho, los parámetros del mismo varían, según otras opciones de Geshi. Igual por ahí van los tiros. Me sorprende el error (aunque no estoy trabajando con ello) porque, personalmente, no veo error de sintaxis en esa línea en concreto... e igual está ahí a punto de comerme.
, sí dec, he revisado la documentación, he cambiado, quitado, cambiado apóstrofe, doble comillas y comillas hasta el punto que el tiro me la pego yo
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Formatear fechas rgstuamigo MySQL 2 08-10-2008 20:37:20
Html a BBCode chechudella Internet 0 01-11-2007 03:23:59
Formatear scripts SQL DarKraZY Varios 5 22-12-2006 17:58:27
formatear un StringGrid vico_tigre OOP 2 14-12-2006 11:14:42
formatear User_Baja_2 Varios 1 22-10-2003 19:47:41


La franja horaria es GMT +2. Ahora son las 23:55:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi