tag [code] mejorado

Beavis

Para fomentar un poco el tag code en el foro de desarrollo (hasta ahora su uso es prácticamente nulo) hemos mejorado un poco su presentación con un un syntax highlighter y por otro lado hemos cambiado en el formulario de respuesta el botón de NSFW por el de [code] para facilitar su uso.
Como syntax highlighter usamos google code prettify ya que de los que estuve mirando era uno de los más ligeros y por encima de otras features es capaz de detectar el lenguaje sin tener que especificarlo uno mismo.

Algunos ejemplos:
PHP

<?php
#php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr ahora es array(2, 4, 6, 8)
unset($value); // rompe la referencia con el último elemento
?>

Python

#python
def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)

Javascript

//js
$(document).ready(function(){
    $("p.neat").addClass("ohmy").show("slow");
});

SQL

SELECT COUNT(p1.post_id) AS prev_posts
                                FROM phpbb_posts p1, phpbb_posts p2
                                WHERE p1.topic_id = 695
                                        AND p2.post_id = 744609
                                        AND p1.post_approved = 1
                                        AND p1.post_time <= p2.post_time
8
RaymaN

Gracias Beavis, como sugerencia, creo que no vendría mal meterle una Courier y que no haga salto de línea sino scroll horizontal.

1 respuesta
Beavis

#2 he metido courier a 12px, el tema del scroll horizontal no es tan sencillo ya que dado el markup que tiene el tag meter un overflow:auto implicaría perder el gutter con los números de las líneas y un efecto raro en el sombreado de líneas impares, ej:

1 respuesta
RaymaN

#3 yep me di cuenta al intentar ponérselo yo con el Stylish, pensé que tenía algún tipo de parámetro para definir el scroll, pero si no puede ser pues nada, sigue estando de puta madre.

Beavis

Por otro lado a mi personalmente no me gusta el sombreado de líneas alternas en el código, me parece que más que ayudar a identificar las líneas entorpece la lectura del código, por lo que podemos quitarlo simplemente.

Edit: mirando lo mal que queda courier al hacer el antialiasing he mejorado un poco el stack de fonts

font-family: "Consolas","Bitstream Vera Sans Mono","Courier New",Courier,monospace;

Por lo menos en OSX queda mucho mejor

1
NeB1

Mencanta!! :D

Tunnecino

Y la línea de comentarios en naranja? (sí, es una pijada lo sé xD).

Vamos a probar!

Mi código guay

<?php print_r('Hola mundo!'); ?>
spoiler

CSS:

/* Bordes curvos */
.curvedx3 {
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    /*behavior:url(js/border-radius.htc);*/
}
1 respuesta
Thanat0s

Mola cacho :D

PiradoIV
<?php
# Está genial, oiga, nos hacía mil de falta =)

:qq:

dr_Rouman

Aparte de que queda muy majo, a ver si el poner la etiqueta ahí hace que la gente lo empiece a usar por dios xD

NeB1

#7 print_r para imprimir un string?? xD

1 respuesta
LOc0
printf("Gracias");

Salu2 ;)

Tunnecino

#11 Coño, que era para ver el color de las funciones xD

Yo solo uso print_r para arrays:

<?php
echo '<pre>';
print_r($array);
echo '</pre>';
?>
1 respuesta
NeB1

#13 ok ok xDDD

tOWERR

En java:

System.out.println("Hola Mundo");
dr_Rouman

Cuánta cosa para imprimir una cadena :P

print 'Hola Foro 9'
Prueba de spoiler
NeB1
(format t "hola foro 9")

pfff no funciona guay pa lisp, no tiene mi aprobación!

APOCa
#!/bin/bash
ls -la foro/9
exit 0

:>

eXtreM3

Se podría implementar que cuando copias el código que viene en la etiqueta code no te copie los números de las lineas y las tabulaciones? Para que cuando pegues no salga así vaya

  1. #!/usr/bin/python

  2. #-- coding: utf-8 --
    3.

  3. import pygame, time, sys, os
    5.

  4. def cargar_imagen(archivo, transparencia = False):

  5. """ Cargamos una imagen y cogemos el color key en 0, 0 """
    8.

  6. l_archivo = archivo.rsplit('/')

  7. archivo = os.path.join(SYSPATH, l_archivo[0])

  8. for cadena in l_archivo[1:]:

  9. archivo = os.path.join(archivo, cadena)

  10. try:

  11. imagen = pygame.image.load(archivo)

  12. except pygame.error, message:

  13. raise SystemExit, message

  14. imagen = imagen.convert()

  15. if transparencia:

  16. color = imagen.get_at((0, 0))

  17. imagen.set_colorkey(color, pygame.RLEACCEL)

  18. return imagen

3 1 respuesta
BLZKZ
#include <iostream>
using namespace std;

// prueba de hola mundo
int main() 
{
    cout << "Hola mundo" << endl;
}
/*fin de prueba
*/
NeB1

#19 eso lo veo bastante acertado, la verdad

PiradoIV

Si es muy coñazo por tenerte que pegar con el CSS y tal, otra opción sería meterle un plugin jQuery de copy&paste, en vez de seleccionar y copiar.

http://plugins.jquery.com/plugin-tags/clipboard-copy

Zeroner

Probemos

import urllib2
from lxml.html import fromstring

def rec_view(content):
    print content
    for element in content:
        recview(element)

recview(fromstring(urllib2.urlopen('http://www.mediavida.com').read().decode('UTF-8')))

Pues parece que falla. Original: http://dpaste.com/355258/

1 respuesta
dagavi
import urllib2
from lxml.html import fromstring

def rec_view(content):
    print content
    for element in content:
        recview(element)

recview(fromstring(urllib2.urlopen('http://www.mediavida.com').read().decode('UTF-8')))

Es verdad, debe de ser porque no hay ni un espacio para hacer el salto.

Zeroner

Aun así el otro fallo es que se forma un enlace

que no deberia formarse

Beavis

#23 el problema en ese código es del parseador de urls, y la solución a eso no es nada sencilla así que de momento es algo con lo que tendremos que vivir

1 respuesta
NeB1

igual esto ya es pasarse de propuesta, pero dado que el problema suele venir con lineas extremadamente largas aparte de las URL's y con la forma de pasarlo a varias lineas y tal, y con los números de la izquierda.

¿se podrían poner dos botoncitos en la parte superior derecha de la zona de 'code', uno para copiar el texto sin los números, y otro para verlo maximizado como las imagenes, dentro de un lightbox o algo?

Tunnecino

#26 Y no podría hacerse "un apaño" que busque si existe la etiqueta

 y anular el pharser? Creo recordar que con php5 ya vienen funciones embebidas por lo que no habría ni que usar exp. reg.
dagavi

Es que se os copian los números?

Yo copio y lo que me sale es esto:

#python
def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x - 1)

Vamos, sin números, aunque si con 4 espacios delante de cada línea (además de mantener la indentación, claro, pero aquí no se ve si no meto el code).

Tunnecino

Pues seguro que Beavis lo acaba de arreglar. Que campeón xD