Cambio del idioma del teclado

Started by Coptroner, May 31, 2013, 12:19:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Coptroner

Buenas a todos!

Estoy trabajando en una aplicación para gestionar una base de datos de socios de una empresa de impresion digital y me he topado con una cosita que a lo mejor tiene arreglo y todo ???

Resulta que en la introducción de texto, cuando se escribe el email del cliente, y éste tiene el caracter "_" al escribirlo me sale "%".

He deducido que es porque el interprete de bennu carga el codigo ascii por defecto en inglés, de ahí que el teclado reconoce los caracteres dispuestos en dicho codigo ascii. (creo, es una conjetura mía).

Mi pregunta es si ésto se puede cambiar por defecto para que el codigo ascii corresponda a otro idioma, en éste caso el español, para que al escribir en el teclado haya correspondencia en ascii o debo hacer yo mediante codigo que cuando un caracter escrito sea "%" lo cambie por "_" en la string que almacena dicho texto.

Muchas gracias!

FreeYourMind

detectando idioma de so y haciendo tablas de equivalencia ?

master

eso es bastante raro, ya que todas las codificaciones de caracteres que conosco no tiene problemas con los primeros caracteres, y entre esos estan el "%" y el "_".
¿Te aparecen cambiados desde la interfaz de tu programa?
¿Si guardas los datos en un archivo y lo abres con otro programa pasa lo mismo?

Pienso que puede ser la fuente que estas usando.

Coptroner

Quote from: FreeYourMind on May 31, 2013, 02:41:55 PM
detectando idioma de so y haciendo tablas de equivalencia ?
No, no hago ninguna deteccion de idioma del SO, cuando hago un reconocimiento al pulsar teclas con "tecla=chr(ascii)" me devuelve el caracter correspondiente al teclado inglés o a la disposicion del codigo ascii en inglés.

Incluso cuando saco la consola de debug; la introduccion de teclado también está en inglés y tengo que pulsar 2 veces "Shift+Alt" para seleccionar el idioma de teclado correcto o el juego ascii correcto.

En un principio lo he solventado mediante un cambio en el caracter adquirido, cuando chr(ascii)="%" lo cambio por "_" y a otra cosa mariposa.

Pero me intriga la cuestion del idioma...

Por cierto me pasa en todos los ordenadores que he probado.

Erkosone

Si quieres probar una rutina distinta para teclado tienes la que colgué ayer en la sección recursos, si la pruebas podrías decir si te da el mismo error al adquirir el char?

Coptroner

Quote from: Erkosone on June 03, 2013, 04:55:50 PM
Si quieres probar una rutina distinta para teclado tienes la que colgué ayer en la sección recursos, si la pruebas podrías decir si te da el mismo error al adquirir el char?

La verdad es que es bastante completita, si señor!  ;)

No me da el fallo porque la forma de adquirir el caracter es distinta.

En tu rutina los caracteres estan "precargados" y en la mia se obtienen directamente de la funcion chr(ascii).

Erkosone

Bien! me alegro de que te funcione ;)


El problema de usar ascii es que solo indica el char entrado por teclado, pero esto indirectamente puede limitar las acciones que puedes realizar con esa información ya que no tienes conocimiento de las teclas pulsadas realmente si no del resultado de la ultima combinación de teclas que generó un char válido.


También está scan_code, pero tiene una limitación similar, solo ofrece la información del código de la 'ultima' tecla pulsada, y esto impide hacer combinaciones de teclas "en un mismo frame".


Con la que he compartido lo que se hace es usar la función key() que es mucho mas flexible y permite recorrer un array de códigos, pudiendo almacenar cualquier combinación de teclas en tiempo real, además la función trae 3 flags que indican si hay que aplicar acentos, acentos invertidos o dieresis y en el caso de que haya que usarlos fijate en el sutil detalle que hace que el rendimiento aumente bastante jeje.. las bocales son las primeras entradas del array de chars ;) simplemente mirando si el contador de códigos de teclado no ha pasado del quinto registro se sabe si es una vocal y se aplica todo lo anterior de los acentos y demás.


En realidad todos estos detalles son originales de la vitual input de div, pero está organizado de otro modo para que aprobeche las nuevas funciones de textos que tiene bennuGD y estructurado para que sea ampliable ya que el código fuente de la vital_input aunque es bueno y rápido.. es un desastre en cuanto a lo de "ampliarlo", la keyboardInput() va por flags como la vital pero añade una maquina de estados "el switch(status_)" que es donde está la gracia de esto ya que permite reestructurarla, ampliarla o modificarla para cada caso concreto.


En cualquier caso si te funciona pues genial!

Drumpi

Por si sirve de algo, Bennu (al igual que Fenix) usa dos posibles codificaciones de caracteres, así que el problema de ascii puede venir de que, por defecto, se utiliza el charset de DIV, el que se usaba en MS-DOS. Había una variable global para cambiarla, con dos posibles valores, pero no se cual era, y no la encuentro. No sé si esto solucionaría el problema, pero tanto para esto como para ficheros, la detección de los charset es un suplicio, tanto en Bennu como en cualquier otro lenguaje de programación (lo digo por experiencia propia).
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)

Coptroner

Quote from: Drumpi on June 06, 2013, 04:32:54 PM
Por si sirve de algo, Bennu (al igual que Fenix) usa dos posibles codificaciones de caracteres, así que el problema de ascii puede venir de que, por defecto, se utiliza el charset de DIV, el que se usaba en MS-DOS. Había una variable global para cambiarla, con dos posibles valores, pero no se cual era, y no la encuentro. No sé si esto solucionaría el problema, pero tanto para esto como para ficheros, la detección de los charset es un suplicio, tanto en Bennu como en cualquier otro lenguaje de programación (lo digo por experiencia propia).
Eso mismo pensaba yo al principio de mi cuestión, que Bennu se inicia con el charset de MS-DOS con la disposicion del teclado en inglés.
Por eso pregunté si había alguna forma de cambiar el charset por defecto para que se adaptara al teclado castellano.
Pero bueno, como para lo que lo necesito me apaño muy bien como está y con la rutina de Erkosone bien integrada se puede funcionar perfectamente, pues ala, asunto resuelto.

Saludos por cierto, como estas Drumpi?  ;)

Drumpi

Pues es eso, hay una variable global que se puede setear al otro sistema, pero no recuerdo cuál es ni he dado con ella.

Pues gracias por preguntar, Coptroner. Sigo bien, llevo tiempo parado y estoy en una época de mi vida bastante aburrida :D Ahora ando en mi periodo "entre proyectos", por aquello del concurso de Donan, que por cierto, me tuvo ocupado un par de meses, y espero poder terminar el juego para que lo probeis. No es ninguna maravilla, pero creo que es entretenido (al menos, son los niveles más difíciles que he podido diseñar con tan poco tiempo y falta de práctica).
Me paso por aquí de vez en cuando, aunque no me veais. Ya no me meto tanto en los foros como antes, pero os sigo leyendo, y mientras encuentro algo que me reporte un sueldo, pues estoy empezando con Android, para mantenerme ocupado.

Y tú ¿qué tal? :)
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)

Coptroner

Pues despues de un exilio del mundo del videojuego por razones de índole personal he vuelto a ver como estaís por éstos lares a ver si ya haceis juegos para la PS3 y esas cosas  ;D ;D
Llevo mucho tiempo sin teclear una sola linea de código, pero ésto es como montar en bici, una vez que tus dedos empiezan un "begin" no paran hasta teclear un "end" y tengo buenos códigos de mi época de "Jóven Fenixero" que me evitan calentamientos de cabeza ya superados  8)

No sé hasta que punto podré llegar en mis aventuras como programador, nunca se sabe, lo que si se es que me hace pasar muy buenos ratos y despierta un halo de jovialidad en mi existencia.
Me alegro de que todavía quede gente de mi "quinta" por aquí y que esteis creando cosas nuevas y experimentando con ésto que es más que un hobbie para algunos.

El tito coptroner está de visita ;D

Nos vemos por aquí.

hardyx

#11
Podría ser que tuvieran el Windows versión en inglés y el teclado en español. Aparte de eso, MSDOS usa el código ASCII extendido, pero Windows tiene un juego de carácteres que es el ANSI. Ambos son iguales en los primeros 127 carácteres, pero el resto hasta el 255 son diferentes. Pero yo doy más probabilidad a una mala configuración del teclado.

Depende también de que código de carácteres esté usando Bennu, si el de Windows o el de MSDOS. Eso es como cuando editas un programa de Visual Basic con el edit que es de DOS y no te salen los acentos en el código porque está en ANSI.

master

#12
El problema no es de las codificaciones, estará en algun otro lado.

Casi todas las codificaciones estan basadas en el Ascii, la mayoría comparten las primeras 128 que el ascii original poseia, así que si llegaras a tener algun problema con acentos, o caracteres no latinos, tendrias que tirar de los otros 128 caracteres (del ascii extendido, por ejemplo), y usar una codificacion en específico, porque esto de las codificaciones es todo un problema, y si se trabaja con una, con esa hay que seguir. Creo que alguien programo una utilidad para convertir textos de una codificacion a otra, podrian usarlo para este caso. Pero repito, el problema del "%" y "_" no es de codificacion, porque esos 2 caracteres estan en las primeras 128 posiciones del ascii (37 y 95 respectívamente) y del idioma ingles o español, tambien lo dudo, porque si fuera ese tu problema en todas las aplicaciones tendrias problemas

Corrijanme si me equivoco, pero creo que el problema esta en otro lado

Tal ves el problema está en el teclado que usas, quizá esta mal configurado. pero entonces en todas las aplicaciones deberia verse el mismo problema y no solo con esas teclas, sino con varias, incluido la ñ, ¡, ¿ ....

Bennugd usa la codificación CP850, pero posee una fuente CP437

Erkosone

No se si me equivoco pero creo haber leído por el foro que bennu tiene funciones para setear los gliph  de una fuente de texto, creo que teniendo estas valiosas funciones en el lenguaje resultaría realmente simple hacer un conversor, o incluso mas simple, una triste función programada en bennu mismo que modifique la fuente de sistema y corrija el error "para tu caso particular" o para cualquiera caso.


Yo creo que eso debe ser cosa de pocos minutos, es solo mirar que chars te salen mal y hacerte una función que te los reordene a tu gusto.
Pero es solo una conjetura, no se hasta donde llegan las funciones del lenguaje para la manipulación de fuentes, aunque creo haber leído por aquí que es posible y además simple.

Drumpi

Sí, existe set_gliph, get_gliph o similares, además de save_fnt y demás. Tienen sus limitaciones y sus funcionalidades "ocultas", como ya hemos comentado Splinter y yo alguna vez, o sea, se pueden hacer nuevas fuentes y todo tipo de modificaciones, pero hay algunas cosillas que hay que hacer a mano (por ejemplo, crear los ficheros sin compresión zlib).

Pero de todas formas, sé que las dos codificaciones dan problemas y quebraderos de cabeza. No puedo decir exactamente qué caracteres sufren problemas, pero sí que no depende del teclado (no sé, creo que le afecta la conversión keyid-charset).
Otra cosa, modificar el fnt no es solución, hay que conseguir que funcione tal cual, o si no, en cuanto se use otro teclado volverán los problemas. Es como los problemas de hoy día entre UTF-8 y UNICODE, si no se tienen en cuenta al leer ficheros, se pueden dar problemas con el propio programa. Sé que es doloroso para la cabeza, pero forma parte de la indiosincracia del programador :D
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)