2015-01-06

(ro) Diacriticele, internetul și Unicode

Pentru a publica texte în limba română pe internet știm că trebuie să folosim „Unicode”. Conform Wikipedia „Unicode (pronunțat în engleză /ˈjuːnɪˌkəʊd/) este un format definit de către Unicode Consortium pentru codarea, stocarea și interpretarea textelor pe suporturi informatice”.

Fiecare caracter, simbol are un număr de „ordine”. Mai jos avem numerele de ordine ale caracterelor specifice limbii române:
  • ă - litera latină mică a cu breve - U+0103
  • Ă - litera latină mare A cu breve - U+0102
  • â - litera latină mică a cu accent circumflex - U+00E2
  • Â - litera latină mare A cu accent circumflex - U+00C2
  • î - litera latină mică i cu accent circumflex - U+00EE
  • Î - litera latină mare I cu accent circumflex - U+00CE
  • ș - litera latină mică s cu virgula dedesubt - U+0219
  • Ș - litera latină mare S cu virgulă dedesubt - U+0218
  • ț - litera latină mică t cu virgulă dedesubt - U+021B
  • Ț - litera latină mare T cu virgulă dedesubt - U+021A
  • „ - ghilimele stânga jos (dublu 9 jos) - U+201E
  • ” - ghilimele dreapta sus (dublu 9 sus) - U+201D
  • « - ghilimele ascuțite stânga - U+00AB
  • » - ghilimele ascuțite dreapta - U+00BB
  • – - linia de dialog (en dash) - U+2013
În trecutul apropiat au existat sisteme de operare care au avut familii de fonturi care nu conțineau ș și ț cu virgulă. Browserele afișau pătrățele, sau literele arătau diferit deoarece alt font a fost folosit pentru afișaj.

Pentru a combate această problemă există mai multe soluții:
  • nu se folosesc diacritice. Soluție nerecomandată, dar răspândită ajutată de comoditatea celor care scriu astfel de texte. hotnews.ro WTF ?!
  • se folosesc ş și ţ cu sedilă în loc de ș și ț cu virgulă. Soluție nerecomandată, foarte răspândită ajutată de aranjamentul moștenit de la Microsoft și de soluția „Română cu Alt Dreapta” de la diacritice.ro.
  • se folosesc ș și ț cu virgulă împreună cu un cod javascript care adaptează pagina în funcție de sistemul de operare. Soluție recomandată. Wikipedia în limba română folosește această tehnică.
  • se folosesc ș și ț cu virgulă împreună cu un font specific (@font-face). Soluție recomandatăkmkz.ro folosește familiile de fonturi Futura și Frutigercatavencii.ro folosește familia de fonturi Open Sans, ș.a.m.d.
Ultima soluție mi se pare cea mai elegantă. Pagina web va arată la fel pe toate sistemele de operare și există multe familii de fonturi pe care le putem folosi de la Google Fonts (avut grijă la „Latin Extended”) sau să le avem generate de către Font Squirrel și să le avem local pe server.

kmkz.ro au ales varianta sigură și au generat fonturile cu Font Squirrel și le-au pus pe server. Dar din când în când au articole care arată bizar. Mai jos am pus capturi de ecran cu această bizarerie:

Mozilla Firefox 34
(bug #1128330)
Internet Explorer 11
(bug #1111623)
Google Chrome 39

Firefox și Internet Explorer afișează ă, ș și ț bizar, ca și cum breve-le și virgula ar fi după ă, ș și ț!

După un pic de muncă de investigație am aflat de simbolurile diacritice combinatorii din cadrul Unicode - Combining Diacritical Marks (U+0300 – U+036F).

Astfel putem avea combinațiile (literele din stânga sunt combinații):
  • ă - litera latină mică a și breve-ul - U+0061 și U+0306
  • Ă - litera latină mare A și breve-ul - U+0041 și U+0306
  • â - litera latină mică a și accentul circumflex - U+0061 și U+0302
  • Â - litera latină mare A și accentul circumflex - U+0041 și U+0302
  • î - litera latină mică i și accentul circumflex - U+0069 și U+0302
  • Î - litera latină mare I și accentul circumflex - U+0049 și U+0302
  • ș - litera latină mică s și virgula dedesubt - U+0073 și U+0326
  • Ș - litera latină mare S și virgula dedesubt - U+0053 și U+0326
  • ț - litera latină mică t și virgula dedesubt - U+0074 și U+0326
  • Ț - litera latină mare T și virgula dedesubt - U+0054 și U+0326
Literele arată ca cele necombinate, cum ne putem da seama de diferență? Simplu, copiați o literă în „notepad” și ștergeți-o cu „Backspace”, o să observați că se șterge breve-ul, accentul circumflex sau virgula prima și apoi litera de bază.

Pagina de la Kmkz se vede aiurea deoarece fonturile generate de Font Squirrel nu includ diacriticele combinatorii (U+0300 – U+036F). Putem verifica asta la Glypviewer și apoi introducând http://www.kmkz.ro/wp-content/themes/kmkz_v3/fonts/frutiger/frutigerroce-roman-webfont.woff la „Remote URL”.

Font Squirrel poate fi configurat să includă diacriticele combinatorii astfel:


Google Fonts nu exportă diacriticele combinatorii. Dacă vreți să folosiți un font de acolo, descărcați-l ca ttf/otf și apoi transformați-l cu Font Squirrel.

Google Chrome 39 ar fi trebuit să fi afișat pagina aiurea, dar dintr-un motiv sau altul afișează pagina corect.

La fileformat.info am aflat de exemplu că ț-ul a fost introdus în Unicode în versiunea 3.0.0 din Septembrie 1999, pe când virgula a fost introdusă în Unicode în versiunea 1.1.0 din Iunie 1993! Tot în versiunea 1.1.0 a fost introdus și ţ-ul cu sedilă.

Am decis să testez un Windows XP fără fonturi actualizate să văd cum afișează Internet Explorer 6.0 o pagină de test (vezi codul sursă la pastebin.com/tuavSbY4):

Familia de fonturi Arial
Familia de fonturi Tahoma


Se poate observa că problema diacriticelor lipsă nu ar fi fost rezolvată cu fonturile care nu au ș și ț cu virgulă (Tahoma fiind printre puținele familii de fonturi care vine cu ș și ț pe Windows XP). Dar avem o îmbunătățire, putem vedea caracterul de bază și nu doar un pătrățel :)

Ca fapt divers, pagina de test arată „interesant” în poza de previzualizare a serviciului de scurtare de linkuri goo.gl:



În articolul Aranjamente de tastatură românească am pus la dispoziție trei pachete de instalare pentru tastaturile românești folosite în lumea Windows.

Mai jos aveți aceleași trei pachete de instalare, dar de data aceasta literele (ăĂîÎșȘțȚ) sunt generate folosit diacriticele combinatorii:

*Aranjamentul „Română (Moștenit)” vine cu unele îmbunătățiri, pentr
u a afla mai multe vezi articolul de mai sus.

Nu știu ce software au folosit cei de la Kmkz pentru a produce textele cu diacriticele combinate, dar acum se poate face același lucru folosind Windows!

Nu recomand folosirea diacriticelor combinate, dar este bine să știm despre existența lor :)

P.S. 

Cristiana Cobliș a menționat caracterul util al diacritcelor combinate în contextul fonturilor care nu conțin diacriticele directe. Google Fonts conține multe fonturi care nu conțin diacriticele directe, mai ales ț-ul.

Am reușit să găsesc un font care îndeplinește această condiție: Righteous. Mai jos avem o captură de ecran cu Google Chrome 39 și fontul Righteous:


Din păcate doar Google Chrome randează pagina corect. Mozila Firefox 34 sau Internet Explorer 11 au probleme.

Este mult mai simplu să facem browserele să afișeze corect diacriticele combinate decât să convingem toți autorii de fonturi să adauge literele lipsă, în special ț-ul :)

No comments: