Fossil SCM

Parse inline footnotes even if a renderer does not define a callback for rendering of footnote markers. This seems more correct even though the current implementation of backlink processor does define such callback as an empty function.

george 2022-02-19 01:16 markdown-footnotes
Commit e06c12d1760bf49c0358835c733bdb6e63ee95c04ddc4e92e2b3e588469b26a1
1 file changed +5 -3
+5 -3
--- src/markdown.c
+++ src/markdown.c
@@ -1238,16 +1238,18 @@
12381238
size_t size
12391239
){
12401240
size_t end;
12411241
const struct footnote* fn;
12421242
1243
- if( size<4 || data[1]!='^' || !rndr->make.footnote_ref ) return 0;
1243
+ if( size<4 || data[1]!='^' ) return 0;
12441244
end = matching_bracket_offset(data, data+size);
12451245
if( !end ) return 0;
12461246
fn = add_inline_footnote(rndr, data+2, end-2);
12471247
if( !fn ) return 0;
1248
- rndr->make.footnote_ref(ob,0,&fn->upc,fn->iMark,1,rndr->make.opaque);
1248
+ if( rndr->make.footnote_ref ){
1249
+ rndr->make.footnote_ref(ob,0,&fn->upc,fn->iMark,1,rndr->make.opaque);
1250
+ }
12491251
return end+1;
12501252
}
12511253
12521254
/* char_link -- '[': parsing a link or an image */
12531255
static size_t char_link(
@@ -1374,11 +1376,11 @@
13741376
/* calling the relevant rendering function */
13751377
if( is_img ){
13761378
if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ) ob->nUsed--;
13771379
ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
13781380
}else if(fn){
1379
- if(rndr->make.footnote_ref){
1381
+ if( rndr->make.footnote_ref ){
13801382
ret = rndr->make.footnote_ref(ob, content, &fn->upc, fn->iMark, fn->nUsed,
13811383
rndr->make.opaque);
13821384
}
13831385
}else{
13841386
ret = rndr->make.link(ob, link, title, content, rndr->make.opaque);
13851387
--- src/markdown.c
+++ src/markdown.c
@@ -1238,16 +1238,18 @@
1238 size_t size
1239 ){
1240 size_t end;
1241 const struct footnote* fn;
1242
1243 if( size<4 || data[1]!='^' || !rndr->make.footnote_ref ) return 0;
1244 end = matching_bracket_offset(data, data+size);
1245 if( !end ) return 0;
1246 fn = add_inline_footnote(rndr, data+2, end-2);
1247 if( !fn ) return 0;
1248 rndr->make.footnote_ref(ob,0,&fn->upc,fn->iMark,1,rndr->make.opaque);
 
 
1249 return end+1;
1250 }
1251
1252 /* char_link -- '[': parsing a link or an image */
1253 static size_t char_link(
@@ -1374,11 +1376,11 @@
1374 /* calling the relevant rendering function */
1375 if( is_img ){
1376 if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ) ob->nUsed--;
1377 ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1378 }else if(fn){
1379 if(rndr->make.footnote_ref){
1380 ret = rndr->make.footnote_ref(ob, content, &fn->upc, fn->iMark, fn->nUsed,
1381 rndr->make.opaque);
1382 }
1383 }else{
1384 ret = rndr->make.link(ob, link, title, content, rndr->make.opaque);
1385
--- src/markdown.c
+++ src/markdown.c
@@ -1238,16 +1238,18 @@
1238 size_t size
1239 ){
1240 size_t end;
1241 const struct footnote* fn;
1242
1243 if( size<4 || data[1]!='^' ) return 0;
1244 end = matching_bracket_offset(data, data+size);
1245 if( !end ) return 0;
1246 fn = add_inline_footnote(rndr, data+2, end-2);
1247 if( !fn ) return 0;
1248 if( rndr->make.footnote_ref ){
1249 rndr->make.footnote_ref(ob,0,&fn->upc,fn->iMark,1,rndr->make.opaque);
1250 }
1251 return end+1;
1252 }
1253
1254 /* char_link -- '[': parsing a link or an image */
1255 static size_t char_link(
@@ -1374,11 +1376,11 @@
1376 /* calling the relevant rendering function */
1377 if( is_img ){
1378 if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ) ob->nUsed--;
1379 ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1380 }else if(fn){
1381 if( rndr->make.footnote_ref ){
1382 ret = rndr->make.footnote_ref(ob, content, &fn->upc, fn->iMark, fn->nUsed,
1383 rndr->make.opaque);
1384 }
1385 }else{
1386 ret = rndr->make.link(ob, link, title, content, rndr->make.opaque);
1387

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button