Pregunta

Estoy creando un programa en C ++ de Linux para un dispositivo portátil con el fin de hacer que los ficheros HTML.

El problema es que el dispositivo está limitado en la memoria RAM, por lo que es imposible abrir archivos de gran tamaño (con software real).

Una solución es cargar dinámicamente / descarga de las partes del archivo, pero no estoy seguro de cómo poner en práctica eso.

La capacidad de desplazamiento es una necesidad, con una experiencia suave, si es posible

Me gustaría saber de usted lo que es el mejor enfoque para tal situación? Usted puede sugerir un algoritmo, un proyecto de código abierto a echar un vistazo a, o una biblioteca que apoyan lo que estoy tratando de hacer (webkit?).

EDIT: Estoy escribiendo un lector de libros electrónicos, por lo que sólo tiene representación en HTML puro, sin Javascript, sin CSS, ...

¿Fue útil?

Solución

Para ser capaz de navegar por un documento de árboles (como HTML) sin carga completamente, tendrá que hacer algunas suposiciones - como el documento de ser un árbol real. Por lo tanto, no se molestan en comprobar etiquetas de cierre. Etiquetas de cierre están diseñados para el consumo humano de todos modos, los ordenadores serían felices con <> también.

El primer paso es asumir que la primera parte del documento está representado por la primera parte del documento. Eso suena como una tautología, pero con HTML "moderna" y ciertamente JS esto es técnicamente ya no es así. Sin embargo, si cualquier línea de HTML puede afectar a cualquier píxel, usted simplemente no puede cargar parcialmente una página.

Por lo tanto, si hay una relación simple entre la posición del archivo HTML y las páginas que aparecen en pantalla, el siguiente paso es definir el estado de análisis al final de cada página. Esto incluirá entonces un solo archivo compensado, probablemente (pero no necesariamente) al final de un párrafo. También forman parte de este estado es una pila de etiquetas de apertura.

Para hacer más fácil paginación, es inteligente para mantener este estado "límite de página" para cada página que ha encontrado hasta el momento. Esto hace paginación trasero fácil.

Ahora, cuando se representa una nueva página, el estado límite de la página anterior le dará el estado de representación inicial. Sólo tiene que leer HTML y hacerla elemento por elemento hasta que se desborde una sola página. A continuación, dar marcha atrás un poco y determinar el nuevo estado límite de página.

Desplazamiento suave es básicamente una cuestión de representación dos páginas adyacentes y que muestra x% de la primera y 100-x% de la segunda. Una vez que haya implementado este bit, que puede llegar a ser inteligentes para terminar un párrafo al representar cada página. Esto le dará un poco diferentes longitudes de página, pero usted no tiene que lidiar con los párrafos rotos, y que a su vez hace que su página de estado límite un poco más pequeño.

Otros consejos

Dillo es el más ligero de peso Linux navegador web que yo sepa.

Editar : Si él (o su componente de representación) no cumplirá con sus necesidades, entonces usted puede encontrar la lista de comparación de e motores de diseño para ser útil.

Editar 2: Sospecho que carga y descarga dinámicamente partes de un archivo HTML sería complicado; por ejemplo, ¿cómo saber que un trozo elegido al azar del archivo no está en el medio de una etiqueta? Probablemente tendría que utilizar algo como SAX para analizar el archivo en una representación intermedia, el ahorro de trozos discretos de la representación intermedia de almacenamiento persistente por lo que no van a tener demasiada memoria RAM. O se podría analizar el archivo con SAX para mostrar lo que se adecue a la vez en la memoria RAM continuación, volver a analizarlo cada vez que el usuario se desplaza demasiado lejos. (Hojas de estilo y Javascript arruinaría este enfoque, algunos HTML plano podría también.) Si fuera yo, que iba a tratar de encontrar un lenguaje simple de marcas o algún tipo de visor de texto enriquecido en lugar de ir a todos los que la dificultad

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top