Ho un'implementazione di una casella di testo che usa pango. Se metto una stringa che inizia con una parola nello script da destra a sinistra, seguita da uno spazio, seguita da una parola in uno script da sinistra a destra, la parola wrapping utilizzata da pango viene incasinata (usando PANGO_WRAP_WORD_CHAR
). Per la stringa العربية INGLESE ottengo il seguente:Word wrapping in pango con script misti
Se aggiungo il carattere unicode U+200F
dopo lo spazio, tanto sono il ritorno a capo atteso:
anche , se sostituisco lo script arabo sopra con Hindi (che è sinistra-destra come l'inglese accanto ad esso) allora ho ancora il problema, quindi non sembra essere strettamente da sinistra a destra, a destra- cosa a sinistra Nel caso Hindi, inserisco un hack che inserisce uno 0x200E
dopo che lo spazio ha risolto il problema.
È un errore nel pango? Sono possibili soluzioni che sono abbastanza generiche per risolvere il problema ma non per rompere gli altri casi? Il lavoro corrente su I sta usando gli inserti sia uno 0x200E
o 0x200F
dopo ogni spazio basato sulla direzione del carattere fortemente diretto precedente nella stringa, ma non sono sicuro se ci sono certe stringhe che causeranno problemi con questo.
Aggiornamento: Sono stato in grado di riprodurre il problema su Ubuntu 12.04 con gedit (con Abilita Disposizione testo e fare nessuna parola suddiviso su due linee impostazioni abilitate). Ho semplicemente digitato più volte lo Hello world
finché non lo ha riavvolto diverse volte, quindi ho sostituito tutte le istanze di world
con पहुंचगया
e tutto è collassato su una singola riga.
il problema pango cose che una parola LTR dopo parola RTL (o l'inverso) come una parola, quindi non si romperà su due se si sceglie wrap su parole. –
Ho aggiornato la domanda per menzionare che il problema si verifica anche quando ho solo script LTR alternati (ad esempio inglese e hindi) – pauld