Blame docs/api-function.md

Packit bfcc33
Sass functions are used to define new custom functions callable by Sass code. They are also used to overload debug or error statements. You can also define a fallback function, which is called for every unknown function found in the Sass code. Functions get passed zero or more `Sass_Values` (a `Sass_List` value) and they must also return a `Sass_Value`. Return a `Sass_Error` if you want to signal an error.
Packit bfcc33
Packit bfcc33
## Special signatures
Packit bfcc33
Packit bfcc33
- `*` - Fallback implementation
Packit bfcc33
- `@warn` - Overload warn statements
Packit bfcc33
- `@error` - Overload error statements
Packit bfcc33
- `@debug` - Overload debug statements
Packit bfcc33
Packit bfcc33
Note: The fallback implementation will be given the name of the called function as the first argument, before all the original function arguments. These features are pretty new and should be considered experimental.
Packit bfcc33
Packit bfcc33
### Basic Usage
Packit bfcc33
Packit bfcc33
```C
Packit bfcc33
#include "sass/functions.h"
Packit bfcc33
```
Packit bfcc33
Packit bfcc33
## Sass Function API
Packit bfcc33
Packit bfcc33
```C
Packit bfcc33
// Forward declaration
Packit bfcc33
struct Sass_Compiler;
Packit bfcc33
struct Sass_Function;
Packit bfcc33
Packit bfcc33
// Typedef helpers for custom functions lists
Packit bfcc33
typedef struct Sass_Function (*Sass_Function_Entry);
Packit bfcc33
typedef struct Sass_Function* (*Sass_Function_List);
Packit bfcc33
// Typedef defining function signature and return type
Packit bfcc33
typedef union Sass_Value* (*Sass_Function_Fn)
Packit bfcc33
  (const union Sass_Value*, Sass_Function_Entry cb, struct Sass_Compiler* compiler);
Packit bfcc33
Packit bfcc33
// Creators for sass function list and function descriptors
Packit bfcc33
Sass_Function_List sass_make_function_list (size_t length);
Packit bfcc33
Sass_Function_Entry sass_make_function (const char* signature, Sass_Function_Fn cb, void* cookie);
Packit bfcc33
// In case you need to free them yourself
Packit bfcc33
void sass_delete_function (Sass_Function_Entry entry);
Packit bfcc33
void sass_delete_function_list (Sass_Function_List list);
Packit bfcc33
Packit bfcc33
// Setters and getters for callbacks on function lists
Packit bfcc33
Sass_Function_Entry sass_function_get_list_entry(Sass_Function_List list, size_t pos);
Packit bfcc33
void sass_function_set_list_entry(Sass_Function_List list, size_t pos, Sass_Function_Entry cb);
Packit bfcc33
Packit bfcc33
// Setters to insert an entry into the import list (you may also use [] access directly)
Packit bfcc33
// Since we are dealing with pointers they should have a guaranteed and fixed size
Packit bfcc33
void sass_import_set_list_entry (Sass_Import_List list, size_t idx, Sass_Import_Entry entry);
Packit bfcc33
Sass_Import_Entry sass_import_get_list_entry (Sass_Import_List list, size_t idx);
Packit bfcc33
Packit bfcc33
// Getters for custom function descriptors
Packit bfcc33
const char* sass_function_get_signature (Sass_Function_Entry cb);
Packit bfcc33
Sass_Function_Fn sass_function_get_function (Sass_Function_Entry cb);
Packit bfcc33
void* sass_function_get_cookie (Sass_Function_Entry cb);
Packit bfcc33
Packit bfcc33
// Getters for callee entry
Packit bfcc33
const char* sass_callee_get_name (Sass_Callee_Entry);
Packit bfcc33
const char* sass_callee_get_path (Sass_Callee_Entry);
Packit bfcc33
size_t sass_callee_get_line (Sass_Callee_Entry);
Packit bfcc33
size_t sass_callee_get_column (Sass_Callee_Entry);
Packit bfcc33
enum Sass_Callee_Type sass_callee_get_type (Sass_Callee_Entry);
Packit bfcc33
Sass_Env_Frame sass_callee_get_env (Sass_Callee_Entry);
Packit bfcc33
Packit bfcc33
// Getters and Setters for environments (lexical, local and global)
Packit bfcc33
union Sass_Value* sass_env_get_lexical (Sass_Env_Frame, const char*);
Packit bfcc33
void sass_env_set_lexical (Sass_Env_Frame, const char*, union Sass_Value*);
Packit bfcc33
union Sass_Value* sass_env_get_local (Sass_Env_Frame, const char*);
Packit bfcc33
void sass_env_set_local (Sass_Env_Frame, const char*, union Sass_Value*);
Packit bfcc33
union Sass_Value* sass_env_get_global (Sass_Env_Frame, const char*);
Packit bfcc33
void sass_env_set_global (Sass_Env_Frame, const char*, union Sass_Value*);
Packit bfcc33
```
Packit bfcc33
Packit bfcc33
### More links
Packit bfcc33
Packit bfcc33
- [Sass Function Example](api-function-example.md)
Packit bfcc33
- [Sass Function Internal](api-function-internal.md)
Packit bfcc33