summaryrefslogtreecommitdiff
path: root/plugins/kaitai/python
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2023-10-08 13:39:00 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2023-10-08 13:39:00 (GMT)
commit22d7a5277e2526514b8b01983f502c26aeff5747 (patch)
tree1acad2eded62412c5f7a4337830208094ed39323 /plugins/kaitai/python
parentcc43f73bbbdfd1cb6d7129c82e2d221181a3cac3 (diff)
Import external Kaitai definitions when needed.
Diffstat (limited to 'plugins/kaitai/python')
-rw-r--r--plugins/kaitai/python/parsers/meta.c52
1 files changed, 50 insertions, 2 deletions
diff --git a/plugins/kaitai/python/parsers/meta.c b/plugins/kaitai/python/parsers/meta.c
index 3432640..0bd7bf9 100644
--- a/plugins/kaitai/python/parsers/meta.c
+++ b/plugins/kaitai/python/parsers/meta.c
@@ -50,6 +50,9 @@ static PyObject *py_kaitai_meta_get_id(PyObject *, void *);
/* Fournit la désignation humaine d'une définiton Kaitai. */
static PyObject *py_kaitai_meta_get_title(PyObject *, void *);
+/* Indique la liste des définitions à importer. */
+static PyObject *py_kaitai_meta_get_dependencies(PyObject *, void *);
+
/******************************************************************************
@@ -162,7 +165,7 @@ static PyObject *py_kaitai_meta_get_id(PyObject *self, void *closure)
* *
* Description : Fournit la désignation humaine d'une définiton Kaitai. *
* *
-* Retour : Intitulé de définition OU None. *
+* Retour : Intitulé de définition ou None. *
* *
* Remarques : - *
* *
@@ -206,7 +209,7 @@ static PyObject *py_kaitai_meta_get_title(PyObject *self, void *closure)
* *
* Description : Fournit la désignation humaine d'une définiton Kaitai. *
* *
-* Retour : Intitulé de définition OU None. *
+* Retour : Intitulé de définition ou None. *
* *
* Remarques : - *
* *
@@ -238,6 +241,50 @@ static PyObject *py_kaitai_meta_get_endian(PyObject *self, void *closure)
/******************************************************************************
* *
+* Paramètres : self = objet Python concerné par l'appel. *
+* closure = non utilisé ici. *
+* *
+* Description : Indique la liste des définitions à importer. *
+* *
+* Retour : Liste de désignations de définitions, vide ou non. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_kaitai_meta_get_dependencies(PyObject *self, void *closure)
+{
+ PyObject *result; /* Valeur à retourner */
+ GKaitaiMeta *meta; /* Version native de l'objet */
+ const char * const *dependencies; /* Liste d'imports requis */
+ size_t count; /* Quantité de ces imports */
+ size_t i; /* Boucle de parcours */
+
+#define KAITAI_META_DEPENDENCIES_ATTRIB PYTHON_GET_DEF_FULL \
+( \
+ dependencies, py_kaitai_meta, \
+ "Tuple of all definitions to import for the current" \
+ " definition.\n" \
+ "\n" \
+ "The result may be an empty string list." \
+)
+
+ meta = G_KAITAI_META(pygobject_get(self));
+
+ dependencies = g_kaitai_meta_get_dependencies(meta, &count);
+
+ result = PyTuple_New(count);
+
+ for (i = 0; i < count; i++)
+ PyTuple_SetItem(result, i, PyUnicode_FromString(dependencies[i]));
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : - *
* *
* Description : Fournit un accès à une définition de type à diffuser. *
@@ -258,6 +305,7 @@ PyTypeObject *get_python_kaitai_meta_type(void)
KAITAI_META_ID_ATTRIB,
KAITAI_META_TITLE_ATTRIB,
KAITAI_META_ENDIAN_ATTRIB,
+ KAITAI_META_DEPENDENCIES_ATTRIB,
{ NULL }
};