2012-10-20 6 views
5

Sono in procinto di codificare un editor HTML in Java. Voglio che supporti l'indentazione automatica. Ho implementato un pattern Composite per rappresentare gli oggetti tag HTML nel file attualmente in fase di modifica. Ad esempio, questo codice:Manipolazione stringa o funzione ricorsiva?

<table> <tr> <th>Col1</th> <th>Col2</th> </tr> <tr> <td>Data1</td> <td>Data2</td> </tr> </table>

comporterebbe questa rappresentazione strutturale composito:

  • tavolo -> tr (prima), TR (secondo)
  • tr (prima) -> th (Col1), th (Col2)
  • tr (secondo) -> td (Data1), TD (Data2)

dove x -> y, z significa che x è un genitore di y e z.

ho due opzioni qui:

  1. creare una funzione ricorsiva per restituire una stringa con il rientro in dotazione.
  2. Creare una funzione ricorsiva che restituisce semplicemente una stringa non formattata del codice HTML corrente e quindi aggiungere il rientro in seguito.

È facile fare il primo; tuttavia, trovo difficile continuare a indentare automaticamente seguendo il pattern di indentazione di un utente se alterano il pattern. Per questo motivo, penso che l'opzione 2 sia preferibile. Credo che questo potrebbe anche essere più dinamico, se riesco a farlo funzionare correttamente. Il problema è che non sono abbastanza sicuro di come manipolare la stringa.

Il mio pensiero è che in qualche modo potrei usare una pila. Potrei spingere un tag aperto su di esso e farlo fuori quando è chiuso. Il numero di tag nello stack determinerebbe il numero di volte che ho bisogno di rientrare prima del prossimo tag su una nuova riga. Potrei usare un intero invece, ma vale lo stesso concetto. Il problema è che non so come andare a scorrere attraverso i tag nella stringa in modo che io possa manipolarlo.

Quindi, c'è un modo per eseguire la manipolazione delle stringhe nel modo in cui l'ho descritta? O è meglio andare con la funzione ricorsiva?

risposta

1

Data la tua domanda così ben articolata, penso che tu sia la persona migliore per rispondere, e hai solo bisogno di maggiori informazioni.

a venire con queste informazioni, questo può essere utile:

  1. considerare l'intero ciclo di vita del testo. Avrai bisogno di reagire sui tasti ecc. Quindi avere il modello e la presentazione chiaramente separati è molto meglio piuttosto che manipolare le stringhe imbottite. Un altro vantaggio è che si può scegliere un componente modificare il testo esistente in modo relativamente indipendente dal modello

  2. considerazione esempi: ricco editor di testo, open source come jEdit ecc

+0

Penso che l'opzione migliore sia probabilmente quella di utilizzare una funzione ricorsiva, quindi. Grazie mille. – CouchCommando

0

Per XHTML, il lavoro può essere fatto molto facilmente utilizzando fogli di stile XSLT e XSL.

+0

Sfortunatamente, questo non sarebbe applicabile nel mio caso.Sto parlando di scrivere il back-end di un programma. Ecco un semplice diagramma UML di cosa sta succedendo: http://imgur.com/Aivc6 BufferContext contiene una stringa: il file HTML corrente che viene modificato creato dalla struttura composita a cui è collegato. HTMLConstruct è semplicemente un'interfaccia che definisce tutti i costrutti concreti, che sono oggetti per rappresentare i tag HTML e le loro informazioni interne. Si noti che BufferContext è una parte del modello, non una parte della vista. – CouchCommando