/
func.go
39 lines (35 loc) · 1.11 KB
/
func.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package libs
// #include <stdlib.h>
// #include "sass_context.h"
//
// extern union Sass_Value* GoBridge( union Sass_Value* s_args, void* cookie);
//
// union Sass_Value* CallSassFunction( union Sass_Value* s_args, Sass_Function_Entry cb, struct Sass_Options* opts ) {
// void* cookie = sass_function_get_cookie(cb);
// union Sass_Value* ret;
// ret = GoBridge(s_args, cookie);
// return ret;
// }
//
import "C"
import "unsafe"
type SassFunc C.Sass_Function_Entry
// SassMakeFunction binds a Go pointer to a Sass function signature
func SassMakeFunction(signature string, ptr unsafe.Pointer) SassFunc {
csign := C.CString(signature)
fn := C.sass_make_function(
csign,
C.Sass_Function_Fn(C.CallSassFunction),
ptr)
return (SassFunc)(fn)
}
// BindFuncs attaches a slice of Functions to a sass options. Signatures
// are already defined in the SassFunc.
func BindFuncs(opts SassOptions, funcs []SassFunc) {
sz := C.size_t(len(funcs))
cfuncs := C.sass_make_function_list(sz)
for i, cfn := range funcs {
C.sass_function_set_list_entry(cfuncs, C.size_t(i), cfn)
}
C.sass_option_set_c_functions(opts, cfuncs)
}