1 #ifndef SASS_FN_UTILS_H 2 #define SASS_FN_UTILS_H 3 4 // sass.hpp must go before all system headers to get the 5 // __EXTENSIONS__ fix on Solaris. 6 #include "sass.hpp" 7 8 #include "units.hpp" 9 #include "backtrace.hpp" 10 #include "environment.hpp" 11 #include "ast_fwd_decl.hpp" 12 #include "error_handling.hpp" 13 14 namespace Sass { 15 16 #define FN_PROTOTYPE \ 17 Env& env, \ 18 Env& d_env, \ 19 Context& ctx, \ 20 Signature sig, \ 21 SourceSpan pstate, \ 22 Backtraces& traces, \ 23 SelectorStack selector_stack, \ 24 SelectorStack original_stack \ 25 26 typedef const char* Signature; 27 typedef PreValue* (*Native_Function)(FN_PROTOTYPE); 28 #define BUILT_IN(name) PreValue* name(FN_PROTOTYPE) 29 30 #define ARG(argname, argtype) get_arg<argtype>(argname, env, sig, pstate, traces) 31 // special function for weird hsla percent (10px == 10% == 10 != 0.1) 32 #define ARGVAL(argname) get_arg_val(argname, env, sig, pstate, traces) // double 33 34 Definition* make_native_function(Signature, Native_Function, Context& ctx); 35 Definition* make_c_function(Sass_Function_Entry c_func, Context& ctx); 36 37 namespace Functions { 38 39 template <typename T> get_arg(const sass::string & argname,Env & env,Signature sig,SourceSpan pstate,Backtraces traces)40 T* get_arg(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces) 41 { 42 T* val = Cast<T>(env[argname]); 43 if (!val) { 44 error("argument `" + argname + "` of `" + sig + "` must be a " + T::type_name(), pstate, traces); 45 } 46 return val; 47 } 48 49 Map* get_arg_m(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // maps only 50 Number* get_arg_n(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // numbers only 51 double alpha_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // colors only 52 double color_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // colors only 53 double get_arg_r(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, double lo, double hi); // colors only 54 double get_arg_val(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // shared 55 SelectorListObj get_arg_sels(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx); // selectors only 56 CompoundSelectorObj get_arg_sel(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx); // selectors only 57 58 } 59 60 } 61 62 #endif 63