@@ -142,10 +142,13 @@
142 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob id; /* must be the first field as in footnote struct */
143 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob link;
144 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob title;
145 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
146 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A footnote's data.
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** id, text, and upc fields must be in that particular order.
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
147 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct footnote {
148 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob id; /* must be the first field as in link_ref struct */
149 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob text; /* footnote's content that is rendered at the end */
150 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob upc; /* user-provided classes .ASCII-alnum.or-hypen: */
151 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bRndred; /* indicates if `text` holds a rendered content */
@@ -2505,12 +2508,12 @@
2505 2508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t j;
2506 2509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upc_size = is_footnote_classlist(data+i, end-i, 1);
2507 2510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upc_offset = i; /* prevent further checks for a classlist */
2508 2511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i += upc_size;
2509 2512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = i;
2510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do i++; while( i<end && data[i]!='\n' && data[i]!='\r' );
2511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(&fn.text, data+j, i-j);
2513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i<end && data[i]!='\n' && data[i]!='\r' ){ i++; };
2514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i!=j )blob_append(&fn.text, data+j, i-j);
2512 2515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<end ){
2513 2516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(&fn.text, data[i]);
2514 2517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
2515 2518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<end && data[i]=='\n' && data[i-1]=='\r' ){
2516 2519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(&fn.text, data[i]);
@@ -2524,14 +2527,13 @@
2524 2527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<end ){
2525 2528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2526 2529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* compute the indentation from the 2nd line */
2527 2530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t indent = i;
2528 2531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *spaces = data+i;
2529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( i<end && data[i]==' ' ){ i++; }
2530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i>=end ) goto footnote_finish;
2531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- indent = i - indent;
2532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i -= indent;
2532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( indent<end && data[indent]==' ' ){ indent++; }
2533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( indent>=end ) goto footnote_finish;
2534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ indent -= i;
2533 2535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( indent<2 ) goto footnote_finish;
2534 2536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2535 2537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* process the 2nd and the following lines */
2536 2538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i+indent<end && memcmp(data+i,spaces,indent)==0 ){
2537 2539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t j;
@@ -2543,12 +2545,12 @@
2543 2545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( upc_size ){
2544 2546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = upc_offset + upc_size;
2545 2547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2546 2548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2547 2549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = i;
2548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( i<end && data[i]!='\n' && data[i]!='\r' ) i++;
2549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(&fn.text, data+j, i-j);
2550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i<end && data[i]!='\n' && data[i]!='\r' ){ i++; }
2551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i!=j ) blob_append(&fn.text, data+j, i-j);
2550 2552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=end ) break;
2551 2553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(&fn.text, data[i]);
2552 2554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
2553 2555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<end && data[i]=='\n' && data[i-1]=='\r' ){
2554 2556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(&fn.text, data[i]);
@@ -2675,13 +2677,13 @@
2675 2677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
qsort(fn, rndr.notes.nLbled, sizeof(struct footnote), cmp_footnote_id);
2676 2678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2677 2679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* concatenate footnotes with equal labels */
2678 2680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<rndr.notes.nLbled ;){
2679 2681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct footnote *x = fn + i;
2680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t j = i+1, k = blob_size(&x->text) + 64;
2682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t j = i+1, k = blob_size(&x->text) + 64 + blob_size(&x->upc);
2681 2683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while(j<rndr.notes.nLbled && !blob_compare(&x->id, &fn[j].id)){
2682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- k += blob_size(&fn[j].text) + 10;
2684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ k += blob_size(&fn[j].text) + 10 + blob_size(&fn[j].upc);
2683 2685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j++;
2684 2686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nDups++;
2685 2687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2686 2688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i+1<j ){
2687 2689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob list = empty_blob;
@@ -2689,10 +2691,14 @@
2689 2691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* must match _joined_footnote_indicator in html_footnote_item() */
2690 2692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_string(&list, "<ul class='fn-joined'>\n");
2691 2693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(k=i; k<j; k++){
2692 2694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct footnote *y = fn + k;
2693 2695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_string(&list, "<li>");
2696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_size(&y->upc) ){
2697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&list, blob_buffer(&y->upc), blob_size(&y->upc));
2698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&y->upc);
2699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2694 2700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&list, blob_buffer(&y->text), blob_size(&y->text));
2695 2701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_string(&list, "</li>\n");
2696 2702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2697 2703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* free memory buffer */
2698 2704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&y->text);
@@ -2771,29 +2777,37 @@
2771 2777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2772 2778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* footnotes rendering */
2773 2779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rndr.make.footnote_item && rndr.make.footnotes ){
2774 2780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *all_items = new_work_buffer(&rndr);
2775 2781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j = -1;
2782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Assert that the in-memory layout of id, text and upc within
2784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** footnote struct matches the expectations of html_footnote_item()
2785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If it doesn't then a compiler has done something very weird.
2786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
2787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const struct footnote *dummy = 0;
2788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( &(dummy->id) == &(dummy->text) - 1 );
2789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( &(dummy->upc) == &(dummy->text) + 1 );
2790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2776 2791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<COUNT_FOOTNOTES(notes); i++){
2777 2792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const struct footnote* x = CAST_AS_FOOTNOTES(notes) + i;
2778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( x->iMark ){
2779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr.make.footnote_item(all_items, &x->text, x->iMark,
2780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- x->bRndred ? x->nUsed : 0, rndr.make.opaque);
2781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- j = i;
2782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !x->iMark ) break;
2794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( x->nUsed );
2795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.make.footnote_item(all_items, &x->text, x->iMark,
2796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x->bRndred ? x->nUsed : 0, rndr.make.opaque);
2797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j = i;
2783 2798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2784 2799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rndr.notes.misref.nUsed ){
2785 2800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.make.footnote_item(all_items, 0, -1,
2786 2801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.notes.misref.nUsed, rndr.make.opaque);
2787 2802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.ftntsIssues[0] += rndr.notes.misref.nUsed;
2788 2803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2789 2804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( ++j < COUNT_FOOTNOTES(notes) ){
2790 2805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const struct footnote* x = CAST_AS_FOOTNOTES(notes) + j;
2791 2806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !x->iMark );
2807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !x->nUsed );
2792 2808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !x->bRndred );
2793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (&x->id) + 1 == &x->text ); /* see html_footnote_item() */
2794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (&x->upc)- 1 == &x->text );
2795 2809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.make.footnote_item(all_items,&x->text,0,0,rndr.make.opaque);
2796 2810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.ftntsIssues[1]++;
2797 2811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2798 2812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.make.footnotes(ob, all_items, rndr.make.opaque);
2799 2813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
release_work_buffer(&rndr, all_items);
2800 2814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!