1#ifndef SASS_C_FUNCTIONS_H
2#define SASS_C_FUNCTIONS_H
3
4#include <stddef.h>
5#include <stdbool.h>
6#include <sass/base.h>
7
8#ifdef __cplusplus
9extern "C" {
10#endif
11
12
13// Forward declaration
14struct Sass_Env;
15struct Sass_Callee;
16struct Sass_Import;
17struct Sass_Options;
18struct Sass_Compiler;
19struct Sass_Importer;
20struct Sass_Function;
21
22// Typedef helpers for callee lists
23typedef struct Sass_Env (*Sass_Env_Frame);
24// Typedef helpers for callee lists
25typedef struct Sass_Callee (*Sass_Callee_Entry);
26// Typedef helpers for import lists
27typedef struct Sass_Import (*Sass_Import_Entry);
28typedef struct Sass_Import* (*Sass_Import_List);
29// Typedef helpers for custom importer lists
30typedef struct Sass_Importer (*Sass_Importer_Entry);
31typedef struct Sass_Importer* (*Sass_Importer_List);
32// Typedef defining importer signature and return type
33typedef Sass_Import_List (*Sass_Importer_Fn)
34 (const char* url, Sass_Importer_Entry cb, struct Sass_Compiler* compiler);
35
36// Typedef helpers for custom functions lists
37typedef struct Sass_Function (*Sass_Function_Entry);
38typedef struct Sass_Function* (*Sass_Function_List);
39// Typedef defining function signature and return type
40typedef union Sass_Value* (*Sass_Function_Fn)
41 (const union Sass_Value*, Sass_Function_Entry cb, struct Sass_Compiler* compiler);
42
43// Type of function calls
44enum Sass_Callee_Type {
45 SASS_CALLEE_MIXIN,
46 SASS_CALLEE_FUNCTION,
47 SASS_CALLEE_C_FUNCTION,
48};
49
50// Creator for sass custom importer return argument list
51ADDAPI Sass_Importer_List ADDCALL sass_make_importer_list (size_t length);
52ADDAPI Sass_Importer_Entry ADDCALL sass_importer_get_list_entry (Sass_Importer_List list, size_t idx);
53ADDAPI void ADDCALL sass_importer_set_list_entry (Sass_Importer_List list, size_t idx, Sass_Importer_Entry entry);
54ADDAPI void ADDCALL sass_delete_importer_list (Sass_Importer_List list);
55
56
57// Creators for custom importer callback (with some additional pointer)
58// The pointer is mostly used to store the callback into the actual binding
59ADDAPI Sass_Importer_Entry ADDCALL sass_make_importer (Sass_Importer_Fn importer, double priority, void* cookie);
60
61// Getters for import function descriptors
62ADDAPI Sass_Importer_Fn ADDCALL sass_importer_get_function (Sass_Importer_Entry cb);
63ADDAPI double ADDCALL sass_importer_get_priority (Sass_Importer_Entry cb);
64ADDAPI void* ADDCALL sass_importer_get_cookie (Sass_Importer_Entry cb);
65
66// Deallocator for associated memory
67ADDAPI void ADDCALL sass_delete_importer (Sass_Importer_Entry cb);
68
69// Creator for sass custom importer return argument list
70ADDAPI Sass_Import_List ADDCALL sass_make_import_list (size_t length);
71// Creator for a single import entry returned by the custom importer inside the list
72ADDAPI Sass_Import_Entry ADDCALL sass_make_import_entry (const char* path, char* source, char* srcmap);
73ADDAPI Sass_Import_Entry ADDCALL sass_make_import (const char* imp_path, const char* abs_base, char* source, char* srcmap);
74// set error message to abort import and to print out a message (path from existing object is used in output)
75ADDAPI Sass_Import_Entry ADDCALL sass_import_set_error(Sass_Import_Entry import, const char* message, size_t line, size_t col);
76
77// Setters to insert an entry into the import list (you may also use [] access directly)
78// Since we are dealing with pointers they should have a guaranteed and fixed size
79ADDAPI void ADDCALL sass_import_set_list_entry (Sass_Import_List list, size_t idx, Sass_Import_Entry entry);
80ADDAPI Sass_Import_Entry ADDCALL sass_import_get_list_entry (Sass_Import_List list, size_t idx);
81
82// Getters for callee entry
83ADDAPI const char* ADDCALL sass_callee_get_name (Sass_Callee_Entry);
84ADDAPI const char* ADDCALL sass_callee_get_path (Sass_Callee_Entry);
85ADDAPI size_t ADDCALL sass_callee_get_line (Sass_Callee_Entry);
86ADDAPI size_t ADDCALL sass_callee_get_column (Sass_Callee_Entry);
87ADDAPI enum Sass_Callee_Type ADDCALL sass_callee_get_type (Sass_Callee_Entry);
88ADDAPI Sass_Env_Frame ADDCALL sass_callee_get_env (Sass_Callee_Entry);
89
90// Getters and Setters for environments (lexical, local and global)
91ADDAPI union Sass_Value* ADDCALL sass_env_get_lexical (Sass_Env_Frame, const char*);
92ADDAPI void ADDCALL sass_env_set_lexical (Sass_Env_Frame, const char*, union Sass_Value*);
93ADDAPI union Sass_Value* ADDCALL sass_env_get_local (Sass_Env_Frame, const char*);
94ADDAPI void ADDCALL sass_env_set_local (Sass_Env_Frame, const char*, union Sass_Value*);
95ADDAPI union Sass_Value* ADDCALL sass_env_get_global (Sass_Env_Frame, const char*);
96ADDAPI void ADDCALL sass_env_set_global (Sass_Env_Frame, const char*, union Sass_Value*);
97
98// Getters for import entry
99ADDAPI const char* ADDCALL sass_import_get_imp_path (Sass_Import_Entry);
100ADDAPI const char* ADDCALL sass_import_get_abs_path (Sass_Import_Entry);
101ADDAPI const char* ADDCALL sass_import_get_source (Sass_Import_Entry);
102ADDAPI const char* ADDCALL sass_import_get_srcmap (Sass_Import_Entry);
103// Explicit functions to take ownership of these items
104// The property on our struct will be reset to NULL
105ADDAPI char* ADDCALL sass_import_take_source (Sass_Import_Entry);
106ADDAPI char* ADDCALL sass_import_take_srcmap (Sass_Import_Entry);
107// Getters from import error entry
108ADDAPI size_t ADDCALL sass_import_get_error_line (Sass_Import_Entry);
109ADDAPI size_t ADDCALL sass_import_get_error_column (Sass_Import_Entry);
110ADDAPI const char* ADDCALL sass_import_get_error_message (Sass_Import_Entry);
111
112// Deallocator for associated memory (incl. entries)
113ADDAPI void ADDCALL sass_delete_import_list (Sass_Import_List);
114// Just in case we have some stray import structs
115ADDAPI void ADDCALL sass_delete_import (Sass_Import_Entry);
116
117
118
119// Creators for sass function list and function descriptors
120ADDAPI Sass_Function_List ADDCALL sass_make_function_list (size_t length);
121ADDAPI Sass_Function_Entry ADDCALL sass_make_function (const char* signature, Sass_Function_Fn cb, void* cookie);
122ADDAPI void ADDCALL sass_delete_function (Sass_Function_Entry entry);
123ADDAPI void ADDCALL sass_delete_function_list (Sass_Function_List list);
124
125// Setters and getters for callbacks on function lists
126ADDAPI Sass_Function_Entry ADDCALL sass_function_get_list_entry(Sass_Function_List list, size_t pos);
127ADDAPI void ADDCALL sass_function_set_list_entry(Sass_Function_List list, size_t pos, Sass_Function_Entry cb);
128
129// Getters for custom function descriptors
130ADDAPI const char* ADDCALL sass_function_get_signature (Sass_Function_Entry cb);
131ADDAPI Sass_Function_Fn ADDCALL sass_function_get_function (Sass_Function_Entry cb);
132ADDAPI void* ADDCALL sass_function_get_cookie (Sass_Function_Entry cb);
133
134
135#ifdef __cplusplus
136} // __cplusplus defined.
137#endif
138
139#endif
140

source code of gtk/subprojects/libsass/include/sass/functions.h