CSS-Sass
view release on metacpan or search on metacpan
libsass/sass_functions.cpp view on Meta::CPAN
#ifdef _WIN32
#include <io.h>
#else
#include <unistd.h>
#endif
#include <cstring>
#include "util.hpp"
#include "context.hpp"
#include "sass_functions.h"
extern "C" {
using namespace std;
using namespace Sass;
// Struct to hold custom function callback
struct Sass_Function {
const char* signature;
Sass_Function_Fn function;
void* cookie;
};
Sass_Function_List ADDCALL sass_make_function_list(size_t length)
{
return (Sass_Function_List) calloc(length + 1, sizeof(Sass_Function_Entry));
}
Sass_Function_Entry ADDCALL sass_make_function(const char* signature, Sass_Function_Fn function, void* cookie)
{
Sass_Function_Entry cb = (Sass_Function_Entry) calloc(1, sizeof(Sass_Function));
if (cb == 0) return 0;
cb->signature = signature;
cb->function = function;
cb->cookie = cookie;
return cb;
}
// Setters and getters for callbacks on function lists
Sass_Function_Entry ADDCALL sass_function_get_list_entry(Sass_Function_List list, size_t pos) { return list[pos]; }
void sass_function_set_list_entry(Sass_Function_List list, size_t pos, Sass_Function_Entry cb) { list[pos] = cb; }
const char* ADDCALL sass_function_get_signature(Sass_Function_Entry cb) { return cb->signature; }
Sass_Function_Fn ADDCALL sass_function_get_function(Sass_Function_Entry cb) { return cb->function; }
void* ADDCALL sass_function_get_cookie(Sass_Function_Entry cb) { return cb->cookie; }
// External import entry
struct Sass_Import {
char* path;
char* base;
char* source;
char* srcmap;
// error handling
char* error;
size_t line;
size_t column;
};
// Struct to hold importer callback
struct Sass_Importer {
Sass_Importer_Fn importer;
double priority;
void* cookie;
};
Sass_Importer_Entry ADDCALL sass_make_importer(Sass_Importer_Fn importer, double priority, void* cookie)
{
Sass_Importer_Entry cb = (Sass_Importer_Entry) calloc(1, sizeof(Sass_Importer));
if (cb == 0) return 0;
cb->importer = importer;
cb->priority = priority;
cb->cookie = cookie;
return cb;
}
Sass_Importer_Fn ADDCALL sass_importer_get_function(Sass_Importer_Entry cb) { return cb->importer; }
double ADDCALL sass_importer_get_priority (Sass_Importer_Entry cb) { return cb->priority; }
void* ADDCALL sass_importer_get_cookie(Sass_Importer_Entry cb) { return cb->cookie; }
// Just in case we have some stray import structs
void ADDCALL sass_delete_importer (Sass_Importer_Entry cb)
{
free(cb);
}
// Creator for sass custom importer function list
Sass_Importer_List ADDCALL sass_make_importer_list(size_t length)
{
return (Sass_Importer_List) calloc(length + 1, sizeof(Sass_Importer_Entry));
}
// Creator for sass custom importer return argument list
Sass_Import_List ADDCALL sass_make_import_list(size_t length)
{
return (Sass_Import**) calloc(length + 1, sizeof(Sass_Import*));
}
// Creator for a single import entry returned by the custom importer inside the list
// We take ownership of the memory for source and srcmap (freed when context is destroyd)
( run in 0.545 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )