parse_emph1 • parsing single emphase */ closed by a symbol not preceded by spacing and not followed by symbol */
| 602 | /* parse_emph1 • parsing single emphase */ |
| 603 | /* closed by a symbol not preceded by spacing and not followed by symbol */ |
| 604 | static size_t |
| 605 | parse_emph1(hoedown_buffer *ob, hoedown_document *doc, uint8_t *data, size_t size, uint8_t c) |
| 606 | { |
| 607 | size_t i = 0, len; |
| 608 | hoedown_buffer *work = 0; |
| 609 | int r; |
| 610 | |
| 611 | /* skipping one symbol if coming from emph3 */ |
| 612 | if (size > 1 && data[0] == c && data[1] == c) i = 1; |
| 613 | |
| 614 | while (i < size) { |
| 615 | len = find_emph_char(data + i, size - i, c); |
| 616 | if (!len) return 0; |
| 617 | i += len; |
| 618 | if (i >= size) return 0; |
| 619 | |
| 620 | if (data[i] == c && !_isspace(data[i - 1])) { |
| 621 | |
| 622 | if (doc->ext_flags & HOEDOWN_EXT_NO_INTRA_EMPHASIS) { |
| 623 | if (i + 1 < size && isalnum(data[i + 1])) |
| 624 | continue; |
| 625 | } |
| 626 | |
| 627 | work = newbuf(doc, BUFFER_SPAN); |
| 628 | parse_inline(work, doc, data, i); |
| 629 | |
| 630 | if (doc->ext_flags & HOEDOWN_EXT_UNDERLINE && c == '_') |
| 631 | r = doc->md.underline(ob, work, &doc->data); |
| 632 | else |
| 633 | r = doc->md.emphasis(ob, work, &doc->data); |
| 634 | |
| 635 | popbuf(doc, BUFFER_SPAN); |
| 636 | return r ? i + 1 : 0; |
| 637 | } |
| 638 | } |
| 639 | |
| 640 | return 0; |
| 641 | } |
| 642 | |
| 643 | /* parse_emph2 • parsing single emphase */ |
| 644 | static size_t |
no test coverage detected