Section courante

A propos

Section administrative du site

Exemple de code pour la fonction Sass

Exemple de main.c :

  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include "sass/context.h"
  4.  
  5. union Sass_Value* call_fn_foo(const union Sass_Value* s_args, Sass_Function_Entry cb, struct Sass_Compiler* comp) {
  6.  
  7.   // obtenir la structure de contexte/option associée à ce compilateur
  8.   struct Sass_Context* ctx = sass_compiler_get_context(comp);
  9.   struct Sass_Options* opts = sass_compiler_get_options(comp);
  10.   // obtenir des informations sur l'entrée d'importateur précédente à partir de la pile
  11.   Sass_Import_Entry import = sass_compiler_get_last_import(comp);
  12.   const char* prev_abs_path = sass_import_get_abs_path(import);
  13.   const char* prev_imp_path = sass_import_get_imp_path(import);
  14.   // obtenir le cookie à partir du descripteur de fonction
  15.   void* cookie = sass_function_get_cookie(cb);
  16.   // en fait, nous abusons du void* pour entreposer un "int"
  17.   return sass_make_number((intptr_t)cookie, "px");
  18. }
  19.  
  20. int main( int argc, const char* argv[] ) {
  21.  
  22.   // récupérer le fichier d'entrée à partir du premier paramètre ou utiliser la valeur par défaut
  23.   const char* input = argc > 1 ? argv[1] : "styles.scss";
  24.  
  25.   // créer le contexte du fichier et obtenir toutes les structures associées
  26.   struct Sass_File_Context* file_ctx = sass_make_file_context(input);
  27.   struct Sass_Context* ctx = sass_file_context_get_context(file_ctx);
  28.   struct Sass_Options* ctx_opt = sass_context_get_options(ctx);
  29.  
  30.   // allouer un appelant de fonction personnalisé
  31.   Sass_Function_Entry fn_foo =
  32.     sass_make_function("foo()", call_fn_foo, (void*)42);
  33.  
  34.   // créer une liste de toutes les fonctions personnalisées
  35.   Sass_Function_List fn_list = sass_make_function_list(1);
  36.   sass_function_set_list_entry(fn_list, 0, fn_foo);
  37.   sass_option_set_c_functions(ctx_opt, fn_list);
  38.  
  39.   // le contexte est configuré, appelez l'étape de compilation maintenant
  40.   int status = sass_compile_file_context(file_ctx);
  41.  
  42.   // afficher le résultat ou l'erreur sur la sortie standard
  43.   if (status == 0) puts(sass_context_get_output_string(ctx));
  44.   else puts(sass_context_get_error_message(ctx));
  45.  
  46.   // libérer la mémoire allouée
  47.   sass_delete_file_context(file_ctx);
  48.  
  49.   // état de sortie
  50.   return status;
  51. }

Compiler le main.c :

gcc -c main.c -o main.o
gcc -o sample main.o -lsass
echo "foo { margin: foo(); }" > foo.scss
./sample foo.scss => "foo { margin: 42px }"


Dernière mise à jour : Mardi, le 8 octobre 2024