parse_blockquote • handles parsing of a regular paragraph */
| 1632 | |
| 1633 | /* parse_blockquote • handles parsing of a regular paragraph */ |
| 1634 | static size_t |
| 1635 | parse_paragraph(hoedown_buffer *ob, hoedown_document *doc, uint8_t *data, size_t size) |
| 1636 | { |
| 1637 | hoedown_buffer work = { NULL, 0, 0, 0, NULL, NULL, NULL }; |
| 1638 | size_t i = 0, end = 0; |
| 1639 | int level = 0; |
| 1640 | |
| 1641 | work.data = data; |
| 1642 | |
| 1643 | while (i < size) { |
| 1644 | for (end = i + 1; end < size && data[end - 1] != '\n'; end++) /* empty */; |
| 1645 | |
| 1646 | if (is_empty(data + i, size - i)) |
| 1647 | break; |
| 1648 | |
| 1649 | if ((level = is_headerline(data + i, size - i)) != 0) |
| 1650 | break; |
| 1651 | |
| 1652 | if (is_atxheader(doc, data + i, size - i) || |
| 1653 | is_hrule(data + i, size - i) || |
| 1654 | prefix_quote(data + i, size - i)) { |
| 1655 | end = i; |
| 1656 | break; |
| 1657 | } |
| 1658 | |
| 1659 | i = end; |
| 1660 | } |
| 1661 | |
| 1662 | work.size = i; |
| 1663 | while (work.size && data[work.size - 1] == '\n') |
| 1664 | work.size--; |
| 1665 | |
| 1666 | if (!level) { |
| 1667 | hoedown_buffer *tmp = newbuf(doc, BUFFER_BLOCK); |
| 1668 | parse_inline(tmp, doc, work.data, work.size); |
| 1669 | if (doc->md.paragraph) |
| 1670 | doc->md.paragraph(ob, tmp, &doc->data); |
| 1671 | popbuf(doc, BUFFER_BLOCK); |
| 1672 | } else { |
| 1673 | hoedown_buffer *header_work; |
| 1674 | |
| 1675 | if (work.size) { |
| 1676 | size_t beg; |
| 1677 | i = work.size; |
| 1678 | work.size -= 1; |
| 1679 | |
| 1680 | while (work.size && data[work.size] != '\n') |
| 1681 | work.size -= 1; |
| 1682 | |
| 1683 | beg = work.size + 1; |
| 1684 | while (work.size && data[work.size - 1] == '\n') |
| 1685 | work.size -= 1; |
| 1686 | |
| 1687 | if (work.size > 0) { |
| 1688 | hoedown_buffer *tmp = newbuf(doc, BUFFER_BLOCK); |
| 1689 | parse_inline(tmp, doc, work.data, work.size); |
| 1690 | |
| 1691 | if (doc->md.paragraph) |
no test coverage detected