|
|
|
@ -71,7 +71,9 @@ static size_t char_entity(struct buf *ob, struct sd_markdown *rndr, uint8_t *dat
|
|
|
|
|
static size_t char_langle_tag(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_autolink_url(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_autolink_email(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_autolink_at(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_autolink_www(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_autolink_ssb(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_autolink_zet(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_link(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
|
static size_t char_superscript(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size);
|
|
|
|
@ -86,8 +88,9 @@ enum markdown_char_t {
|
|
|
|
|
MD_CHAR_ESCAPE,
|
|
|
|
|
MD_CHAR_ENTITITY,
|
|
|
|
|
MD_CHAR_AUTOLINK_URL,
|
|
|
|
|
MD_CHAR_AUTOLINK_EMAIL,
|
|
|
|
|
MD_CHAR_AUTOLINK_AT,
|
|
|
|
|
MD_CHAR_AUTOLINK_WWW,
|
|
|
|
|
MD_CHAR_AUTOLINK_SSB,
|
|
|
|
|
MD_CHAR_AUTOLINK_ZET,
|
|
|
|
|
MD_CHAR_SUPERSCRIPT,
|
|
|
|
|
};
|
|
|
|
@ -102,8 +105,9 @@ static char_trigger markdown_char_ptrs[] = {
|
|
|
|
|
&char_escape,
|
|
|
|
|
&char_entity,
|
|
|
|
|
&char_autolink_url,
|
|
|
|
|
&char_autolink_email,
|
|
|
|
|
&char_autolink_at,
|
|
|
|
|
&char_autolink_www,
|
|
|
|
|
&char_autolink_ssb,
|
|
|
|
|
&char_autolink_zet,
|
|
|
|
|
&char_superscript,
|
|
|
|
|
};
|
|
|
|
@ -817,6 +821,17 @@ char_autolink_email(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, siz
|
|
|
|
|
return link_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static size_t
|
|
|
|
|
char_autolink_at(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size)
|
|
|
|
|
{
|
|
|
|
|
size_t link_len;
|
|
|
|
|
|
|
|
|
|
link_len = char_autolink_ssb(ob, rndr, data, offset, size);
|
|
|
|
|
if (link_len) return link_len;
|
|
|
|
|
|
|
|
|
|
return char_autolink_email(ob, rndr, data, offset, size);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static size_t
|
|
|
|
|
char_autolink_url(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size)
|
|
|
|
|
{
|
|
|
|
@ -837,6 +852,26 @@ char_autolink_url(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_
|
|
|
|
|
return link_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static size_t
|
|
|
|
|
char_autolink_ssb(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size)
|
|
|
|
|
{
|
|
|
|
|
struct buf *link;
|
|
|
|
|
size_t link_len, rewind;
|
|
|
|
|
|
|
|
|
|
if (!rndr->cb.autolink || rndr->in_link_body)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
link = rndr_newbuf(rndr, BUFFER_SPAN);
|
|
|
|
|
|
|
|
|
|
if ((link_len = sd_autolink__ssb(&rewind, link, data, offset, size, 0)) > 0) {
|
|
|
|
|
ob->size -= rewind;
|
|
|
|
|
rndr->cb.autolink(ob, link, MKDA_SSB, rndr->opaque);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rndr_popbuf(rndr, BUFFER_SPAN);
|
|
|
|
|
return link_len;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static size_t
|
|
|
|
|
char_autolink_zet(struct buf *ob, struct sd_markdown *rndr, uint8_t *data, size_t offset, size_t size)
|
|
|
|
|
{
|
|
|
|
@ -2457,8 +2492,11 @@ sd_markdown_new(
|
|
|
|
|
|
|
|
|
|
if (extensions & MKDEXT_AUTOLINK) {
|
|
|
|
|
md->active_char[':'] = MD_CHAR_AUTOLINK_URL;
|
|
|
|
|
md->active_char['@'] = MD_CHAR_AUTOLINK_EMAIL;
|
|
|
|
|
md->active_char['@'] = MD_CHAR_AUTOLINK_AT;
|
|
|
|
|
md->active_char['w'] = MD_CHAR_AUTOLINK_WWW;
|
|
|
|
|
md->active_char['%'] = MD_CHAR_AUTOLINK_SSB;
|
|
|
|
|
md->active_char['&'] = MD_CHAR_AUTOLINK_SSB;
|
|
|
|
|
md->active_char['#'] = MD_CHAR_AUTOLINK_SSB;
|
|
|
|
|
md->active_char[194] = MD_CHAR_AUTOLINK_ZET;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|