@@ -1028,6 +1028,36 @@ static VALUE rb_node_set_fence_info(VALUE self, VALUE info) {
10281028 return Qnil ;
10291029}
10301030
1031+ /*
1032+ * Public: Gets fencing details for the current node.
1033+ *
1034+ * Returns a {Hash} with `:info`, `:length`, `:character`, and `:offset` keys
1035+ * for fenced code blocks, `nil` otherwise.
1036+ */
1037+ static VALUE rb_node_get_fenced (VALUE self ) {
1038+ const char * fence_info ;
1039+ int fence_length = 0 ;
1040+ int fence_offset = 0 ;
1041+ char fence_character = '\0' ;
1042+ cmark_node * node ;
1043+ VALUE result ;
1044+ TypedData_Get_Struct (self , cmark_node , & rb_Markly_Node_Type , node );
1045+
1046+ if (!cmark_node_get_fenced (node , & fence_length , & fence_offset , & fence_character )) {
1047+ return Qnil ;
1048+ }
1049+
1050+ fence_info = cmark_node_get_fence_info (node );
1051+
1052+ result = rb_hash_new ();
1053+ rb_hash_aset (result , CSTR2SYM ("info" ), fence_info ? rb_str_new2 (fence_info ) : rb_str_new ("" , 0 ));
1054+ rb_hash_aset (result , CSTR2SYM ("length" ), INT2NUM (fence_length ));
1055+ rb_hash_aset (result , CSTR2SYM ("character" ), rb_str_new (& fence_character , 1 ));
1056+ rb_hash_aset (result , CSTR2SYM ("offset" ), INT2NUM (fence_offset ));
1057+
1058+ return result ;
1059+ }
1060+
10311061static VALUE rb_node_get_tasklist_item_checked (VALUE self ) {
10321062 int tasklist_state ;
10331063 cmark_node * node ;
@@ -1242,6 +1272,7 @@ __attribute__((visibility("default"))) void Init_markly(void) {
12421272 rb_define_method (rb_Markly_Node , "list_tight=" , rb_node_set_list_tight , 1 );
12431273 rb_define_method (rb_Markly_Node , "fence_info" , rb_node_get_fence_info , 0 );
12441274 rb_define_method (rb_Markly_Node , "fence_info=" , rb_node_set_fence_info , 1 );
1275+ rb_define_method (rb_Markly_Node , "fenced" , rb_node_get_fenced , 0 );
12451276 rb_define_method (rb_Markly_Node , "table_alignments" , rb_node_get_table_alignments , 0 );
12461277 rb_define_method (rb_Markly_Node , "tasklist_item_checked?" , rb_node_get_tasklist_item_checked , 0 );
12471278 rb_define_method (rb_Markly_Node , "tasklist_item_checked=" , rb_node_set_tasklist_item_checked , 1 );
0 commit comments