MCPcopy Create free account
hub / github.com/PolyMC/PolyMC / parse_blockquote

Function parse_blockquote

libraries/hoedown/src/document.c:1589–1628  ·  view source on GitHub ↗

parse_blockquote • handles parsing of a blockquote fragment */

Source from the content-addressed store, hash-verified

1587
1588/* parse_blockquote • handles parsing of a blockquote fragment */
1589static size_t
1590parse_blockquote(hoedown_buffer *ob, hoedown_document *doc, uint8_t *data, size_t size)
1591{
1592 size_t beg, end = 0, pre, work_size = 0;
1593 uint8_t *work_data = 0;
1594 hoedown_buffer *out = 0;
1595
1596 out = newbuf(doc, BUFFER_BLOCK);
1597 beg = 0;
1598 while (beg < size) {
1599 for (end = beg + 1; end < size && data[end - 1] != '\n'; end++);
1600
1601 pre = prefix_quote(data + beg, end - beg);
1602
1603 if (pre)
1604 beg += pre; /* skipping prefix */
1605
1606 /* empty line followed by non-quote line */
1607 else if (is_empty(data + beg, end - beg) &&
1608 (end >= size || (prefix_quote(data + end, size - end) == 0 &&
1609 !is_empty(data + end, size - end))))
1610 break;
1611
1612 if (beg < end) { /* copy into the in-place working buffer */
1613 /* hoedown_buffer_put(work, data + beg, end - beg); */
1614 if (!work_data)
1615 work_data = data + beg;
1616 else if (data + beg != work_data + work_size)
1617 memmove(work_data + work_size, data + beg, end - beg);
1618 work_size += end - beg;
1619 }
1620 beg = end;
1621 }
1622
1623 parse_block(out, doc, work_data, work_size);
1624 if (doc->md.blockquote)
1625 doc->md.blockquote(ob, out, &doc->data);
1626 popbuf(doc, BUFFER_BLOCK);
1627 return end;
1628}
1629
1630static size_t
1631parse_htmlblock(hoedown_buffer *ob, hoedown_document *doc, uint8_t *data, size_t size, int do_render);

Callers 1

parse_blockFunction · 0.85

Calls 5

newbufFunction · 0.85
prefix_quoteFunction · 0.85
is_emptyFunction · 0.85
parse_blockFunction · 0.85
popbufFunction · 0.85

Tested by

no test coverage detected