/* OpenIDA - Outil d'analyse de fichiers binaires * exporter.c - traduction humaine des lignes de rendus * * Copyright (C) 2009 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 . */ #include "exporter.h" #include "exporter-int.h" /* Indique le type défini pour une exportation de contenu. */ G_DEFINE_TYPE(GContentExporter, g_content_exporter, G_TYPE_OBJECT); /****************************************************************************** * * * Paramètres : klass = classe à initialiser. * * * * Description : Initialise la classe des lignes de représentation. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_content_exporter_class_init(GContentExporterClass *klass) { GdkScreen *screen; /* Ecran pour GDK */ PangoFontDescription *font_desc; /* Police de caractère */ /* Exportation vers un tampon de code */ screen = gdk_screen_get_default(); font_desc = pango_font_description_from_string("mono 10"); klass->context = gdk_pango_context_get_for_screen(screen); pango_context_set_font_description(klass->context, font_desc); pango_context_set_base_dir(klass->context, PANGO_DIRECTION_LTR); pango_context_set_language(klass->context, gtk_get_default_language()); klass->attribs[RTT_RAW] = pango_attr_list_new(); klass->attribs[RTT_COMMENT] = pango_attr_list_new(); klass->attribs[RTT_RAW_CODE] = pango_attr_list_new(); klass->attribs[RTT_INSTRUCTION] = pango_attr_list_new(); klass->attribs[RTT_IMMEDIATE] = pango_attr_list_new(); klass->attribs[RTT_REGISTER] = pango_attr_list_new(); klass->attribs[RTT_HOOK] = pango_attr_list_new(); klass->attribs[RTT_SIGNS] = pango_attr_list_new(); klass->attribs[RTT_LTGT] = pango_attr_list_new(); klass->attribs[RTT_SEGMENT] = pango_attr_list_new(); klass->attribs[RTT_STRING] = pango_attr_list_new(); klass->attribs[RTT_VAR_NAME] = pango_attr_list_new(); } /****************************************************************************** * * * Paramètres : exporter = instance à initialiser. * * * * Description : Initialise une instance de ligne de représentation. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ static void g_content_exporter_init(GContentExporter *exporter) { } /****************************************************************************** * * * Paramètres : exporter = instance sachant exporter son contenu. * * stream = flux ouvert en écriture. * * text = texte à insérer dans l'existant. * * length = taille du texte à traiter. * * tag = type de décorateur à utiliser. * * * * Description : Ajoute du texte simple à un fichier ouvert en écriture. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void g_content_exporter_insert_text(GContentExporter *exporter, FILE *stream, const char *text, size_t length, RenderingTagType tag) { size_t ret; /* Quantité d'octets écrite */ ret = fwrite(text, sizeof(char), length, stream); if (ret != length) perror("fwrite"); } /****************************************************************************** * * * Paramètres : exporter = instance sachant exporter son contenu. * * buffer = espace où placer ledit contenu. * * column = colonne de la ligne visée par l'insertion. * * text = texte à insérer dans l'existant. * * length = taille du texte à traiter. * * type = type de décorateur à utiliser. * * * * Description : Ajoute du texte à un tampon de code via l'instance spécifiée.* * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void g_content_exporter_insert_into_buffer(GContentExporter *exporter, GBufferLine *buffer, BufferLineColumn column, const char *text, size_t length, RenderingTagType type) { GContentExporterClass *class; /* Stockage de briques de base */ GBufferSegment *segment; /* Portion de texte à ajouter */ class = G_CONTENT_EXPORTER_GET_CLASS(exporter); segment = g_buffer_segment_new(class->context, class->attribs[type], text, length); g_buffer_line_add_segment(buffer, column, segment); } /****************************************************************************** * * * Paramètres : exporter = instance sachant exporter son contenu. * * options = options de rendu. * * rendering = support effectif final des lignes de code. * * stream = flux ouvert en écriture. * * * * Description : Ajoute du texte simple à un fichier ouvert en écriture. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void g_content_exporter_add_text(GContentExporter *exporter, GRenderingOptions *options, MainRendering rendering, FILE *stream) { if (exporter->add_text != NULL) exporter->add_text(exporter, options, rendering, stream); } /****************************************************************************** * * * Paramètres : exporter = instance sachant exporter son contenu. * * line = espace où placer ledit contenu. * * options = options de rendu. * * * * Description : Ajoute à un tampon GLib le contenu de l'instance spécifiée. * * * * Retour : - * * * * Remarques : - * * * ******************************************************************************/ void g_content_exporter_to_buffer(GContentExporter *exporter, GBufferLine *line, GRenderingOptions *options) { if (exporter->export_buffer != NULL) exporter->export_buffer(exporter, line, options); }