Importateur Sass
Grâce aux importateurs personnalisés, les feuilles de style Sass peuvent être implémentées de toutes les manières possibles, par exemple via un serveur à distance. Remarque : cette fonctionnalité est expérimentale et son implémentation est différente de celle des importateurs dans Ruby Sass. Les importations doivent être relatives au contexte d'importation parent ; nous devons donc transmettre cette information au rappel de l'importateur. Pour ce faire, ils transmettent actuellement la chaîne de caractères/le chemin d'importation complet du contexte d'importation précédent.
Renvoyer les importations
Vous devez renvoyer une liste d'importations, car certains importateurs peuvent vouloir importer plusieurs fichiers à partir d'une seule instruction d'importation (par exemple, un importateur global/étoile). La mémoire transmise avec source et srcmap est récupérée par LibSass et libérée automatiquement une fois l'importation terminée. Vous pouvez également renvoyer 0 au lieu d'une liste, ce qui indiquera à LibSass de gérer l'importation automatiquement (comme si aucun importateur personnalisé n'était utilisé).
- Sass_Import_Entry* rv = sass_make_import_list(1);
- rv[0] = sass_make_import(rel, abs, source, srcmap);
Chaque importation sera ensuite incluse dans LibSass. Vous ne pouvez renvoyer qu'un chemin de fichier sans source chargée. Ainsi, vous pouvez, par exemple, implémenter des règles de réécriture pour les chemins d'importation et laisser la partie chargement à LibSass.
Veuillez noter que LibSass n'utilise pas encore le paramètre srcmap. Il a été ajouté pour éviter la dépréciation de l'API C une fois la prise en charge implémentée. Il servira à remapper la table source actuelle avec celles fournies.
Utilisation de base
- #include "sass/functions.h"
API d'importation Sass
- // Déclaration anticipée
- struct Sass_Import;
-
- // Déclaration anticipée
- struct Sass_C_Import_Descriptor;
-
- // Typedef définissant le rappel de l'importateur personnalisé
- typedef struct Sass_C_Import_Descriptor (*Sass_C_Import_Callback);
- // Typedef définissant le prototype de la fonction d'importation c
- typedef Sass_Import_Entry* (*Sass_C_Import_Fn) (const char* url, const char* prev, void* cookie);
-
- // Créateurs de rappels d'importateur personnalisés (avec pointeur supplémentaire)
- // Le pointeur sert principalement à stocker le rappel dans la fonction elle-même
- Sass_C_Import_Callback sass_make_importer (Sass_C_Import_Fn, void* cookie);
-
- // Getters pour les descripteurs de fonctions d'importation
- Sass_C_Import_Fn sass_import_get_function (Sass_C_Import_Callback fn);
- void* sass_import_get_cookie (Sass_C_Import_Callback fn);
-
- // Désallocateur pour la mémoire associée
- void sass_delete_importer (Sass_C_Import_Callback fn);
-
- // Créateur pour la liste des paramètres de retour de l'importateur personnalisé sass
- Sass_Import_Entry* sass_make_import_list (size_t length);
- // Créateur d'une entrée d'importation unique renvoyée par l'importateur personnalisé à l'intérieur de la liste
- Sass_Import_Entry sass_make_import_entry (const char* path, char* source, char* srcmap);
- Sass_Import_Entry sass_make_import (const char* rel, const char* abs, char* source, char* srcmap);
-
- // Définir le message d'erreur pour interrompre l'importation et afficher un message (le chemin de l'objet existant est utilisé dans la sortie)
- Sass_Import_Entry sass_import_set_error(Sass_Import_Entry import, const char* message, size_t line, size_t col);
-
- // Setters pour insérer une entrée dans la liste d'importation (vous pouvez également utiliser l'accès [] directement)
- // Puisqu'il s'agit de pointeurs, leur taille doit être garantie et fixe.
- void sass_import_set_list_entry (Sass_Import_Entry* list, size_t idx, Sass_Import_Entry entry);
- Sass_Import_Entry sass_import_get_list_entry (Sass_Import_Entry* list, size_t idx);
-
- // Getters pour l'entrée d'importation
- const char* sass_import_get_imp_path (Sass_Import_Entry);
- const char* sass_import_get_abs_path (Sass_Import_Entry);
- const char* sass_import_get_source (Sass_Import_Entry);
- const char* sass_import_get_srcmap (Sass_Import_Entry);
- // Fonctions explicites pour prendre possession de ces éléments
- // La propriété de notre structure sera réinitialisée à NULL
- char* sass_import_take_source (Sass_Import_Entry);
- char* sass_import_take_srcmap (Sass_Import_Entry);
-
- // Getters pour les entrées d'erreur d'importation
- size_t sass_import_get_error_line (Sass_Import_Entry);
- size_t sass_import_get_error_column (Sass_Import_Entry);
- const char* sass_import_get_error_message (Sass_Import_Entry);
-
- // Désallocateur pour la mémoire associée (y compris les entrées)
- void sass_delete_import_list (Sass_Import_Entry*);
- // Juste au cas où nous aurions des structures d'importation parasites
- void sass_delete_import (Sass_Import_Entry);