@@ -72,6 +72,13 @@ type blockcodefn = extern "C" fn(*mut hoedown_buffer, *const hoedown_buffer,
72
72
type headerfn = extern "C" fn ( * mut hoedown_buffer , * const hoedown_buffer ,
73
73
libc:: c_int , * mut libc:: c_void ) ;
74
74
75
+ type linkfn = extern "C" fn ( * mut hoedown_buffer , * const hoedown_buffer ,
76
+ * const hoedown_buffer , * const hoedown_buffer ,
77
+ * mut libc:: c_void ) -> libc:: c_int ;
78
+
79
+ type normaltextfn = extern "C" fn ( * mut hoedown_buffer , * const hoedown_buffer ,
80
+ * mut libc:: c_void ) ;
81
+
75
82
#[ repr( C ) ]
76
83
struct hoedown_renderer {
77
84
opaque : * mut libc:: c_void ,
@@ -83,21 +90,18 @@ struct hoedown_renderer {
83
90
* mut libc:: c_void ) > ,
84
91
header : Option < headerfn > ,
85
92
86
- other_block_level_callbacks : [ libc:: size_t , .. 9 ] ,
93
+ other_block_level_callbacks : [ libc:: size_t ; 9 ] ,
87
94
88
95
/* span level callbacks - NULL or return 0 prints the span verbatim */
89
- other_span_level_callbacks_1 : [ libc:: size_t , ..9 ] ,
90
- link : Option < extern "C" fn ( * mut hoedown_buffer , * const hoedown_buffer ,
91
- * const hoedown_buffer , * const hoedown_buffer ,
92
- * mut libc:: c_void ) -> libc:: c_int > ,
93
- other_span_level_callbacks_2 : [ libc:: size_t , ..5 ] ,
96
+ other_span_level_callbacks_1 : [ libc:: size_t ; 9 ] ,
97
+ link : Option < linkfn > ,
98
+ other_span_level_callbacks_2 : [ libc:: size_t ; 5 ] ,
94
99
// hoedown will add `math` callback here, but we use an old version of it.
95
100
96
101
/* low level callbacks - NULL copies input directly into the output */
97
102
entity : Option < extern "C" fn ( * mut hoedown_buffer , * const hoedown_buffer ,
98
103
* mut libc:: c_void ) > ,
99
- normal_text : Option < extern "C" fn ( * mut hoedown_buffer , * const hoedown_buffer ,
100
- * mut libc:: c_void ) > ,
104
+ normal_text : Option < normaltextfn > ,
101
105
102
106
/* header and footer */
103
107
doc_header : Option < extern "C" fn ( * mut hoedown_buffer , * mut libc:: c_void ) > ,
@@ -502,14 +506,18 @@ pub fn plain_summary_line(md: &str) -> String {
502
506
let mut plain_renderer: hoedown_renderer = :: std:: mem:: zeroed ( ) ;
503
507
let renderer = & mut plain_renderer as * mut hoedown_renderer ;
504
508
( * renderer) . opaque = ob as * mut libc:: c_void ;
505
- ( * renderer) . link = Some ( link) ;
506
- ( * renderer) . normal_text = Some ( normal_text) ;
509
+ ( * renderer) . link = Some ( link as linkfn ) ;
510
+ ( * renderer) . normal_text = Some ( normal_text as normaltextfn ) ;
507
511
508
512
let document = hoedown_document_new ( renderer, HOEDOWN_EXTENSIONS , 16 ) ;
509
513
hoedown_document_render ( document, ob, md. as_ptr ( ) ,
510
514
md. len ( ) as libc:: size_t ) ;
511
515
hoedown_document_free ( document) ;
512
- let plain = String :: from_raw_buf_len ( ( * ob) . data , ( * ob) . size as uint ) ;
516
+ let plain_slice = slice:: from_raw_buf ( & ( * ob) . data , ( * ob) . size as uint ) ;
517
+ let plain = match str:: from_utf8 ( plain_slice) {
518
+ Ok ( s) => s. to_string ( ) ,
519
+ Err ( _) => "" . to_string ( ) ,
520
+ } ;
513
521
hoedown_buffer_free ( ob) ;
514
522
plain
515
523
}
0 commit comments