1 /* scheme.c: Initializations for libRUIN's Scheme interface
2 * Copyright (C) 2011 Julian Graham
3 *
4 * libRUIN is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include <libguile.h>
19 #include <string.h>
20
21 #include "scheme.h"
22 #include "window.h"
23
24 static SCM ruin_scheme_pe = SCM_EOL;
25
26 static SCM ruin_scheme_scss_sip_p = SCM_EOL;
27 static SCM ruin_scheme_scss_cth = SCM_EOL;
28 static SCM ruin_scheme_scss_sca_x = SCM_EOL;
29 static SCM ruin_scheme_scss_ca = SCM_EOL;
30 static SCM ruin_scheme_scss_scua_x = SCM_EOL;
31 static SCM ruin_scheme_scss_sv = SCM_EOL;
32 static SCM ruin_scheme_scss_gdv = SCM_EOL;
33 static SCM ruin_scheme_scss_mc = SCM_EOL;
34 static SCM ruin_scheme_scss_cts = SCM_EOL;
35 static SCM ruin_scheme_scss_mri = SCM_EOL;
36 static SCM ruin_scheme_scss_msc = SCM_EOL;
37 static SCM ruin_scheme_scss_svip = SCM_EOL;
38 static SCM ruin_scheme_scss_svp = SCM_EOL;
39 static SCM ruin_scheme_scss_svs = SCM_EOL;
40 static SCM ruin_scheme_scss_svv = SCM_EOL;
41 static SCM ruin_scheme_scss_ss = SCM_EOL;
42
43 static SCM ruin_scheme_sdom_cd = SCM_EOL;
44 static SCM ruin_scheme_sdom_cdt = SCM_EOL;
45 static SCM ruin_scheme_sdom_ce = SCM_EOL;
46 static SCM ruin_scheme_sdom_ctn = SCM_EOL;
47 static SCM ruin_scheme_sdom_sa = SCM_EOL;
48 static SCM ruin_scheme_sdom_snn = SCM_EOL;
49 static SCM ruin_scheme_sdom_ssa = SCM_EOL;
50 static SCM ruin_scheme_sdom_sga = SCM_EOL;
51 static SCM ruin_scheme_sdom_sn = SCM_EOL;
52 static SCM ruin_scheme_sdom_sde_prop = SCM_EOL;
53 static SCM ruin_scheme_sdom_sd_p = SCM_EOL;
54 static SCM ruin_scheme_sdom_sdt = SCM_EOL;
55 static SCM ruin_scheme_sdom_sdu = SCM_EOL;
56 static SCM ruin_scheme_sdom_se_p = SCM_EOL;
57 static SCM ruin_scheme_sdom_sac = SCM_EOL;
58 static SCM ruin_scheme_sdom_sfc = SCM_EOL;
59 static SCM ruin_scheme_sdom_sns = SCM_EOL;
60 static SCM ruin_scheme_sdom_snv = SCM_EOL;
61 static SCM ruin_scheme_sdom_sod = SCM_EOL;
62 static SCM ruin_scheme_sdom_spn = SCM_EOL;
63 static SCM ruin_scheme_sdom_stc = SCM_EOL;
64 static SCM ruin_scheme_sdom_stn_p = SCM_EOL;
65 static SCM ruin_scheme_sdom_sv = SCM_EOL;
66
67 static SCM ruin_scheme_sdom_ael = SCM_EOL;
68 static SCM ruin_scheme_sdom_sde = SCM_EOL;
69 static SCM ruin_scheme_sdom_xts = SCM_EOL;
70
ruin_scheme_pre_unwind_handler(void * data,SCM key,SCM args)71 static SCM ruin_scheme_pre_unwind_handler (void *data, SCM key, SCM args) {
72 ((void **) data)[3] = scm_make_stack (SCM_BOOL_T, SCM_EOL);
73 return SCM_UNDEFINED;
74 }
75
ruin_scheme_catch_body(void * expr)76 static SCM ruin_scheme_catch_body(void *expr) {
77 SCM e = *((SCM *) expr);
78 return scm_apply (SCM_CAR (e), SCM_CDR (e), SCM_EOL);
79 }
80
ruin_scheme_catch_handler(void * data,SCM key,SCM args)81 static SCM ruin_scheme_catch_handler(void *data, SCM key, SCM args) {
82 ruin_window_t *w = (ruin_window_t *) ((void **) data)[0];
83 SCM stack = (SCM) ((void **) data)[3];
84 SCM frame = SCM_BOOL_F;
85 SCM port = scm_open_output_string ();
86 char *port_str = NULL;
87
88 if (scm_stack_p (stack) == SCM_BOOL_T)
89 frame = scm_stack_ref (stack, scm_from_uint (0));
90
91 *((int *) ((void **) data)[1]) = FALSE;
92
93 scm_display(scm_from_locale_string ("error calling "), port);
94 scm_display(scm_from_locale_string ((char *) ((void **) data)[2]), port);
95 scm_display(scm_from_locale_string (": "), port);
96
97 scm_call_4 (ruin_scheme_pe, port, frame, key, args);
98
99 if (frame != SCM_BOOL_F)
100 scm_display_backtrace (stack, port, SCM_BOOL_F, SCM_BOOL_F);
101
102 port_str = scm_to_locale_string (scm_get_output_string (port));
103 ruin_util_log (w, port_str);
104 free (port_str);
105
106 return SCM_UNDEFINED;
107 }
108
ruin_scheme_wrap(ruin_window_t * w,char * fn,SCM expr,SCM * result)109 int ruin_scheme_wrap(ruin_window_t *w, char *fn, SCM expr, SCM *result) {
110 int success = TRUE;
111 SCM res = SCM_EOL;
112
113 void *handler_data[4];
114 handler_data[0] = w;
115 handler_data[1] = &success;
116 handler_data[2] = fn;
117 handler_data[3] = NULL;
118
119 res = scm_c_catch(SCM_BOOL_T,
120 ruin_scheme_catch_body, &expr,
121 ruin_scheme_catch_handler, handler_data,
122 ruin_scheme_pre_unwind_handler, handler_data);
123 if (success && result != NULL)
124 *result = res;
125 return success;
126 }
127
call_scm_function(ruin_window_t * w,SCM fn,char * fn_name,SCM arg)128 SCM call_scm_function (ruin_window_t *w, SCM fn, char *fn_name, SCM arg)
129 {
130 SCM r = SCM_EOL;
131 ruin_scheme_wrap (w, fn_name, scm_cons (fn, arg), &r);
132 return r;
133 }
134
call_boolean_function(ruin_window_t * w,SCM fn,char * fn_name,SCM arg)135 int call_boolean_function (ruin_window_t *w, SCM fn, char *fn_name, SCM arg)
136 {
137 SCM r = SCM_EOL;
138 ruin_scheme_wrap (w, fn_name, scm_cons (fn, arg), &r);
139 return r == SCM_BOOL_T ? 1 : 0;
140 }
141
call_char_function(ruin_window_t * w,SCM fn,char * fn_name,SCM arg)142 char *call_char_function (ruin_window_t *w, SCM fn, char *fn_name, SCM arg)
143 {
144 SCM r = SCM_EOL;
145 ruin_scheme_wrap (w, fn_name, scm_cons (fn, arg), &r);
146 return scm_string_p (r) == SCM_BOOL_T ? scm_to_locale_string (r) : NULL;
147 }
148
ruin_scheme_scss_color_to_hex(ruin_window_t * w,char * c)149 SCM ruin_scheme_scss_color_to_hex(ruin_window_t *w, char *c) {
150 SCM r = scm_from_locale_string ("#000000");
151 SCM sc = scm_from_locale_string (c);
152 (void) ruin_scheme_wrap
153 (w, "scss:color->hex", scm_list_2 (ruin_scheme_scss_cth, sc), &r);
154 return r;
155 }
156
ruin_scheme_scss_set_cascade_author(ruin_window_t * w,SCM c,SCM s)157 void ruin_scheme_scss_set_cascade_author (ruin_window_t *w, SCM c, SCM s) {
158 ruin_scheme_wrap(w, "scss:set-cascade-author!",
159 scm_list_3 (ruin_scheme_scss_sca_x, c, s), NULL);
160 }
161
ruin_scheme_scss_cascade_author(ruin_window_t * w,SCM c)162 SCM ruin_scheme_scss_cascade_author (ruin_window_t *w, SCM c)
163 {
164 return call_scm_function
165 (w, ruin_scheme_scss_ca, "sdom:cascade-author", scm_list_1 (c));
166 }
167
ruin_scheme_scss_set_cascade_agent(ruin_window_t * w,SCM c,SCM s)168 void ruin_scheme_scss_set_cascade_agent (ruin_window_t *w, SCM c, SCM s) {
169 ruin_scheme_wrap(w, "scss:set-cascade-agent!",
170 scm_list_3 (ruin_scheme_scss_scua_x, c, s), NULL);
171 }
172
ruin_scheme_scss_is_inherited(ruin_window_t * w,char * prop)173 int ruin_scheme_scss_is_inherited(ruin_window_t *w, char *prop) {
174 SCM r = SCM_BOOL_F;
175 SCM sp = scm_from_locale_symbol (prop);
176 (void) ruin_scheme_wrap
177 (w, "scss:inherited?", scm_list_2 (ruin_scheme_scss_sip_p, sp), &r);
178 return r == SCM_BOOL_T ? 1 : 0;
179 }
180
ruin_scheme_scss_get_default_value(ruin_window_t * w,char * p)181 char *ruin_scheme_scss_get_default_value(ruin_window_t *w, char *p) {
182 return call_char_function
183 (w, ruin_scheme_scss_gdv, "sdom:get-default-value",
184 scm_list_1 (scm_from_locale_symbol (p)));
185 }
186
ruin_scheme_scss_make_rendering_interface(ruin_window_t * w,SCM pch,SCM peh)187 SCM ruin_scheme_scss_make_rendering_interface
188 (ruin_window_t *w, SCM pch, SCM peh)
189 {
190 return call_scm_function
191 (w, ruin_scheme_scss_mri, "scss:make-rendering-interface",
192 scm_list_2 (pch, peh));
193 }
194
ruin_scheme_scss_make_cascade(ruin_window_t * w)195 SCM ruin_scheme_scss_make_cascade(ruin_window_t *w) {
196 return call_scm_function
197 (w, ruin_scheme_scss_mc, "scss:make-cascade",
198 scm_list_3 (SCM_BOOL_F, SCM_BOOL_F, SCM_BOOL_F));
199 }
200
ruin_scheme_scss_css_to_scss(ruin_window_t * w,char * c,char * d)201 SCM ruin_scheme_scss_css_to_scss(ruin_window_t *w, char *c, char *d) {
202 return ruin_scheme_scss_css_to_scss_port
203 (w, scm_open_input_string (scm_from_locale_string(c)), d);
204 }
205
ruin_scheme_scss_css_to_scss_port(ruin_window_t * w,SCM p,char * d)206 SCM ruin_scheme_scss_css_to_scss_port(ruin_window_t *w, SCM p, char *d) {
207 SCM ret = SCM_EOL;
208 long start = ruin_util_current_time_millis(), end = 0;
209
210 if (d != NULL)
211 (void) ruin_scheme_wrap
212 (w, "scss:css->scss", scm_list_3
213 (ruin_scheme_scss_cts, p, scm_from_locale_string (d)), &ret);
214 else (void) ruin_scheme_wrap
215 (w, "scss:css->scss", scm_list_2 (ruin_scheme_scss_cts, p), &ret);
216
217 end = ruin_util_current_time_millis();
218 ruin_util_log(w, "parsing stylesheet took %d ms", end - start);
219
220 scm_gc_protect_object(ret);
221 return ret;
222 }
223
ruin_scheme_scss_make_selection_context(ruin_window_t * w,SCM document_interface,SCM rendering_interface,SCM cascade)224 SCM ruin_scheme_scss_make_selection_context
225 (ruin_window_t *w, SCM document_interface, SCM rendering_interface, SCM cascade)
226 {
227 return call_scm_function
228 (w, ruin_scheme_scss_msc, "scss:make-selection-context",
229 scm_list_3 (document_interface, rendering_interface, cascade));
230 }
231
ruin_scheme_scss_selected_value_important_p(ruin_window_t * w,SCM selected_value)232 int ruin_scheme_scss_selected_value_important_p
233 (ruin_window_t *w, SCM selected_value)
234 {
235 return call_boolean_function
236 (w, ruin_scheme_scss_svip, "scss:selected-value-important?",
237 scm_list_1 (selected_value));
238 }
239
ruin_scheme_scss_selected_value_property(ruin_window_t * w,SCM selected_value)240 char *ruin_scheme_scss_selected_value_property
241 (ruin_window_t *w, SCM selected_value)
242 {
243 SCM property_symbol = call_scm_function
244 (w, ruin_scheme_scss_svp, "scss:selected-value-property",
245 scm_list_1 (selected_value));
246 return scm_to_locale_string (scm_symbol_to_string (property_symbol));
247 }
248
ruin_scheme_scss_selected_value_source(ruin_window_t * w,SCM selected_value)249 char *ruin_scheme_scss_selected_value_source
250 (ruin_window_t *w, SCM selected_value)
251 {
252 SCM source_symbol = call_scm_function
253 (w, ruin_scheme_scss_svs, "scss:selected-value-source",
254 scm_list_1 (selected_value));
255 return scm_to_locale_string (scm_symbol_to_string (source_symbol));
256 }
257
ruin_scheme_scss_selected_value_value(ruin_window_t * w,SCM selected_value)258 char *ruin_scheme_scss_selected_value_value
259 (ruin_window_t *w, SCM selected_value)
260 {
261 return call_char_function
262 (w, ruin_scheme_scss_svv, "scss:selected-value-value",
263 scm_list_1 (selected_value));
264 }
265
ruin_scheme_scss_select_values(ruin_window_t * w,SCM selection_context,SCM node)266 SCM ruin_scheme_scss_select_values
267 (ruin_window_t *w, SCM selection_context, SCM node)
268 {
269 return call_scm_function
270 (w, ruin_scheme_scss_sv, "scss:select-values",
271 scm_list_2 (selection_context, node));
272 }
273
ruin_scheme_scss_specify(ruin_window_t * w,char * prop,char * value)274 char *ruin_scheme_scss_specify (ruin_window_t *w, char *prop, char *value)
275 {
276 return call_char_function
277 (w, ruin_scheme_scss_ss, "scss:specify",
278 scm_list_2 (scm_from_locale_symbol (prop),
279 scm_from_locale_string (value)));
280 }
281
ruin_scheme_sdom_create_document(ruin_window_t * w,char * r,SCM d)282 SCM ruin_scheme_sdom_create_document (ruin_window_t *w, char *r, SCM d)
283 {
284 return call_scm_function
285 (w, ruin_scheme_sdom_cd, "sdom:create-document",
286 scm_list_2 (scm_from_locale_string (r), d));
287 }
288
ruin_scheme_sdom_create_document_type(ruin_window_t * w,char * r)289 SCM ruin_scheme_sdom_create_document_type (ruin_window_t *w, char *r)
290 {
291 return call_scm_function
292 (w, ruin_scheme_sdom_cdt, "sdom:create-document-type",
293 scm_list_1 (scm_from_locale_string (r)));
294 }
295
ruin_scheme_sdom_create_element(ruin_window_t * w,SCM d,char * e)296 SCM ruin_scheme_sdom_create_element (ruin_window_t *w, SCM d, char *e)
297 {
298 return call_scm_function
299 (w, ruin_scheme_sdom_ce, "sdom:create-element",
300 scm_list_2 (d, scm_from_locale_string (e)));
301 }
302
ruin_scheme_sdom_create_text_node(ruin_window_t * w,SCM d,char * c)303 SCM ruin_scheme_sdom_create_text_node (ruin_window_t *w, SCM d, char *c)
304 {
305 return call_scm_function
306 (w, ruin_scheme_sdom_ctn, "sdom:create-text-node",
307 scm_list_2 (d, scm_from_locale_string (c)));
308 }
309
ruin_scheme_sdom_attributes(ruin_window_t * w,SCM e)310 SCM ruin_scheme_sdom_attributes (ruin_window_t *w, SCM e)
311 {
312 return call_scm_function
313 (w, ruin_scheme_sdom_sa, "sdom:attributes", scm_list_1 (e));
314 }
315
ruin_scheme_sdom_doctype(ruin_window_t * w,SCM doc)316 SCM ruin_scheme_sdom_doctype (ruin_window_t *w, SCM doc)
317 {
318 return call_scm_function
319 (w, ruin_scheme_sdom_sdt, "sdom:doctype", scm_list_1 (doc));
320 }
321
ruin_scheme_sdom_document_element(ruin_window_t * w,SCM doc)322 SCM ruin_scheme_sdom_document_element (ruin_window_t *w, SCM doc)
323 {
324 return call_scm_function
325 (w, ruin_scheme_sdom_sde_prop, "sdom:document-element", scm_list_1 (doc));
326 }
327
ruin_scheme_sdom_owner_document(ruin_window_t * w,SCM e)328 SCM ruin_scheme_sdom_owner_document (ruin_window_t *w, SCM e)
329 {
330 return call_scm_function
331 (w, ruin_scheme_sdom_sod, "sdom:owner-document", scm_list_1 (e));
332 }
333
ruin_scheme_sdom_parent_node(ruin_window_t * w,SCM e)334 SCM ruin_scheme_sdom_parent_node (ruin_window_t *w, SCM e)
335 {
336 return call_scm_function
337 (w, ruin_scheme_sdom_spn, "sdom:parent-node", scm_list_1 (e));
338 }
339
ruin_scheme_sdom_append_child(ruin_window_t * w,SCM n,SCM c)340 void ruin_scheme_sdom_append_child (ruin_window_t *w, SCM n, SCM c)
341 {
342 call_scm_function
343 (w, ruin_scheme_sdom_sac, "sdom:append-child!", scm_list_2 (n, c));
344 }
345
ruin_scheme_sdom_first_child(ruin_window_t * w,SCM e)346 SCM ruin_scheme_sdom_first_child (ruin_window_t *w, SCM e)
347 {
348 return call_scm_function
349 (w, ruin_scheme_sdom_sfc, "sdom:first-child", scm_list_1 (e));
350 }
351
ruin_scheme_sdom_next_sibling(ruin_window_t * w,SCM e)352 SCM ruin_scheme_sdom_next_sibling (ruin_window_t *w, SCM e)
353 {
354 return call_scm_function
355 (w, ruin_scheme_sdom_sns, "sdom:next-sibling", scm_list_1 (e));
356 }
357
ruin_scheme_sdom_document_p(ruin_window_t * w,SCM e)358 int ruin_scheme_sdom_document_p (ruin_window_t *w, SCM e)
359 {
360 return call_boolean_function
361 (w, ruin_scheme_sdom_sd_p, "sdom:document?", scm_list_1 (e));
362 }
363
ruin_scheme_sdom_element_p(ruin_window_t * w,SCM e)364 int ruin_scheme_sdom_element_p (ruin_window_t *w, SCM e)
365 {
366 return call_boolean_function
367 (w, ruin_scheme_sdom_se_p, "sdom:element?", scm_list_1 (e));
368 }
369
ruin_scheme_sdom_text_node_p(ruin_window_t * w,SCM e)370 int ruin_scheme_sdom_text_node_p (ruin_window_t *w, SCM e)
371 {
372 return call_boolean_function
373 (w, ruin_scheme_sdom_stn_p, "sdom:text-node?", scm_list_1 (e));
374 }
375
ruin_scheme_sdom_document_uri(ruin_window_t * w,SCM d)376 char *ruin_scheme_sdom_document_uri (ruin_window_t *w, SCM d)
377 {
378 return call_char_function
379 (w, ruin_scheme_sdom_sdu, "sdom:document-uri", scm_list_1 (d));
380 }
381
ruin_scheme_sdom_name(ruin_window_t * w,SCM n)382 char *ruin_scheme_sdom_name (ruin_window_t *w, SCM n)
383 {
384 return call_char_function
385 (w, ruin_scheme_sdom_sn, "sdom:name", scm_list_1 (n));
386 }
387
ruin_scheme_sdom_node_name(ruin_window_t * w,SCM n)388 char *ruin_scheme_sdom_node_name (ruin_window_t *w, SCM n)
389 {
390 return call_char_function
391 (w, ruin_scheme_sdom_snn, "sdom:node-name", scm_list_1 (n));
392 }
393
ruin_scheme_sdom_node_value(ruin_window_t * w,SCM n)394 char *ruin_scheme_sdom_node_value (ruin_window_t *w, SCM n)
395 {
396 return call_char_function
397 (w, ruin_scheme_sdom_snv, "sdom:node-value", scm_list_1 (n));
398 }
399
ruin_scheme_sdom_text_content(ruin_window_t * w,SCM e)400 char *ruin_scheme_sdom_text_content (ruin_window_t *w, SCM e)
401 {
402 return call_char_function
403 (w, ruin_scheme_sdom_stc, "sdom:text-content", scm_list_1 (e));
404 }
405
ruin_scheme_sdom_value(ruin_window_t * w,SCM n)406 char *ruin_scheme_sdom_value (ruin_window_t *w, SCM n)
407 {
408 return call_char_function
409 (w, ruin_scheme_sdom_sv, "sdom:value", scm_list_1 (n));
410 }
411
ruin_scheme_sdom_set_attribute(ruin_window_t * w,SCM n,char * attr,char * val)412 void ruin_scheme_sdom_set_attribute
413 (ruin_window_t *w, SCM n, char *attr, char *val)
414 {
415 call_scm_function
416 (w, ruin_scheme_sdom_ssa, "sdom:set-attribute!",
417 scm_list_3 (n, scm_from_locale_string (attr),
418 scm_from_locale_string (val)));
419 }
420
ruin_scheme_sdom_get_attribute(ruin_window_t * w,SCM n,char * attr)421 char *ruin_scheme_sdom_get_attribute(ruin_window_t *w, SCM n, char *attr) {
422 SCM sprop = scm_from_locale_string (attr);
423 SCM r = SCM_EOL;
424
425 (void) ruin_scheme_wrap
426 (w, "sdom:get-attribute", scm_list_3 (ruin_scheme_sdom_sga, n, sprop), &r);
427
428 if (scm_string_p(r) != SCM_BOOL_T)
429 return NULL;
430 return scm_to_locale_string(r);
431 }
432
ruin_scheme_sdom_dispatch_event(ruin_window_t * w,SCM n,char * event)433 void ruin_scheme_sdom_dispatch_event(ruin_window_t *w, SCM n, char *event) {
434 SCM sevent = scm_from_locale_string(event);
435 ruin_scheme_wrap(w, "sdom:dispatch-event",
436 scm_list_3(ruin_scheme_sdom_sde, n, sevent), NULL);
437 }
438
ruin_scheme_sdom_add_event_listener(ruin_window_t * w,SCM n,char * event,char * group,char * handler)439 void ruin_scheme_sdom_add_event_listener(ruin_window_t *w, SCM n, char *event,
440 char *group, char *handler) {
441 SCM sevent = scm_from_locale_string (event);
442 SCM sgroup = scm_from_locale_string (group);
443 SCM handler_proc = scm_c_eval_string(handler);
444
445 ruin_scheme_wrap(w, "sdom:add-event-listener",
446 scm_list_n(ruin_scheme_sdom_ael, n, sevent,
447 sgroup, handler_proc, SCM_BOOL_F, SCM_UNDEFINED),
448 NULL);
449 }
450
ruin_scheme_sdom_xml_to_sdom(ruin_window_t * w,SCM p,SCM ns)451 SCM ruin_scheme_sdom_xml_to_sdom(ruin_window_t *w, SCM p, SCM ns) {
452 SCM r = SCM_EOL;
453 (void) ruin_scheme_wrap
454 (w, "sdom:xml->sdom", scm_list_3 (ruin_scheme_sdom_xts, p, ns), &r);
455 scm_gc_protect_object(r);
456 return r;
457 }
458
459 #define PROTECTED_BINDING(var, expr) \
460 var = scm_c_eval_string (expr); \
461 scm_gc_protect_object (var);
462
ruin_scheme_init()463 void ruin_scheme_init() {
464 PROTECTED_BINDING (ruin_scheme_pe, "print-exception");
465
466 PROTECTED_BINDING (ruin_scheme_scss_document_interface_sdom,
467 "scss:document-interface-sdom");
468
469 PROTECTED_BINDING (ruin_scheme_scss_sip_p, "scss:inherited?");
470 PROTECTED_BINDING (ruin_scheme_scss_cth, "scss:color->hex");
471 PROTECTED_BINDING (ruin_scheme_scss_sca_x, "scss:set-cascade-author!");
472 PROTECTED_BINDING (ruin_scheme_scss_ca, "scss:cascade-author");
473 PROTECTED_BINDING (ruin_scheme_scss_scua_x, "scss:set-cascade-agent!");
474 PROTECTED_BINDING (ruin_scheme_scss_gdv, "scss:get-default-value");
475 PROTECTED_BINDING (ruin_scheme_scss_mc, "scss:make-cascade");
476 PROTECTED_BINDING (ruin_scheme_scss_cts, "scss:css->scss");
477 PROTECTED_BINDING (ruin_scheme_scss_mri, "scss:make-rendering-interface");
478 PROTECTED_BINDING (ruin_scheme_scss_msc, "scss:make-selection-context");
479 PROTECTED_BINDING (ruin_scheme_scss_svip, "scss:selected-value-important?");
480 PROTECTED_BINDING (ruin_scheme_scss_svp, "scss:selected-value-property");
481 PROTECTED_BINDING (ruin_scheme_scss_svs, "scss:selected-value-source");
482 PROTECTED_BINDING (ruin_scheme_scss_svv, "scss:selected-value-value");
483 PROTECTED_BINDING (ruin_scheme_scss_sv, "scss:select-values");
484 PROTECTED_BINDING (ruin_scheme_scss_ss, "scss:specify");
485
486 PROTECTED_BINDING (ruin_scheme_sdom_cd, "sdom:create-document");
487 PROTECTED_BINDING (ruin_scheme_sdom_cdt, "sdom:create-document-type");
488 PROTECTED_BINDING (ruin_scheme_sdom_ce, "sdom:create-element");
489 PROTECTED_BINDING (ruin_scheme_sdom_ctn, "sdom:create-text-node");
490 PROTECTED_BINDING (ruin_scheme_sdom_sa, "sdom:attributes");
491 PROTECTED_BINDING (ruin_scheme_sdom_snn, "sdom:node-name");
492 PROTECTED_BINDING (ruin_scheme_sdom_sn, "sdom:name");
493 PROTECTED_BINDING (ruin_scheme_sdom_sde_prop, "sdom:document-element");
494 PROTECTED_BINDING (ruin_scheme_sdom_sdt, "sdom:doctype");
495 PROTECTED_BINDING (ruin_scheme_sdom_sdu, "sdom:document-uri");
496 PROTECTED_BINDING (ruin_scheme_sdom_sd_p, "sdom:document?");
497 PROTECTED_BINDING (ruin_scheme_sdom_se_p, "sdom:element?");
498 PROTECTED_BINDING (ruin_scheme_sdom_sac, "sdom:append-child!");
499 PROTECTED_BINDING (ruin_scheme_sdom_sfc, "sdom:first-child");
500 PROTECTED_BINDING (ruin_scheme_sdom_sns, "sdom:next-sibling");
501 PROTECTED_BINDING (ruin_scheme_sdom_snv, "sdom:node-value");
502 PROTECTED_BINDING (ruin_scheme_sdom_stc, "sdom:text-content");
503 PROTECTED_BINDING (ruin_scheme_sdom_stn_p, "sdom:text-node?");
504 PROTECTED_BINDING (ruin_scheme_sdom_sv, "sdom:value");
505 PROTECTED_BINDING (ruin_scheme_sdom_ssa, "sdom:set-attribute!");
506 PROTECTED_BINDING (ruin_scheme_sdom_sga, "sdom:get-attribute");
507 PROTECTED_BINDING (ruin_scheme_sdom_ael, "sdom:add-event-listener!");
508 PROTECTED_BINDING (ruin_scheme_sdom_sde, "sdom:dispatch-event");
509 PROTECTED_BINDING (ruin_scheme_sdom_xts, "sdom:xml->sdom");
510 PROTECTED_BINDING (ruin_scheme_sdom_sod, "sdom:owner-document");
511 PROTECTED_BINDING (ruin_scheme_sdom_spn, "sdom:parent-node");
512 }
513