Escribir: "ñ", acentos y otras cosas

Started by carles, July 21, 2011, 06:54:17 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

carles

Hola gente, hacia tiempo que no pasaba por aqui.

Estoy intentando escribir "ñ" y vocales con acento, pero
[code language="bennu" options="singleline"]write(0,0,0,0,"ÑÀñá");[/code]

no funciona. He mirado el código ASCII y si que existen:

[code language="bennu"]
Global
a;
b;
c;

begin

   from a=0 to 7;
      x=0;
      y+=20;
      from b=0 to 31;
         write(0,x,y,0,chr(c));
         c++;
         x+=20;
      end
   end
   while(scan_code==0)
      frame;
   end
end
[/code]

¿Sabéis como solucionarlo?

Comprobando el ASCII de algunas he descubierto que están incompletas¿Hay alguna manera de tener una fnt completa?

panreyes

Mmm... Pégale un vistazo al código del FrikiTournament xD

carles

Me he dado cuenta de que el código
[code language="bennu" options="singleline"]write(0,0,0,0,"ÑÀñá");[/code]
Si funciona, el problema es que las fnt tienen los simbolos diferentes de la fuente por defecto a partir del 128.
Lamentablemente las fnts tampoco tienen los primeros 32, con lo que me gustaban: ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼

KeoH

a mi me han salido problemas al poner acentos y Ñ al usar tipos de letra ttf pero porq la propia fuente no traia esas letras, es decir ... solo traía los caracteres para el inglés. Si encontraba el tipo de letra adecuado no daba problemas.

SplinterGU

si mal no recuerdo usa el viejo encoding ascii
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

Es una cosa realmente extraña. Si recoges el texto desde un fichero externo con fopen/fgets si que funciona. Si hardcodeas el texto no aparecen los caracteres especiales.

SplinterGU

porque el encoding que usa tu editor de textos no es el que va para bennugd.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

La cosa es que ambos ficheros de texto tenían el mismo encoding, ANSI :\

Drumpi

Pero no el mismo set de caracteres: por lo que he podido ver, el encoding interno de Bennu con la fuente del sistema y las strings no es el mismo que el de la lectura de ficheros. De hecho, en los FNT hay un campo para determinar el tipo de encoding que usa.
De momento, para usar el ASCII extendido, la única posibilidad es con set_glyph y save_fnt... a menos que cierto desastroso coder termine cierta aplicación que andaba haciendo para el manejo de fuentes.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

igual las funciones de mapeo andan medio para la mona, la set_glyph no permite setear todos los caracteres, la unica forma de crear un mapa completo (lo que no significa que se vaya a poder usar completo) son las nuevas funciones que agregue para crear fonts a partir de un mapa.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

carles

El post esta tocando temas que me vienen grandes, he decidido hacer una función que te transforme una string en otra que se escriba bien con la fnt.

panreyes

Quote from: carles on July 21, 2011, 09:29:56 PM
El post esta tocando temas que me vienen grandes, he decidido hacer una función que te transforme una string en otra que se escriba bien con la fnt.
Hardcore mode xD

Hablamos esta tarde para alcohol y esas cosas.

josebita

Quote from: PiXeL on July 21, 2011, 03:59:39 PM
La cosa es que ambos ficheros de texto tenían el mismo encoding, ANSI :\
Acabo de leer esto: Bennu al compilar el dcb no estará usando el mismo charset del fichero, que será el mismo que el de tu fichero de texto externo.
Me ocurrió lo mismo con UTF8: si metes los caracteres utf8 en el código se van a ver mal (los especiales, al menos) pero si luego los lees de un fichero para pasarlos por mi librería iconv sí que los maneja bien.

carles

Yo invoco a los sabios de este foro para que con su sabiduría pueda hallar respuesta a mis preguntas:

¿Porque el switch de mi código no funciona cuando el valor es mayor de 128?

La idea es una función que modifique una string que no se vea bien con una fnt.

[code language="bennu"]
Global

int a;
int b;
int c;
int fuente;

function string text2fnt(string text);
private
   a;
   string texto;

Begin
   from a=0 to len(text);
      switch (text[a])
         case 127:
            texto+=""+chr(169);
         end
         case 128:
            texto+=""+chr(169);
         end
         case 129:
            texto+=""+chr(169);
         end
         case 130:
            texto+=""+chr(169);
         end
         case 131:
            texto+=""+chr(169);
         end
         case 132:
            texto+=""+chr(169);
         end
         case 133:
            texto+=""+chr(169);
         end
         default:
            texto+=""+chr(text[a]);
         end
      end
   end
   return texto;
end
Process Main();            
Begin
   set_mode(640,480,32);
   fuente=load_fnt("fuente.fnt");
   from a=0 to 7;
      x=0;
      y+=40;
      from b=0 to 31;
         write(0,x,y,0,chr(c));
         write(fuente,x,y+10,0,text2fnt(chr(c)));
         c++;
         x+=20;      
      end
   end
   while(scan_code==0)
      frame;
   end
end
[/code]

panreyes

¿El valor es realmente mayor de 128? No tiene ciencia, no debería fallar.

Y si realmente necesitas algo como lo que pones, quita el switch y pon un if xD