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 |
9 | extern "C" { |
10 | #endif |
11 | |
12 | |
13 | // Forward declaration |
14 | struct Sass_Env; |
15 | struct Sass_Callee; |
16 | struct Sass_Import; |
17 | struct Sass_Options; |
18 | struct Sass_Compiler; |
19 | struct Sass_Importer; |
20 | struct Sass_Function; |
21 | |
22 | // Typedef helpers for callee lists |
23 | typedef struct Sass_Env (*Sass_Env_Frame); |
24 | // Typedef helpers for callee lists |
25 | typedef struct Sass_Callee (*Sass_Callee_Entry); |
26 | // Typedef helpers for import lists |
27 | typedef struct Sass_Import (*Sass_Import_Entry); |
28 | typedef struct Sass_Import* (*Sass_Import_List); |
29 | // Typedef helpers for custom importer lists |
30 | typedef struct Sass_Importer (*Sass_Importer_Entry); |
31 | typedef struct Sass_Importer* (*Sass_Importer_List); |
32 | // Typedef defining importer signature and return type |
33 | typedef 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 |
37 | typedef struct Sass_Function (*Sass_Function_Entry); |
38 | typedef struct Sass_Function* (*Sass_Function_List); |
39 | // Typedef defining function signature and return type |
40 | typedef 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 |
44 | enum 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 |
51 | ADDAPI Sass_Importer_List ADDCALL sass_make_importer_list (size_t length); |
52 | ADDAPI Sass_Importer_Entry ADDCALL sass_importer_get_list_entry (Sass_Importer_List list, size_t idx); |
53 | ADDAPI void ADDCALL sass_importer_set_list_entry (Sass_Importer_List list, size_t idx, Sass_Importer_Entry entry); |
54 | ADDAPI 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 |
59 | ADDAPI Sass_Importer_Entry ADDCALL sass_make_importer (Sass_Importer_Fn importer, double priority, void* cookie); |
60 | |
61 | // Getters for import function descriptors |
62 | ADDAPI Sass_Importer_Fn ADDCALL sass_importer_get_function (Sass_Importer_Entry cb); |
63 | ADDAPI double ADDCALL sass_importer_get_priority (Sass_Importer_Entry cb); |
64 | ADDAPI void* ADDCALL sass_importer_get_cookie (Sass_Importer_Entry cb); |
65 | |
66 | // Deallocator for associated memory |
67 | ADDAPI void ADDCALL sass_delete_importer (Sass_Importer_Entry cb); |
68 | |
69 | // Creator for sass custom importer return argument list |
70 | ADDAPI 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 |
72 | ADDAPI Sass_Import_Entry ADDCALL sass_make_import_entry (const char* path, char* source, char* srcmap); |
73 | ADDAPI 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) |
75 | ADDAPI 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 |
79 | ADDAPI void ADDCALL sass_import_set_list_entry (Sass_Import_List list, size_t idx, Sass_Import_Entry entry); |
80 | ADDAPI Sass_Import_Entry ADDCALL sass_import_get_list_entry (Sass_Import_List list, size_t idx); |
81 | |
82 | // Getters for callee entry |
83 | ADDAPI const char* ADDCALL sass_callee_get_name (Sass_Callee_Entry); |
84 | ADDAPI const char* ADDCALL sass_callee_get_path (Sass_Callee_Entry); |
85 | ADDAPI size_t ADDCALL sass_callee_get_line (Sass_Callee_Entry); |
86 | ADDAPI size_t ADDCALL sass_callee_get_column (Sass_Callee_Entry); |
87 | ADDAPI enum Sass_Callee_Type ADDCALL sass_callee_get_type (Sass_Callee_Entry); |
88 | ADDAPI Sass_Env_Frame ADDCALL sass_callee_get_env (Sass_Callee_Entry); |
89 | |
90 | // Getters and Setters for environments (lexical, local and global) |
91 | ADDAPI union Sass_Value* ADDCALL sass_env_get_lexical (Sass_Env_Frame, const char*); |
92 | ADDAPI void ADDCALL sass_env_set_lexical (Sass_Env_Frame, const char*, union Sass_Value*); |
93 | ADDAPI union Sass_Value* ADDCALL sass_env_get_local (Sass_Env_Frame, const char*); |
94 | ADDAPI void ADDCALL sass_env_set_local (Sass_Env_Frame, const char*, union Sass_Value*); |
95 | ADDAPI union Sass_Value* ADDCALL sass_env_get_global (Sass_Env_Frame, const char*); |
96 | ADDAPI void ADDCALL sass_env_set_global (Sass_Env_Frame, const char*, union Sass_Value*); |
97 | |
98 | // Getters for import entry |
99 | ADDAPI const char* ADDCALL sass_import_get_imp_path (Sass_Import_Entry); |
100 | ADDAPI const char* ADDCALL sass_import_get_abs_path (Sass_Import_Entry); |
101 | ADDAPI const char* ADDCALL sass_import_get_source (Sass_Import_Entry); |
102 | ADDAPI 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 |
105 | ADDAPI char* ADDCALL sass_import_take_source (Sass_Import_Entry); |
106 | ADDAPI char* ADDCALL sass_import_take_srcmap (Sass_Import_Entry); |
107 | // Getters from import error entry |
108 | ADDAPI size_t ADDCALL sass_import_get_error_line (Sass_Import_Entry); |
109 | ADDAPI size_t ADDCALL sass_import_get_error_column (Sass_Import_Entry); |
110 | ADDAPI const char* ADDCALL sass_import_get_error_message (Sass_Import_Entry); |
111 | |
112 | // Deallocator for associated memory (incl. entries) |
113 | ADDAPI void ADDCALL sass_delete_import_list (Sass_Import_List); |
114 | // Just in case we have some stray import structs |
115 | ADDAPI void ADDCALL sass_delete_import (Sass_Import_Entry); |
116 | |
117 | |
118 | |
119 | // Creators for sass function list and function descriptors |
120 | ADDAPI Sass_Function_List ADDCALL sass_make_function_list (size_t length); |
121 | ADDAPI Sass_Function_Entry ADDCALL sass_make_function (const char* signature, Sass_Function_Fn cb, void* cookie); |
122 | ADDAPI void ADDCALL sass_delete_function (Sass_Function_Entry entry); |
123 | ADDAPI void ADDCALL sass_delete_function_list (Sass_Function_List list); |
124 | |
125 | // Setters and getters for callbacks on function lists |
126 | ADDAPI Sass_Function_Entry ADDCALL sass_function_get_list_entry(Sass_Function_List list, size_t pos); |
127 | ADDAPI 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 |
130 | ADDAPI const char* ADDCALL sass_function_get_signature (Sass_Function_Entry cb); |
131 | ADDAPI Sass_Function_Fn ADDCALL sass_function_get_function (Sass_Function_Entry cb); |
132 | ADDAPI void* ADDCALL sass_function_get_cookie (Sass_Function_Entry cb); |
133 | |
134 | |
135 | #ifdef __cplusplus |
136 | } // __cplusplus defined. |
137 | #endif |
138 | |
139 | #endif |
140 | |