Module: Makiri::Lexbor::CSS

Defined in:
ext/makiri/glue/ruby_lexbor_css.c

Class Method Summary collapse

Class Method Details

.parse_stylesheet(rb_text) ⇒ Object



413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
# File 'ext/makiri/glue/ruby_lexbor_css.c', line 413

static VALUE
mkr_lexbor_css_parse_stylesheet(VALUE self, VALUE rb_text)
{
    (void)self;
    mkr_ruby_borrowed_text_t tv = mkr_ruby_verified_text(rb_text, "CSS stylesheet");

    mkr_css_parse_state_t s = {
        .parser = NULL,
        .sst    = NULL,
        .conv   = { .css = tv.ptr, .css_len = tv.len },
    };
    mkr_buf_init(&s.conv.scratch, 0);

    s.parser = lxb_css_parser_create();
    s.sst    = lxb_css_stylesheet_create(NULL);
    if (s.parser == NULL || s.sst == NULL
        || lxb_css_parser_init(s.parser, NULL) != LXB_STATUS_OK)
    {
        mkr_css_parse_cleanup((VALUE)&s);
        rb_raise(mkr_eError, "failed to initialise CSS parser");
    }

    VALUE result = rb_ensure(mkr_css_parse_body, (VALUE)&s,
                             mkr_css_parse_cleanup, (VALUE)&s);
    RB_GC_GUARD(tv.value);
    return result;
}