Utente:Alex brollo/Djvu Editor - Documentazione

Da Wikisource.
Jump to navigation Jump to search

Il Djvu Editor a cui sto lavorando permette già oggi, attraverso una interfaccia utente molto familiare (una semplice pagina web aperta in un browser) di modificare il testo, e la struttura del testo, di un file djvu locale. In teoria, potrebbe essere eseguita, dalla stessa interfaccia, qualsiasi modifica possibile attraverso la libreria DjvuLibre - e non solo.

Architettura[modifica]

L'applicazione ha una struttura server-client; al momento il lato server è un server web virtuale e locale python creato da djvuxml.py, il client è il browser, dove il server apre una pagina http://localhost:8080/gui.html. La connessione fra server e pagina avviene via ajax.

Dal lato server, la potenza di python, che può utilizzare, oltre che qualsiasi libreria del linguaggio, qualsiasi risorsa di sistema e lo spazio di archiviazione del pc; dal lato client, la potenza di javascript (per gran parte attraverso jQuery).

L'interfaccia[modifica]

Il seguente screenshot mostra l'interfaccia utente; per aprirla, basta semplicemente un doppio click su djvuxml.py (che apre una console, avvia il server web locale, e apre la pagina gui.html nel browser di default).

Screenshot djvuxml 1.jpg

In alto, i campi per definire il djvu e la pagina su cui si vuole operare (il djvu deve essere locale, ossia: "visibile" dal server, al momento nella stessa cartella di djvuxml.py). Al momento, in questa versione, il campo "source" non è utilizzato e può essere ignorato.

In alto, seconda riga, alcuni pulsanti per le operazioni più comuni.

  1. load: carica/ricarica la pagina
  2. edit: inutilizzato perchè l'entrata in edit adesso è automatica
  3. save: salva la pagina modificata
  4. cleanup: lancia una serie di modifiche ricorrenti (tipo postOCR)
  5. next e prev: ovvio, pagina seguente e pagina precedente
  6. mw: abbreviazione di merge word
  7. mp: abbreviazione di merge paragraph
  8. sl: abbreviazione di split line
  9. sp: abbreviazione di split paragraph
  10. db: abbreviazione di delete block
  11. diac: attivazione tool diacritici
  12. wst e mbl: funzioni di allineamento non attivate in questa versione
  13. F & R: find and replace (non regex) con memorizzazione

Nei quadri principali, a sinistra il testo "nascosto" della pagina djvu, a destra la sua immagine.

Quadro testo[modifica]

Il testo è un html, non un box textarea; non è quindi immediatamente editabile. Le linee dell'OCR sono rispettate; un sottile bordo rosso delimita i blocchi paragrafo; un sottile bordo verde i blocchi regione.

Cliccando qualsiasi parola, essa viene immediatamente "aperta" in un input box, e quindi può essere editata. Nello screenshot la parola editabile è "aldettofupplicante" che richiede due modifiche: il "distacco" delle parole erroneamente fuse (mediante aggiunta degli spazi) e la correzione f->s di "fupplicante". La parola editabile è evidenziata sull'immagine con un rettangolo azzurro.

Eseguito l'edit, il click su qualsiasi altra parola memorizza l'edit precedente e "apre" la parola cliccata (questo è il "cuore" dell'editor).

Finite le correzioni dell'intero testo, il pulsante save riscrive il testo nel djvu.

Poichè l'editor permette l'accesso diretto solo alle singole parole, sono necessari comandi specifici per modificare la struttura (linee, paragrafi, regioni, gruppi di parole). Per alcune di queste operazioni è necessario selezionare le aree su cui operare, attraverso i piccoli check box a destra dei blocchi di testo.

Nota: lo strumento F & R applica le sostituzioni memorizzate su tutte le parole della pagina, una a una, siano o no in fase di edit.

Quadro immagine[modifica]

A destra, l'immagine derivata (una jpg a media risoluzione); l'immagine è trascinabile; può essere zoomata in avanti e indietro con i due piccoli pulsanti + e - in alto.

All'immagine è sovrapposto un box selettore azzurro-grigio chiaro(inizialmente "dormiente" in alto a sinistra), che può essere trascinato sull'immagine e ridimensionato per selezionarne il contenuto. Un click sul riguardo "seleziona" tutte le parole completamente contenute nel riquadro.

Sull'immagine è anche evidenziata la parola in edit con un riquadro azzurro, che è costruito dalle coordinate della parola contenute nell'attributo data-coord (è quindi anche un metodo per verificare che le coordinate siano corrette).

Più a fondo nelle operazioni sulla struttura[modifica]

  1. divisione di parole erroneamente fuse: inserire degli spazi. La successiva suddivisione in elementi parola distinti è automatica.
  2. fusione di parole: aprire in edit la prima parola e premere mw.
  3. divisione di una linea: aprire in edit l'ultima parola della prima linea e premere sl.
  4. divisione di un paragrafo: come sopra poi premere sp.
  5. fusione di due o più paragrafi: selezionare con i check box i paragrafi da fondere e premere mp.
  6. cancellazione di interi blocchi (paragrafo o regione): selezionare con i ckeck box e premere dlb.

Approfondimento: perchè editare solo parole singole[modifica]

Ogni singola parola dello strato testo di un djvu è la "foglia" di un albero a più livelli:

  • pagina
    • colonna
      • regione
        • paragrafo
          • linea
            • parola

L'ultimo elemento (parola) è accompagnato dalle sue coordinate sull'immagine, e tutti gli elementi di livello superiore possiedono le coordinate derivate. In fase di edit, si deve modificare il contenuto testuale preservando le coordinate; se vi sono operazioni di splitting o di merging fra parole contigue occorre modificare il testo e ricalcolare le coordinate. Ogni parola è contenuta in un elemento span, che dispone di un attributo data-coord sono memorizzate in cui le coordinate.

Il problema è leggere e scrivere esattamente l'intera struttura; è xml, una virgola fuori posto e addio :-(

Approfondimento: come vengono gestiti testo e immagini[modifica]

Le operazioni di lettura-scrittura sul djvu vengono eseguite da routine python chiamate da djvuxml.py.

  1. testo: il testo di ogni pagina viene estratto come xml mediante djvutoxml.exe e salvato in temp/pagina.xml. Il "pezzo buono" viene letto e trasformato in html che viene salvato in temp/pagina.html.
  2. immagine: l'immagine viene estratta con ddjvu.exe come temp/pagina.tiff, poi viene convertita in jpg come temp/pagina.jpg.

A questo punto il server passa al client l'html da inserire nel box a sinistra, oltre che alcune altre informazioni; il client carica questo html, aggiorna la visualizzazione dell'immagine, ed è fatta.

In fase di salvataggio avviene l'inverso: il client invia l'html al server, che lo riconverte in xml e lo ricarica immediatamente nel djvu con una chiamata a djvuxmlparser.exe.

Il djvu corrente, la pagina corrente e il dizionario delle sostituzioni (tpo memoRegex) sono al momento salvati in elementi localStorage.