summaryrefslogtreecommitdiff
path: root/src/glibext/linesegment.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/linesegment.h')
-rw-r--r--src/glibext/linesegment.h196
1 files changed, 196 insertions, 0 deletions
diff --git a/src/glibext/linesegment.h b/src/glibext/linesegment.h
new file mode 100644
index 0000000..7a5551d
--- /dev/null
+++ b/src/glibext/linesegment.h
@@ -0,0 +1,196 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * linesegment.h - prototypes pour la concentration d'un fragment de caractères aux propriétés communes
+ *
+ * Copyright (C) 2010-2014 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * 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_LINESEGMENT_H
+#define _GLIBEXT_LINESEGMENT_H
+
+
+#include <glib-object.h>
+#include <stdbool.h>
+#include <gdk/gdk.h>
+#include <pango/pango.h>
+
+
+
+/* Liste identifiant un ensemble de segments */
+typedef struct _segcnt_list segcnt_list;
+
+
+
+/* ------------------------ NATURE POUR UN FRAGMENT DE TEXTE ------------------------ */
+
+
+/* Procède à l'initialisation des paramètres de rendu de texte. */
+bool load_segment_rendering_parameters(void);
+
+
+
+/* ----------------------- ISOLATION DE CONTENUS PARTAGEABLES ----------------------- */
+
+
+/* Fragment de caractères aux propriétés potentiellement partagées */
+typedef struct _line_segment line_segment;
+
+
+/* Initialise la table mémorisant les contenus pour segments. */
+bool init_segment_content_hash_table(void);
+
+/* Organise la sortie de la table des contenus pour segments. */
+void exit_segment_content_hash_table(void);
+
+
+
+/* -------------------- NATURE DE BASE POUR UN FRAGMENT DE TEXTE -------------------- */
+
+
+/* Types de partie de rendu */
+typedef enum _RenderingTagType
+{
+ RTT_RAW, /* Contenu brut */
+
+ RTT_COMMENT, /* Commentaire */
+ RTT_INDICATION, /* Aide à la lecture */
+
+ RTT_PHYS_ADDR_PAD, /* Position physique (début) */
+ RTT_PHYS_ADDR, /* Position physique */
+ RTT_VIRT_ADDR_PAD, /* Adresse virtuelle (début) */
+ RTT_VIRT_ADDR, /* Adresse virtuelle */
+ RTT_RAW_CODE, /* Code binaire brut */
+
+ RTT_LABEL, /* Etiquette sur une adresse */
+
+ 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;
+
+
+/* Crée un nouveau fragment de texte avec des propriétés. */
+line_segment *get_new_line_segment(RenderingTagType, const char *, size_t);
+
+/* Retire une utilisation à un fragment de texte. */
+void release_line_segment(line_segment *);
+
+/* Indique le type de rendu associé à un segment de ligne. */
+RenderingTagType get_line_segment_type(const line_segment *);
+
+/* Fournit le texte brut conservé dans le segment. */
+char *get_line_segment_text(const line_segment *, bool);
+
+/* Fournit la quantité de pixels requise pour l'impression. */
+gint get_line_segment_width(const line_segment *);
+
+/* Fournit la position idéale pour un marqueur. */
+gint get_caret_position_from_line_segment(const line_segment *, gint);
+
+/* Déplace le curseur au sein d'un segment de tampon. */
+bool move_caret_on_line_segment(const line_segment *, gint *, bool, GdkScrollDirection);
+
+/* Imprime le fragment de texte représenté. */
+void draw_line_segment(const line_segment *, cairo_t *, gint *, gint, const segcnt_list *);
+
+/* Types d'exportation */
+typedef enum _BufferExportType
+{
+ BET_TEXT, /* Exportation en texte brut */
+ BET_HTML, /* Exportation en HTML */
+
+ BET_COUNT
+
+} BufferExportType;
+
+/* Elements sur lesquels une exportation peut s'appuyer */
+typedef struct _buffer_export_context
+{
+ union
+ {
+ int fd; /* Flux ouvert en écriture */
+
+ };
+
+ union
+ {
+ /* BET_TEXT */
+ const char *sep; /* Séparation entre colonnes */
+
+ /* BET_HTML */
+ struct
+ {
+ const char *font_name; /* Police d'impression */
+ const char *bg_color; /* Fond du tableau HTML */
+
+ };
+
+ };
+
+} buffer_export_context;
+
+/* Exporte tous les styles utilisés par des segments. */
+void export_line_segment_style(buffer_export_context *, BufferExportType);
+
+/* Exporte le fragment de texte représenté. */
+void export_line_segment(const line_segment *, buffer_export_context *, BufferExportType);
+
+
+
+/* -------------------- GESTION OPTIMALE D'UNE LISTE DE CONTENUS -------------------- */
+
+
+/* Initilise une liste de contenus de segments. */
+segcnt_list *init_segment_content_list(void);
+
+/* Libère la mémoire occupée par une liste de contenus. */
+void exit_segment_content_list(segcnt_list *);
+
+/* Vide, si besoin est, une liste de contenus de segments. */
+bool reset_segment_content_list(segcnt_list *);
+
+/* Marque le contenu d'un segment comme remarquable. */
+bool add_segment_content_to_selection_list(segcnt_list *, const line_segment *);
+
+/* Indique si le contenu d'un segment est notable ou non. */
+bool selection_list_has_segment_content(const segcnt_list *, const line_segment *);
+
+
+
+#endif /* _GLIBEXT_LINESEGMENT_H */