Hi "Omi" !!!
Danke für deine Hilfe.
Das mit den Schriftarten funktioniert so toll:
Code: Alles auswählen
Procedure Editor_Font(efont.s, size, buffer)
Protected.GtkTextIter istart, iend
Protected *fontbuffer
*fontbuffer = UTF8(efont)
gtk_text_buffer_create_tag(buffer, efont, "family", *fontbuffer)
gtk_text_buffer_create_tag(buffer, "new_size", "size", size * #PANGO_SCALE)
gtk_text_buffer_get_selection_bounds_(buffer, @istart, @iend)
gtk_text_buffer_apply_tag_by_name(buffer, efont, @istart, @iend)
gtk_text_buffer_apply_tag_by_name(buffer, "new_size", @istart, @iend)
FreeMemory(*fontbuffer)
EndProcedure
Aber das mit dem Speichern und Laden ist noch so ein Problem.
Meine Fragen:
Wie implementiert man folgende Api-Funktion korrekt in PureBasic:
gtk_text_buffer_register_deserialize_tagset(..)
gtk_text_buffer_deserialize(..)
gtk_text_buffer_serialize(..)
gtk_text_buffer_new (GtkTextTagTable *table)
Wie arbeitet man korrekt mit GtkTextTagTable ?
Dies braucht man z.B für gtk_text_buffer_register_deserialize_tagset(..)
oder für die Konstruktor-Funktion: gtk_text_buffer_new()
Mein Vorhaben ist es mehrere Tags (z.B <b> und </b>, <i> und </i> ) zu parsen.
Das heißt an entsprechender Positionen <b>, ... speichern und diese später wieder auslesen. Damit man daraufhin den Text formatieren kann.
...........................
ES IST NERVIG !
Ich habe mir gedacht einen zweiten Buffer anzulegen in dem ich zusätzlich zum ersten Buffer die Sonderanweisungen (<b>, </b>, ...) mit speichere.
Der erste Buffer soll nur angezeigt werden damit man die Sonderbefehle nicht sieht.
Soweit ok!
Weiter gedacht:
Man soll ja auch selber die Zeichen <b>, </b>, <i> , .... im Text eingeben können.
Nichts leichter als das: Einfach ein "ReplaceString" für alle echten Vorkommen der jeweiligen Sonderanweisungen bevor diese gespeichert werden und die Trenner hinzugefügt werden. (Aus <b> wird dann z.Bsp. %#x und aus </b> (§$< oder so ähnlich)
Soviel zur Theorie.
Wie kann man jetzt z.B. ein <b> vor der jeweiligen Selektion hinzufügen und ein </b> danach ?
Das geht z.Bsp. nicht:
Code: Alles auswählen
gtk_text_buffer_get_selection_bounds_(savBuffer,@istart,@iend)
gtk_text_buffer_insert(savBuffer, @istart, "<b>", 3)
gtk_text_buffer_insert(savBuffer, @iend, "</b>", 4)
Je nachdem welche Insert-Anweisung ich weglasse wird entweder das <b> davor, oder das </b> danach eingefügt.
Aber nie BEIDE Anweisungen.
Warum ?
....
Man könnte es ja auch so machen:
Code: Alles auswählen
gtk_text_buffer_insert(savBuffer, @istart, "<b>", 3)
gtk_text_buffer_insert_at_cursor(savBuffer, "</b>", Len("</b>"))
Ob das so gut ist ?
Eine weitere kritische Frage ist:
Code: Alles auswählen
gtk_text_buffer_get_bounds_(buffer, @istart, @iend)
gtk_text_buffer_get_text_(buffer, @istart, @iend, 0) ; Wie kann ich den Bufferinhalt als String erhalten ?
Danke für jede Hilfe.