parse_block • parsing of one block, returning next uint8_t to parse */
| 2410 | |
| 2411 | /* parse_block • parsing of one block, returning next uint8_t to parse */ |
| 2412 | static void |
| 2413 | parse_block(hoedown_buffer *ob, hoedown_document *doc, uint8_t *data, size_t size) |
| 2414 | { |
| 2415 | size_t beg, end, i; |
| 2416 | uint8_t *txt_data; |
| 2417 | beg = 0; |
| 2418 | |
| 2419 | if (doc->work_bufs[BUFFER_SPAN].size + |
| 2420 | doc->work_bufs[BUFFER_BLOCK].size > doc->max_nesting) |
| 2421 | return; |
| 2422 | |
| 2423 | while (beg < size) { |
| 2424 | txt_data = data + beg; |
| 2425 | end = size - beg; |
| 2426 | |
| 2427 | if (is_atxheader(doc, txt_data, end)) |
| 2428 | beg += parse_atxheader(ob, doc, txt_data, end); |
| 2429 | |
| 2430 | else if (data[beg] == '<' && doc->md.blockhtml && |
| 2431 | (i = parse_htmlblock(ob, doc, txt_data, end, 1)) != 0) |
| 2432 | beg += i; |
| 2433 | |
| 2434 | else if ((i = is_empty(txt_data, end)) != 0) |
| 2435 | beg += i; |
| 2436 | |
| 2437 | else if (is_hrule(txt_data, end)) { |
| 2438 | if (doc->md.hrule) |
| 2439 | doc->md.hrule(ob, &doc->data); |
| 2440 | |
| 2441 | while (beg < size && data[beg] != '\n') |
| 2442 | beg++; |
| 2443 | |
| 2444 | beg++; |
| 2445 | } |
| 2446 | |
| 2447 | else if ((doc->ext_flags & HOEDOWN_EXT_FENCED_CODE) != 0 && |
| 2448 | (i = parse_fencedcode(ob, doc, txt_data, end)) != 0) |
| 2449 | beg += i; |
| 2450 | |
| 2451 | else if ((doc->ext_flags & HOEDOWN_EXT_TABLES) != 0 && |
| 2452 | (i = parse_table(ob, doc, txt_data, end)) != 0) |
| 2453 | beg += i; |
| 2454 | |
| 2455 | else if (prefix_quote(txt_data, end)) |
| 2456 | beg += parse_blockquote(ob, doc, txt_data, end); |
| 2457 | |
| 2458 | else if (!(doc->ext_flags & HOEDOWN_EXT_DISABLE_INDENTED_CODE) && prefix_code(txt_data, end)) |
| 2459 | beg += parse_blockcode(ob, doc, txt_data, end); |
| 2460 | |
| 2461 | else if (prefix_uli(txt_data, end)) |
| 2462 | beg += parse_list(ob, doc, txt_data, end, 0); |
| 2463 | |
| 2464 | else if (prefix_oli(txt_data, end)) |
| 2465 | beg += parse_list(ob, doc, txt_data, end, HOEDOWN_LIST_ORDERED); |
| 2466 | |
| 2467 | else |
| 2468 | beg += parse_paragraph(ob, doc, txt_data, end); |
| 2469 | } |
no test coverage detected