1 #ifndef SASS_PLUGINS_H
2 #define SASS_PLUGINS_H
3 
4 #include <string>
5 #include <vector>
6 #include "utf8_string.hpp"
7 #include "sass/functions.h"
8 
9 #ifdef _WIN32
10 
11   #define LOAD_LIB(var, path) HMODULE var = LoadLibraryW(UTF_8::convert_to_utf16(path).c_str())
12   #define LOAD_LIB_WCHR(var, path_wide_str) HMODULE var = LoadLibraryW(path_wide_str.c_str())
13   #define LOAD_LIB_FN(type, var, name) type var = (type) GetProcAddress(plugin, name)
14   #define CLOSE_LIB(var) FreeLibrary(var)
15 
16   #ifndef dlerror
17   #define dlerror() 0
18   #endif
19 
20 #else
21 
22   #define LOAD_LIB(var, path) void* var = dlopen(path.c_str(), RTLD_LAZY)
23   #define LOAD_LIB_FN(type, var, name) type var = (type) dlsym(plugin, name)
24   #define CLOSE_LIB(var) dlclose(var)
25 
26 #endif
27 
28 namespace Sass {
29 
30 
31   class Plugins {
32 
33     public: // c-tor
34       Plugins(void);
35       ~Plugins(void);
36 
37     public: // methods
38       // load one specific plugin
39       bool load_plugin(const sass::string& path);
40       // load all plugins from a directory
41       size_t load_plugins(const sass::string& path);
42 
43     public: // public accessors
get_headers(void)44       const sass::vector<Sass_Importer_Entry> get_headers(void) { return headers; }
get_importers(void)45       const sass::vector<Sass_Importer_Entry> get_importers(void) { return importers; }
get_functions(void)46       const sass::vector<Sass_Function_Entry> get_functions(void) { return functions; }
47 
48     private: // private vars
49       sass::vector<Sass_Importer_Entry> headers;
50       sass::vector<Sass_Importer_Entry> importers;
51       sass::vector<Sass_Function_Entry> functions;
52 
53   };
54 
55 }
56 
57 #endif
58