Domingo 17 de Noviembre de 2024, 19:52
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Asuntos Oficiales
»
Sobre los Foros de SoloCodigo
»
Cómo Poner Varios Espacios Seguidos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Cómo Poner Varios Espacios Seguidos (Leído 4643 veces)
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Cómo Poner Varios Espacios Seguidos
«
en:
Viernes 25 de Junio de 2004, 15:33 »
0
Hola.
He hecho un pequeño programa que lee un fichero de C++ y genera la sintaxis coloreada usando los tags del foro, para que quede el código bien claro. El problema es que si pongo varios espacios seguidos (porque las tabulaciones las convierto en espacios) al postearlo en el foro desaparecen, y pierdo la justificación del código. ¿Hay alguna manera de conservar los espacios sin usar el tag CODE (porque no me deja colorear CODE)?
Muchas gracias.
Ruben3d
PD: Si consigo sulocionar lo de los espacios haré una versión para Pascal.
PD2: Dejo un ejemplo de lo que genera el programa con un fichero de prueba. Se puede ver cómo todos los grupos de uno o más espacios son reducidos a uno al ser mostrado por el foro:
//
// ejcpp.cpp
//
/*
Fichero C++ de ejemplo
todo] Introducir más cosas
*/
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
using
namespace
std;
// Directiva multilinea
#define ASSERT(x) if (!(x)) \
{ \
cout << "La condicion \"" << #x << "\" ha fallado en " << __FILE__ << ":" << __LINE__ << endl; \
abort(); \
}
/*
CLASE CEscritor
Escribe el texto que se le asigne.
*/
class
CEscritor
{
public
:
CEscritor(string str) : m_str(str) {}
// Escribe el texto asignado mediante el constructor o asignar()
void
escribir();
// Le asigna un texto que se escribirá mediante asignar()
void
asignar(string &str);
private
:
std::string m_str;
};
void
CEscritor::escribir()
{
for
(
int
i=
0
; i<
5
; i++)
cout << m_str << endl;
}
void
CEscritor::asignar(string &str)
{
m_str = str;
}
/* Punto de entrada del programa */
int
main(
int
argc,
char
**argv[])
{
CEscritor *pEscritor =
new
CEscritor(string(
"Este texto tiene \"comillas dobles\""
));
ASSERT(pEscritor != NULL);
// Comprueba que nada haya fallado.
pEscritor->escribir();
delete
pEscritor;
// Libera la memoria
char
c =
'\''
;
char
ch =
'\xA2'
;
printf(
"El valor de 'c' es:
%c
.\n"
, c);
printf(
"Un float:
%02.2f
.\n"
,
4.2356f
);
double
d =
3.675
;
unsigned
short
int
usi =
0xA2
;
getchar();
return
0
;
}
Tweet
Personal
|
LinkedIn
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #1 en:
Viernes 25 de Junio de 2004, 15:51 »
0
Bueno. He llegado a una solución provisional poniendo el carácter '·' de color amarillo, de forma que se ve poco. Lo ideal sería tener un tag como el PRE de HTML para que la gente pudiera copiar y pegar el código sin tener que quitar los puntos que hacen de espacio. De esta manera queda así:
//
//
·
ejcpp.cpp
//
/*
Fichero
·
C++
·
de
·
ejemplo
todo:
·
Introducir
·
más
·
cosas
*/
#include
·
<iostream>
#include
·
<string>
#include
·
<cstdio>
#include
·
<cstdlib>
using
·
namespace
·
std;
//
·
Directiva
·
multilinea
#define
·
ASSERT(x)
····
if
·
(!(x))
····
\
····
····
····
····
····
{
····
····
····
\
····
····
····
····
····
····
cout
·
<<
·
"La
·
condicion
·
\""
·
<<
·
#x
·
<<
·
"\"
·
ha
·
fallado
·
en
·
"
·
<<
·
__FILE__
·
<<
·
":"
·
<<
·
__LINE__
·
<<
·
endl;
····
\
····
····
····
····
····
····
abort();
····
\
····
····
····
····
····
}
/*
····
CLASE
·
CEscritor
····
Escribe
·
el
·
texto
·
que
·
se
·
le
·
asigne.
*/
class
·
CEscritor
{
public
:
····
CEscritor(string
·
str)
·
:
·
m_str(str)
·
{}
····
//
·
Escribe
·
el
·
texto
·
asignado
·
mediante
·
el
·
constructor
·
o
·
asignar()
····
void
·
escribir();
····
//
·
Le
·
asigna
·
un
·
texto
·
que
·
se
·
escribirá
·
mediante
·
asignar()
····
void
·
asignar(string
·
&str);
private
:
····
std::string
·
m_str;
};
void
·
CEscritor::escribir()
{
····
for
·
(
int
·
i=
0
;
·
i<
5
;
·
i++)
····
····
cout
·
<<
·
m_str
·
<<
·
endl;
}
void
·
CEscritor::asignar(string
·
&str)
{
····
m_str
·
=
·
str;
}
/*
·
Punto
·
de
·
entrada
·
del
·
programa
·
*/
int
·
main(
int
·
argc,
·
char
·
**argv[])
{
····
CEscritor
·
*pEscritor
·
=
·
new
·
CEscritor(string(
"Este
·
texto
·
tiene
·
\"comillas
·
dobles\""
));
····
ASSERT(pEscritor
·
!=
·
NULL);
····
····
····
//
·
Comprueba
·
que
·
nada
·
haya
·
fallado.
····
pEscritor->escribir();
····
delete
·
pEscritor;
····
····
····
····
····
//
·
Libera
·
la
·
memoria
····
char
·
c
·
=
·
'\''
;
····
char
·
ch
·
=
·
'\xA2'
;
····
printf(
"El
·
valor
·
de
·
'c'
·
es:
·
%c
.\n"
,
·
c);
····
printf(
"Un
·
float:
·
%02.2f
.\n"
,
·
4.2356f
);
····
double
·
d
·
=
·
3.675
;
····
unsigned
·
short
·
int
·
usi
·
=
·
0xA2
;
····
getchar();
····
return
·
0
;
}
Personal
|
LinkedIn
iron man
Administrador
Mensajes: 1137
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #2 en:
Viernes 25 de Junio de 2004, 18:56 »
0
Tiene muy buena pinta el código coloreado.
Una pregunta: el único problema que has encontrado es el de los espacios o hay alguno más? Por ejemplo, si tienes una línea de código del tipo
Código: Text
cadena[i] = 'a';
¿convertirá el texto en cursiva desde el
=
en adelante o has encontrado algún truquillo para que no lo convierta?
Un saludo.
SoloCodigo - Admin
http://solocodigo.com
programacion
,
C
,
C++
,
C#
,
asm
,
php
,
visual basic
,
java
,
linux
,
videojuegos
,
directX
,
.NET
,
allegro
,
microcontroladores
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #3 en:
Viernes 25 de Junio de 2004, 19:03 »
0
Horror, no me lo había planteado. Sólo se me ocurre meter un espacio después de cada '[' de manera sistemática, para evitar que coincida con algún tag, aunque puede quedar un poco feo si no meto otro delante de los ']'. A no ser que exista alguna manera de poner un [ i ] u otros tags sin que lo interprete como tag, pero me da que no.
Un saludo.
Ruben3d
EDIT:
Bueno, parece que no queda tan mal con el invento de los espacios. Un poco espacioso, pero bueno. Pongo una comparación con cómo se vería con el tag CODE.
Código: Text
// test.cpp
void funcion()
{
char array[256];
for (int i=0; i<256; i++)
{
array[i] = i;
}
}
//
·
test.cpp
void
·
funcion()
{
····
char
·
array[
256
];
····
for
·
(
int
·
i=
0
;
·
i<
256
;
·
i++)
····
{
····
····
array[ i ]
·
=
·
i;
····
}
}
Personal
|
LinkedIn
iron man
Administrador
Mensajes: 1137
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #4 en:
Viernes 25 de Junio de 2004, 19:15 »
0
Creo que lo mejor será crear un tag nuevo, que sea como el CODE pero que reconozca el tag COLOR. Aparte del COLOR utilizas alguno más?
SoloCodigo - Admin
http://solocodigo.com
programacion
,
C
,
C++
,
C#
,
asm
,
php
,
visual basic
,
java
,
linux
,
videojuegos
,
directX
,
.NET
,
allegro
,
microcontroladores
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #5 en:
Viernes 25 de Junio de 2004, 19:17 »
0
Uso COLOR para los colores y FONT, para establecer Courier. ¡Muchas gracias por el interés! Cuando tenga la versión de Pascal lo pondré en la sección de Código Fuente o Utilidades (van los dos juntos en el mismo programa y se selecciona el lenguaje por parámetro).
Un saludo.
Ruben3d
Personal
|
LinkedIn
vradok
Miembro activo
Mensajes: 97
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #6 en:
Viernes 25 de Junio de 2004, 19:17 »
0
Si te preocupa el espacio siempre puedes poner un solo espacio , (aunque asi quiza el codigo sea menos legible
). Me explico:
Código: Text
posicion[ i]='c'
Un saludo
********************************************************
ladrones
vradok
Miembro activo
Mensajes: 97
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #7 en:
Viernes 25 de Junio de 2004, 19:19 »
0
Por cierto , espero con interes la version en Pascal. Tu idea me ha parecido muy buena
********************************************************
ladrones
iron man
Administrador
Mensajes: 1137
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #8 en:
Viernes 25 de Junio de 2004, 19:27 »
0
Vale, te respondí sin ver lo que habías añadido. No queda mal aunque el problema es lo que decías del
copiar y pegar
código porque luego hay que ir quitando los espacios.
Este fin de semana estoy liado pero la semana que viene lo investigaré a fondo. Lo del cambio de fuente a Courier se hará automático al poner el tag, así solo nos preocupamos por cambiar los tags COLOR, vale?
Un saludo.
SoloCodigo - Admin
http://solocodigo.com
programacion
,
C
,
C++
,
C#
,
asm
,
php
,
visual basic
,
java
,
linux
,
videojuegos
,
directX
,
.NET
,
allegro
,
microcontroladores
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #9 en:
Viernes 25 de Junio de 2004, 19:35 »
0
De acuerdo. Gracias de nuevo. Por otro lado, este programilla es una modificación de otro que ya tengo hecho que genera la salida en HTML. Cuando genero para Pascal lo hago con el fondo negro y con colores parecidos a los de FreePascal, aunque ya veré cómo adapto los colores para fondo claro.
Un saludo.
Ruben3d
Personal
|
LinkedIn
iron man
Administrador
Mensajes: 1137
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #10 en:
Martes 29 de Junio de 2004, 13:42 »
0
Esto es una prueba.
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>
XCODE
</td></tr><tr><td id='XCODE'><!--exc1-->
//
// ejcpp.cpp
//
/*
Fichero C++ de ejemplo
todo:
Introducir más cosas
*/
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
using namespace
std;
// Directiva multilinea
#define ASSERT(x) if (!(x)) \
{ \
cout << "La condicion \"" << #x << "\" ha fallado en " << __FILE__ << ":" << __LINE__ << endl; \
abort(); \
}
/*
CLASE CEscritor
Escribe el texto que se le asigne.
*/
class
CEscritor
{
public:
CEscritor(string str) : m_str(str) {}
// Escribe el texto asignado mediante el constructor o asignar()
void
escribir();
// Le asigna un texto que se escribirá mediante asignar()
void
asignar(string &str);
private:
std::string m_str;
};
void
CEscritor::escribir()
{
for
(
int
i=
0
; i<
5
; i++)
cout << m_str << endl;
}
void
CEscritor::asignar(string &str)
{
m_str = str;
}
void
funcion()
{
char
array[256];
for
(
int
i=
0
; i<
256
; i++)
{
array[i] = i;
}
}
/* Punto de entrada del programa */
int
main(
int
argc,
char
**argv[])
{
CEscritor *pEscritor =
new
CEscritor(string(
"Este texto tiene \"comillas dobles\""
));
ASSERT(pEscritor != NULL);
// Comprueba que nada haya fallado.
pEscritor->escribir();
delete
pEscritor;
// Libera la memoria
char
c =
'\''
;
char
ch =
'\xA2'
;
printf(
"El valor de 'c' es:
%c.
\n"
, c);
printf(
"Un float: %02.2f.\n"
,
4.2356f
);
double
d =
3.675
;
unsigned short int
usi =
0xA2
;
getchar();
return
0
;
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
SoloCodigo - Admin
http://solocodigo.com
programacion
,
C
,
C++
,
C#
,
asm
,
php
,
visual basic
,
java
,
linux
,
videojuegos
,
directX
,
.NET
,
allegro
,
microcontroladores
iron man
Administrador
Mensajes: 1137
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #11 en:
Martes 29 de Junio de 2004, 14:00 »
0
Bueno, creo que ya sale bien
Puedes probarlo usando el tag
XCODE
SoloCodigo - Admin
http://solocodigo.com
programacion
,
C
,
C++
,
C#
,
asm
,
php
,
visual basic
,
java
,
linux
,
videojuegos
,
directX
,
.NET
,
allegro
,
microcontroladores
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #12 en:
Martes 29 de Junio de 2004, 14:03 »
0
¡Gracias! Voy a acabar la versión de Pascal y lo subo a la sección de Código fuente.
Un saludo.
Ruben3d
Personal
|
LinkedIn
iron man
Administrador
Mensajes: 1137
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #13 en:
Martes 29 de Junio de 2004, 14:29 »
0
Gracias a ti por la aportación
Un saludo.
SoloCodigo - Admin
http://solocodigo.com
programacion
,
C
,
C++
,
C#
,
asm
,
php
,
visual basic
,
java
,
linux
,
videojuegos
,
directX
,
.NET
,
allegro
,
microcontroladores
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #14 en:
Martes 29 de Junio de 2004, 14:41 »
0
La versión de Pascal ya parece que funciona bien, no se ve tan bien como en HTML pero no está mal. No pongo el archivo entero, sólo un fragmento para que se vea.
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>
XCODE
</td></tr><tr><td id='XCODE'><!--exc1-->
(* --- FRAGMENTO --- *)
BEGIN
{ **** PROGRAMA PRINCIPAL **** }
{ Este es el valor de las variables, a no ser que las sobreescriba el CFG }
r_ScreenWidth :=
640
;
r_ScreenHeight :=
480
;
r_VideoMode :=
2
;
{ 640x480 }
r_DrawMode :=
0
;
{ Solo caras }
r_LightMode :=
2
;
{ Posicion de luz omni }
r_NormalizarColor := False;
{ Por defecto apagado }
r_MostrarFPS := True;
r_MostrarInfoObjeto := True;
r_MostrarInfoRender := True;
m_RotarObjeto := False;
{ Por defecto no se rota }
fichero :=
'nudo.geo'
;
{ Por defecto abre este archivo }
{ Cuerpo del programa }
{ =================== }
if
cargarAplicacion
then
motor3d;
{ =================== }
{ Fin del programa }
{ Libera la mem. de las pantallas virtuales. }
kill_VW(r_Pantalla);
kill_VW(r_Borrador);
kill_VW(r_ZBuffer);
{ Descarga el objeto }
objeto.done;
{ Se cierra el modo grafico }
kill_graph;
{ Se chequea la memoria. }
CHECKMEMORY;
{ Se da de baja la clase y se termina. }
TERMINATE;
END
.
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Personal
|
LinkedIn
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Cómo Poner Varios Espacios Seguidos
«
Respuesta #15 en:
Martes 29 de Junio de 2004, 14:48 »
0
Y la versión de C++ funciona también bien. Voy a juntar todo y subirlo.
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>
XCODE
</td></tr><tr><td id='XCODE'><!--exc1-->
#include <stdio.h>
#define N 8
void
llenar_vector(
int
v[])
{
int
i;
for
(i=
0
; i<N; i++)
{
printf (
"ingresa elemento v[
%d
]: "
, i);
// Fijate, le paso la dir. de memoria con '&'
scanf (
"
%d
"
, &v[i]);
}
}
void
mostrar_vector(
int
v[])
{
int
i;
for
(i=
0
; i<N; i++)
{
printf (
"Elemento v[
%d
]:
%d
\n"
, i, v[i]);
}
}
int
main (
int
argc,
char
**argv)
{
int
notas[N];
llenar_vector(notas);
mostrar_vector(notas);
// Para que se pause antes de acabar
fflush(stdin);
getchar();
return
(
0
);
}
<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
Personal
|
LinkedIn
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Asuntos Oficiales
»
Sobre los Foros de SoloCodigo
»
Cómo Poner Varios Espacios Seguidos