Condividi tramite


Visualizzazione del cursore in stringhe bidirezionali

Nel testo unidirezionale, la posizione del cursore non presenta ambiguità perché il bordo iniziale di un carattere si trova nella stessa posizione del bordo finale del carattere precedente. Tuttavia, nel testo bidirezionale, la posizione del cursore tra segmenti di direzione opposta è ambigua. Ad esempio, nel paragrafo da sinistra a destra "hellosalaam", l'ultima lettera di "hello" precede immediatamente la prima lettera di "salaam". La posizione migliore in cui visualizzare il cursore dipende dal fatto che sia considerato seguire la "o" di "ciao" o precedere la "s" di "salaam".

Uniscribe usa le convenzioni di posizionamento del cursore illustrate nella tabella successiva.

Situazione Posizionamento del cursore visivo
Digitazione Bordo finale dell'ultimo carattere digitato.
Incollare Margine finale dell'ultimo carattere incollato.
Avanzamento del cursore Bordo finale dell'ultimo carattere superato.
Disattivazione del cursore Bordo iniziale dell'ultimo carattere passato sopra.
Casa Bordo iniziale della linea.
Fine Bordo finale della linea.

 

Il cursore può essere posizionato come illustrato nell'esempio seguente:

if (fAdvancing) {
    ScriptCPtoX(
        iCharPos - 1, TRUE, 
        cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
        );
} else {
    ScriptCPtoX(
        iCharPos, FALSE, 
        cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
        );
}

Il posizionamento del cursore può essere più semplice, come illustrato di seguito, dato un valore di fAdvancing limitato a TRUE o FALSE:

ScriptCPtoX(
    iCharPos - fAdvancing, fAdvancing, 
    cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
    );

ScriptCPtoX gestisce le posizioni fuori intervallo in modo logico. Restituisce l'estremità iniziale del segmento per iCharPos<0, e l'estremità finale del segmento per iCharPos>= lunghezza. Per ulteriori informazioni, vedere Gestione del posizionamento del cursore e test di rilevamento

Using Uniscribe