Friday 8 April 2011

Formatear código para publicar en blog

Habrás llegado aquí posiblemente buscando cómo poder publicar trozos de código en los artículos de tu blog o en tu propia web de documentación de software, etc... Ya sabes: con colores que destaquen la sintaxis del código y hagan más legible el código que publicas.

Pues bien, en mi caso me sucedió lo mismo. Y al final la solución aceptable que asumí para mi uso personal es la que comparto aquí con vosotros. Es un pequeño código de PHP que he colgado en uno de mis dominios y que podéis ver aquí abajo.

¿Qué hace? simplemente muestra una casilla textarea para introducir el código que quieres formatear, pulsas un botón "send" y se recarga la página con otro textarea con él código ya formateado y listo para copiar y pegar en tu blog, además de mostrar debajo el aspecto de cómo quedará ;) Así puedes hacer varios "intentos" hasta que veas que te guste.

No voy a echarme muchos méritos pero sí los que merezco: tomé de base un código muy parecido que hacía casi lo mismo, pero lo he mejorado en muchos aspectos, tanto en el formateado en sí como en la usabilidad de la "aplicación". Por ejemplo, el original no presentaba el segundo textarea para copiar y pegar el código sino que había que ver "el código fuente" de la página para copiarlo :( Y también tenía errores en el coloreado de los números de línea.

En fin, disfrútenlo:
1  <?php
2    
if( !empty( $_POST['codigo'] ) ) {
3         
$codigo $_POST['codigo'];
4         
$codigo str_replace"\t""     "$codigo );
5         
$codigo highlight_stringstripslashes$codigo ), true );
6         
$line 1;
7         
$buffer = array();
8         
$cod explode"<br />"$codigo );
9         foreach( 
$cod as $codLine ) {
10              
$buffer[] = "<b style='color:#888!important;'>".$line."</b>&nbsp;&nbsp;" $codLine;
11              
$line++;
12         }
13         
$codigo implode"<br />"$buffer );
14         
// quit ASCII break lines 
15         
$codigo str_replace("\r",'',$codigo);
16         
$codigo str_replace("\n",'',$codigo);
17         
// HACK: 
18         
$codigo str_replace"<b style='color:#888!important;'>1</b>&nbsp;&nbsp;<code>""<code><b style='color:#888!important;'>1</b>&nbsp;&nbsp;"$codigo );
19         
// FRAME DECORATION:
20         
$codigo "<div style='background-color:#eee;border:1px #aaa solid;padding:9px;margin:9px;'>".$codigo."</div>";
21    }
22    
?>
23  
  <html>
24    <head>
25         <title>Format Code</title>
26    </head>
27    <body>
28    
29    <div style='width:600px;margin:5px auto;line-height:1.3em;'>
30    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
31            <h2>1. Source code</h2>
32         <textarea rows="7" cols="80" name="codigo"><?php 
33              
echo htmlentities(stripslashes($_POST['codigo'])); ?></textarea>
34         <br />
35         <input type="submit" name="send" value="Send &darr;" />
36    </form>
37            <h2>2. Formatted code</h2>
38         <textarea rows="7" cols="80"><?php 
39         
echo htmlentities($codigo); ?></textarea><br />
40            <h2>3. Preview</h2>
41                   <?php echo $codigo?>
42  
  </div>
43    
44    </body>
45    </html>

Podéis descargarlo aquí: highlightingcode.tar.gz

Inconveniente: solamente colorea la sintaxis de PHP. Para los otros lenguajes (HTML, CSS, javascript, etc...) al menos añade los números de línea y conserva la tabulación, lo cuál es una gran ayuda, no?

La verdad, a mí, ya me es más que suficiente. Sería ideal que también coloreara otros lenguajes. En este sentido existe una librería gratuita muy interesante, pero ya se hace bastante más complicado usarla: SyntaxHighlighter.

1 comment:

  1. Es una muy buena forma de organizar la informacion para el diseño web

    ReplyDelete