récupération pagination gtk_text_buffer
Je relance mon post de l'autre jour en essayant d'être plus clair
J'ai crée un gtk_text_buffer contenant du texte enrichi (présence de caractère gras par exemple)
J'ai crée ceux-ci avec des gtk_text_tags
Je récupère le texte brut sans prob.
Y a t'il un moyen de récupérer le texte avec sa "pagination" afin de le sauvegarder ? ( format xml, format spécifique à gtk, enfin ce que gtk me permet de faire )
J'ai essayé avec gtk_text_buffer_get_slice.
qu'est ce la valeur booléenne include_hidden_chars signifie ? que sont les "caractères invisible" ? les tags de passage en gras ou en italique par exemple sont ils ce type de caractères invisibles. A savoir que je récupère la chaine dans un buffer en gchar ( donc en char je présumes ). La doc dit que la chaine retournée est en UTF-8 donc j'ai peut être mes tags retournés mais éliminés car char contient des codes ASCII, ça me parait pas être ça car je devrais dans ce cas avoir les codesASCIIc orrespondant aux codes UTF-8
Par ailleurs, la pagination ne serait plutôt pas stocké dans le gtk_text_view, et même punition, comment la sauvegarder cette pagination ?
Merci.
pour sauvegarde texte avec pagination
le texte à sauvegarder :
abcd. stocké dans un gtk_text_buffer
( le c du texte est en caractère gras )
le carcatère gras a été mis via :
Code:
1 2 3
|
gtk_text_buffer_create_tag(buffer,"b","weight",PANGO_WEIGHT_BOLD,NULL);
gtk_text_buffer_apply_tab_by_name(buffer,"b",&start_iter,&end_iter); |
Le caractère "c" ayant été selectionné par gtk_text_buffer_get_selection_bounds
Pour la sauvegarde du texte :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
GdkAtom se_format;
GtkTextIter start_iter,end_iter;
FILE *fichier;
gsize lenght;
guint8 *data;
fichier=fopen("test.txt","wb");
gtk_text_buffer_get_bounds(buffer,&start_iter,&end_iter);
se_format=gtk_text_buffer_register_serialize_tagset(buffer,"default");
data=gtk_text_buffer_serialize(buffer,buffer,se_format,&start_iter,&end_iter,&length);
fwrite(&length,sizeof(gsize),1,fichier);
fwrite(data,sizeof(guint8),length,fichier);
fclose(fichier);
free(data); |
Voici le résultat de fichier texte ( hexadécimal et texte : )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
00000000 E2 00 00 00 47 54 4B 54 45 58 54 42 55 46 46 45 ....GTKTEXTBUFFE
00000010 52 43 4F 4E 54 45 4E 54 53 2D 30 30 30 31 00 00 RCONTENTS-0001..
00000020 00 C4 20 3C 74 65 78 74 5F 76 69 65 77 5F 6D 61 .. <text_view_ma
00000030 72 6B 75 70 3E 0A 20 3C 74 61 67 73 3E 0A 20 20 rkup>. <tags>.
00000040 3C 74 61 67 20 6E 61 6D 65 3D 22 62 22 20 70 72 <tag name="b" pr
00000050 69 6F 72 69 74 79 3D 22 30 22 3E 0A 20 20 20 3C iority="0">. <
00000060 61 74 74 72 20 6E 61 6D 65 3D 22 77 65 69 67 68 attr name="weigh
00000070 74 22 20 74 79 70 65 3D 22 67 69 6E 74 22 20 76 t" type="gint" v
00000080 61 6C 75 65 3D 22 37 30 30 22 20 2F 3E 0A 20 20 alue="700" />.
00000090 3C 2F 74 61 67 3E 0A 20 3C 2F 74 61 67 73 3E 0A </tag>. </tags>.
000000A0 3C 74 65 78 74 3E 61 62 3C 61 70 70 6C 79 5F 74 <text>ab<apply_t
000000B0 61 67 20 6E 61 6D 65 3D 22 62 22 3E 63 3C 2F 61 ag name="b">c</a
000000C0 70 70 6C 79 5F 74 61 67 3E 64 3C 2F 74 65 78 74 pply_tag>d</text
000000D0 3E 0A 3C 2F 74 65 78 74 5F 76 69 65 77 5F 6D 61 >.</text_view_ma
000000E0 72 6B 75 70 3E 0A rkup>.
000000F0
00000100
00000110
00000120
00000130
--- test.txt --0x0/0xE6------------------------------------------------- |
Pour le moment je n'arrives pas à le restaurer correctement
code pour la tentative de rechargement :
Code:
1 2 3 4 5 6 7 8
|
fread(&length,sizeof(gsize),1,fichier);
data=malloc(sizeof(guint8)*length);
fread(data,sizeof(guint8),length,fichier);
se_format=gtk_text_buffer_register_deserialize_tagset(buffer,"default");
gtk_text_buffer_get_iter_at_offset(buffer,&start_iter,0);
gtk_text_buffer_deserialize(buffer,buffer,se_format,&start_iter,length,NULL);
free(data); |
Le texte ne s'affiche pas j'ai un msg erreur assertion dans la console, je dois mal utiliser gtk_text_buffer_deserialize_tagset.
Je continue ma progresssion ...