diff options
Diffstat (limited to 'plugins/yaml/line.c')
| -rw-r--r-- | plugins/yaml/line.c | 399 | 
1 files changed, 0 insertions, 399 deletions
diff --git a/plugins/yaml/line.c b/plugins/yaml/line.c deleted file mode 100644 index 26a1012..0000000 --- a/plugins/yaml/line.c +++ /dev/null @@ -1,399 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * line.c - ligne de contenu Yaml - * - * Copyright (C) 2019 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide 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. - * - *  Chrysalide 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 Chrysalide.  If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "line.h" - - -#include <malloc.h> -#include <string.h> - - -#include <core/logs.h> - - - -/* Ligne de données au format Yaml (instance) */ -struct _GYamlLine -{ -    GObject parent;                         /* A laisser en premier        */ - -    char *raw;                              /* Contenu brut de la ligne    */ -    size_t number;                          /* Indice associé              */ - -    size_t indent;                          /* Niveau d'indentation        */ -    bool is_list_item;                      /* Elément de liste ?          */ - -    const char *payload;                    /* Charge utile du contenu     */ - -    char *key;                              /* Clef de la ligne Yaml       */ -    char *value;                            /* Valeyr de la ligne Yaml     */ - -}; - -/* Ligne de données au format Yaml (classe) */ -struct _GYamlLineClass -{ -    GObjectClass parent;                    /* A laisser en premier        */ - -}; - - -/* Initialise la classe des lignes de contenu Yaml. */ -static void g_yaml_line_class_init(GYamlLineClass *); - -/* Initialise une instance de ligne de contenu Yaml. */ -static void g_yaml_line_init(GYamlLine *); - -/* Supprime toutes les références externes. */ -static void g_yaml_line_dispose(GYamlLine *); - -/* Procède à la libération totale de la mémoire. */ -static void g_yaml_line_finalize(GYamlLine *); - - - -/* Indique le type défini pour une ligne de données au format Yaml. */ -G_DEFINE_TYPE(GYamlLine, g_yaml_line, G_TYPE_OBJECT); - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : klass = classe à initialiser.                                * -*                                                                             * -*  Description : Initialise la classe des lignes de contenu Yaml.             * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void g_yaml_line_class_init(GYamlLineClass *klass) -{ -    GObjectClass *object;                   /* Autre version de la classe  */ - -    object = G_OBJECT_CLASS(klass); - -    object->dispose = (GObjectFinalizeFunc/* ! */)g_yaml_line_dispose; -    object->finalize = (GObjectFinalizeFunc)g_yaml_line_finalize; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = instance à initialiser.                               * -*                                                                             * -*  Description : Initialise une instance de ligne de contenu Yaml.            * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void g_yaml_line_init(GYamlLine *line) -{ -    line->raw = NULL; -    line->number = -1; - -    line->indent = 0; -    line->is_list_item = false; - -    line->payload = NULL; -    line->key = NULL; -    line->value = NULL; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = instance d'objet GLib à traiter.                      * -*                                                                             * -*  Description : Supprime toutes les références externes.                     * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void g_yaml_line_dispose(GYamlLine *line) -{ -    G_OBJECT_CLASS(g_yaml_line_parent_class)->dispose(G_OBJECT(line)); - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = instance d'objet GLib à traiter.                      * -*                                                                             * -*  Description : Procède à la libération totale de la mémoire.                * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void g_yaml_line_finalize(GYamlLine *line) -{ -    if (line->raw != NULL) -        free(line->raw); - -    if (line->key != NULL) -        free(line->key); - -    if (line->value != NULL) -        free(line->value); - -    G_OBJECT_CLASS(g_yaml_line_parent_class)->finalize(G_OBJECT(line)); - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : raw    = contenu brut d'une ligne au format Yaml.            * -*                number = indice associé à la ligne.                          * -*                                                                             * -*  Description : Met en place un gestionnaire pour ligne au format Yaml.      * -*                                                                             * -*  Retour      : Instance mise en place ou NULL en cas d'échec.               * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -GYamlLine *g_yaml_line_new(const char *raw, size_t number) -{ -    GYamlLine *result;                      /* Structure à retourner       */ -    char *iter;                             /* Boucle de parcours          */ -    bool string_content[2];                 /* Ouvertures de chaînes       */ -    bool escape;                            /* Echappement de marquant     */ - -    result = g_object_new(G_TYPE_YAML_LINE, NULL); - -    result->raw = strdup(raw); -    result->number = number; - -    /* Indentation */ - -    for (iter = result->raw; *iter != '\0'; iter++) -    { -        if (*iter != ' ') -            break; - -        result->indent++; - -    } - -    if (*iter == '-') -    { -        result->is_list_item = true; - -        for (iter++; *iter != '\0'; iter++) -            if (*iter != ' ') -                break; - -    } - -    result->payload = iter; - -    /* Eventuel couple clef/valeur */ - -    string_content[0] = false; -    string_content[1] = false; - -    for (; *iter != '\0'; iter++) -    { -        if (*iter == '\'' && !string_content[1]) -        { -            if (iter == result->payload) -                escape = false; - -            else -                escape = *(iter - 1) == '\''; - -            if (!escape) -                string_content[0] = !string_content[0]; - -        } - -        else if (*iter == '"' && !string_content[0]) -        { -            if (iter == result->payload) -                escape = false; - -            else -                escape = *(iter - 1) == '\\'; - -            if (!escape) -                string_content[1] = !string_content[1]; - -        } - -        else if (!string_content[0] && !string_content[1]) -        { - -            if (*iter == ':') -                break; - - -        } - -    } - -    if (*iter != '\0') -    { -        result->key = strndup(result->payload, iter - result->payload); - -        for (iter++; *iter != '\0'; iter++) -            if (*iter != ' ') -                break; - -        if (*iter != '\0') -            result->value = strdup(iter); - -    } - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = ligne au format Yaml à consulter.                     * -*                                                                             * -*  Description : Fournit la taille de l'indentation d'une ligne Yaml.         * -*                                                                             * -*  Retour      : Taille de l'indentation rencontrée.                          * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -size_t g_yaml_line_count_indent(const GYamlLine *line) -{ -    size_t result;                          /* Quantité à retourner        */ - -    result = line->indent; - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = ligne au format Yaml à consulter.                     * -*                                                                             * -*  Description : Indique si la ligne représente un élément de liste.          * -*                                                                             * -*  Retour      : Statut de l'état lié à une liste d'éléments.                 * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -bool g_yaml_line_is_list_item(const GYamlLine *line) -{ -    bool result;                            /* Statut à retourner          */ - -    result = line->is_list_item; - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = ligne au format Yaml à consulter.                     * -*                                                                             * -*  Description : Fournit la charge utile associée à une ligne Yaml.           * -*                                                                             * -*  Retour      : Contenu sous forme de chaîne de caractères.                  * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -const char *g_yaml_line_get_payload(const GYamlLine *line) -{ -    const char *result;                     /* Valeur à retourner          */ - -    result = line->payload; - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = ligne au format Yaml à consulter.                     * -*                                                                             * -*  Description : Fournit la clef associée à une ligne Yaml si elle existe.    * -*                                                                             * -*  Retour      : Clef sous forme de chaîne de caractères ou NULL.             * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -const char *g_yaml_line_get_key(const GYamlLine *line) -{ -    char *result;                           /* Valeur à retourner          */ - -    result = line->key; - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : line = ligne au format Yaml à consulter.                     * -*                                                                             * -*  Description : Fournit la valeur associée à une ligne Yaml si elle existe.  * -*                                                                             * -*  Retour      : Valeur sous forme de chaîne de caractères ou NULL.           * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -const char *g_yaml_line_get_value(const GYamlLine *line) -{ -    char *result;                           /* Valeur à retourner          */ - -    result = line->value; - -    return result; - -}  | 
