Home>Programmation>Cordial>CasDuRtf

Cas du RTF dans Cordial Mac OS



Présentation :

De nombreux modules dans les dictionnaires de Cordial utilisent le RTF pour la présentation des résultats.Le Mac affiche le RTF sans problème, mais est beaucoup plus délicat que le PC sur la syntaxe. La NSAttributedString retournée par le système à partir de ces données sera nulle le cas échéant.

Dans notre cas il faut remplir un objet graphique NSTextField en lui affectant une NSAttributedString. La fonction qui s'en charge reçoit une chaîne de type char *, que l'on peut récupérer en affichant sa zone mémoire, pour ensuite la copier et l'afficher dans un éditeur de texte. La chaîne ressemble à ça :

RTF avant tabulation

Évidemment ce n'est pas très clair. L'astuce c'est de coller ce texte dans xcode et de profiter d'une particularité de son éditeur de code, en l'occurrence le double click sur une accolade ouvrante révèle celle qui correspond à sa fermeture. Avec quelques retours à la lignes, de temps en temps un couper/coller pour réajuster l'indentation, on arrive à ceci (recollé dans un éditeur de texte ; j'ai supprimé quelques lignes pour l'exemple) :

RTF après tabulation dans XCode

On voit clairement qu'il manque deux accolades fermantes. Ici on a de la chance elles sont à la fin du texte. On la retrouvera dans le code en recherchant par exemple "\\pard\\plain\\f2\\fs22" (avec deux anti-slashes puisqu'elles sont définies comme chaînes de caractères). Dans ce cas la recherche m'a répondu qu'il s'agissait de la constante fin_rtf[] mais  j'ai rencontré également par exemple fin_italique[], plus difficile à repérer.

Le procédé ne marche bien qu'à condition de remplacer les apostrophes par des espaces, sinon elles sont prises pour des délimiteurs de chaînes et XCode ne trouvera pas l'accolade fermante.

 

Cordial utilise le RTF pour des raisons historiques, le XML serait certainement plus pertinent aujourd'hui.

 

Synapse Développement
Cordial sur Wikipedia
Nouveau ! Cordial sur Facebook, avec les rubrique "Le mot du jour" et "Chasseur de perles". Il y a également un lien vers un jeu concours !