Domanda

Sto creando un programma di Linux in C ++ per un dispositivo portatile per rendere i file HTML.

Il problema è che il dispositivo è limitata nella RAM, rendendo così impossibile l'apertura file di grandi dimensioni (con il software vero e proprio).

Una soluzione è quella di caricare dinamicamente / scaricare parti del file, ma non sono sicuro come implementare questo.

La capacità di scorrimento è un must, con una superficie liscia esperienza, se possibile,

Mi piacerebbe sentire da voi qual è l'approccio migliore per questa situazione? Si può suggerire un algoritmo, un progetto open-source per dare un'occhiata a, o di una libreria che sostengo quello che sto cercando di fare (WebKit?).

Modifica Sto scrivendo un lettore di ebook, quindi ho solo bisogno di rendering HTML puro, javascript, CSS no, ...

È stato utile?

Soluzione

Per essere in grado di navigare un documento albero (come HTML) senza completamente carico, si dovrà fare alcune ipotesi - come il documento in un albero vero e proprio. Quindi, non preoccuparsi di verificare tag di chiusura. Chiudere i tag sono progettati per il consumo umano in ogni caso, i computer sarebbero felici con <> troppo.

Il primo passo è quello di pensare che la prima parte del documento è rappresentato dalla prima parte del documento. Che suona come una tautologia, ma con HTML "moderno" e di certo JS questo è tecnicamente non è più vero. Eppure, se una qualsiasi linea di codice HTML può colpire qualsiasi pixel, semplicemente non può parzialmente caricare una pagina.

Quindi, se c'è una semplice relazione tra la posizione del file HTML e le pagine sullo schermo, il passo successivo è quello di definire lo stato di analisi, alla fine di ogni pagina. Questo sarà quindi includere compensato un unico file, probabilmente (ma non necessariamente) alla fine di un paragrafo. Fanno parte di questo stato è una pila di tag aperti.

Per rendere più facile di paging, è intelligente per mantenere questo stato di "limite di pagina" per ogni pagina che avete incontrato finora. Questo rende il paging di nuovo facile.

Ora, quando il rendering di una nuova pagina, lo stato precedente limite di pagina vi darà lo stato di rendering iniziale. È sufficiente leggere HTML e di renderlo elemento per elemento fino ad abbondare una singola pagina. È quindi un passo indietro e determinare il nuovo stato limite di pagina.

scorrimento uniforme è fondamentalmente una questione di rendere due pagine adiacenti e mostrando x% del primo e 100 x% del secondo. Dopo aver implementato questo bit, può diventare intelligente per finire un paragrafo quando il rendering ogni pagina. Questo vi darà un po 'diverse lunghezze di pagina, ma non avere a che fare con i paragrafi rotti, e che a sua volta rende la vostra pagina di stato di confine un po' più piccolo.

Altri suggerimenti

Dillo è il più leggero di peso Linux browser web che io sappia.

Modifica : Se si tratta (o la sua componente di rendering) non sarà soddisfare le vostre esigenze, allora si potrebbe trovare l'elenco di Wikipedia di confronto e di motori di layout di essere utile.

Modifica 2: Ho il sospetto che carico e allo scarico in modo dinamico parti di un file HTML sarebbe difficile; per esempio, come è possibile sapere che un pezzo scelto a caso del file non è nel bel mezzo di un tag? probabilmente dovreste usare qualcosa come SAX per analizzare il file in una rappresentazione intermedia, risparmiando pezzi discreti del rappresentazione intermedia in un archivio permanente in modo che non si occupano troppo di RAM. Oppure si potrebbe analizzare il file con SAX per mostrare tutto ciò si inserisce in RAM in una sola volta poi ri-analizzare ogni volta che l'utente scorre troppo lontano. (Fogli di stile e Javascript rovinerebbe questo approccio, alcuni semplice HTML potrebbe anche.) Se si trattasse di me, mi piacerebbe provare a trovare una semplice linguaggio di markup o una sorta di ricca visualizzatore di testo piuttosto che andare a tutto ciò difficoltà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top