Sto esaminando la struttura dei dati su corda , utilizzato da alcuni editor di testo come editor xi .
Ho le basi su come funziona e ho visto alcune implementazioni di esempio come qui o qui . Ma sono confuso su come gestire correttamente (in modo ottimale) "l'aggiornamento" di una corda per evidenziare la sintassi. Sembra che funzioni nei seguenti passaggi.
- Si inizia con una stringa , non una corda, che è una matrice di caratteri contigui.
- Quindi lo converti in una corda, magari spezzando la stringa ogni 128 caratteri (ho visto quella raccomandazione da qualche parte). Quindi ora hai una corda di base, non sintassi evidenziata, che è solo un gruppo di blocchi di 128 caratteri concatenati insieme .
- Quindi in qualche modo converti questa corda in una corda evidenziata dalla sintassi.
Quindi è come se andassi da qui (l'albero "originale"):
_ 1 _
/ \
2 5
/ \ / \
3 4 6 7
| | | |
abc xyz foo bar
Per qualcosa di simile, diciamo (l'albero "bersaglio"):
_ 1 _
/ \
2 5
/ \ / \
3 4 6 7
| | | |
/ \ xyz foo / \
R G B R
| | | |
a bc ba r
dove R = rosso, G = verde, B = blu.
Cioè, alcuni nodi di "stile" extra sono stati inseriti per dare il colore delle lettere. Fondamentalmente semplice evidenziazione della sintassi per dimostrare la domanda.
Quindi la domanda è, come tratti i due alberi diversi. Sono confuso se si debba mantenere l'albero "originale" non modificato, quindi costruire un nuovo albero per la versione evidenziata della sintassi e in qualche modo mantenere una mappatura tra i due. O se dovessi semplicemente modificare l'albero originale per creare l'albero di destinazione direttamente da esso, così finirai con solo 1 albero invece di 2. Ma poi la parte difficile è se vuoi salvare la stringa in una forma evidenziata in unsintassi , devi ripetere costantemente l'albero di destinazione evidenziato dalla sintassi e rigenerare da esso un albero originale / di base / non evidenziato. Se si sta eseguendo la modifica del testo, significa che ogni file salvato dovrà iterare attraverso l'intera struttura evidenziata della sintassi, generare un nuovo albero e sovrascrivere il contenuto del file con i nuovi byte di base degli alberi. Che in qualche modo sembra inefficiente e mi sto confondendo nel pensare a cosa fare qui.
Un altro modo di vedere questo è se hai 2 o n viste che mostrano la stessa corda. Nella vista 1 si desidera evidenziare unsyntax e visualizzare 2 per evidenziare la sintassi. Non sono sicuro di cosa fare qui. Se hanno fatto riferimento alla stessa struttura di dati della corda, sembra che dovresti costruire un albero aggiuntivo per la versione evidenziata dalla sintassi separata dall'albero originale, quindi non ha danneggiato la struttura originale per la prima vista. Quindi sembra che ci debba essere una sorta di mappatura tra queste corde "derivate".