diff options
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r-- | src/glibext/gcodebuffer.c | 68 |
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. * |