Classe di stringa basata su grafemi?

9

Mi chiedo perché non abbiamo alcune classi di stringhe che rappresentano una stringa di grapheme grafo Unicode invece di punti o caratteri di codice. Mi sembra che nella maggior parte delle applicazioni sarebbe più facile per i programmatori accedere ai componenti di un grafema quando necessario piuttosto che dover organizzarli da punti di codice, il che appare necessario anche solo per evitare di rompere casualmente una stringa in "mid-grapheme" (almeno in teoria). Internamente una classe di stringhe potrebbe usare una codifica di lunghezza variabile come UTF-8, UTF-16, o in questo contesto anche UTF-32 è di lunghezza variabile; o implementare sottoclassi per tutti (e facoltativamente configurare la scelta in fase di esecuzione in modo che lingue diverse possano usare le loro codifiche ottimali). Ma se i programmatori potessero "vedere" le unità di grafema durante l'ispezione di una stringa, il codice di manipolazione delle stringhe in generale non sarebbe più vicino al raggiungimento della correttezza e senza molta complessità?

    
posta nassar 20.10.2010 - 08:49
fonte

1 risposta

4

Sembra che il modo migliore per ottenere la correttezza sia quello di impedire ai programmatori di eseguire "string hacking" ... semplicemente non è corretto scrivere il proprio wrap, sillabazione, conteggio parole, giustificazione, movimento del cursore, ecc. . Tutti i moderni framework per l'interfaccia utente ti faranno queste cose per te in questi giorni.

Cioè, l'astrazione con cui di solito lavori è più di un "oggetto di visualizzazione del paragrafo", come per GTK: link

piuttosto che una stringa grapheme, ad esempio: link

Per ottenere una serie di glifi hai bisogno di informazioni che sono disponibili solo a livello "vista", quindi la maggior parte degli usi delle stringhe potrebbero non avere queste informazioni. Ad esempio, devi conoscere il carattere, perché i caratteri possono avere legature diverse.

A parte questo genere di problemi pratici, probabilmente glifi non sono quello che vuoi.

In molti contesti, si desidera utilizzare gli attributi Unicode corretti, mostrati in questa API per esempio: link

Come puoi vedere da quella struttura (che riflette gli algoritmi Unicode) fare varie cose ai confini degli glifi non è più corretto di farlo ai confini dei caratteri.

Queste due specifiche descrivono gli algoritmi per trovare diversi tipi di limiti:

L'elaborazione del testo comporta la ricerca di quei confini con gli algoritmi e quindi il lavoro con i limiti.

Se inizi a indagare su quanto sia difficile gestire correttamente tutte le lingue, ti renderai conto rapidamente che hai bisogno di una libreria che guardi interi paragrafi e li gestisca correttamente. Windows, Mac, Linux (Qt e GTK) e Java sono tutti dotati di funzionalità per questo, inoltre c'è link per esempio.

Quando si scrivono applicazioni web, sfortunatamente è necessario lasciare che il browser (probabilmente aiutato dal sistema operativo) esegua questa operazione, per quanto ne so. Tutto ciò che puoi fare in JavaScript o sul lato server è rovinare.

Forse riassumo la risposta come: la maggior parte della manipolazione delle stringhe sul testo in linguaggio naturale è interrotta, quindi non c'è molto da preoccuparsi della classe string, a parte forse avere uno senza metodi su di esso; -)

    
risposta data 29.10.2010 - 02:54
fonte

Leggi altre domande sui tag