diff options
Diffstat (limited to 'src/glibext')
-rw-r--r-- | src/glibext/gbufferline.c | 38 | ||||
-rw-r--r-- | src/glibext/gbufferline.h | 3 | ||||
-rw-r--r-- | src/glibext/gbuffersegment.c | 26 | ||||
-rw-r--r-- | src/glibext/gbuffersegment.h | 3 | ||||
-rw-r--r-- | src/glibext/gcodebuffer.c | 31 | ||||
-rw-r--r-- | src/glibext/gcodebuffer.h | 3 |
6 files changed, 103 insertions, 1 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c index e32e450..08f5ae7 100644 --- a/src/glibext/gbufferline.c +++ b/src/glibext/gbufferline.c @@ -24,9 +24,12 @@ #include "gbufferline.h" +#include <string.h> #include <gtk/gtk.h> /* Récupération du langage par défaut ; FIXME ? */ +#include "../common/extstr.h" + #include <malloc.h> /* FIXME : à virer */ @@ -495,6 +498,41 @@ void g_buffer_line_insert_text(GBufferLine *line, BufferLineColumn column, const /****************************************************************************** * * +* Paramètres : line = ligne à venir consulter. * +* * +* Description : Donne le texte représenté par une ligne de tampon. * +* * +* Retour : Texte à libérer de la mémoire après usage. * +* * +* Remarques : - * +* * +******************************************************************************/ + +char *g_buffer_line_get_text(const GBufferLine *line) +{ + char *result; /* Construction à retourner */ + BufferLineColumn i; /* Boucle de parcours #1 */ + size_t j; /* Boucle de parcours #2 */ + + result = NULL; + + for (i = BLC_ASSEMBLY_HEAD; i < BLC_COUNT; i++) + for (j = 0; j < line->columns[i].count; j++) + if (result == NULL) + { + result = strdup(g_buffer_segment_get_text(line->columns[i].segments[j])); + result = stradd(result, " "); + } + else + result = stradd(result, g_buffer_segment_get_text(line->columns[i].segments[j])); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : line = ligne à venir compléter. * * index = index de la colonne visée par la procédure. * * * diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h index 1e115cd..a9f6391 100644 --- a/src/glibext/gbufferline.h +++ b/src/glibext/gbufferline.h @@ -121,6 +121,9 @@ void g_buffer_line_add_segment(GBufferLine *, BufferLineColumn, GBufferSegment * /* Ajoute du texte à formater dans une ligne donnée. */ void g_buffer_line_insert_text(GBufferLine *, BufferLineColumn, const char *, size_t, RenderingTagType); +/* Donne le texte représenté par une ligne de tampon. */ +char *g_buffer_line_get_text(const GBufferLine *); + /* Fournit la largeur requise pour une colonne de ligne donnée. */ gint g_buffer_line_get_width(GBufferLine *, BufferLineColumn); diff --git a/src/glibext/gbuffersegment.c b/src/glibext/gbuffersegment.c index 0714e9c..6e862ad 100644 --- a/src/glibext/gbuffersegment.c +++ b/src/glibext/gbuffersegment.c @@ -25,6 +25,7 @@ #include <stdbool.h> +#include <string.h> @@ -38,6 +39,8 @@ struct _GBufferSegment { GObject parent; /* A laisser en premier */ + char *text; /* Texte brut conservé */ + PangoAttrList *attribs; /* Propriétés du rendu */ GdkColor cache_fg; /* Couleur d'impression */ @@ -376,6 +379,8 @@ GBufferSegment *g_buffer_segment_new(PangoContext *context, PangoAttrList *attri result = g_object_new(G_TYPE_BUFFER_SEGMENT, NULL); //result = g_new(GBufferSegment, 1); + result->text = strdup(text); + result->attribs = pango_attr_list_ref(attribs); g_buffer_segment_prepare(result, context, attribs, text, length); @@ -389,7 +394,26 @@ GBufferSegment *g_buffer_segment_new(PangoContext *context, PangoAttrList *attri /****************************************************************************** * * -* Paramètres : segment = fragment de texte à consulter. * +* Paramètres : segment = fragment de texte à consulter. * +* * +* Description : Fournit le texte brut conservé dans le segment. * +* * +* Retour : Texte conservé en interne. * +* * +* Remarques : - * +* * +******************************************************************************/ + +const char *g_buffer_segment_get_text(const GBufferSegment *segment) +{ + return segment->text; + +} + + +/****************************************************************************** +* * +* Paramètres : segment = fragment de texte à consulter. * * * * Description : Fournit la quantité de pixels requise pour l'impression. * * * diff --git a/src/glibext/gbuffersegment.h b/src/glibext/gbuffersegment.h index b335ab6..ead0560 100644 --- a/src/glibext/gbuffersegment.h +++ b/src/glibext/gbuffersegment.h @@ -64,6 +64,9 @@ GType g_buffer_segment_get_type(void); /* Crée un nouveau fragment de texte avec des propriétés. */ GBufferSegment *g_buffer_segment_new(PangoContext *, PangoAttrList *, const char *, size_t); +/* Fournit le texte brut conservé dans le segment. */ +const char *g_buffer_segment_get_text(const GBufferSegment *); + /* Fournit la quantité de pixels requise pour l'impression. */ gint g_buffer_segment_get_width(const GBufferSegment *); diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c index fe00e2d..ac63a87 100644 --- a/src/glibext/gcodebuffer.c +++ b/src/glibext/gcodebuffer.c @@ -445,6 +445,37 @@ GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer, vmpa_t addr) /****************************************************************************** * * * Paramètres : buffer = composant GTK à mettre à jour. * +* addr = adresse où retrouver la ligne recherchée. * +* * +* Description : Retrouve une ligne au sein d'un tampon avec une adresse. * +* * +* Retour : Line retrouvée ou NULL en cas d'échec. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GBufferLine *g_code_buffer_find_line_by_addr(const GCodeBuffer *buffer, vmpa_t addr) +{ + GBufferLine *result; /* Instance à retourner */ + size_t i; /* Boucle de parcours */ + + result = NULL; + + /* TODO : coder un parcours plus optimal ! */ + + for (i = 0; i < buffer->used && result == NULL; i++) + if (g_buffer_line_get_address(buffer->lines[i]) == addr) + result = buffer->lines[i]; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : buffer = composant GTK à mettre à jour. * * * * Description : Augmente l'indentation des prochaines lignes. * * * diff --git a/src/glibext/gcodebuffer.h b/src/glibext/gcodebuffer.h index 1cac790..2c8dbe9 100644 --- a/src/glibext/gcodebuffer.h +++ b/src/glibext/gcodebuffer.h @@ -62,6 +62,9 @@ GCodeBuffer *g_code_buffer_new(void); /* Ajoute une nouvelle ligne à un tampon pour code désassemblé. */ GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *, vmpa_t); +/* Retrouve une ligne au sein d'un tampon avec une adresse. */ +GBufferLine *g_code_buffer_find_line_by_addr(const GCodeBuffer *, vmpa_t); + /* Augmente l'indentation des prochaines lignes. */ void g_code_buffer_inc_indentation(GCodeBuffer *); |