Pango
Pango és la biblioteca que usa GNOME, i un munt de programes, per al text. Resulta que talla els mots amb punt volat. Això afecta a la correcció ortogràfica i a la selecció amb doble clic o desplaçament del cursor.
Errors oberts a GNOME relacionats amb pango
- Abiword
- Gedit
- component coretext de GNOME <– amb això ja en tindríem prou.
- segmentacó a pango<– aquest és el definitiu.
- [1] <- aquest és el que aporta la solució acceptada.
Exemple del problema
Cadena de prova: “l’agafa el goril·la”
- Límits de paraula (is_word_boundary): |l’agafa| |el| |goril·la|
- Inici de paraula (is_word_starts): [l'[agafa [el [goril·[la <– observem que hi ha inicis de paraula entre dos límits de paraula(?!)
- Final de paraula (is_word_ends): l]’agafa] el] goril]·la] <– observem que hi ha finals de paraula entre dos límits de paraula(?!)
Anàlisi del problema
Pango, quan analitza una cadena de text, marca els atributs is_word_boundary, is_word_start i is_word_end. L’atribut is_word_boundary és calcula seguint l’algorisme UAX #TR29, i ja ens va bé. El problema és que a efectes pràctis, pango usa els atributs is_word_starts i is_word_ends, que calcula amb un altre algorisme més simple, i no ens va bé.
Si llegim l’error 97545 a can GNOME, veiem que després d’implementar l’UAX TR29 a l’atribut is_word_boundary, en Behdad Esfahbod indica al comentari 30 que cal ajustar que els is_word_start/end no creuin límits de paraula. Just el problema que tenim.
Opcions
- Apedaçar l’algorisme que calcula is_word_start i is_word_end, per a tractar bé el punt volat, igual que està fet per al japonès.
- Anul·lar l’algorisme que calcula is_word_start i is_word_end i que fer que es calculin aquests atributs mentre es calcula l’atribut is_word_boundary. Així garantim que no tallen cap zona definida entre dos límit de paraula.
Ernest Adrogué va enviar un pedaç a GNOME amb la implementació de l’opció 2, pendent de revisió i acceptació. No el van acceptar.
Jordi Mas ha enviat un pedaç a pango amb la implementació de l’opció 1. L’han acceptat. Nomé s’aplica, això sí, si el text té defint com a llengua el català.
Dificultat
Més enllà de la dificultat de programar els canvis segons l’opció triada, la dificultat està en que estem canviant la definició de paraula de pango. Basant-nos i amb el suport de l’UAX TR29, però caldrà defensar molt bé la implementació que en fem.
Donada una cadena de text amb els límits de paraula definits, cal establir un criteri que digui quines d’aquests zones són paraules, i quines no ho són. Per exemple, prenent la cadena d’exemple “The quick (“brown”) fox can’t jump 32.3 feet, right?”, de l’UAX TR29
The | quick | ( | “ | brown | ” | ) | fox | can’t | jump | 32.3 | feet | , | right | ? |
Tenim 22 zones definides gràcies als límits de paraula (word boundaries). Quines d’aquests zones són paraules? sembla lògic considerar paraules només les que zones que tenen lletres o números.
The | quick | brown | fox | can’t | jump | 32.3 | feet | right |
Només 9 de les 22 zones inicials són paraules. Els atributs is_word_start/end caldria establir-los de forma que defineixen aquestes zones.