Fossil SCM

Clean-up and polish relevant CSS and HTML's class names. Insure visual spacing between footnotes' markers so that numbers are distinguishable when multiple footnotes in a row are used. Factor out auxiliary decorations from HTML into the default CSS, to enable customization via skins.

george 2022-02-10 23:00 markdown-footnotes
Commit 2b1375abadb4f86c328ad9d9d64dcec444e9a91de04339563ba5a94c8a065dfd
+43 -27
--- src/default.css
+++ src/default.css
@@ -1665,62 +1665,78 @@
16651665
}
16661666
16671667
.monospace {
16681668
font-family: monospace;
16691669
}
1670
-div.content div.markdown > ol.footnotes {
1670
+
1671
+div.markdown > ol.footnotes {
16711672
font-size: 90%;
16721673
}
1673
-div.content div.markdown > ol.footnotes > li {
1674
+div.markdown > ol.footnotes > li {
16741675
margin-bottom: 0.5em;
16751676
}
1676
-div.markdown ol.footnotes > li.misreferences {
1677
- background: #ffdddd;
1678
-}
1679
-div.markdown ol.footnotes > li.unreferenced:first-child,
1680
-div.markdown ol.footnotes > li.misreferences {
1681
- margin-top: 0.75em;
1682
- padding-top: 0.25em;
1683
- padding-bottom: 0.25em;
1684
-}
1685
-div.markdown ol.footnotes > li.unreferenced {
1677
+div.markdown ol.footnotes > li.fn-joined > sup.fn-joined {
1678
+ color: gray;
1679
+ font-family: monospace;
1680
+}
1681
+div.markdown ol.footnotes > li.fn-joined > sup.fn-joined::after {
1682
+ content: "(joined from multiple locations) ";
1683
+}
1684
+div.markdown ol.footnotes > li.fn-misreference {
1685
+ margin-top: 0.75em;
1686
+ margin-bottom: 0.75em;
1687
+}
1688
+div.markdown ol.footnotes > li.fn-misreference,
1689
+div.markdown ol.footnotes > li.fn-unreferenced {
1690
+ color: gray;
1691
+}
1692
+div.markdown ol.footnotes > li.fn-misreference > span {
1693
+ color: red;
1694
+}
1695
+div.markdown ol.footnotes > li.fn-misreference > span::after {
1696
+ content: " (use of undefined label).";
1697
+}
1698
+div.markdown ol.footnotes > li.fn-unreferenced {
16861699
padding-left: 0.5em;
1687
- color: gray;
16881700
}
1689
-div.markdown ol.footnotes > li.unreferenced > code {
1701
+div.markdown ol.footnotes > li.fn-unreferenced > code {
16901702
color: red;
1691
- font-weight: bold;
1703
+}
1704
+div.markdown ol.footnotes > li.fn-unreferenced > i::after {
1705
+ content: " was defined but is not referenced";
16921706
}
1693
-div.markdown ol.footnotes > li.unreferenced > pre {
1707
+div.markdown ol.footnotes > li.fn-unreferenced > pre {
16941708
color: gray;
1709
+ font-size: 85%;
16951710
padding-left: 0.5em;
16961711
margin-top: 0.25em;
1697
- border-left: 3px solid red;
1712
+ border-left: 2px solid red;
16981713
}
1699
-div.content div.markdown > ol.footnotes > li > .footnote-backrefs {
1714
+div.markdown > ol.footnotes > li > .fn-backrefs {
17001715
margin-right: 0.5em;
17011716
font-weight: bold;
17021717
}
1703
-div.markdown > ol.footnotes > li > .footnote-backrefs > a:target {
1704
- background: gold;
1705
-}
1706
-div.markdown sup.noteref > a:target {
1707
- background: gold;
1718
+div.markdown > ol.footnotes > li > .fn-backrefs > a,
1719
+div.markdown sup.noteref > a {
1720
+ padding-left: 2px;
1721
+ padding-right: 2px;
17081722
}
17091723
div.markdown sup.noteref.misref,
17101724
div.markdown sup.noteref.misref > a {
17111725
color: red;
17121726
font-size: 90%;
1727
+}
1728
+div.markdown sup.noteref > a:target,
1729
+div.markdown span.notescope:target > sup.noteref > a,
1730
+div.markdown span.notescope:hover > sup.noteref > a,
1731
+div.markdown > ol.footnotes > li > .fn-backrefs > a:target {
1732
+ background: gold;
17131733
}
17141734
div.markdown span.notescope:hover,
17151735
div.markdown span.notescope:target {
17161736
border-bottom: 2px solid gold;
17171737
}
1718
-div.markdown span.notescope:hover > sup.noteref > a,
1719
-div.markdown span.notescope:target > sup.noteref > a {
1720
- background: gold;
1721
-}
17221738
17231739
/* Objects in the "desktoponly" class are invisible on mobile */
17241740
@media screen and (max-width: 600px) {
17251741
.desktoponly {
17261742
display: none;
17271743
--- src/default.css
+++ src/default.css
@@ -1665,62 +1665,78 @@
1665 }
1666
1667 .monospace {
1668 font-family: monospace;
1669 }
1670 div.content div.markdown > ol.footnotes {
 
1671 font-size: 90%;
1672 }
1673 div.content div.markdown > ol.footnotes > li {
1674 margin-bottom: 0.5em;
1675 }
1676 div.markdown ol.footnotes > li.misreferences {
1677 background: #ffdddd;
1678 }
1679 div.markdown ol.footnotes > li.unreferenced:first-child,
1680 div.markdown ol.footnotes > li.misreferences {
1681 margin-top: 0.75em;
1682 padding-top: 0.25em;
1683 padding-bottom: 0.25em;
1684 }
1685 div.markdown ol.footnotes > li.unreferenced {
 
 
 
 
 
 
 
 
 
 
 
 
1686 padding-left: 0.5em;
1687 color: gray;
1688 }
1689 div.markdown ol.footnotes > li.unreferenced > code {
1690 color: red;
1691 font-weight: bold;
 
 
1692 }
1693 div.markdown ol.footnotes > li.unreferenced > pre {
1694 color: gray;
 
1695 padding-left: 0.5em;
1696 margin-top: 0.25em;
1697 border-left: 3px solid red;
1698 }
1699 div.content div.markdown > ol.footnotes > li > .footnote-backrefs {
1700 margin-right: 0.5em;
1701 font-weight: bold;
1702 }
1703 div.markdown > ol.footnotes > li > .footnote-backrefs > a:target {
1704 background: gold;
1705 }
1706 div.markdown sup.noteref > a:target {
1707 background: gold;
1708 }
1709 div.markdown sup.noteref.misref,
1710 div.markdown sup.noteref.misref > a {
1711 color: red;
1712 font-size: 90%;
 
 
 
 
 
 
1713 }
1714 div.markdown span.notescope:hover,
1715 div.markdown span.notescope:target {
1716 border-bottom: 2px solid gold;
1717 }
1718 div.markdown span.notescope:hover > sup.noteref > a,
1719 div.markdown span.notescope:target > sup.noteref > a {
1720 background: gold;
1721 }
1722
1723 /* Objects in the "desktoponly" class are invisible on mobile */
1724 @media screen and (max-width: 600px) {
1725 .desktoponly {
1726 display: none;
1727
--- src/default.css
+++ src/default.css
@@ -1665,62 +1665,78 @@
1665 }
1666
1667 .monospace {
1668 font-family: monospace;
1669 }
1670
1671 div.markdown > ol.footnotes {
1672 font-size: 90%;
1673 }
1674 div.markdown > ol.footnotes > li {
1675 margin-bottom: 0.5em;
1676 }
1677 div.markdown ol.footnotes > li.fn-joined > sup.fn-joined {
1678 color: gray;
1679 font-family: monospace;
1680 }
1681 div.markdown ol.footnotes > li.fn-joined > sup.fn-joined::after {
1682 content: "(joined from multiple locations) ";
1683 }
1684 div.markdown ol.footnotes > li.fn-misreference {
1685 margin-top: 0.75em;
1686 margin-bottom: 0.75em;
1687 }
1688 div.markdown ol.footnotes > li.fn-misreference,
1689 div.markdown ol.footnotes > li.fn-unreferenced {
1690 color: gray;
1691 }
1692 div.markdown ol.footnotes > li.fn-misreference > span {
1693 color: red;
1694 }
1695 div.markdown ol.footnotes > li.fn-misreference > span::after {
1696 content: " (use of undefined label).";
1697 }
1698 div.markdown ol.footnotes > li.fn-unreferenced {
1699 padding-left: 0.5em;
 
1700 }
1701 div.markdown ol.footnotes > li.fn-unreferenced > code {
1702 color: red;
1703 }
1704 div.markdown ol.footnotes > li.fn-unreferenced > i::after {
1705 content: " was defined but is not referenced";
1706 }
1707 div.markdown ol.footnotes > li.fn-unreferenced > pre {
1708 color: gray;
1709 font-size: 85%;
1710 padding-left: 0.5em;
1711 margin-top: 0.25em;
1712 border-left: 2px solid red;
1713 }
1714 div.markdown > ol.footnotes > li > .fn-backrefs {
1715 margin-right: 0.5em;
1716 font-weight: bold;
1717 }
1718 div.markdown > ol.footnotes > li > .fn-backrefs > a,
1719 div.markdown sup.noteref > a {
1720 padding-left: 2px;
1721 padding-right: 2px;
 
1722 }
1723 div.markdown sup.noteref.misref,
1724 div.markdown sup.noteref.misref > a {
1725 color: red;
1726 font-size: 90%;
1727 }
1728 div.markdown sup.noteref > a:target,
1729 div.markdown span.notescope:target > sup.noteref > a,
1730 div.markdown span.notescope:hover > sup.noteref > a,
1731 div.markdown > ol.footnotes > li > .fn-backrefs > a:target {
1732 background: gold;
1733 }
1734 div.markdown span.notescope:hover,
1735 div.markdown span.notescope:target {
1736 border-bottom: 2px solid gold;
1737 }
 
 
 
 
1738
1739 /* Objects in the "desktoponly" class are invisible on mobile */
1740 @media screen and (max-width: 600px) {
1741 .desktoponly {
1742 display: none;
1743
+2 -1
--- src/markdown.c
+++ src/markdown.c
@@ -2586,11 +2586,12 @@
25862586
nDups++;
25872587
}
25882588
if( i+1<j ){
25892589
Blob tmp = empty_blob;
25902590
blob_reserve(&tmp, k);
2591
- blob_append_string(&tmp, "<ul class='footnote-joined'>\n");
2591
+ /* must match _joined_footnote_indicator in html_footnote_item() */
2592
+ blob_append_string(&tmp, "<ul class='fn-joined'>\n");
25922593
for(k=i; k<j; k++){
25932594
struct footnote *y = fn + k;
25942595
blob_append_string(&tmp, "<li>");
25952596
blob_append(&tmp, blob_buffer(&y->text), blob_size(&y->text));
25962597
blob_append_string(&tmp, "</li>\n");
25972598
--- src/markdown.c
+++ src/markdown.c
@@ -2586,11 +2586,12 @@
2586 nDups++;
2587 }
2588 if( i+1<j ){
2589 Blob tmp = empty_blob;
2590 blob_reserve(&tmp, k);
2591 blob_append_string(&tmp, "<ul class='footnote-joined'>\n");
 
2592 for(k=i; k<j; k++){
2593 struct footnote *y = fn + k;
2594 blob_append_string(&tmp, "<li>");
2595 blob_append(&tmp, blob_buffer(&y->text), blob_size(&y->text));
2596 blob_append_string(&tmp, "</li>\n");
2597
--- src/markdown.c
+++ src/markdown.c
@@ -2586,11 +2586,12 @@
2586 nDups++;
2587 }
2588 if( i+1<j ){
2589 Blob tmp = empty_blob;
2590 blob_reserve(&tmp, k);
2591 /* must match _joined_footnote_indicator in html_footnote_item() */
2592 blob_append_string(&tmp, "<ul class='fn-joined'>\n");
2593 for(k=i; k<j; k++){
2594 struct footnote *y = fn + k;
2595 blob_append_string(&tmp, "<li>");
2596 blob_append(&tmp, blob_buffer(&y->text), blob_size(&y->text));
2597 blob_append_string(&tmp, "</li>\n");
2598
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -383,12 +383,12 @@
383383
/* expect BUGs if the following yields compiler warnings */
384384
385385
if( iMark < 0 ){ /* misreferences */
386386
assert( iMark == -1 );
387387
if( !nUsed ) return;
388
- BLOB_APPEND_LITERAL(ob,"<li class='misreferences'>"
389
- "<sup class='footnote-backrefs'>");
388
+ BLOB_APPEND_LITERAL(ob,"<li class='fn-misreference'>"
389
+ "<sup class='fn-backrefs'>");
390390
if( nUsed == 1 ){
391391
blob_appendf(ob,"<a id='misreference%s-a' "
392392
"href='#misref%s-a'>^</a>", unique, unique);
393393
}else{
394394
int i;
@@ -398,28 +398,34 @@
398398
blob_appendf(ob," <a id='misreference%s-%c' "
399399
"href='#misref%s-%c'>%c</a>", unique,c, unique,c, c);
400400
}
401401
if( i < nUsed ) BLOB_APPEND_LITERAL(ob," &hellip;");
402402
}
403
- BLOB_APPEND_LITERAL(ob,"</sup>\nMisreference: use of undefined label.");
403
+ BLOB_APPEND_LITERAL(ob,"</sup>\n<span>Misreference</span>");
404404
405405
}else if( nUsed ){ /* a regular footnote */
406406
char pos[24];
407
+ const char *join = "";
408
+ #define _joined_footnote_indicator "<ul class='fn-joined'>"
409
+ #define _jfi_sz (sizeof(_joined_footnote_indicator)-1)
407410
assert( text );
408411
assert( blob_size(text) );
409
-
412
+ if( blob_size(text)>=_jfi_sz &&
413
+ !memcmp(blob_buffer(text),_joined_footnote_indicator,_jfi_sz)){
414
+ join = "fn-joined ";
415
+ }
410416
memset(pos,0,24);
411417
sprintf(pos, "%s-%i", unique, iMark);
418
+ blob_appendf(ob, "<li id='footnote%s' class='%s", pos, join);
412419
413
- blob_appendf(ob, "<li id='footnote%s'>", pos);
414
- BLOB_APPEND_LITERAL(ob,"<sup class='footnote-backrefs'>");
415
- if( nUsed <= 1 ){
420
+ if( nUsed == 1 ){
421
+ BLOB_APPEND_LITERAL(ob, "fn-monoref'><sup class='fn-backrefs'>");
416422
blob_appendf(ob,"<a id='footnote%s-a' "
417423
"href='#noteref%s-a'>^</a>", pos, pos);
418424
}else{
419425
int i;
420
- blob_append_char(ob, '^');
426
+ BLOB_APPEND_LITERAL(ob, "fn-polyref'><sup class='fn-backrefs'>^");
421427
for(i=0; i<nUsed && i<26; i++){
422428
const int c = i + (unsigned)'a';
423429
blob_appendf(ob," <a id='footnote%s-%c'"
424430
" href='#noteref%s-%c'>%c</a>", pos,c, pos,c, c);
425431
}
@@ -432,22 +438,28 @@
432438
pos,l.c, pos,l.c, l.c);
433439
}
434440
if( i < nUsed ) BLOB_APPEND_LITERAL(ob," &hellip;");
435441
}
436442
BLOB_APPEND_LITERAL(ob,"</sup>\n");
437
- BLOB_APPEND_BLOB(ob, text);
443
+ if( join[0] ){
444
+ BLOB_APPEND_LITERAL(ob,"<sup class='fn-joined'></sup><ul>");
445
+ blob_append(ob,blob_buffer(text)+_jfi_sz,blob_size(text)-_jfi_sz);
446
+ }else{
447
+ BLOB_APPEND_BLOB(ob, text);
448
+ }
449
+ #undef _joined_footnote_indicator
450
+ #undef _jfi_sz
438451
}else{
439452
/* a footnote was defined but wasn't used */
440453
/* make.footnote_item() invocations should pass args accordingly */
441454
const struct Blob * id = text-1;
442455
assert( text );
443456
assert( blob_size(text) );
444457
assert( blob_size(id) );
445
- BLOB_APPEND_LITERAL(ob,"<li class='unreferenced'>\n[^&nbsp;<code>");
458
+ BLOB_APPEND_LITERAL(ob,"<li class='fn-unreferenced'>\n[^&nbsp;<code>");
446459
html_escape(ob, blob_buffer(id), blob_size(id));
447
- BLOB_APPEND_LITERAL(ob, "</code>&nbsp;] "
448
- "<i>was defined but is not referenced</i>\n"
460
+ BLOB_APPEND_LITERAL(ob, "</code>&nbsp;]<i></i>\n"
449461
"<pre><code class='language-markdown'>");
450462
html_escape(ob, blob_buffer(text), blob_size(text));
451463
BLOB_APPEND_LITERAL(ob,"</code></pre>");
452464
}
453465
BLOB_APPEND_LITERAL(ob, "\n</li>\n");
454466
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -383,12 +383,12 @@
383 /* expect BUGs if the following yields compiler warnings */
384
385 if( iMark < 0 ){ /* misreferences */
386 assert( iMark == -1 );
387 if( !nUsed ) return;
388 BLOB_APPEND_LITERAL(ob,"<li class='misreferences'>"
389 "<sup class='footnote-backrefs'>");
390 if( nUsed == 1 ){
391 blob_appendf(ob,"<a id='misreference%s-a' "
392 "href='#misref%s-a'>^</a>", unique, unique);
393 }else{
394 int i;
@@ -398,28 +398,34 @@
398 blob_appendf(ob," <a id='misreference%s-%c' "
399 "href='#misref%s-%c'>%c</a>", unique,c, unique,c, c);
400 }
401 if( i < nUsed ) BLOB_APPEND_LITERAL(ob," &hellip;");
402 }
403 BLOB_APPEND_LITERAL(ob,"</sup>\nMisreference: use of undefined label.");
404
405 }else if( nUsed ){ /* a regular footnote */
406 char pos[24];
 
 
 
407 assert( text );
408 assert( blob_size(text) );
409
 
 
 
410 memset(pos,0,24);
411 sprintf(pos, "%s-%i", unique, iMark);
 
412
413 blob_appendf(ob, "<li id='footnote%s'>", pos);
414 BLOB_APPEND_LITERAL(ob,"<sup class='footnote-backrefs'>");
415 if( nUsed <= 1 ){
416 blob_appendf(ob,"<a id='footnote%s-a' "
417 "href='#noteref%s-a'>^</a>", pos, pos);
418 }else{
419 int i;
420 blob_append_char(ob, '^');
421 for(i=0; i<nUsed && i<26; i++){
422 const int c = i + (unsigned)'a';
423 blob_appendf(ob," <a id='footnote%s-%c'"
424 " href='#noteref%s-%c'>%c</a>", pos,c, pos,c, c);
425 }
@@ -432,22 +438,28 @@
432 pos,l.c, pos,l.c, l.c);
433 }
434 if( i < nUsed ) BLOB_APPEND_LITERAL(ob," &hellip;");
435 }
436 BLOB_APPEND_LITERAL(ob,"</sup>\n");
437 BLOB_APPEND_BLOB(ob, text);
 
 
 
 
 
 
 
438 }else{
439 /* a footnote was defined but wasn't used */
440 /* make.footnote_item() invocations should pass args accordingly */
441 const struct Blob * id = text-1;
442 assert( text );
443 assert( blob_size(text) );
444 assert( blob_size(id) );
445 BLOB_APPEND_LITERAL(ob,"<li class='unreferenced'>\n[^&nbsp;<code>");
446 html_escape(ob, blob_buffer(id), blob_size(id));
447 BLOB_APPEND_LITERAL(ob, "</code>&nbsp;] "
448 "<i>was defined but is not referenced</i>\n"
449 "<pre><code class='language-markdown'>");
450 html_escape(ob, blob_buffer(text), blob_size(text));
451 BLOB_APPEND_LITERAL(ob,"</code></pre>");
452 }
453 BLOB_APPEND_LITERAL(ob, "\n</li>\n");
454
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -383,12 +383,12 @@
383 /* expect BUGs if the following yields compiler warnings */
384
385 if( iMark < 0 ){ /* misreferences */
386 assert( iMark == -1 );
387 if( !nUsed ) return;
388 BLOB_APPEND_LITERAL(ob,"<li class='fn-misreference'>"
389 "<sup class='fn-backrefs'>");
390 if( nUsed == 1 ){
391 blob_appendf(ob,"<a id='misreference%s-a' "
392 "href='#misref%s-a'>^</a>", unique, unique);
393 }else{
394 int i;
@@ -398,28 +398,34 @@
398 blob_appendf(ob," <a id='misreference%s-%c' "
399 "href='#misref%s-%c'>%c</a>", unique,c, unique,c, c);
400 }
401 if( i < nUsed ) BLOB_APPEND_LITERAL(ob," &hellip;");
402 }
403 BLOB_APPEND_LITERAL(ob,"</sup>\n<span>Misreference</span>");
404
405 }else if( nUsed ){ /* a regular footnote */
406 char pos[24];
407 const char *join = "";
408 #define _joined_footnote_indicator "<ul class='fn-joined'>"
409 #define _jfi_sz (sizeof(_joined_footnote_indicator)-1)
410 assert( text );
411 assert( blob_size(text) );
412 if( blob_size(text)>=_jfi_sz &&
413 !memcmp(blob_buffer(text),_joined_footnote_indicator,_jfi_sz)){
414 join = "fn-joined ";
415 }
416 memset(pos,0,24);
417 sprintf(pos, "%s-%i", unique, iMark);
418 blob_appendf(ob, "<li id='footnote%s' class='%s", pos, join);
419
420 if( nUsed == 1 ){
421 BLOB_APPEND_LITERAL(ob, "fn-monoref'><sup class='fn-backrefs'>");
 
422 blob_appendf(ob,"<a id='footnote%s-a' "
423 "href='#noteref%s-a'>^</a>", pos, pos);
424 }else{
425 int i;
426 BLOB_APPEND_LITERAL(ob, "fn-polyref'><sup class='fn-backrefs'>^");
427 for(i=0; i<nUsed && i<26; i++){
428 const int c = i + (unsigned)'a';
429 blob_appendf(ob," <a id='footnote%s-%c'"
430 " href='#noteref%s-%c'>%c</a>", pos,c, pos,c, c);
431 }
@@ -432,22 +438,28 @@
438 pos,l.c, pos,l.c, l.c);
439 }
440 if( i < nUsed ) BLOB_APPEND_LITERAL(ob," &hellip;");
441 }
442 BLOB_APPEND_LITERAL(ob,"</sup>\n");
443 if( join[0] ){
444 BLOB_APPEND_LITERAL(ob,"<sup class='fn-joined'></sup><ul>");
445 blob_append(ob,blob_buffer(text)+_jfi_sz,blob_size(text)-_jfi_sz);
446 }else{
447 BLOB_APPEND_BLOB(ob, text);
448 }
449 #undef _joined_footnote_indicator
450 #undef _jfi_sz
451 }else{
452 /* a footnote was defined but wasn't used */
453 /* make.footnote_item() invocations should pass args accordingly */
454 const struct Blob * id = text-1;
455 assert( text );
456 assert( blob_size(text) );
457 assert( blob_size(id) );
458 BLOB_APPEND_LITERAL(ob,"<li class='fn-unreferenced'>\n[^&nbsp;<code>");
459 html_escape(ob, blob_buffer(id), blob_size(id));
460 BLOB_APPEND_LITERAL(ob, "</code>&nbsp;]<i></i>\n"
 
461 "<pre><code class='language-markdown'>");
462 html_escape(ob, blob_buffer(text), blob_size(text));
463 BLOB_APPEND_LITERAL(ob,"</code></pre>");
464 }
465 BLOB_APPEND_LITERAL(ob, "\n</li>\n");
466
--- test/markdown-test3.md
+++ test/markdown-test3.md
@@ -51,10 +51,13 @@
5151
The refenrence at the end of this sentence is the sole reason of
5252
rendering of <s>`lost1` and</s> [lost2][^].
5353
5454
If several labeled footnote definitions have the same equal label then texts
5555
from all these definitions are joined.[^duplicate]
56
+
57
+Several references should be recognized as several distinct numbers.
58
+(^There should be an interval between numbers.) [^many-refs]
5659
5760
## Footnotes
5861
5962
[branch]: /timeline?r=markdown-footnotes&nowiki
6063
6164
--- test/markdown-test3.md
+++ test/markdown-test3.md
@@ -51,10 +51,13 @@
51 The refenrence at the end of this sentence is the sole reason of
52 rendering of <s>`lost1` and</s> [lost2][^].
53
54 If several labeled footnote definitions have the same equal label then texts
55 from all these definitions are joined.[^duplicate]
 
 
 
56
57 ## Footnotes
58
59 [branch]: /timeline?r=markdown-footnotes&nowiki
60
61
--- test/markdown-test3.md
+++ test/markdown-test3.md
@@ -51,10 +51,13 @@
51 The refenrence at the end of this sentence is the sole reason of
52 rendering of <s>`lost1` and</s> [lost2][^].
53
54 If several labeled footnote definitions have the same equal label then texts
55 from all these definitions are joined.[^duplicate]
56
57 Several references should be recognized as several distinct numbers.
58 (^There should be an interval between numbers.) [^many-refs]
59
60 ## Footnotes
61
62 [branch]: /timeline?r=markdown-footnotes&nowiki
63
64

Keyboard Shortcuts

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