From 6f89c15215b746f050f8280fac14a77e50bf8077 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 6 Nov 2016 11:54:54 +0100
Subject: Handled tabulations as small separation paddings.

---
 ChangeLog                 |  5 +++++
 src/glibext/linesegment.c | 15 ++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index fea9acd..243a41a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+16-11-06  Cyrille Bagard <nocbos@gmail.com>
+
+	* src/glibext/linesegment.c:
+	Handle tabulations as small separation paddings.
+
 16-11-03  Cyrille Bagard <nocbos@gmail.com>
 
 	* plugins/androhelpers/androhelpers.c:
diff --git a/src/glibext/linesegment.c b/src/glibext/linesegment.c
index ee79a22..8306320 100644
--- a/src/glibext/linesegment.c
+++ b/src/glibext/linesegment.c
@@ -532,6 +532,8 @@ line_segment *get_new_line_segment(RenderingTagType type, const char *text, size
     char atmp[sizeof(line_segment) + 128];  /* Allocation static facile    */
     line_segment *content;                  /* Contenu à mettre en place ? */
 
+    assert(length > 0);
+
     if (length < (sizeof(atmp) - sizeof(line_segment)))
         content = (line_segment *)atmp;
     else
@@ -710,11 +712,17 @@ gint get_line_segment_width(const line_segment *segment)
     gint result;                            /* Largeur à retourner         */
     cairo_font_slant_t slant;               /* Style d'impression          */
     cairo_font_weight_t weight;             /* Poids de la police          */
+    size_t length;                          /* Taille du texte représenté  */
 
     slant = segment->pattern->slant;
     weight = segment->pattern->weight;
 
-    result = _seg_params.x_advances[CAIRO_FONT_INDEX(slant, weight)] * strlen(segment->text);
+    length = strlen(segment->text);
+
+    if (length == 1 && segment->text[0] == '\t')
+        length = 2;
+
+    result = _seg_params.x_advances[CAIRO_FONT_INDEX(slant, weight)] * length;
 
     return result;
 
@@ -843,6 +851,9 @@ void draw_line_segment(const line_segment *segment, cairo_t *cr, gint *x, gint y
     cairo_operator_t old;                   /* Sauvegarde avant changement */
     const rendering_color_t *used_fg;       /* Couleur d'impression utile  */
 
+    if (segment->text[0] == '\t' && segment->text[1] == '\0')
+        goto small_sep;
+
     selected = selection_list_has_segment_content(list, segment);
 
     width = get_line_segment_width(segment);
@@ -890,6 +901,8 @@ void draw_line_segment(const line_segment *segment, cairo_t *cr, gint *x, gint y
 
     cairo_show_text(cr, segment->text);
 
+ small_sep:
+
     *x += width;
 
 }
-- 
cgit v0.11.2-87-g4458