From 3e8341ca17547db1dcf28c99d6fc68fe6901573b Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 7 Apr 2014 10:59:13 +0000
Subject: Relied on Cairo for printing code.

git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@369 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
---
 ChangeLog                    |  34 +++
 pixmaps/Makefile.am          |   2 +
 pixmaps/bookmark.png         | Bin 0 -> 710 bytes
 pixmaps/nil.png              | Bin 0 -> 109 bytes
 src/analysis/db/server.c     |  17 +-
 src/arch/instruction.c       |   2 +-
 src/glibext/Makefile.am      |   1 -
 src/glibext/gbufferline.c    |  23 +-
 src/glibext/gbufferline.h    |  39 +---
 src/glibext/gbuffersegment.c | 524 +++++++++++++++----------------------------
 src/glibext/gbuffersegment.h |  44 +++-
 src/glibext/gcodebuffer.c    |   6 +-
 src/glibext/gfontcache.c     | 294 ------------------------
 src/glibext/gfontcache.h     |  79 -------
 src/main.c                   |   3 -
 15 files changed, 286 insertions(+), 782 deletions(-)
 create mode 100644 pixmaps/bookmark.png
 create mode 100644 pixmaps/nil.png
 delete mode 100644 src/glibext/gfontcache.c
 delete mode 100644 src/glibext/gfontcache.h

diff --git a/ChangeLog b/ChangeLog
index e86e0a6..e708191 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,37 @@
+07-04-20  Cyrille Bagard <nocbos@gmail.com>
+
+	* pixmaps/bookmark.png:
+	New entry: create bookmark in buffer views.
+
+	* pixmaps/Makefile.am:
+	Add breakpoint_disabled.png and breakpoint_normal.png to EXTRA_DIST.
+
+	* pixmaps/nil.png:
+	New entry: use a dummy picture for empty Cairo surfaces.
+
+	* src/analysis/db/server.c:
+	Typo. Display a message for server connections.
+
+	* src/arch/instruction.c:
+	Update code.
+
+	* src/glibext/gbufferline.c:
+	* src/glibext/gbufferline.h:
+	* src/glibext/gbuffersegment.c:
+	* src/glibext/gbuffersegment.h:
+	* src/glibext/gcodebuffer.c:
+	Rely on Cairo for printing code.
+
+	* src/glibext/gfontcache.c:
+	* src/glibext/gfontcache.h:
+	Deleted entries.
+
+	* src/glibext/Makefile.am:
+	Remove the 'gfontcache.[ch]' files from libglibext_la_SOURCES.
+
+	* src/main.c:
+	Update code.
+
 14-03-20  Cyrille Bagard <nocbos@gmail.com>
 
 	* configure.ac:
diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am
index 5b1c100..f8f94fb 100644
--- a/pixmaps/Makefile.am
+++ b/pixmaps/Makefile.am
@@ -32,6 +32,8 @@ MISC =									\
 	welcome.png
 
 EXTRA_DIST =							\
+	bookmark.png					\
+	nil.png						\
 	breakpoint_disabled.png				\
 	breakpoint_normal.png				\
 	openida.xcf							\
diff --git a/pixmaps/bookmark.png b/pixmaps/bookmark.png
new file mode 100644
index 0000000..b007203
Binary files /dev/null and b/pixmaps/bookmark.png differ
diff --git a/pixmaps/nil.png b/pixmaps/nil.png
new file mode 100644
index 0000000..ef6ecd7
Binary files /dev/null and b/pixmaps/nil.png differ
diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c
index b636d02..acdf200 100644
--- a/src/analysis/db/server.c
+++ b/src/analysis/db/server.c
@@ -33,6 +33,7 @@
 
 
 #include "protocol.h"
+#include "../../gui/panels/log.h"
 
 
 
@@ -53,7 +54,8 @@ struct _GDbServer
 {
     GObject parent;                         /* A laisser en premier        */
 
-    int fd;
+    int fd;                                 /* Canal de communication      */
+    char *hostname;                         /* Désignation humaine         */
     struct sockaddr_in addr;                /* Adresse d'écoute            */
 
     GThread *listener;                      /* Procédure de traitement     */
@@ -139,7 +141,7 @@ static void g_db_server_init(GDbServer *server)
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : binary = instance d'objet GLib à traiter.                    *
+*  Paramètres  : server = instance d'objet GLib à traiter.                    *
 *                                                                             *
 *  Description : Procède à la libération totale de la mémoire.                *
 *                                                                             *
@@ -149,11 +151,11 @@ static void g_db_server_init(GDbServer *server)
 *                                                                             *
 ******************************************************************************/
 
-static void g_db_server_finalize(GDbServer *binary)
+static void g_db_server_finalize(GDbServer *server)
 {
-    //free(binary->filename);
+    free(server->hostname);
 
-    G_OBJECT_CLASS(g_db_server_parent_class)->finalize(G_OBJECT(binary));
+    G_OBJECT_CLASS(g_db_server_parent_class)->finalize(G_OBJECT(server));
 
 }
 
@@ -178,6 +180,8 @@ GDbServer *g_db_server_new(const char *host, short port)
 
     result = g_object_new(G_TYPE_DB_SERVER, NULL);
 
+    result->hostname = strdup(host);
+
     hp = gethostbyname(host);
     if (hp == NULL) goto gdsn_error;
 
@@ -383,6 +387,9 @@ bool g_db_server_start(GDbServer *server)
 
     server->listener = g_thread_new("cdb_listener", (GThreadFunc)g_db_server_listener, server);
 
+    log_variadic_message(LMT_PROCESS, _("Server started and listening at %s:%hu"),
+                         server->hostname, ntohs(server->addr.sin_port));
+
     return true;
 
 }
diff --git a/src/arch/instruction.c b/src/arch/instruction.c
index 3831ee4..3f63ca3 100644
--- a/src/arch/instruction.c
+++ b/src/arch/instruction.c
@@ -658,7 +658,7 @@ static void _g_arch_instruction_print(const GArchInstruction *instr, GCodeBuffer
         for (j = 1; j < instr->operands_count; j++)
         {
             g_buffer_line_insert_text(line, BLC_ASSEMBLY, ",", 1, RTT_PUNCT);
-            g_buffer_line_insert_text(line, BLC_ASSEMBLY, " ", 1, RTT_NONE);
+            g_buffer_line_insert_text(line, BLC_ASSEMBLY, " ", 1, RTT_RAW);
 
             g_arch_operand_print(instr->operands[j], line, syntax);
 
diff --git a/src/glibext/Makefile.am b/src/glibext/Makefile.am
index e5c1a46..f7f3da3 100644
--- a/src/glibext/Makefile.am
+++ b/src/glibext/Makefile.am
@@ -11,7 +11,6 @@ libglibext_la_SOURCES =					\
 	gbufferline.h gbufferline.c			\
 	gbuffersegment.h gbuffersegment.c	\
 	gcodebuffer.h gcodebuffer.c			\
-	gfontcache.h gfontcache.c			\
 	gnhash.h gnhash.c					\
 	proto.h
 
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index 18f8a2a..907b5bd 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -67,7 +67,7 @@ static GBufferSegment *get_segment_at(const buffer_line_column *, gint *, bool);
 GSList *highlight_all_same_segments(const buffer_line_column *, GSList *, const GBufferSegment *);
 
 /* Imprime le contenu d'une colonne de ligne de texte. */
-static void draw_segments_of_column(buffer_line_column *, cairo_t *, GFontCache *, gint, gint);
+static void draw_segments_of_column(buffer_line_column *, cairo_t *, gint, gint);
 
 
 
@@ -86,6 +86,8 @@ struct _GBufferLine
     BufferLineColumn merge_start;           /* Début de la zone globale    */
     BufferLineColumn last_used;             /* Dernière colonne utilisée   */
 
+    cairo_surface_t *bookmark_img;          /* Image pour les signets      */
+
 };
 
 /* Représentation de fragments de texte en ligne (classe) */
@@ -265,7 +267,6 @@ GSList *highlight_all_same_segments(const buffer_line_column *column, GSList *li
 *                                                                             *
 *  Paramètres  : column = colonne de ligne de texte à manipuler.              *
 *                cairo  = contexte graphique à utiliser pour les pinceaux.    *
-*                fcache = gestionnaire des polices pour l'impression.         *
 *                x_init = abscisse du point d'impression de départ.           *
 *                y      = ordonnée du point d'impression.                     *
 *                                                                             *
@@ -277,7 +278,7 @@ GSList *highlight_all_same_segments(const buffer_line_column *column, GSList *li
 *                                                                             *
 ******************************************************************************/
 
-static void draw_segments_of_column(buffer_line_column *column, cairo_t *cairo, GFontCache *fcache, gint x_init, gint y)
+static void draw_segments_of_column(buffer_line_column *column, cairo_t *cairo, gint x_init, gint y)
 {
     gint x;
     size_t i;
@@ -285,7 +286,7 @@ static void draw_segments_of_column(buffer_line_column *column, cairo_t *cairo,
     x = x_init;
 
     for (i = 0; i < column->count; i++)
-        g_buffer_segment_draw(column->segments[i], cairo, fcache, &x, y);
+        g_buffer_segment_draw(column->segments[i], cairo, &x, y);
 
 }
 
@@ -472,6 +473,7 @@ static void g_buffer_line_class_init(GBufferLineClass *class)
 static void g_buffer_line_init(GBufferLine *line)
 {
     BufferLineColumn i;                     /* Boucle de parcours          */
+    char *filename;                         /* Chemin d'accès à utiliser   */
 
     for (i = BLC_ADDRESS; i < BLC_COUNT; i++)
         reset_column(&line->columns[i]);
@@ -479,6 +481,9 @@ static void g_buffer_line_init(GBufferLine *line)
     line->merge_start = BLC_COUNT;
     line->last_used = BLC_COUNT;
 
+    filename = "/home/ocb/prog/chrysalide.cdb/pixmaps/bookmark.png";
+    line->bookmark_img = cairo_image_surface_create_from_png(filename);
+
 }
 
 
@@ -684,7 +689,7 @@ void g_buffer_line_insert_text(GBufferLine *line, BufferLineColumn column, const
 
     class = G_BUFFER_LINE_GET_CLASS(line);
 
-    segment = g_buffer_segment_new(class->attribs[type], text, length);
+    segment = g_buffer_segment_new(type, text, length);
     g_buffer_line_add_segment(line, column, segment);
 
 }
@@ -808,7 +813,6 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)
 *                                                                             *
 *  Paramètres  : line       = ligne de texte à manipuler.                     *
 *                cairo      = contexte graphique à utiliser pour les pinceaux.*
-*                fcache     = gestionnaire des polices pour l'impression.     *
 *                max_widths = largeurs de colonne à respecter.                *
 *                x_init     = abscisse du point d'impression de départ.       *
 *                y          = ordonnée du point d'impression.                 *
@@ -823,11 +827,14 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)
 *                                                                             *
 ******************************************************************************/
 
-void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, GFontCache *fcache, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool addr, bool code)
+void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool addr, bool code)
 {
     gint x;                                 /* Point de départ d'impression*/
     BufferLineColumn i;                     /* Boucle de parcours          */
 
+    cairo_set_source_surface(cairo, line->bookmark_img, 5, y);
+    cairo_paint(cairo);
+
     x = x_init;
 
     for (i = BLC_ADDRESS; i < BLC_COUNT; i++)
@@ -835,7 +842,7 @@ void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, GFontCache *fcache, c
         if (i == BLC_ADDRESS && !addr) continue;
         if (i == BLC_BINARY && !code) continue;
 
-        draw_segments_of_column(&line->columns[i], cairo, fcache, x, y);
+        draw_segments_of_column(&line->columns[i], cairo, x, y);
 
         if (i < line->merge_start)
             x += max_widths[i] + COL_MARGIN;
diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h
index 7b063ac..cf8ecf4 100644
--- a/src/glibext/gbufferline.h
+++ b/src/glibext/gbufferline.h
@@ -67,43 +67,6 @@ typedef enum _BufferLineColumn
 
 } BufferLineColumn;
 
-/* Types de partie de rendu */
-typedef enum _RenderingTagType
-{
-    RTT_RAW,                                /* Contenu brut                */
-
-    RTT_COMMENT,                            /* Commentaire                 */
-    RTT_INDICATION,                         /* Aide à la lecture           */
-    RTT_RAW_CODE,                           /* Code binaire brut           */
-
-    RTT_INSTRUCTION,                        /* Code binaire brut           */
-
-    RTT_IMMEDIATE,                          /* Valeur immédiate            */
-
-    RTT_REGISTER,                           /* Registre                    */
-
-    RTT_PUNCT,                              /* Signes de ponctuation       */
-    RTT_HOOK,                               /* Crochets '[' et ']'         */
-    RTT_SIGNS,                              /* Signes '+', '-' et '*'      */
-    RTT_LTGT,                               /* Caractères '<' et '>'       */
-
-    RTT_SECTION,                            /* Identifiant de section      */
-    RTT_SEGMENT,                            /* Indication de segment       */
-    RTT_STRING,                             /* Chaîne de caractères avec " */
-
-    RTT_VAR_NAME,                           /* Nom de variable             */
-
-    RTT_KEY_WORD,                           /* Mot clef de langage         */
-
-    RTT_ERROR,                              /* Erreur "interne"            */
-
-    RTT_COUNT
-
-} RenderingTagType;
-
-
-#define RTT_NONE RTT_RAW    /* TODO : remme */
-
 
 
 /* Confort pour l'insertion de texte */
@@ -151,7 +114,7 @@ gint g_buffer_line_get_merge_width(GBufferLine *, BufferLineColumn *, bool, bool
 void g_buffer_line_start_merge_at(GBufferLine *, BufferLineColumn);
 
 /* Imprime la ligne de texte représentée. */
-void g_buffer_line_draw(GBufferLine *, cairo_t *, GFontCache *, const gint [BLC_COUNT], gint, gint, bool, bool);
+void g_buffer_line_draw(GBufferLine *, cairo_t *, const gint [BLC_COUNT], gint, gint, bool, bool);
 
 /* Exporte la ligne de texte représentée. */
 void g_buffer_line_export(GBufferLine *, int, BufferExportType, bool, bool, bool);
diff --git a/src/glibext/gbuffersegment.c b/src/glibext/gbuffersegment.c
index 31f1840..df20887 100644
--- a/src/glibext/gbuffersegment.c
+++ b/src/glibext/gbuffersegment.c
@@ -25,10 +25,13 @@
 
 
 #include <stdbool.h>
+#include <stdlib.h>
 #include <string.h>
 
 
 #include "../common/fnv1a.h"
+#include "../gtkext/gtkblockview.h"
+#include "../gtkext/support.h"
 
 
 
@@ -36,6 +39,23 @@
 #define COLOR_NOT_SET   0
 #define COLOR_SET       1
 
+/* Propriétés de rendu */
+typedef struct _rendering_pattern_t
+{
+    GdkColor foreground;                    /* Couleur d'impression        */
+
+    cairo_font_slant_t slant;               /* Style d'impression          */
+    cairo_font_weight_t weight;             /* Poids de la police          */
+
+} rendering_pattern_t;
+
+/* Compléments à Cairo */
+
+#define CAIRO_FONT_SLANT_COUNT  3
+#define CAIRO_FONT_WEIGHT_COUNT 2
+
+#define CAIRO_FONTS_COUNT (CAIRO_FONT_SLANT_COUNT * CAIRO_FONT_WEIGHT_COUNT)
+#define CAIRO_FONT_INDEX(s, w) ((s) * CAIRO_FONT_SLANT_COUNT + (w))
 
 /* Fragment de caractères aux propriétés communes (instance) */
 struct _GBufferSegment
@@ -45,19 +65,15 @@ struct _GBufferSegment
     char *text;                             /* Texte brut conservé         */
     fnv64_t hash;                           /* Empreinte pour comparaisons */
 
-    PangoAttrList *attribs;                 /* Propriétés du rendu         */
+    rendering_pattern_t *pattern;           /* Propriétés du rendu         */
 
     SegRenderingStyle style;                /* Apparence du segment        */
 
     GdkColor cache_bg;                      /* Fond d'impression           */
-    GdkColor cache_fg;                      /* Couleur d'impression #1     */
-    GdkColor cache_alt_fg;                  /* Couleur d'impression #2     */
-    GdkColor *cache_used_fg;                /* Couleur d'impression utile  */
-
-    PangoGlyphString *glyphs;               /* Caractères traités          */
-    PangoFontDescription *desc;             /* Description de police       */
+    GdkColor alt_fg;                        /* Couleur d'impression bis    */
+    GdkColor *used_fg;                      /* Couleur d'impression utile  */
 
-    PangoRectangle logical;                 /* Dimension du texte          */
+    cairo_text_extents_t extents;           /* Dimensions du texte         */
 
 };
 
@@ -66,11 +82,8 @@ struct _GBufferSegmentClass
 {
     GObjectClass parent;                    /* A laisser en premier        */
 
-    PangoGlyphString *ascii_glyphs;         /* Caractères ASCII prêts      */
-    PangoFont *ascii_font;                  /* Police utilisée pour ASCII  */
-    bool ascii_ready;                       /* Utilisation possible ?      */
-
-    bool ascii_init_done;                   /* Initialisation tentée ?     */
+    cairo_t *font_ctxts[CAIRO_FONTS_COUNT]; /* Contextes de police         */
+    rendering_pattern_t patterns[RTT_COUNT];/* Modèles d'impression        */
 
 };
 
@@ -81,270 +94,117 @@ static void g_buffer_segment_class_init(GBufferSegmentClass *);
 /* Procède à l'initialisation d'un fragment de texte. */
 static void g_buffer_segment_init(GBufferSegment *);
 
+/* Définit les dernières propriétés de rendu restantes. */
+static void g_buffer_segment_prepare(GBufferSegment *, const char *);
 
 
 
-
-
-
-
-
-
-static bool ascii_glyph_table_init(GBufferSegmentClass *class, PangoContext *context)
-{
-    gint i;                                 /* Boucle de parcours          */
-    char ascii_chars[128];                  /* Table de caractères ASCII   */
-    PangoAttrList *attribs;                 /* Liste d'attributs (vide)    */
-    GList *list;                            /* Liste d'éléments distincts  */
-
-    if (!class->ascii_init_done)
-    {
-        class->ascii_init_done = true;
-
-        /* Construction d'une chaîne adéquate */
-
-        for (i = 0; i < 128; ++i)
-            switch (i)
-            {
-                case 0 ... 31:
-                    ascii_chars[i] = '?';
-                    break;
-                case 32 ... 127:
-                    ascii_chars[i] = i;
-                    break;
-                default:
-                    ascii_chars[i] = '?';
-                    break;
-            }
-
-        /* Analyse de la chaîne créée */
-
-        attribs = pango_attr_list_new();
-        list = pango_itemize(context, ascii_chars, 0, 128, attribs, NULL);
-
-        class->ascii_ready = (list != NULL && list->next == NULL);
-
-        if (class->ascii_ready)
-        {
-            PangoItem   *item;
-            //int         width;
-
-            item  = (PangoItem *)list->data;
-            //width = gui.char_width * PANGO_SCALE;
-
-            /* Remember the shape engine used for ASCII. */
-            //default_shape_engine = item->analysis.shape_engine;
-
-            class->ascii_font = item->analysis.font;
-            g_object_ref(class->ascii_font);
-
-            class->ascii_glyphs = pango_glyph_string_new();
-
-            pango_shape(ascii_chars, 128, &item->analysis, class->ascii_glyphs);
-
-            class->ascii_ready = (class->ascii_glyphs->num_glyphs == 128);
-
-
-
-#if 0
-            for (i = 0; i < class->ascii_glyphs->num_glyphs; i++)
-            {
-                PangoGlyphGeometry *geom;
-
-                geom = &class->ascii_glyphs->glyphs[i].geometry;
-                //geom->x_offset += MAX(0, width - geom->width) / 2;
-                //geom->width = /*width*/8 * PANGO_SCALE;
-            }
-#endif
-
-        }
-
-        //g_list_foreach(list, (GFunc)&pango_item_free, NULL);
-        //g_list_free(list);
-
-        //pango_attr_list_unref(attribs);
-
-    }
-
-    return class->ascii_ready;
-
-}
-
-
-
-
-
+/* Détermine le type du fragment de caractères aux propriétés communes. */
+G_DEFINE_TYPE(GBufferSegment, g_buffer_segment, G_TYPE_OBJECT);
 
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : context = contexte Pango pour l'analyse des caractères.      *
-*                attribs = propriétés de la zone de texte.                    *
-*                text    = chaîne de caractères à traiter.                    *
-*                length  = quantité de ces caractères.                        *
+*  Paramètres  : class = classe de composant GTK à initialiser.               *
 *                                                                             *
-*  Description : Crée un nouveau fragment de texte avec des propriétés.       *
+*  Description : Procède à l'initialisation d'une classe de fragment de texte.*
 *                                                                             *
-*  Retour      : Composant GTK créé.                                          *
+*  Retour      : -                                                            *
 *                                                                             *
 *  Remarques   : -                                                            *
 *                                                                             *
 ******************************************************************************/
 
-static void g_buffer_segment_prepare(GBufferSegment *segment, PangoContext *context, PangoAttrList *attribs, const char *text, size_t length)
+static void g_buffer_segment_class_init(GBufferSegmentClass *class)
 {
-    PangoGlyphString *glyphs;               /* Caractères traités          */
-    bool must_use_pango;                    /* Passage par Pango obligé ?  */
-    PangoAttrIterator *iterator;            /* Guide de parcours           */
-    PangoAttribute *attrib;                 /* Attribut générique          */
-
-    GList           *item_list;
-    PangoItem   *item;
-
-    //PangoRectangle logical;
-
-
-    const char *max;
-    const char *iter;
-
-    GBufferSegmentClass *class;
-
-    size_t i;
-
-    PangoGlyphInfo *info;
-    gint *log_clusters;
-    PangoGlyphInfo *ref;
-
-    PangoFont *font;                        /* Modèle de police            */
-    PangoFontDescription *desc;             /* Description de cette police */
-
-
-
-
-    glyphs = pango_glyph_string_new();
-
-
-
-
-
-
-    /* Existe-t-il des attributs particuliers ? */
-
-    must_use_pango = false;
-
-    iterator = pango_attr_list_get_iterator(attribs);
-
-    attrib = pango_attr_iterator_get(iterator, PANGO_ATTR_WEIGHT);
-    must_use_pango |= (attrib != NULL);
-
-    attrib = pango_attr_iterator_get(iterator, PANGO_ATTR_STYLE);
-    must_use_pango |= (attrib != NULL);
-
-    pango_attr_iterator_destroy(iterator);
-
-    if (must_use_pango)
-        goto not_ascii;
-
-
-
-
-
-
-
-
-    /**
-     * Petite astuce empruntée à Vim...
-     * (cf. src/gui_gtk_x11.c, fonction gui_gtk2_draw_string()).
-     * On essaie de traiter à la main les morceaux de
-     * texte. Pour ceux en ASCII pur, le gain est non négligeable.
-     */
-
-    max = text + length;
-
-    goto not_ascii;
-
-    for (iter = text; iter < max; iter++)
-        if (*iter & 0x80)
-            goto not_ascii;
-
-    class = G_BUFFER_SEGMENT_GET_CLASS(segment);
-
-    if (!ascii_glyph_table_init(class, context))
-        goto not_ascii;
-
-    pango_glyph_string_set_size(glyphs, length);
-
-    info = glyphs->glyphs;
-    log_clusters = glyphs->log_clusters;
-    ref = class->ascii_glyphs->glyphs;
-
-    for (i = 0; i < length; i++)
-    {
-        info[i] = ref[(unsigned int)text[i]];
-        log_clusters[i] = i;
-    }
- 
-    font = class->ascii_font;
-
-    goto next;
-
- not_ascii:
-
-    item_list = pango_itemize(context, text, 0, length, attribs, NULL);
+    gchar *filename;                        /* Accès à une image 1x1       */
+    cairo_font_slant_t s;                   /* Boucle de parcours #1       */
+    cairo_font_weight_t w;                  /* Boucle de parcours #2       */
+    cairo_t **cr;                           /* Contexte à créer            */
+    cairo_surface_t *surface;               /* Surface pour dessin Cairo   */
 
-    /*
-    if (!(item_list != NULL && item_list->next == NULL))
-        printf("ouich\n");
-    */
+    /* Contextes pour les mesures initiales */
 
-    item  = (PangoItem *)item_list->data;
-    pango_shape(text, length, &item->analysis, glyphs);
+    filename = find_pixmap_file("nil.png");
+    if (filename == NULL) abort();
 
-    font = item->analysis.font;
-
- next:
-
-    desc = pango_font_describe(font);
-    segment->desc = pango_font_description_copy(desc);
-
-    pango_glyph_string_extents(glyphs, font, NULL, &segment->logical);
-
-    //pango_shape(text, length, &item->analysis, glyphs);
+    for (s = CAIRO_FONT_SLANT_NORMAL; s < CAIRO_FONT_SLANT_COUNT; s++)
+        for (w = CAIRO_FONT_WEIGHT_NORMAL; w < CAIRO_FONT_WEIGHT_COUNT; w++)
+        {
+            cr = &class->font_ctxts[CAIRO_FONT_INDEX(s, w)];
 
+            surface = cairo_image_surface_create_from_png(filename);
+            *cr = cairo_create(surface);
+            cairo_surface_destroy(surface);
 
-    //pango_glyph_string_extents(glyphs, class->ascii_font, NULL, &segment->logical);
+            cairo_select_font_face(*cr, "mono", s, w);
+            cairo_set_font_size(*cr, 13);
 
-    segment->logical.y /= PANGO_SCALE;
-    segment->logical.width /= PANGO_SCALE;
-    segment->logical.height /= PANGO_SCALE;
+        }
 
-    segment->glyphs = glyphs;
+    g_free(filename);
+
+    /* Propriétés d'impression */
+
+#define GET_RESET_PATTERN(tp)                           \
+    ({                                                  \
+        rendering_pattern_t *__p;                       \
+        __p = &class->patterns[RTT_ ## tp];             \
+        memset(__p, 0, sizeof(rendering_pattern_t));    \
+        __p;                                            \
+    })
+
+#define DEFINE_SIMPLE_PATTERN(rtt)                      \
+    do                                                  \
+    {                                                   \
+        rendering_pattern_t *__ptn;                     \
+        __ptn = GET_RESET_PATTERN(rtt);                 \
+        __ptn->slant = CAIRO_FONT_SLANT_NORMAL;         \
+        __ptn->weight = CAIRO_FONT_WEIGHT_NORMAL;       \
+        __ptn->foreground.pixel = COLOR_NOT_SET;        \
+    }                                                   \
+    while (0)
+
+#define DEFINE_PATTERN(rtt, s, w, r, g, b)              \
+    do                                                  \
+    {                                                   \
+        rendering_pattern_t *__ptn;                     \
+        __ptn = GET_RESET_PATTERN(rtt);                 \
+        __ptn->slant = CAIRO_FONT_SLANT_ ## s;          \
+        __ptn->weight = CAIRO_FONT_WEIGHT_ ## w;        \
+        __ptn->foreground.red = r;                      \
+        __ptn->foreground.green = g;                    \
+        __ptn->foreground.blue = b;                     \
+        __ptn->foreground.pixel = COLOR_SET;            \
+    }                                                   \
+    while (0)
+
+    DEFINE_PATTERN(RAW,         NORMAL, NORMAL, 0, 0, 0);
+    DEFINE_PATTERN(COMMENT,     NORMAL, NORMAL, 14335, 45311, 23551);
+    DEFINE_PATTERN(INDICATION,  ITALIC, NORMAL, 33410, 33410, 33410);
+    DEFINE_PATTERN(RAW_CODE,    NORMAL, NORMAL, 48895, 48895, 48895);
+    DEFINE_PATTERN(INSTRUCTION, NORMAL, NORMAL, 0, 0, 0);
+    DEFINE_PATTERN(IMMEDIATE,   NORMAL, NORMAL, 41215, 8447, 61695);
+    DEFINE_PATTERN(REGISTER,    NORMAL, NORMAL, 16895, 16895, 53759);
+    DEFINE_PATTERN(PUNCT,       NORMAL, BOLD,   0, 0, 0);
+    DEFINE_PATTERN(HOOK,        NORMAL, BOLD,   0, 0, 0);
+    DEFINE_PATTERN(SIGNS,       NORMAL, BOLD,   0, 0, 0);
+    DEFINE_SIMPLE_PATTERN(LTGT);
+    DEFINE_PATTERN(SECTION,     NORMAL, NORMAL, 51200, 2560, 2560);
+    DEFINE_SIMPLE_PATTERN(SEGMENT);
+    DEFINE_PATTERN(STRING,      NORMAL, NORMAL, 52224, 32256, 0);
+    DEFINE_PATTERN(VAR_NAME,    NORMAL, NORMAL, 0, 0, 0);
+    DEFINE_PATTERN(KEY_WORD,    NORMAL, NORMAL, 0, 0, 0);
+    DEFINE_PATTERN(ERROR,       NORMAL, BOLD,   65535, 0, 0);
 
 }
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-/* Détermine le type du fragment de caractères aux propriétés communes. */
-G_DEFINE_TYPE(GBufferSegment, g_buffer_segment, G_TYPE_OBJECT);
-
-
-
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : class = classe de composant GTK à initialiser.               *
+*  Paramètres  : segment = composant GTK à initialiser.                       *
 *                                                                             *
-*  Description : Procède à l'initialisation d'une classe de fragment de texte.*
+*  Description : Procède à l'initialisation d'un fragment de texte.           *
 *                                                                             *
 *  Retour      : -                                                            *
 *                                                                             *
@@ -352,7 +212,7 @@ G_DEFINE_TYPE(GBufferSegment, g_buffer_segment, G_TYPE_OBJECT);
 *                                                                             *
 ******************************************************************************/
 
-static void g_buffer_segment_class_init(GBufferSegmentClass *class)
+static void g_buffer_segment_init(GBufferSegment *segment)
 {
 
 }
@@ -360,54 +220,77 @@ static void g_buffer_segment_class_init(GBufferSegmentClass *class)
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : segment = composant GTK à initialiser.                       *
+*  Paramètres  : type   = propriétés de la zone de texte.                     *
+*                text   = chaîne de caractères à traiter.                     *
+*                length = quantité de ces caractères.                         *
 *                                                                             *
-*  Description : Procède à l'initialisation d'un fragment de texte.           *
+*  Description : Crée un nouveau fragment de texte avec des propriétés.       *
 *                                                                             *
-*  Retour      : -                                                            *
+*  Retour      : Composant GTK créé.                                          *
 *                                                                             *
 *  Remarques   : -                                                            *
 *                                                                             *
 ******************************************************************************/
 
-static void g_buffer_segment_init(GBufferSegment *segment)
+GBufferSegment *g_buffer_segment_new(RenderingTagType type, const char *text, size_t length)
 {
+    GBufferSegment *result;                 /* Composant à retourner       */
+    GBufferSegmentClass *class;             /* Stockage de styles préparés */ 
+
+    result = g_object_new(G_TYPE_BUFFER_SEGMENT, NULL);
+
+    result->text = strdup(text);
+    result->hash = fnv_64a_hash(text);
+
+    class = G_BUFFER_SEGMENT_GET_CLASS(result);
+    result->pattern = &class->patterns[type];
+
+    g_buffer_segment_prepare(result, text);
+
+    g_buffer_segment_set_style(result, SRS_CLASSIC);
+
+    return result;
 
 }
 
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : attribs = propriétés de la zone de texte.                    *
+*  Paramètres  : segment = instance de segment à affiner.                     *
 *                text    = chaîne de caractères à traiter.                    *
-*                length  = quantité de ces caractères.                        *
 *                                                                             *
-*  Description : Crée un nouveau fragment de texte avec des propriétés.       *
+*  Description : Définit les dernières propriétés de rendu restantes.         *
 *                                                                             *
-*  Retour      : Composant GTK créé.                                          *
+*  Retour      : -                                                            *
 *                                                                             *
 *  Remarques   : -                                                            *
 *                                                                             *
 ******************************************************************************/
 
-GBufferSegment *g_buffer_segment_new(PangoAttrList *attribs, const char *text, size_t length)
+static void g_buffer_segment_prepare(GBufferSegment *segment, const char *text)
 {
-    GBufferSegment *result;                 /* Composant à retourner       */
+    GBufferSegmentClass *class;             /* Classe associée à l'instance*/
+    cairo_font_slant_t slant;               /* Style d'impression          */
+    cairo_font_weight_t weight;             /* Poids de la police          */
+    cairo_t *cr;                            /* Contexte de rendu           */
 
-    result = g_object_new(G_TYPE_BUFFER_SEGMENT, NULL);
+    /* Taille */
 
-    result->text = strdup(text);
-    result->hash = fnv_64a_hash(text);
+    class = G_BUFFER_SEGMENT_GET_CLASS(segment);
 
-    result->attribs = pango_attr_list_ref(attribs);
+    slant = segment->pattern->slant;
+    weight = segment->pattern->weight;
 
-    g_buffer_segment_prepare(result, get_global_pango_context(), attribs, text, length);
+    cr = class->font_ctxts[CAIRO_FONT_INDEX(slant, weight)];
 
-    g_buffer_segment_cache_colors(result);
+    cairo_text_extents(cr, text, &segment->extents);
 
-    g_buffer_segment_set_style(result, SRS_CLASSIC);
+    /* Couleurs */
 
-    return result;
+    segment->alt_fg.red = 65535 - segment->pattern->foreground.red;
+    segment->alt_fg.green = 65535 - segment->pattern->foreground.green;
+    segment->alt_fg.blue = 65535 - segment->pattern->foreground.blue;
+    segment->alt_fg.pixel = segment->pattern->foreground.pixel;
 
 }
 
@@ -471,7 +354,7 @@ const char *g_buffer_segment_get_text(const GBufferSegment *segment)
 
 gint g_buffer_segment_get_width(const GBufferSegment *segment)
 {
-    return segment->logical.width;
+    return segment->extents.x_advance;
 
 }
 
@@ -497,8 +380,6 @@ gint g_buffer_segment_get_caret_position(const GBufferSegment *segment, gint x)
 
     width = g_buffer_segment_get_width(segment);
 
-    printf("(seg) x=%d  width=%d\n", x, width);
-
     if (x <= 0)
         result = 0;
 
@@ -507,14 +388,7 @@ gint g_buffer_segment_get_caret_position(const GBufferSegment *segment, gint x)
 
     else
     {
-        if (strlen(segment->text) != segment->glyphs->num_glyphs)
-        {
-
-            printf("STOP ::: %d vs %d\n", strlen(segment->text), segment->glyphs->num_glyphs);
-            exit(0);
-        }
-
-        char_width = width / segment->glyphs->num_glyphs;
+        char_width = width / strlen(segment->text);
 
         result = (x / char_width) * char_width;
         if ((x % char_width) > (char_width / 2))
@@ -530,46 +404,6 @@ gint g_buffer_segment_get_caret_position(const GBufferSegment *segment, gint x)
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : segment = fragment de texte à manipuler.                     *
-*                                                                             *
-*  Description : (Re)charge les couleurs à partir de la liste d'attributs.    *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-void g_buffer_segment_cache_colors(GBufferSegment *segment)
-{
-    PangoAttrIterator *iterator;            /* Guide de parcours           */
-    PangoAttribute *attrib;                 /* Attribut générique          */
-    PangoAttrColor *color_attrib;           /* Propriété de couleur        */
-
-    iterator = pango_attr_list_get_iterator(segment->attribs);
-
-    /* Couleur d'impression */
-
-    attrib = pango_attr_iterator_get(iterator, PANGO_ATTR_FOREGROUND);
-    segment->cache_fg.pixel = (attrib != NULL ? COLOR_SET : COLOR_NOT_SET);
-
-    if (segment->cache_fg.pixel == COLOR_SET)
-    {
-        color_attrib = (PangoAttrColor *)attrib;
-
-        segment->cache_fg.red = color_attrib->color.red;
-        segment->cache_fg.green = color_attrib->color.green;
-        segment->cache_fg.blue = color_attrib->color.blue;
-
-    }
-
-    pango_attr_iterator_destroy(iterator);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : segment = fragment de texte à manipuler.                     *
 *                style   = style de rendu pour le segment.                    *
 *                                                                             *
 *  Description : Module l'apparence finale du composant.                      *
@@ -588,7 +422,7 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
     {
         default:
         case SRS_CLASSIC:
-            segment->cache_used_fg = &segment->cache_fg;
+            segment->used_fg = &segment->pattern->foreground;
             break;
 
         case SRS_HIGHLIGHT_SAME:
@@ -597,11 +431,7 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
             segment->cache_bg.green = 32768;
             segment->cache_bg.blue = 32768;
 
-            segment->cache_alt_fg.red = 65535 - segment->cache_fg.red;
-            segment->cache_alt_fg.green = 65535 - segment->cache_fg.green;
-            segment->cache_alt_fg.blue = 65535 - segment->cache_fg.blue;
-
-            segment->cache_used_fg = &segment->cache_alt_fg;
+            segment->used_fg = &segment->alt_fg;
 
             break;
 
@@ -614,7 +444,6 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
 *                                                                             *
 *  Paramètres  : segment = fragment de texte à manipuler.                     *
 *                cairo   = contexte graphique à utiliser pour les pinceaux.   *
-*                fcache  = gestionnaire des polices pour l'impression.        *
 *                x       = abscisse du point d'impression (à maj). [OUT]      *
 *                y       = ordonnée du point d'impression.                    *
 *                                                                             *
@@ -626,23 +455,23 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
 *                                                                             *
 ******************************************************************************/
 
-void g_buffer_segment_draw(GBufferSegment *segment, cairo_t *cairo, GFontCache *fcache, gint *x, gint y)
+void g_buffer_segment_draw(GBufferSegment *segment, cairo_t *cairo, gint *x, gint y)
 {
-    PangoFont *font;                        /* Police d'impression         */
 
-    /* FIXME */
-    g_buffer_segment_prepare(segment, get_global_pango_context(),
-                             segment->attribs, segment->text, strlen(segment->text));
+    cairo_font_extents_t extents;
+
+
 
     /* Fond du texte */
-    if (segment->style != SRS_CLASSIC)
+    if (segment->style != SRS_CLASSIC || 1)
     {
         cairo_set_source_rgb(cairo,
                              segment->cache_bg.red / 65535.0,
                              segment->cache_bg.green / 65535.0,
                              segment->cache_bg.blue / 65535.0);
 
-        cairo_rectangle(cairo, *x, y, segment->logical.width, segment->logical.height);
+        cairo_rectangle(cairo, *x, y, segment->extents.x_advance, 17);
+
         cairo_set_operator(cairo, CAIRO_OPERATOR_DIFFERENCE);
         cairo_fill(cairo);
         cairo_set_operator(cairo, CAIRO_OPERATOR_OVER);
@@ -651,19 +480,34 @@ void g_buffer_segment_draw(GBufferSegment *segment, cairo_t *cairo, GFontCache *
 
     /* Couleur d'impression */
 
-    if (segment->cache_fg.pixel == COLOR_SET)
+    if (segment->used_fg->pixel == COLOR_SET)
         cairo_set_source_rgb(cairo,
-                             segment->cache_used_fg->red / 65535.0,
-                             segment->cache_used_fg->green / 65535.0,
-                             segment->cache_used_fg->blue / 65535.0);
+                             segment->used_fg->red / 65535.0,
+                             segment->used_fg->green / 65535.0,
+                             segment->used_fg->blue / 65535.0);
 
     /* Impression du texte */
 
-    cairo_move_to(cairo, *x, y - segment->logical.y);
+    cairo_select_font_face(cairo, "mono", segment->pattern->slant, segment->pattern->weight);
+    cairo_set_font_size(cairo, 13);
+
+
+
+
+    cairo_move_to(cairo, *x, y + 17 - 3);
+
+
+
+
+    cairo_font_extents(cairo, &extents);
+
+    if (extents.descent != 3)
+    printf("FONT : %g, %g\n", extents.ascent, extents.descent);
+
+    cairo_show_text(cairo, segment->text);
 
-    font = g_font_cache_lookup(fcache, segment->desc);
-    pango_cairo_show_glyph_string(cairo, font, segment->glyphs);
+    //printf(">> %s >> %f %f\n", segment->text, segment->extents.width, segment->extents.x_advance);
 
-    *x += segment->logical.width;
+    *x += segment->extents.x_advance;
 
 }
diff --git a/src/glibext/gbuffersegment.h b/src/glibext/gbuffersegment.h
index bc0d512..76465a7 100644
--- a/src/glibext/gbuffersegment.h
+++ b/src/glibext/gbuffersegment.h
@@ -31,9 +31,6 @@
 #include <pango/pango.h>
 
 
-#include "gfontcache.h"
-
-
 
 #define G_TYPE_BUFFER_SEGMENT                  (g_buffer_segment_get_type())
 #define G_BUFFER_SEGMENT(obj)                  (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_BUFFER_SEGMENT, GBufferSegment))
@@ -43,6 +40,40 @@
 #define G_BUFFER_SEGMENT_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_BUFFER_SEGMENT, GBufferSegmentClass))
 
 
+/* Types de partie de rendu */
+typedef enum _RenderingTagType
+{
+    RTT_RAW,                                /* Contenu brut                */
+
+    RTT_COMMENT,                            /* Commentaire                 */
+    RTT_INDICATION,                         /* Aide à la lecture           */
+    RTT_RAW_CODE,                           /* Code binaire brut           */
+
+    RTT_INSTRUCTION,                        /* Code binaire brut           */
+
+    RTT_IMMEDIATE,                          /* Valeur immédiate            */
+
+    RTT_REGISTER,                           /* Registre                    */
+
+    RTT_PUNCT,                              /* Signes de ponctuation       */
+    RTT_HOOK,                               /* Crochets '[' et ']'         */
+    RTT_SIGNS,                              /* Signes '+', '-' et '*'      */
+    RTT_LTGT,                               /* Caractères '<' et '>'       */
+
+    RTT_SECTION,                            /* Identifiant de section      */
+    RTT_SEGMENT,                            /* Indication de segment       */
+    RTT_STRING,                             /* Chaîne de caractères avec " */
+
+    RTT_VAR_NAME,                           /* Nom de variable             */
+
+    RTT_KEY_WORD,                           /* Mot clef de langage         */
+
+    RTT_ERROR,                              /* Erreur "interne"            */
+
+    RTT_COUNT
+
+} RenderingTagType;
+
 /* Types de rendus */
 typedef enum _SegRenderingStyle
 {
@@ -75,7 +106,7 @@ typedef struct _GBufferSegmentClass GBufferSegmentClass;
 GType g_buffer_segment_get_type(void);
 
 /* Crée un nouveau fragment de texte avec des propriétés. */
-GBufferSegment *g_buffer_segment_new(PangoAttrList *, const char *, size_t);
+GBufferSegment *g_buffer_segment_new(RenderingTagType, const char *, size_t);
 
 /* Indique si les textes de deux segments sont identiques. */
 bool g_buffer_segment_compare(const GBufferSegment *, const GBufferSegment *);
@@ -89,14 +120,11 @@ gint g_buffer_segment_get_width(const GBufferSegment *);
 /* Fournit la position idéale pour un marqueur. */
 gint g_buffer_segment_get_caret_position(const GBufferSegment *, gint);
 
-/* (Re)charge les couleurs à partir de la liste d'attributs. */
-void g_buffer_segment_cache_colors(GBufferSegment *);
-
 /* Module l'apparence finale du composant. */
 void g_buffer_segment_set_style(GBufferSegment *, SegRenderingStyle);
 
 /* Imprime le fragment de texte représenté. */
-void g_buffer_segment_draw(GBufferSegment *, cairo_t *, GFontCache *, gint *, gint);
+void g_buffer_segment_draw(GBufferSegment *, cairo_t *, gint *, gint);
 
 
 
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c
index 8a70ad5..4a4e38f 100644
--- a/src/glibext/gcodebuffer.c
+++ b/src/glibext/gcodebuffer.c
@@ -142,8 +142,6 @@ struct _GBufferView
     vmpa_t start;                           /* Première ligne intégrée     */
     vmpa_t end;                             /* Dernière ligne intégrée     */
 
-    GFontCache *fcache;                     /* Cache pour les polices      */
-
     gint line_height;                       /* Hauteur maximale des lignes */
     gint max_widths[BLC_COUNT];             /* Taille cachée des colonnes  */
     gint left_margin;                       /* Marge gauche + espace       */
@@ -726,8 +724,6 @@ static void g_buffer_view_class_init(GBufferViewClass *class)
 
 static void g_buffer_view_init(GBufferView *buffer)
 {
-    buffer->fcache = g_font_cache_new();
-
     g_buffer_view_reset_required_height(buffer);
     g_buffer_view_reset_required_widths(buffer);
 
@@ -1403,7 +1399,7 @@ void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint
                 view->drawing_extra(lines[i], drawable, gc, fake_x, y, view->drawing_data);
             */
 
-            g_buffer_line_draw(lines[i], cr, view->fcache,
+            g_buffer_line_draw(lines[i], cr,
                                view->max_widths, real_x, y, addr, code);
 
             y += view->line_height;
diff --git a/src/glibext/gfontcache.c b/src/glibext/gfontcache.c
deleted file mode 100644
index 2441d27..0000000
--- a/src/glibext/gfontcache.c
+++ /dev/null
@@ -1,294 +0,0 @@
-
-/* OpenIDA - Outil d'analyse de fichiers binaires
- * gfontcache.c - mise en cache avec actualisation des polices
- *
- * Copyright (C) 2012 Cyrille Bagard
- *
- *  This file is part of OpenIDA.
- *
- *  OpenIDA is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  OpenIDA is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "gfontcache.h"
-
-
-
-/* ----------------------- MISE EN PLACE D'UN CONTEXTE GLOBAL ----------------------- */
-
-
-/* Utilisable par toutes les impressions. */
-static PangoContext *_context = NULL;
-
-
-
-/* ---------------------------- CACHE DE POLICES PAR VUE ---------------------------- */
-
-
-/* Description d'un cache pour polices (instance) */
-struct _GFontCache
-{
-    GObject parent;                         /* A laisser en premier        */
-
-    GHashTable *table;                      /* Associations desc./police   */
-
-    GtkWidget *widget;
-
-};
-
-/* Description d'un cache pour polices (classe) */
-struct _GFontCacheClass
-{
-    GObjectClass parent;                    /* A laisser en premier        */
-
-};
-
-
-/* Initialise la classe des caches pour polices. */
-static void g_font_cache_class_init(GFontCacheClass *);
-
-/* Initialise un cache pour polices. */
-static void g_font_cache_init(GFontCache *);
-
-/* Supprime toutes les références externes. */
-static void g_font_cache_dispose(GFontCache *);
-
-/* Procède à la libération totale de la mémoire. */
-static void g_font_cache_finalize(GFontCache *);
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/*                         MISE EN PLACE D'UN CONTEXTE GLOBAL                         */
-/* ---------------------------------------------------------------------------------- */
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : -                                                            *
-*                                                                             *
-*  Description : Initialise le contexte Pango pour la gestion des textes.     *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-void init_global_pango_context(void)
-{
-    PangoFontDescription *desc;             /* Police de caractères        */
-
-    _context = gdk_pango_context_get();
-
-    desc = pango_font_description_from_string("mono 10");
-    pango_context_set_font_description(_context, desc);
-    pango_font_description_free(desc);
-
-    pango_context_set_base_dir(_context, PANGO_DIRECTION_LTR);
-    pango_context_set_language(_context, gtk_get_default_language());
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : -                                                            *
-*                                                                             *
-*  Description : Fournit le contexte Pango global  pour l'impression.         *
-*                                                                             *
-*  Retour      : Contexte prêt à emploi.                                      *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-PangoContext *get_global_pango_context(void)
-{
-    return _context;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : -                                                            *
-*                                                                             *
-*  Description : Supprime le contexte Pango pour la gestion des textes.       *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-void exit_global_pango_context(void)
-{
-    g_object_unref(G_OBJECT(_context));
-
-}
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/*                              CACHE DE POLICES PAR VUE                              */
-/* ---------------------------------------------------------------------------------- */
-
-
-
-/* Indique le type défini pour un cache pour polices. */
-G_DEFINE_TYPE(GFontCache, g_font_cache, G_TYPE_OBJECT);
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : class = classe à initialiser.                                *
-*                                                                             *
-*  Description : Initialise la classe des caches pour polices.                *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_font_cache_class_init(GFontCacheClass *class)
-{
-    GObjectClass *object;                   /* Autre version de la classe  */
-
-    object = G_OBJECT_CLASS(class);
-
-    object->dispose = (GObjectFinalizeFunc/* ! */)g_font_cache_dispose;
-    object->finalize = (GObjectFinalizeFunc)g_font_cache_finalize;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : fcache = instance à initialiser.                             *
-*                                                                             *
-*  Description : Initialise un cache pour polices.                            *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_font_cache_init(GFontCache *fcache)
-{
-    fcache->table = g_hash_table_new_full((GHashFunc)pango_font_description_hash,
-                                          (GEqualFunc)pango_font_description_equal,
-                                          (GDestroyNotify)pango_font_description_free,
-                                          (GDestroyNotify)g_object_unref);
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : fcache = instance d'objet GLib à traiter.                    *
-*                                                                             *
-*  Description : Supprime toutes les références externes.                     *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_font_cache_dispose(GFontCache *fcache)
-{
-    g_hash_table_destroy(fcache->table);
-
-    G_OBJECT_CLASS(g_font_cache_parent_class)->dispose(G_OBJECT(fcache));
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : fcache = instance d'objet GLib à traiter.                    *
-*                                                                             *
-*  Description : Procède à la libération totale de la mémoire.                *
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void g_font_cache_finalize(GFontCache *fcache)
-{
-    G_OBJECT_CLASS(g_font_cache_parent_class)->finalize(G_OBJECT(fcache));
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : -                                                            *
-*                                                                             *
-*  Description : Crée un bloc virtuel d'instructions.                         *
-*                                                                             *
-*  Retour      : Adresse de la structure mise en place.                       *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-GFontCache *g_font_cache_new(void)
-{
-    GFontCache *result;                     /* Structure à retourner       */
-
-    result = g_object_new(G_TYPE_FONT_CACHE, NULL);
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : fcache = instance à consulter, voire compléter.              *
-*                desc   = description de la police recherchée.                *
-*                                                                             *
-*  Description : Fournit une police utilisable répondant au besoin.           *
-*                                                                             *
-*  Retour      : Police prête à usage.                                        *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-PangoFont *g_font_cache_lookup(GFontCache *fcache, const PangoFontDescription *desc)
-{
-    PangoFont *result;                      /* Instance à retourner        */
-    PangoFontDescription *key;              /* Copie de la description     */
-
-    result = (PangoFont *)g_hash_table_lookup(fcache->table, desc);
-
-    if (result == NULL)
-    {
-        result = pango_context_load_font(get_global_pango_context(), desc);
-
-        key = pango_font_description_copy(desc);
-        g_hash_table_insert(fcache->table, key, result);
-
-    }
-
-    return result;
-
-}
diff --git a/src/glibext/gfontcache.h b/src/glibext/gfontcache.h
deleted file mode 100644
index 2132a34..0000000
--- a/src/glibext/gfontcache.h
+++ /dev/null
@@ -1,79 +0,0 @@
-
-/* OpenIDA - Outil d'analyse de fichiers binaires
- * gfontcache.h - prototypes pour la mise en cache avec actualisation des polices
- *
- * Copyright (C) 2012 Cyrille Bagard
- *
- *  This file is part of OpenIDA.
- *
- *  OpenIDA is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  OpenIDA is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _GLIBEXT_GFONTCACHE_H
-#define _GLIBEXT_GFONTCACHE_H
-
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gtk/gtk.h>
-#include <pango/pango-context.h>
-#include <pango/pango-font.h>
-
-
-
-/* ----------------------- MISE EN PLACE D'UN CONTEXTE GLOBAL ----------------------- */
-
-
-/* Initialise le contexte Pango pour la gestion des textes. */
-void init_global_pango_context(void);
-
-/* Fournit le contexte Pango global  pour l'impression. */
-PangoContext *get_global_pango_context(void);
-
-/* Supprime le contexte Pango pour la gestion des textes. */
-void exit_global_pango_context(void);
-
-
-
-/* ---------------------------- CACHE DE POLICES PAR VUE ---------------------------- */
-
-
-#define G_TYPE_FONT_CACHE               g_font_cache_get_type()
-#define G_FONT_CACHE(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_font_cache_get_type(), GFontCache))
-#define G_IS_FONT_CACHE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_font_cache_get_type()))
-#define G_FONT_CACHE_CLASS(klass)       (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_FONT_CACHE, GFontCacheClass))
-#define G_IS_FONT_CACHE_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_FONT_CACHE))
-#define G_FONT_CACHE_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_FONT_CACHE, GFontCacheClass))
-
-
-/* Description d'un cache pour polices (instance) */
-typedef struct _GFontCache GFontCache;
-
-/* Description d'un cache pour polices (classe) */
-typedef struct _GFontCacheClass GFontCacheClass;
-
-
-/* Indique le type défini pour un cache pour polices. */
-GType g_font_cache_get_type(void);
-
-/* Crée un bloc virtuel d'instructions. */
-GFontCache *g_font_cache_new(void);
-
-/* Fournit une police utilisable répondant au besoin. */
-PangoFont *g_font_cache_lookup(GFontCache *, const PangoFontDescription *);
-
-
-
-#endif  /* _GLIBEXT_GFONTCACHE_H */
diff --git a/src/main.c b/src/main.c
index b966437..224c15e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -37,7 +37,6 @@
 #include "format/format.h"
 #include "glibext/delayed.h"
 #include "glibext/gbinportion.h"
-#include "glibext/gfontcache.h"
 #include "gtkext/support.h"
 #include "plugins/pglist.h"
 #include "../revision.h"
@@ -138,7 +137,6 @@ int main(int argc, char **argv)
     init_all_processors();
     init_all_formats();
     init_binary_portion_colors();
-    init_global_pango_context();
 
     /* Création de l'interface */
 
@@ -198,7 +196,6 @@ int main(int argc, char **argv)
 
     //exit_all_plugins();
 
-    exit_global_pango_context();
     exit_binary_portion_colors();
 
     unload_configuration(config);
-- 
cgit v0.11.2-87-g4458