Class: MD4C::Parser

Inherits:
Object
  • Object
show all
Defined in:
ext/md4c/rb_md4c.c

Instance Method Summary collapse

Constructor Details

#initializeObject



160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'ext/md4c/rb_md4c.c', line 160

static VALUE
rbm_cParser_m_initialize (int argc, VALUE *argv, VALUE self)
{
  VALUE kwargs;
  rb_scan_args (argc, argv, ":", &kwargs);
  ID kwargs_ids[] = { PARSER_FLAGS };
  VALUE kwargs_vals[sizeof (kwargs_ids) / sizeof (kwargs_ids[0])] = { 0 };
  rb_get_kwargs (kwargs, kwargs_ids, 0,
                 sizeof (kwargs_ids) / sizeof (kwargs_ids[0]), kwargs_vals);

  struct rbm_cParser *p = RTYPEDDATA_DATA (self);
  *p = (struct rbm_cParser){ .flags = rbm_get_parser_flags (kwargs_vals) };
  return self;
}

Instance Method Details

#on_enter_blockObject



175
176
177
178
179
180
# File 'ext/md4c/rb_md4c.c', line 175

static VALUE
rbm_cParser_m_on_enter_block (VALUE self)
{
  struct rbm_cParser *p = RTYPEDDATA_DATA (self);
  return p->on_enter_block = rb_block_proc ();
}

#on_enter_spanObject



189
190
191
192
193
194
# File 'ext/md4c/rb_md4c.c', line 189

static VALUE
rbm_cParser_m_on_enter_span (VALUE self)
{
  struct rbm_cParser *p = RTYPEDDATA_DATA (self);
  return p->on_enter_span = rb_block_proc ();
}

#on_leave_blockObject



182
183
184
185
186
187
# File 'ext/md4c/rb_md4c.c', line 182

static VALUE
rbm_cParser_m_on_leave_block (VALUE self)
{
  struct rbm_cParser *p = RTYPEDDATA_DATA (self);
  return p->on_leave_block = rb_block_proc ();
}

#on_leave_spanObject



196
197
198
199
200
201
# File 'ext/md4c/rb_md4c.c', line 196

static VALUE
rbm_cParser_m_on_leave_span (VALUE self)
{
  struct rbm_cParser *p = RTYPEDDATA_DATA (self);
  return p->on_leave_span = rb_block_proc ();
}

#on_textObject



203
204
205
206
207
208
# File 'ext/md4c/rb_md4c.c', line 203

static VALUE
rbm_cParser_m_on_text (VALUE self)
{
  struct rbm_cParser *p = RTYPEDDATA_DATA (self);
  return p->on_text = rb_block_proc ();
}

#parseObject



605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
# File 'ext/md4c/rb_md4c.c', line 605

static VALUE
rbm_cParser_m_parse (VALUE self, VALUE source)
{
  char *text = rb_string_value_ptr (&source);
  long size = RSTRING_LEN (source);
  struct rbm_cParser *p = RTYPEDDATA_DATA (self);
  MD_PARSER parser = { .flags = p->flags,
                       .enter_block = rbm_callback_enter_block,
                       .leave_block = rbm_callback_leave_block,
                       .enter_span = rbm_callback_enter_span,
                       .leave_span = rbm_callback_leave_span,
                       .text = rbm_callback_text };
  int result = md_parse (text, (MD_SIZE)size, &parser, p);
  if (result == -1)
    rb_raise (rbm_eError, "runtime error, such as memory fails");
  if (result != 0)
    rb_raise (rbm_eError, "parse failed");
  return RUBY_Qnil;
}