Menampilkan Caret dalam String Dua Arah

Dalam teks searah, posisi tanda sisipan tidak memiliki ambiguitas karena tepi utama karakter berada di tempat yang sama dengan tepi berikutnya dari karakter sebelumnya. Namun, dalam teks dua arah, posisi tanda sisipan antara eksekusi arah yang berlawanan ambigu. Misalnya, dalam paragraf kiri-ke-kanan "hellosalaam", huruf terakhir "hello" segera mendahului huruf pertama "salaam". Posisi terbaik untuk menampilkan tanda sisipan tergantung pada apakah itu dianggap mengikuti "o" dari "hello" atau untuk mendahului "s" dari "salaam".

Uniscribe menggunakan konvensi penempatan tanda sisipan yang ditunjukkan pada tabel berikutnya.

Situasi Penempatan caret visual
Mengetik Tepi berikutnya dari karakter terakhir yang ditik.
Menyisipkan Tepi berikutnya dari karakter terakhir yang ditempelkan.
Caret maju Tepi berikutnya dari karakter terakhir yang diteruskan.
Caret pensiun Tepi depan karakter terakhir diteruskan.
Beranda Tepi garis terdepan.
Akhir Tepi garis berikutnya.

 

Tanda sisipan dapat diposisikan seperti yang ditunjukkan dalam contoh berikut:

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

Penempatan caret bisa lebih sederhana, seperti yang ditunjukkan di bawah ini, mengingat nilai fAdvancing yang dibatasi untuk TRUE atau FALSE:

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

ScriptCPtoX menangani posisi di luar rentang secara logis. Ini mengembalikan tepi utama eksekusi untuk iCharPos<0, dan tepi berikutnya dari eksekusi untuk panjang iCharPos>=. Untuk informasi selengkapnya, lihat Mengelola Penempatan Caret dan Pengujian Hit

Menggunakan Uniscribe