summaryrefslogtreecommitdiff
path: root/src/glibext/gcodebuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r--src/glibext/gcodebuffer.c68
1 files changed, 66 insertions, 2 deletions
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c
index 1654a72..5644552 100644
--- a/src/glibext/gcodebuffer.c
+++ b/src/glibext/gcodebuffer.c
@@ -135,7 +135,7 @@ static size_t _g_code_buffer_get_index_from_address(const GCodeBuffer *, const v
static size_t _g_code_buffer_get_index_from_address_new(const GCodeBuffer *, const vmpa2t *, bool);
/* Convertit une adresse en indice de ligne. */
-static size_t g_code_buffer_get_index_from_address(GCodeBuffer *, const vmpa2t *, bool);
+static size_t g_code_buffer_get_index_from_address(const GCodeBuffer *, const vmpa2t *, bool);
/* Actualise les largeurs maximales par groupes de lignes. */
static void g_code_buffer_update_line_max_widths(const GCodeBuffer *, size_t, size_t);
@@ -149,6 +149,9 @@ static void on_line_flag_flip(GBufferLine *, BufferLineFlags, BufferLineFlags, G
/* Ajoute une nouvelle ligne à une position donnée. */
static GBufferLine *g_code_buffer_create_new_line(GCodeBuffer *, size_t, const mrange_t *);
+/* Retrouve l'indice associé à une ligne au sein d'un tampon. */
+static size_t g_code_buffer_find_index_by_line(const GCodeBuffer *, const GBufferLine *);
+
/* ---------------------- VUE PARTICULIERE D'UN TAMPON DE CODE ---------------------- */
@@ -498,6 +501,15 @@ static size_t _g_code_buffer_get_index_from_address_new(const GCodeBuffer *buffe
const mrange_t *range; /* Couverture d'une ligne */
+ /**
+ * FIXME
+ *
+ * Cette fonction ne semble plus avoir d'utilité.
+ *
+ * g_code_buffer_get_index_from_address() semble être un bon remplacement.
+ *
+ */
+
for (result = 0; result < buffer->used; result++)
{
range = g_buffer_line_get_range(buffer->lines[result]);
@@ -556,7 +568,7 @@ static size_t _g_code_buffer_get_index_from_address_new(const GCodeBuffer *buffe
* *
******************************************************************************/
-static size_t g_code_buffer_get_index_from_address(GCodeBuffer *buffer, const vmpa2t *addr, bool first)
+static size_t g_code_buffer_get_index_from_address(const GCodeBuffer *buffer, const vmpa2t *addr, bool first)
{
size_t result; /* Indice à retourner */
GBufferLine **found; /* Renvoi vers une trouvaille */
@@ -981,6 +993,58 @@ GBufferLine *g_code_buffer_find_line_by_index(const GCodeBuffer *buffer, size_t
/******************************************************************************
* *
+* Paramètres : buffer = tampon de lignes à consulter. *
+* line = ligne dont l'indice est à retrouver. *
+* *
+* Description : Retrouve l'indice associé à une ligne au sein d'un tampon. *
+* *
+* Retour : Indice de l'adresse trouvée, ou le nombre de lignes sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static size_t g_code_buffer_find_index_by_line(const GCodeBuffer *buffer, const GBufferLine *line)
+{
+ size_t result; /* Indice trouvé à retourner */
+ const mrange_t *range; /* Emplacement de la ligne */
+ const mrange_t *next; /* Emplacement suivant */
+
+ range = g_buffer_line_get_range(line);
+
+ result = g_code_buffer_get_index_from_address(buffer, get_mrange_addr(range), true);
+
+ /**
+ * Comme plusieurs lignes consécutives peuvent avoir la même adresse,
+ * on parcourt les lignes suivantes pour retrouver la ligne recherchée.
+ */
+
+ if (result < buffer->used)
+ {
+ while (buffer->lines[result] != line)
+ {
+ if (++result == buffer->used)
+ break;
+
+ next = g_buffer_line_get_range(buffer->lines[result]);
+
+ if (cmp_vmpa(get_mrange_addr(range), get_mrange_addr(next)) != 0)
+ {
+ result = buffer->used;
+ break;
+ }
+
+ }
+
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : buffer = composant GTK à mettre à jour. *
* *
* Description : Augmente l'indentation des prochaines lignes. *