Class: Markly::Parser

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

Instance Method Summary collapse

Constructor Details

#initialize(flags) ⇒ Object



141
142
143
144
145
146
147
148
149
150
# File 'ext/markly/markly.c', line 141

static VALUE rb_Markly_Parser_initialize(VALUE self, VALUE flags) {
	Check_Type(flags, T_FIXNUM);
	
	cmark_mem *mem = cmark_get_default_mem_allocator();
	cmark_parser *parser = cmark_parser_new_with_mem(NUM2INT(flags), mem);
	
	RTYPEDDATA_DATA(self) = parser;
	
	return self;
}

Instance Method Details

#enable(extension) ⇒ Object



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'ext/markly/markly.c', line 152

static VALUE rb_Markly_Parser_enable(VALUE self, VALUE extension) {
	cmark_parser *parser = NULL;
	
	Check_Type(extension, T_SYMBOL);
	
	VALUE extension_name = rb_sym2str(extension);
	
	TypedData_Get_Struct(self, cmark_parser, &rb_Markly_Parser_Type, parser);
	
	cmark_syntax_extension *syntax_extension =
		cmark_find_syntax_extension(StringValueCStr(extension_name));
		
	if (!syntax_extension) {
		rb_raise(rb_eArgError, "extension %s not found", StringValueCStr(extension_name));
	}
	
	cmark_parser_attach_syntax_extension(parser, syntax_extension);
	
	return Qnil;
}

#parse(text) ⇒ Object



173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'ext/markly/markly.c', line 173

static VALUE rb_Markly_Parser_parse(VALUE self, VALUE text) {
	cmark_parser *parser = NULL;
	
	StringValue(text);
	
	TypedData_Get_Struct(self, cmark_parser, &rb_Markly_Parser_Type, parser);
	
	cmark_parser_feed(parser, RSTRING_PTR(text), RSTRING_LEN(text));
	
	cmark_node *root = cmark_parser_finish(parser);
	
	return rb_Markly_Node_wrap(root);
}