MCPcopy Index your code
hub / github.com/commonmark/cmark / cmark_parse_reference_inline

Function cmark_parse_reference_inline

src/inlines.c:1443–1503  ·  view source on GitHub ↗

Parse reference. Assumes string begins with '[' character. Modify refmap if a reference is encountered. Return 0 if no reference found, otherwise position of subject after reference is parsed.

Source from the content-addressed store, hash-verified

1441// Return 0 if no reference found, otherwise position of subject
1442// after reference is parsed.
1443bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input,
1444 cmark_reference_map *refmap) {
1445 subject subj;
1446
1447 cmark_chunk lab;
1448 cmark_chunk url;
1449 cmark_chunk title;
1450
1451 bufsize_t matchlen = 0;
1452 bufsize_t beforetitle;
1453
1454 subject_from_buf(mem, -1, 0, &subj, input, NULL);
1455
1456 // parse label:
1457 if (!link_label(&subj, &lab) || lab.len == 0)
1458 return 0;
1459
1460 // colon:
1461 if (peek_char(&subj) == ':') {
1462 advance(&subj);
1463 } else {
1464 return 0;
1465 }
1466
1467 // parse link url:
1468 spnl(&subj);
1469 if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1) {
1470 subj.pos += matchlen;
1471 } else {
1472 return 0;
1473 }
1474
1475 // parse optional link_title
1476 beforetitle = subj.pos;
1477 spnl(&subj);
1478 matchlen = subj.pos == beforetitle ? 0 : scan_link_title(&subj.input, subj.pos);
1479 if (matchlen) {
1480 title = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
1481 subj.pos += matchlen;
1482 } else {
1483 subj.pos = beforetitle;
1484 title = cmark_chunk_literal("");
1485 }
1486
1487 // parse final spaces and newline:
1488 skip_spaces(&subj);
1489 if (!skip_line_end(&subj)) {
1490 if (matchlen) { // try rewinding before title
1491 subj.pos = beforetitle;
1492 skip_spaces(&subj);
1493 if (!skip_line_end(&subj)) {
1494 return 0;
1495 }
1496 } else {
1497 return 0;
1498 }
1499 }
1500 // insert reference into refmap

Callers 1

Calls 10

subject_from_bufFunction · 0.85
link_labelFunction · 0.85
peek_charFunction · 0.85
spnlFunction · 0.85
manual_scan_link_urlFunction · 0.85
cmark_chunk_dupFunction · 0.85
cmark_chunk_literalFunction · 0.85
skip_spacesFunction · 0.85
skip_line_endFunction · 0.85
cmark_reference_createFunction · 0.85

Tested by

no test coverage detected