web counter logdy.com -->

Blog sobre este navegador homebrew para Nintendo DS

28.9.06

El motor de representación va madurando

Ya es capaz de visualizar un documento con cualquier factor de zoom y obedece las especificaciones de relleno (padding, para los entendidos en CSS).

Ahora mismo me ocupa conseguir que también aplique los márgenes, que es una labor sencilla. El siguiente paso consiste en implementar las cajas flotantes. Después de estos asuntos, supongo que la siguiente prioridad serían las tablas.

Poco a poco va resultando un motor más completo, capaz de visualizar casi cualquier documento HTML con bastante exactitud.

26.9.06

Muestra de texto

Muestra de texto
Éste es el aspecto de un muy sencillo y desenfadado documento de prueba. Hay varias cajas anidadas y con diferentes estilos. Se puede apreciar el renderizado del texto con antidentado. Las fuentes empleadas son TrueType de la familia Vera, de uso libre.

En una entrada anterior comenté que quizá me tendría que replantear el uso de fuentes vectoriales, sobre todo por la velocidad de representación. Tendría que buscar una buena colección de fuentes bitmap de 8 bpp, o bien, si sigo con TrueType o similar, implementar una caché de glifos generados. Esta última opción tiene el problema de incrementar el gasto de memoria, y eso no parece buena idea.

25.9.06

Rectificar es de los que se confunden

...y dicen que también de sabios. Lo que pasa es que, si lo hubiera sido suficientemente, no habría tenido que replantearme una parte del código.

Resulta que tomé una decisión equivocada sobre la forma en que se deberían tratar las cajas en línea: se me ocurrió (iluso de mí) que era buena idea dividirlas físicamente en varias nuevas cajas para hacer la rotura al final de la línea. Además tampoco se iban a permitir cajas de este tipo anidadas entre sí. Gran error.

Aunque todo eso podría funcionar y simplificaba el código del motor de representación, obligaba a los módulos que lo alimentan a indicarle una estructura de documento sujeta a dichas restricciones y ahí sí que se estaban complicando las cosas innecesariamente (sin olvidar que el árbol del documento resultaría demasiado estático como para pensar en JavaScript en el futuro).

Así que ahora estoy reescribiendo el código correspondiente. Es un trabajo que está casi listo. Voy a lograr de esa manera una gran flexibilidad en ese módulo, por lo que pronto podrá verse un ejemplo -bastante embrionario- del resultado.

22.9.06

Apaño temporal de las CSS

Explico un poco la parte implicada de la arquitectura del navegador: uno de los módulos que ya he mencionado alguna vez es el motor de representación de documentos. Sigue un modelo de cajas bastante similar al del W3C, con ciertas reservas. Es genérico, es decir, otros módulos que entiendan diferentes formatos de documento, como HTML -en el que estoy trabajando- o PDF -que tengo planeado-, pueden alimentarle, de manera que es polivalente.

El módulo que procesa HTML (sirviéndose de libsgml, recordemos) también debería ser capaz de entender y aplicar correctamente una hoja de estilos CSS. Finalmente se convertiría el estilo resultante al formato que necesita el motor de representación.

Pero, como me gustaría poder enseñar algo real -aunque no lo sea demasiado- lo antes posible, estoy falseando temporalmente el tema de CSS. Lo que hago es crear algo parecido a la hoja de estilos por defecto, pero a nivel del mencionado módulo de representación. El objetivo sería poder ver una página HTML tal como si nuestro navegador no procesara las CSS (que es una modalidad que se puede escoger en algunos navegadores).

19.9.06

Aprendiendo a escribir

Mientras progresa la integración de libsgml con el motor de representación, escribo esta entrada para los más técnicos o curiosos.

He decidido usar FreeType 2 como biblioteca de manejo de fuentes. Soporta muchos formatos, está bien documentada, permite trabajar con Unicode, consume bastante poca memoria y es libre. (Tiene modelo de licencia dual, que incluye la GPL.)

El único problema es la velocidad. Estoy utilizando fuentes TrueType, y creo que no es una buena idea, ya que la generación de la imagen de un carácter -o, más exactamente, un glifo- a partir de un formato vectorial resulta una tarea pesada para la CPU. Así es que probablemente acabe empleando fuentes bitmap. Se ganará en velocidad, aunque se perderá en posibles tamaños de fuente, ya que tendré que incorporar varios tamaños fijos.

He optimizado esta biblioteca cuanto he podido de manera que aproveche las capacidades de coprocesamiento matemático de la DS. Quizá se pueda mejorar un poco este aspecto, pero seguramente sin grandes diferencias de rendimiento.

Veremos si acaba bien este romance.

Por cierto, acabo de inaugurar la sección de enlaces de la barra lateral. No dejéis de visitar las webs que vayan apareciendo.

17.9.06

Analizando HTML

Para procesar HTML me parecía absurdo reinventar la rueda, así que estuve buceando en busca de alguna biblioteca que desarrollara esa labor. Al fin encontré libsgml, de un tal Matt Miller. Viene en forma de código fuente y es de uso completamente libre.

Estoy haciendo algunas pruebas y parece que funciona muy bien. Sólo le reprocharía que procesa caracteres de 8 bits en vez de Unicode. No obstante, creo que no me resultará difícil adaptarla para este propósito.

16.9.06

Inauguración del blog

Ésta es la primera entrada de muchas -espero- sobre el proyecto que he emprendido de desarrollar un navegador web para la consola portátil Nintendo DS, a pesar de que pronto saldrá en Europa el Opera para esta misma máquina. (Aparte de que probablemente será mejor en general, quién sabe en qué se le podría llegar a superar.)

De momento me gustaría lograr un producto mínimamente usable: un renderizado más o menos correcto de HTML+CSS, implementación de HTTP, etc. Como planes de futuro tengo el posible soporte de PDF, JavaScript y descarga de ficheros, entre otros.

Actualmente estoy trabajando en el motor de representación de documentos.

Aprovecho para agradecer de nuevo los ánimos recibidos y el interés que han puesto algunos eolianos.

Por cierto, el logo y el nombre son obra de mi hermano. La idea era hacer un guiño simpático a algún navegador y, tras barajar y desestimar varios nombres, finalmente se le ha ocurrido lo de OKIWI. Ya sabéis, una de dos: o pera, o kiwi. XD

Os mantendré informados de los avances.