diff options
Diffstat (limited to 'src/glibext/gbuffersegment.c')
-rw-r--r-- | src/glibext/gbuffersegment.c | 76 |
1 files changed, 74 insertions, 2 deletions
diff --git a/src/glibext/gbuffersegment.c b/src/glibext/gbuffersegment.c index 1ebb543..27891a8 100644 --- a/src/glibext/gbuffersegment.c +++ b/src/glibext/gbuffersegment.c @@ -29,6 +29,7 @@ #include <string.h> +#include "../common/extstr.h" #include "../common/fnv1a.h" #include "../gtkext/gtkblockview.h" #include "../gtkext/support.h" @@ -385,6 +386,7 @@ bool g_buffer_segment_compare(const GBufferSegment *segment, const GBufferSegmen /****************************************************************************** * * * Paramètres : segment = fragment de texte à consulter. * +* markup = indique si le texte doit être décoré ou non. * * * * Description : Fournit le texte brut conservé dans le segment. * * * @@ -394,9 +396,79 @@ bool g_buffer_segment_compare(const GBufferSegment *segment, const GBufferSegmen * * ******************************************************************************/ -const char *g_buffer_segment_get_text(const GBufferSegment *segment) +char *g_buffer_segment_get_text(const GBufferSegment *segment, bool markup) { - return segment->text; + char *result; /* Description à renvoyer */ + char color[7]; /* Couleur hexadécimale */ + + /* Résolution du cas simple */ + if (!markup) + return strdup(segment->text); + + result = strdup("<span "); + + /* Couleur */ + + result = stradd(result, "foreground=\"#"); + + snprintf(color, sizeof(color), "%02hhx%02hhx%02hhx", + (unsigned char)(segment->pattern->foreground.color.red * 255), + (unsigned char)(segment->pattern->foreground.color.green * 255), + (unsigned char)(segment->pattern->foreground.color.blue * 255)); + + result = stradd(result, color); + + result = stradd(result, "\""); + + /* Style */ + + result = stradd(result, "style=\""); + + switch (segment->pattern->slant) + { + case CAIRO_FONT_SLANT_NORMAL: + result = stradd(result, "normal"); + break; + + case CAIRO_FONT_SLANT_ITALIC: + result = stradd(result, "italic"); + break; + + case CAIRO_FONT_SLANT_OBLIQUE: + result = stradd(result, "oblique"); + break; + + } + + result = stradd(result, "\""); + + /* Epaisseur */ + + result = stradd(result, "weight=\""); + + switch (segment->pattern->weight) + { + case CAIRO_FONT_WEIGHT_NORMAL: + result = stradd(result, "normal"); + break; + + case CAIRO_FONT_WEIGHT_BOLD: + result = stradd(result, "bold"); + break; + + } + + result = stradd(result, "\""); + + /* Conclusion */ + + result = stradd(result, ">"); + + result = stradd(result, segment->text); + + result = stradd(result, "</span>"); + + return result; } |