summaryrefslogtreecommitdiff
path: root/src/glibext
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext')
-rw-r--r--src/glibext/gbufferline.c38
-rw-r--r--src/glibext/gbufferline.h3
-rw-r--r--src/glibext/gbuffersegment.c26
-rw-r--r--src/glibext/gbuffersegment.h3
-rw-r--r--src/glibext/gcodebuffer.c31
-rw-r--r--src/glibext/gcodebuffer.h3
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 *);