Algoritmo e struttura dati per commenti di testo

1

Quale struttura dati viene utilizzata per commentare il testo e quali algoritmi si occupano dell'aggiornamento della posizione del commento? Una funzionalità di commento è presente in ogni buon elaboratore di testi come Microsoft Word, Google Documenti ecc.

Posso immaginare due approcci: uno circonderebbe il testo commentato con una sorta di markup (ad esempio tag XML), che memorizza implicitamente la posizione del commento all'interno del testo commentato. L'utente non vede i tag XML, poiché viene analizzato in anticipo dal word processor.

L'altro approccio potrebbe essere la memorizzazione di un array di tutti i commenti e le loro posizioni e l'aggiornamento delle posizioni man mano che il testo commentato cambia.

Ci sono altri possibili approcci? Quali potrebbero essere gli avvertimenti di un'implementazione specifica?

    
posta medonja 18.03.2016 - 14:13
fonte

2 risposte

2

Lo farei con una semplice raccolta di tuple contenenti la posizione e la lunghezza del testo da annotare e il testo dell'annotazione.

Ad esempio

public class Annotation {
    public int Position;
    public int Length;
    public string Text;
}

In C #, la raccolta più favorevole sembra essere un OrderedDictionary . Un OrderedDictionary consente di cercare annotazioni per posizione, ma è anche possibile scorrere le annotazioni nell'ordine in cui appaiono nel testo. Puoi persino tenere un puntatore all'annotazione più vicina mentre l'utente naviga nel testo.

var dictionary = new OrderedDictionary<int, Annotation>();
    
risposta data 18.03.2016 - 15:49
fonte
0

In base al tuo commento alla risposta di Robert Harvey, potresti fare una combinazione di entrambi.

Il tag markup / xml manterrà la posizione insieme a qualche sorta di identificatore a un elemento dell'array. In questo modo il tag viene ridotto di dimensioni poiché non deve contenere il contenuto del commento e può facilmente spostarsi mentre gli elementi vengono inseriti prima di esso.

Ottieni il vantaggio dell'array in una situazione in cui devi accedere o scaricare il contenuto di tutti i commenti. Di solito ciò non include le posizioni, quindi è sufficiente accedere all'array e non cercare nel documento il markup.

    
risposta data 18.03.2016 - 21:07
fonte

Leggi altre domande sui tag