File: native_functions_api.rb

package info (click to toggle)
ruby-sassc 2.4.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 368 kB
  • sloc: ruby: 2,277; makefile: 3
file content (159 lines) | stat: -rw-r--r-- 9,510 bytes parent folder | download | duplicates (3)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# frozen_string_literal: true

module SassC
  module Native
    # Creators for sass function list and function descriptors
    # ADDAPI Sass_C_Function_List ADDCALL sass_make_function_list (size_t length);
    # ADDAPI Sass_C_Function_Callback ADDCALL sass_make_function (const char* signature, Sass_C_Function fn, void* cookie);
    attach_function :sass_make_function_list, [:size_t], :sass_c_function_list_ptr
    attach_function :sass_make_function, [:string, :sass_c_function, :pointer], :sass_c_function_callback_ptr

    # Setters and getters for callbacks on function lists
    # ADDAPI Sass_C_Function_Callback ADDCALL sass_function_get_list_entry(Sass_C_Function_List list, size_t pos);
    # ADDAPI void ADDCALL sass_function_set_list_entry(Sass_C_Function_List list, size_t pos, Sass_C_Function_Callback cb);
    attach_function :sass_function_get_list_entry, [:sass_c_function_list_ptr, :size_t], :sass_c_function_callback_ptr
    attach_function :sass_function_set_list_entry, [:sass_c_function_list_ptr, :size_t, :sass_c_function_callback_ptr], :void

    # ADDAPI union Sass_Value* ADDCALL sass_make_number  (double val, const char* unit);
    attach_function :sass_make_number, [:double, :string], :sass_value_ptr

    # ADDAPI union Sass_Value* ADDCALL sass_make_string  (const char* val);
    attach_function :sass_make_string, [:string], :sass_value_ptr

    # ADDAPI union Sass_Value* ADDCALL sass_make_qstring (const char* val);
    attach_function :sass_make_qstring, [:string], :sass_value_ptr

    # ADDAPI union Sass_Value* ADDCALL sass_make_color   (double r, double g, double b, double a);
    attach_function :sass_make_color, [:double, :double, :double, :double], :sass_value_ptr

    # ADDAPI union Sass_Value* ADDCALL sass_make_map     (size_t len);
    attach_function :sass_make_map, [:size_t], :sass_value_ptr

    # ADDAPI union Sass_Value* ADDCALL sass_make_list     (size_t len, enum Sass_Separator sep)
    attach_function :sass_make_list, [:size_t, SassSeparator], :sass_value_ptr

    # ADDAPI union Sass_Value* ADDCALL sass_make_boolean (boolean val);
    attach_function :sass_make_boolean, [:bool], :sass_value_ptr

    # ADDAPI void ADDCALL sass_map_set_key (union Sass_Value* v, size_t i, union Sass_Value*);
    attach_function :sass_map_set_key, [:sass_value_ptr, :size_t, :sass_value_ptr], :void

    # ADDAPI union Sass_Value* ADDCALL sass_map_get_key (const union Sass_Value* v, size_t i);
    attach_function :sass_map_get_key, [:sass_value_ptr, :size_t], :sass_value_ptr

    # ADDAPI void ADDCALL sass_map_set_value (union Sass_Value* v, size_t i, union Sass_Value*);
    attach_function :sass_map_set_value, [:sass_value_ptr, :size_t, :sass_value_ptr], :void

    # ADDAPI union Sass_Value* ADDCALL sass_map_get_value (const union Sass_Value* v, size_t i);
    attach_function :sass_map_get_value, [:sass_value_ptr, :size_t], :sass_value_ptr

    # ADDAPI size_t ADDCALL sass_map_get_length (const union Sass_Value* v);
    attach_function :sass_map_get_length, [:sass_value_ptr], :size_t

    # ADDAPI union Sass_Value* ADDCALL sass_list_get_value (const union Sass_Value* v, size_t i);
    attach_function :sass_list_get_value, [:sass_value_ptr, :size_t], :sass_value_ptr

    # ADDAPI void ADDCALL sass_list_set_value (union Sass_Value* v, size_t i, union Sass_Value* value);
    attach_function :sass_list_set_value, [:sass_value_ptr, :size_t, :sass_value_ptr], :void

    # ADDAPI size_t ADDCALL sass_list_get_length (const union Sass_Value* v);
    attach_function :sass_list_get_length, [:sass_value_ptr], :size_t

    # ADDAPI union Sass_Value* ADDCALL sass_make_error   (const char* msg);
    attach_function :sass_make_error, [:string], :sass_value_ptr

    # ADDAPI enum Sass_Tag ADDCALL sass_value_get_tag (const union Sass_Value* v);
    attach_function :sass_value_get_tag, [:sass_value_ptr], SassTag
    attach_function :sass_value_is_null, [:sass_value_ptr], :bool

    # ADDAPI const char* ADDCALL sass_string_get_value (const union Sass_Value* v);
    attach_function :sass_string_get_value, [:sass_value_ptr], :string

    # ADDAPI bool ADDCALL sass_string_is_quoted(const union Sass_Value* v);
    attach_function :sass_string_is_quoted, [:sass_value_ptr], :bool

    # ADDAPI const char* ADDCALL sass_number_get_value (const union Sass_Value* v);
    attach_function :sass_number_get_value, [:sass_value_ptr], :double

    # ADDAPI const char* ADDCALL sass_number_get_unit (const union Sass_Value* v);
    attach_function :sass_number_get_unit, [:sass_value_ptr], :string
    
    # ADDAPI const char* ADDCALL sass_boolean_get_value (const union Sass_Value* v);
    attach_function :sass_boolean_get_value, [:sass_value_ptr], :bool

    def self.string_get_type(native_value)
      string_is_quoted(native_value) ? :string : :identifier
    end

    # ADDAPI double ADDCALL sass_color_get_r (const union Sass_Value* v);
    # ADDAPI void ADDCALL sass_color_set_r (union Sass_Value* v, double r);
    # ADDAPI double ADDCALL sass_color_get_g (const union Sass_Value* v);
    # ADDAPI void ADDCALL sass_color_set_g (union Sass_Value* v, double g);
    # ADDAPI double ADDCALL sass_color_get_b (const union Sass_Value* v);
    # ADDAPI void ADDCALL sass_color_set_b (union Sass_Value* v, double b);
    # ADDAPI double ADDCALL sass_color_get_a (const union Sass_Value* v);
    # ADDAPI void ADDCALL sass_color_set_a (union Sass_Value* v, double a);
    ['r', 'g', 'b', 'a'].each do |color_channel|
      attach_function "sass_color_get_#{color_channel}".to_sym, [:sass_value_ptr], :double
      attach_function "sass_color_set_#{color_channel}".to_sym, [:sass_value_ptr, :double], :void
    end

    # ADDAPI char* ADDCALL sass_error_get_message (const union Sass_Value* v);
    # ADDAPI void ADDCALL sass_error_set_message (union Sass_Value* v, char* msg);
    attach_function :sass_error_get_message, [:sass_value_ptr], :string
    attach_function :sass_error_set_message, [:sass_value_ptr, :pointer], :void

    # Getters for custom function descriptors
    # ADDAPI const char* ADDCALL sass_function_get_signature (Sass_C_Function_Callback fn);
    # ADDAPI Sass_C_Function ADDCALL sass_function_get_function (Sass_C_Function_Callback fn);
    # ADDAPI void* ADDCALL sass_function_get_cookie (Sass_C_Function_Callback fn);
    attach_function :sass_function_get_signature, [:sass_c_function_callback_ptr], :string
    attach_function :sass_function_get_function, [:sass_c_function_callback_ptr], :sass_c_function
    attach_function :sass_function_get_cookie, [:sass_c_function_callback_ptr], :pointer

    # Creators for custom importer callback (with some additional pointer)
    # The pointer is mostly used to store the callback into the actual binding
    # ADDAPI Sass_C_Import_Callback ADDCALL sass_make_importer (Sass_C_Import_Fn, void* cookie);
    attach_function :sass_make_importer, [:sass_c_import_function, :pointer], :sass_importer

    # Getters for import function descriptors
    # ADDAPI Sass_C_Import_Fn ADDCALL sass_import_get_function (Sass_C_Import_Callback fn);
    # ADDAPI void* ADDCALL sass_import_get_cookie (Sass_C_Import_Callback fn);

    # Deallocator for associated memory
    # ADDAPI void ADDCALL sass_delete_importer (Sass_C_Import_Callback fn);

    # Creator for sass custom importer return argument list
    # ADDAPI struct Sass_Import** ADDCALL sass_make_import_list (size_t length);
    attach_function :sass_make_import_list, [:size_t], :sass_import_list_ptr

    # Creator for a single import entry returned by the custom importer inside the list
    # ADDAPI struct Sass_Import* ADDCALL sass_make_import_entry (const char* path, char* source, char* srcmap);
    # ADDAPI struct Sass_Import* ADDCALL sass_make_import (const char* path, const char* base, char* source, char* srcmap);
    attach_function :sass_make_import_entry, [:string, :pointer, :pointer], :sass_import_ptr

    # Setters to insert an entry into the import list (you may also use [] access directly)
    # Since we are dealing with pointers they should have a guaranteed and fixed size
    # ADDAPI void ADDCALL sass_import_set_list_entry (struct Sass_Import** list, size_t idx, struct Sass_Import* entry);
    attach_function :sass_import_set_list_entry, [:sass_import_list_ptr, :size_t, :sass_import_ptr], :void
    # ADDAPI struct Sass_Import* ADDCALL sass_import_get_list_entry (struct Sass_Import** list, size_t idx);

    # Getters for import entry
    # ADDAPI const char* ADDCALL sass_import_get_imp_path (struct Sass_Import*);
    attach_function :sass_import_get_imp_path, [:sass_import_ptr], :string
    # ADDAPI const char* ADDCALL sass_import_get_abs_path (struct Sass_Import*);
    attach_function :sass_import_get_abs_path, [:sass_import_ptr], :string
    # ADDAPI const char* ADDCALL sass_import_get_source (struct Sass_Import*);
    attach_function :sass_import_get_source, [:sass_import_ptr], :string
    # ADDAPI const char* ADDCALL sass_import_get_srcmap (struct Sass_Import*);
    # Explicit functions to take ownership of these items
    # The property on our struct will be reset to NULL
    # ADDAPI char* ADDCALL sass_import_take_source (struct Sass_Import*);
    # ADDAPI char* ADDCALL sass_import_take_srcmap (struct Sass_Import*);

    # Deallocator for associated memory (incl. entries)
    # ADDAPI void ADDCALL sass_delete_import_list (struct Sass_Import**);
    # Just in case we have some stray import structs
    # ADDAPI void ADDCALL sass_delete_import (struct Sass_Import*);
  end
end