Bennu Game Development

Foros en Español => Proyectos => Topic started by: DCelso on September 30, 2008, 08:13:43 AM

Title: Indentador para Bennu
Post by: DCelso on September 30, 2008, 08:13:43 AM
Ok, gracias por la aclaración l1nk3rn3l.
Por cierto he creado una herramienta de auto indentado (sangrado de bloques) y me sería interesante poder ejecutarla desde los editores tal y como veo que haces con el crimson editor.
La adjunto aquí para compartirla de camino ya con vosotros y a cer si alguien me ayuda a integrarla en los editores.
El formato es muy simple nombre_ejecutable nombre_prg_origen nombre_prg_destino.
Podría mejorarla para que trabajase con los std in y std out pero no se sí sería ventajoso para integrarla luego así que no me puse con ello.

También invito a todos a que la probeis y le encontréis errores en vuestros prgs.
Esta es la versión windows, está en formato zip y luego en 7z para poder llegar a los 128k maximos permitidos.
Bueno ya me contareis.
Title: Identador para Bennu
Post by: DCelso on September 30, 2008, 08:14:48 AM
esta es la versión linux (compilada en una Debian)
Title: Identador para Bennu
Post by: SplinterGU on September 30, 2008, 08:55:23 AM
Quote from: dcelso on September 30, 2008, 08:13:43 AM
Ok, gracias por la aclaración l1nk3rn3l.
Por cierto he creado una herramienta de auto indentado (sangrado de bloques) y me sería interesante poder ejecutarla desde los editores tal y como veo que haces con el crimson editor.
La adjunto aquí para compartirla de camino ya con vosotros y a cer si alguien me ayuda a integrarla en los editores.
El formato es muy simple nombre_ejecutable nombre_prg_origen nombre_prg_destino.
Podría mejorarla para que trabajase con los std in y std out pero no se sí sería ventajoso para integrarla luego así que no me puse con ello.

También invito a todos a que la probeis y le encontréis errores en vuestros prgs.
Esta es la versión windows, está en formato zip y luego en 7z para poder llegar a los 128k maximos permitidos.
Bueno ya me contareis.

fantastico, no sabes lo util que me es esto... yo uso para codigo C el astyle, pero me faltaba uno para bennu... gracias, lo probare, creo que deberias abrir un thread para esto...
Title: Re: Identador para Bennu
Post by: SplinterGU on September 30, 2008, 09:03:38 AM
fantastico, probado y encontrado ciertos errores... si el archivo input no existe te da un error no muy amigable... un error de runtime...

si tenes una linea de este estilo...

IF (key(_right)) x+=5; END

no la divide

otra cosa, usa tabs en vez de espacio...

estas ultimas cosas no son errores, pero seria lindo poder modificarlas a justo, podrias incluir el fuente, asi se podria adaptar segun necesidad?

quizas te convendria estudiar el astyle y darle soporte a bennu... es fantastico... ademas seria un gran aporte...

gracias...
Title: Re: Identador para Bennu
Post by: DCelso on September 30, 2008, 12:40:25 PM
Uff, chungo cubata.
A ver, mi primera opción fué esa me empapé el código del astyle para c++ y el de gnu-indent para c.
Ambos muy complejos, empezé a tocar el del indent que parecía mas fácil, pero que va, no encontré resultados y lo abandoné como opción, probé lo mismo con astyle que esta como más organizado pero me perdía con la gerarquía de clases que usa, necesitaría mucho más tiempo de análisis y entendimiento de sendos códigos para poder adaptarlos a la sintaxis de bennugd, además al ser mezcla de pascal y c, se hacen la pixa un lío actualmente los indentadores de c aunque intentes usar la forma más parecida de c en bennuGD.
La última opción fué analizar como lo hizo izubiaurre en flamebird. Me abrió los ojos, es mucho más facil de implementar el sistema pero tiene muchas limitaciones debido a que no analiza la sintaxis, únicamente se dedica a avanzar o retroceder una tabulación en el indentado a medida se encuentra palabras clave .Usando como base algorítmica el .pas he podido pasarlo a c++ usando las std.

El sistema trabaja analizando la primera palabra de cada linea, si es una palabra clave mira si hay que avanzar en el sangrado o no después de ésta, y en caso de ser tipo "if" mira la última palabra de la línea para ver si tiene un end y así no avanzar en el sangrado.
Esto hace que sea muy rápido el algoritmo pero complica el poder romper la línea "IF (key(_right)) x+=5; END" en tres nuevas líneas. A mi también me gustaría que pudiera hacer eso, además abrí un post en el foro de divsite en la sección del flamebird para señalar ese bug y no le hicieron mucho caso, según entendí en lo leído es correcto que no rompa la línea en tres nuevas. Si quieres tres líneas puedes poner un return en cada una y luego ya lo indenta bién. Ejemplo:
"IF (key(_right))
x+=5;
end"
Otra falta que le ví al flamebird es que si pones "if(" no encuentra la palabra clave "if", puesto que el limitador de palabra es el espacio o fin de línea, yo le he añadido también el '('.
Estoy investigando en intentar detectar las líneas del tipo comentado y romperlas para indentarlas, quizá en próximas versiones esté.
También tengo en mente poder usar el código fuente de bennu donde se definen las "keyword" para aprobecharme de éste y que el indentador detecte las mismas keys que bennu. Actualmente pilla las mismas que ví que hacía flamebird (que es la sinstasis más parecida a pascal), mas algunas que uso en mis códigos prg  y no lo detectaba flamebird como public, private o elsif.
En cuanto al código fuente está muy feo para publicarlo, sin comentarios, variables tipo var1, var2, etc, indentación un poco ofuscada para yo ver dependencias en ors y ands, algunos bloques no muy intuitivos pero eficientes, en fin un montón de cosas que debería solucionar antes de mostrarlo al público :D.
Lo de que no exista el archivo de entrada ni lo controlé, no pensé que nadie pusiera de entrada un archivo que no vaya a existir :D, lo pondré para la siguiente.
También quiero cambiarlo para analizar en vez de línea a línea, palabra a palabra, puesto que en c soy el típico que escribe todo en una línea y luego le doy a formatear para que el ordenador ponga el código bonito y sería interesante poder también hacerlo con bennu, puesto que actualmente si hay dos palabras clave en una línea se cree que la segunda no vale para nada y no la baja a una nueva línea ni indenta en adelante.


Por cierto, usabas el ultraedit no?, como puedo integrar el indentador en este?, gracias y si sabes para el pspad también mejor que mejor :D.
Title: Re: Identador para Bennu
Post by: SplinterGU on September 30, 2008, 01:52:30 PM
bien, el proyecto realmente me gusta, estaria bueno meter modificadores (parametros) que definan como se comporta el programa, por ejemplo, espacios en vez de tabs, tamaño de las tabulaciones, si agrega espacio antes o despues de los operadores, etc...
luego paso a paso, no hay problema, repito, me encanta la idea...

con respecto a integrarlo al ultraedit, fijate en "avanzado", "tools configuration..."
Title: Re: Identador para Bennu
Post by: DCelso on October 01, 2008, 03:58:19 PM
Añadido control de errores en lectura de archivos.
Añadido soporte para insertar espacios en vez de tabs.
Corregido error que insertaba una línea nueva vaciá al final del archivo de salida.
Creado script para lanzarlo desde pspad. ( http://forum.bennugd.org/index.php?topic=173.0 )
Title: Re: Identador para Bennu
Post by: SplinterGU on October 01, 2008, 04:44:47 PM
gracias, va tomando forma...
Title: Re: Identador para Bennu
Post by: SplinterGU on October 01, 2008, 04:47:01 PM
me olvide comentarte, con respecto a reutilizar el parseador del compilador bennu, yo te diria que busques otra opcion, es muy rebuscado el parseador...
mi sugerencia es que trabajes en base a listas (configurables) de palabras que agregan espaciado y otras que quitan... teniendo en cuenta comentarios y strings... con eso creo que podes armar un buen identador...
Title: Re: Identador para Bennu
Post by: DCelso on October 01, 2008, 10:11:31 PM
ok, gracias, aunque la idea era usar solo el .h donde vienen definidas las keywords o equivalente, y no el parser entero. Estoy liado ahora con el algoritmo de ir palabra a palabra, lo veo complejo no se si posponerlo para otro momento, le echaré un rato más a ver si lo veo menos complicado.

Por cierto veo que has reiterado varias veces en la palabra identador, al principio creía que te habías equivocado pero ya como van varias veces no se si es que se usa allí o que pero no he encontrado el término por ningún lado "indent" se traduce como marcar o sangrar. Yo a veces había escuchado indentar (ojo tiene una n en la segunda letra)  pero no existe en la drae, asi debe ser un anglicismo coloquial (no oficial) de "indent", es curioso pero en la informática aqui en españa pasa con muchísimas palabras esto mismo, por ejemplo: debugear (de debug), deployar(de deploy), repositorio (de repository) y un sin fín de más, ninguna existe en la drae, la más curiosa es librería (de library) cuando es biblioteca, esta está ya tan arraigada que todos los libros de programación y páginas la usan como si fuera correctísima :D.

http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=identar
http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=indentar
http://www.wordreference.com/es/translation.asp?tranword=indent&dict=enes&B10=Search
Title: Re: Identador para Bennu
Post by: SplinterGU on October 01, 2008, 11:09:36 PM
los keywords no estan definidos en ningun .h, vienen en un .c... si queres saber las keywords definidas tenes que usar algunos de los archivos de sintaxis de colores usados para el IDE...

tengo un serio problema con la palabra "indentar", a pesar de saber como se escribe siempre la escribo "identar"... y la escribi tantas veces sin "n" que me cuesta escribirla bien... pero bueno, va con "n", no te hagas problemas... es un problema mio de costumbrismo...
Title: Re: Indentador para Bennu
Post by: DCelso on October 02, 2008, 03:14:55 PM
Nueva versión con soporte para listado de palabras clave.
Ya no entra en 128k asi que lo he subido a megaupload.

El formato de entrada del fichero de palabras clave no es verificado así que no cambiar al del ejemplo adjunto, no soporta ni comentarios ni cambio de orden de las secciones ni líneas en blanco entre keywords ni final de sección ni final de fichero.

http://www.megaupload.com/?d=5T9AKGMI
A ver que os parece. Saludos.
Title: Re: Indentador para Bennu
Post by: SplinterGU on October 02, 2008, 10:33:07 PM
Bien, sigue asi que no falta mucho... buen trabajo...
Title: Re: Indentador para Bennu
Post by: izubiaurre on October 03, 2008, 07:01:27 PM
Ta,bién existe el autoidentador en FBMX. Ctrl + I. La única pega que tiene es que le falta analizar algunas nuevas sentencias (Elif, Elsif, ...). Por lo demás, funciona bien.
Title: Re: Indentador para Bennu
Post by: blostec on October 04, 2008, 03:57:38 PM
Va de lujo, gracias dcelso.

Por cierto izubiaurre, como esta el desarrollo de FBMX, sigues con el?
Title: Re: Indentador para Bennu
Post by: DCelso on October 05, 2008, 12:30:56 AM
gracias aún queda mucho en cuanto a la personalización de sangados distintos, pero se hace lo que se puede.
Espero que sea una aplicación útil para el mundillo, en cuanto pueda la libero opensource. Veo que se ha leído unas pocas de veces pero nadie muestra interes a parte de vosotros dos. Kizas no sea tan útil como yo creía, desmotiva un poco la verdad :(.
Title: Re: Indentador para Bennu
Post by: SplinterGU on October 05, 2008, 03:34:30 AM
Quote from: dcelso on October 05, 2008, 12:30:56 AM
...Veo que se ha leído unas pocas de veces pero nadie muestra interes a parte de vosotros dos. Kizas no sea tan útil como yo creía, desmotiva un poco la verdad :(.

Bienvenido al club! :)
Title: Re: Indentador para Bennu
Post by: blostec on October 05, 2008, 11:36:39 AM
dcelso seguro que es útil y mas de uno y de dos la van a usar. Lo que pasa es todavía mucha gente no conoce el foro o si lo conocen, no se han animado a participar. Solo tienes que mirar toda la gente que hay registrada (86) y los pocos que participan en el foro. Como todo esto requiere un tiempo, seguro que cuando se llegue a la release 1.0 y se haga una pagina web, la actividad aumentara.

Ánimos, que estas haciendo un gran trabajo. Saludos!
Title: Re: Indentador para Bennu
Post by: osk on October 05, 2008, 05:14:55 PM
Pienso lo mismo que blostec
Title: Re: Indentador para Bennu
Post by: TYCO on October 05, 2008, 06:21:51 PM
Quote from: dcelso on October 05, 2008, 12:30:56 AM
gracias aún queda mucho en cuanto a la personalización de sangados distintos, pero se hace lo que se puede.
Espero que sea una aplicación útil para el mundillo, en cuanto pueda la libero opensource. Veo que se ha leído unas pocas de veces pero nadie muestra interes a parte de vosotros dos. Kizas no sea tan útil como yo creía, desmotiva un poco la verdad :(.

No te desanimes, yo no lo utilizo porque intento que mi codigo sea bien legible para cualquiera que lo lea (sobretodo para yo leerlo rapidamente) jeje, pero si es de utilidad cuando te encuentras codigo ilegible y con una utilidad como esta te ayuda a leerlo, de todas formas veo que lo estas haciendo en C o similar... que tal si lo haces directamente sobre Bennu??? asi seria multiplataforma tambien.
Title: Re: Indentador para Bennu
Post by: izubiaurre on October 05, 2008, 06:54:06 PM
Quote from: blostec on October 04, 2008, 03:57:38 PM
Por cierto izubiaurre, como esta el desarrollo de FBMX, sigues con el?

Sigo con él, de cuando en cuando... Estoy añadiendo pequeños adelantos pero nada potente.
Title: Re: Indentador para Bennu
Post by: Prg on October 09, 2008, 07:16:20 PM
dcelso, muchas gracias  por la herramienta, la verdad en mi juego tenía todo desordenado, y me tocaba tomar bloques y tabularlos, incluso me perdía entre los end's, creeme que eh perdido mucho tiempo en acomodar el código, sin embargo gracias a tu herrmienta eh ordenado todo en unos segundos, y la verdad me gusta mucho el estido del orden. Ánimo amigo, es una excelente herramienta.
Title: Re: Indentador para Bennu
Post by: izubiaurre on October 09, 2008, 07:53:22 PM
El identador de FBMX ya está actualizado para Bennu Wip 11.
Title: Re: Indentador para Bennu
Post by: SplinterGU on October 09, 2008, 08:11:54 PM
gracias...
Title: Re: Indentador para Bennu
Post by: Prg on March 05, 2010, 04:50:22 AM
hola, esta herramienta me encanta :) la he puesto en el context para usarla en mi archivo actual con uno solo boton :) ...
solo para agradecer y preguntar si existe alguna nueva version, aunque no creo que sea necesario pero nunca esta de mas preguntar, gracias
Title: Re: Indentador para Bennu
Post by: Windgate on March 05, 2010, 10:53:25 AM
A muchos participantes del concurso de Wiz les vendría bien algo así, he estado mirando su código para ver cómo hacían algunas cosas y madre mía :o digo el pecado pero no los pecadores :D en serio, me han dolido los ojos para entender ciertas cosas xD

Lo mismo que Prg, si hay nueva versión nueva ponla, tengo algún alumno al que se la tendré que pasar también :P
Title: Re: Indentador para Bennu
Post by: DCelso on March 05, 2010, 12:00:12 PM
No hay, pero tampoco es que haya feedback.
¿Necesitais que tenga algo nuevo en especial?
Title: Re: Indentador para Bennu
Post by: Prg on March 05, 2010, 03:56:40 PM
creo que no
a mi me gusta como esta, solo preguntaba por si había nueva versión actualizarme a ella :)
Title: Re: Indentador para Bennu
Post by: Windgate on March 06, 2010, 06:28:33 AM
Estoy bajando la última versión para probarla, por lo que veo en el hilo se trata de un link de Megaupload, yo (Siempre soñando) opino que en los hilos de proyecto en los que siempre hay descarga sería interesante tener en el primer comentario el link de la última versión actualizado cada vez que se publica algo nuevo... Esto también va por mí que conste, a veces tenemos decenas de posts y versiones y hay que andar pasando página hasta ver la última versión, me aplico el cuento, y te lo recomiendo DCelso, tú también subes muchos proyectos :

EDIT:

Veo la aplicación, ejecutarla sin más no me produce ningún resultado en Windows 7, el programa se abre y se me cierra al instante, ¿Me he saltado algo de el LEEME o es que Windows 7 es así de mamón? :S

También veo el archivo en el que se exponen las palabras clave de "apertura" y "cierre", veo que está planteado de forma sencilla, la verdad, para indentar adecuadamente no hacía falta más :D

Si no es problema de mi Windows se agradecería un LEEME con un par de lineas explicativas DCelso, si no es mucho pedir :P
Title: Re: Indentador para Bennu
Post by: FreeYourMind on March 06, 2010, 02:30:22 PM
No estoy de acuerdo Windagate, yo como amante de la preservación de las multiples versiones que se hacen de cada cosa, eso seria quitar el download de las antiguas y tener sólo la ultima, me has puesto tan enfermo que sólo me apetece darte un Karma negativo  ;D

Otra solución, es ponerlas todas seguidas en el primer post, y así tambien se resolveria tu problema de buscar, aunque no veo ningun mal por hacerte buscar un poco la cosas, así siempre vas leyendo los comentários hasta llegar a la version que quieres, y aprendes algo sobre su desarrollo  ;)
Title: Re: Indentador para Bennu
Post by: Mr Matsusaka on March 06, 2010, 03:09:03 PM
Gracias DCelso!
He tenido un pequeño problema,
Si tengo algo asi en el codigo:

if (true) flags=0;
else flags=1; end

no tiene en cuenta el end final e indenta mal
Title: Re: Indentador para Bennu
Post by: Windgate on March 06, 2010, 07:50:47 PM
Quote from: FreeYourMind on March 06, 2010, 02:30:22 PM
No estoy de acuerdo Windagate, yo como amante de la preservación de las multiples versiones que se hacen de cada cosa, eso seria quitar el download de las antiguas y tener sólo la ultima, me has puesto tan enfermo que sólo me apetece darte un Karma negativo  ;D

Otra solución, es ponerlas todas seguidas en el primer post, y así tambien se resolveria tu problema de buscar, aunque no veo ningun mal por hacerte buscar un poco la cosas, así siempre vas leyendo los comentários hasta llegar a la version que quieres, y aprendes algo sobre su desarrollo  ;)

Hombre, a lo largo del hilo se guardan todas las versiones, me refiero a tener en primer post siempre la última, pero las demás se conservan xD
Title: Re: Indentador para Bennu
Post by: FreeYourMind on March 06, 2010, 08:24:36 PM
Si yo edito mi primer post para actualizar a la segunda version, la primera se va al garete, si lo hago de nuevo la segunda se va al garete... Si tu has puestos varias durante el foro, al actualizar la primera del primer post por la ultima, tambien se va al garete la primera, aunque se queda la segunda  ;D

Ejemplo de eso fue lo que hizo Grisendo con su modulo de vision por ordenador, actualizaba la version siempre en el mismo enlace de descarga, y las versiones viejas iban desapareciendo  ;D
Title: Re: Indentador para Bennu
Post by: Windgate on March 06, 2010, 11:49:27 PM
Pero tampoco es tan complicado, seguro que algo se puede hacer, con el próximo proyecto que suba lo intento xD

También tengo la ventaja de tener hosting, así puedo poner el directorio del proyecto en el primer post, y ahí guardo el historial de versiones completo, algo así haré vaya :P
Title: Re: Indentador para Bennu
Post by: SplinterGU on March 07, 2010, 03:03:59 AM
acabo de preparar un identador usando lex que identa todo perfectamente, salvo que me mete algunas lineas enter demas...

pero bueno, separa expresiones como la mencionada unas lineas mas arriba.
Title: Re: Indentador para Bennu
Post by: Mr Matsusaka on March 07, 2010, 03:28:28 AM
Quote from: SplinterGU on March 07, 2010, 03:03:59 AM
acabo de preparar un identador usando lex que identa todo perfectamente, salvo que me mete algunas lineas enter demas...

pero bueno, separa expresiones como la mencionada unas lineas mas arriba.

Y el link para la descarga esta en... ?  ;D
Title: Re: Indentador para Bennu
Post by: SplinterGU on March 07, 2010, 05:05:10 AM
no esta aun, estoy depurando, tengo algunos problemas... con los comentarios multilineas y como dije, algunas lineas ponen un enter demas... y no logro darle al clavo...
Title: Re: Indentador para Bennu
Post by: DCelso on March 07, 2010, 09:06:45 PM
Vamos por partes.
Esta fue mi primera aportación a la "scene" (o si no, una de las primeras, ya no recuerdo) entonces la dejé muy apartada, ya daba el resultado que necesitaba y no he seguido con ella, ni actualizando el post.
Sí es verdad que lo suyo es tener el primer post actualizado, también el no perder ningún enlace a versiones anteriores, si veis mi post de  fpgedit2009 vereis que en el primer post tengo un resumen de todos los mensajes y enlaces a todas las versiones, intentaré revisar todos mis post para hacer lo mismo.

En cuanto a el error  que comentas Mr Matsusaka, no es un error, es que este indentador que indenta por líneas, está hecho así a posta porque no necesitaba que hiciera y además facilitaba su implementación.

A ver si me explico mejor, este indentador no busca varias palabras clave en una misma línea, lo que permite hacer varias instrucciones en una línea sin que dicho indentador te las separe al intentar formatear tu código, así pues permite que tu código tenga líneas como
if (x<320) x++; end
o líneas como
while (!key(_esc)) frame;end
Y no te las divide ni indenta porque sabe que son varias instrucciones en una línea.
Por eso si haces cosas raras como las que pones tu en tu ejemplo no funciona bien
porque has puesto un if en una línea, un else y un end en otra línea, y el programa espera que todas las palabras clave estén en una misma línea como por ejemplo
if (x<320) x++; else x++;end
o bien todas en líneas separadas, pero no contrempla que el programador haga algo entre comillas "extraño" como hacer una mezca de los dos formatos :D.

Este programa está muy bien porque es sencillo y rápido, ya que su programación no es nada compleja, se trata de buscar retornos de carro y analizar la línea actual e indentar si hace falta la línea, por lo que no podría ofrecer la posibilidad de partición de instrucciones de una línea,(menos mal que splinter nos va a deleitar con un nuevo indentador para usar en los casos que queramos hacer esto, me ahorro el tener que hacerlo :D.)
De todas formas, en el post ya hablamos anteriormente de las limitaciones que tenía el programa, pero supuse que el programador que lo use es "responsable" y no le va a buscar las cosquillas al programa :D.

En cuanto a que no hace nada en windows 7, pues vamos, al igual que en todos los demás sistemas operativo :D, es un programa de comandos como podrían serlo grep, sed, dir o los mismos bgdc y bgdi así que para usarlo hay que hacerlo desde la línea de comandos(o lanzarlo desde pspad o cualquier editor de textos configurado para usarlo), y allí te dice cómo usarlo, pero que no es nada del otro mundo, es un programa con dos parámetros de entrada, uno el archivo de salida y otro el de entrada :D.

Title: Re: Indentador para Bennu
Post by: Mr Matsusaka on March 08, 2010, 12:32:09 AM
Bueno, si ese es el resultado final pues me conformo y me espero hasta el indentaodor de SplinterGD. Aun asi karma++ por el trabajo realizado