@@ -165,6 +165,13 @@ extern {
165
165
166
166
}
167
167
168
+ // hoedown_buffer helpers
169
+ impl hoedown_buffer {
170
+ fn as_bytes ( & self ) -> & [ u8 ] {
171
+ unsafe { slice:: from_raw_parts ( self . data , self . size as usize ) }
172
+ }
173
+ }
174
+
168
175
/// Returns Some(code) if `s` is a line that should be stripped from
169
176
/// documentation but used in example code. `code` is the portion of
170
177
/// `s` that should be used in tests. (None for lines that should be
@@ -194,15 +201,13 @@ pub fn render(w: &mut fmt::Formatter, s: &str, print_toc: bool) -> fmt::Result {
194
201
195
202
let opaque = opaque as * mut hoedown_html_renderer_state ;
196
203
let my_opaque: & MyOpaque = & * ( ( * opaque) . opaque as * const MyOpaque ) ;
197
- let text = slice:: from_raw_buf ( & ( * orig_text) . data ,
198
- ( * orig_text) . size as uint ) ;
204
+ let text = ( * orig_text) . as_bytes ( ) ;
199
205
let origtext = str:: from_utf8 ( text) . unwrap ( ) ;
200
206
debug ! ( "docblock: ==============\n {:?}\n =======" , text) ;
201
207
let rendered = if lang. is_null ( ) {
202
208
false
203
209
} else {
204
- let rlang = slice:: from_raw_buf ( & ( * lang) . data ,
205
- ( * lang) . size as uint ) ;
210
+ let rlang = ( * lang) . as_bytes ( ) ;
206
211
let rlang = str:: from_utf8 ( rlang) . unwrap ( ) ;
207
212
if !LangString :: parse ( rlang) . rust {
208
213
( my_opaque. dfltblk ) ( ob, orig_text, lang,
@@ -246,9 +251,7 @@ pub fn render(w: &mut fmt::Formatter, s: &str, print_toc: bool) -> fmt::Result {
246
251
let s = if text. is_null ( ) {
247
252
"" . to_string ( )
248
253
} else {
249
- let s = unsafe {
250
- slice:: from_raw_buf ( & ( * text) . data , ( * text) . size as uint )
251
- } ;
254
+ let s = unsafe { ( * text) . as_bytes ( ) } ;
252
255
str:: from_utf8 ( s) . unwrap ( ) . to_string ( )
253
256
} ;
254
257
@@ -321,7 +324,7 @@ pub fn render(w: &mut fmt::Formatter, s: &str, print_toc: bool) -> fmt::Result {
321
324
} ;
322
325
323
326
if ret. is_ok ( ) {
324
- let buf = slice :: from_raw_buf ( & ( * ob) . data , ( * ob ) . size as uint ) ;
327
+ let buf = ( * ob) . as_bytes ( ) ;
325
328
ret = w. write_str ( str:: from_utf8 ( buf) . unwrap ( ) ) ;
326
329
}
327
330
hoedown_buffer_free ( ob) ;
@@ -339,13 +342,12 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector) {
339
342
let block_info = if lang. is_null ( ) {
340
343
LangString :: all_false ( )
341
344
} else {
342
- let lang = slice:: from_raw_buf ( & ( * lang) . data ,
343
- ( * lang) . size as uint ) ;
345
+ let lang = ( * lang) . as_bytes ( ) ;
344
346
let s = str:: from_utf8 ( lang) . unwrap ( ) ;
345
347
LangString :: parse ( s)
346
348
} ;
347
349
if !block_info. rust { return }
348
- let text = slice :: from_raw_buf ( & ( * text) . data , ( * text ) . size as uint ) ;
350
+ let text = ( * text) . as_bytes ( ) ;
349
351
let opaque = opaque as * mut hoedown_html_renderer_state ;
350
352
let tests = & mut * ( ( * opaque) . opaque as * mut :: test:: Collector ) ;
351
353
let text = str:: from_utf8 ( text) . unwrap ( ) ;
@@ -368,7 +370,7 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector) {
368
370
if text. is_null ( ) {
369
371
tests. register_header ( "" , level as u32 ) ;
370
372
} else {
371
- let text = slice :: from_raw_buf ( & ( * text) . data , ( * text ) . size as uint ) ;
373
+ let text = ( * text) . as_bytes ( ) ;
372
374
let text = str:: from_utf8 ( text) . unwrap ( ) ;
373
375
tests. register_header ( text, level as u32 ) ;
374
376
}
@@ -508,7 +510,7 @@ pub fn plain_summary_line(md: &str) -> String {
508
510
hoedown_document_render ( document, ob, md. as_ptr ( ) ,
509
511
md. len ( ) as libc:: size_t ) ;
510
512
hoedown_document_free ( document) ;
511
- let plain_slice = slice :: from_raw_buf ( & ( * ob) . data , ( * ob ) . size as uint ) ;
513
+ let plain_slice = ( * ob) . as_bytes ( ) ;
512
514
let plain = match str:: from_utf8 ( plain_slice) {
513
515
Ok ( s) => s. to_string ( ) ,
514
516
Err ( _) => "" . to_string ( ) ,
0 commit comments