@@ -127,12 +127,13 @@
127 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const struct mkd_renderer *rndr);
128 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
130 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* INTERFACE */
131 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BLOB_COUNT(blob_ptr,el_type) (blob_size(blob_ptr)/sizeof(el_type))
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define COUNT_FOOTNOTES(blob_ptr) BLOB_COUNT(blob_ptr,struct footnote)
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BLOB_COUNT(pBlob,el_type) (blob_size(pBlob)/sizeof(el_type))
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define COUNT_FOOTNOTES(pBlob) BLOB_COUNT(pBlob,struct footnote)
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CAST_AS_FOOTNOTES(pBlob) ((struct footnote*)blob_buffer(pBlob))
134 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
135 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/***************
136 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* LOCAL TYPES *
137 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
***************/
138 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -142,14 +143,18 @@
142 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob link;
143 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob title;
144 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
145 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
146 147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct footnote {
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Blob id; /* must be the first field as in link_ref struct */
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Blob text; /* footnote's content that is rendered at the end */
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int index; /* serial number, in the order of appearance */
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nUsed; /* number of references to this note */
148 { 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 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Blob text; /* footnote's content that is rendered at the end */
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bRndred; /* indicates if `text` holds a rendered content */
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int defno; /* serial number of definition, set during the first pass */
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int index; /* set to the index within array after ordering by id */
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iMark; /* user-visible numeric marker, assigned upon the first use*/
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nUsed; /* counts references to this note, increments upon each use*/
151 156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
152 157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
153 158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
154 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* char_trigger -- function pointer to render active chars */
155 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* returns the number of chars taken care of */
@@ -174,13 +179,12 @@
174 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob *aBlobCache[20]; /* Cache of Blobs available for reuse */
175 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
176 181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct {
177 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob all; /* array of footnotes */
178 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLbled; /* number of labeled footnotes found during the first pass */
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nMarks; /* counts distinct indices found during the second pass */
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct footnote missing; /* a dummy footnote, its negative index
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- counts missing refs */
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nMarks; /* counts distinct indices found during the second pass */
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote misref; /* nUsed counts misreferences, index must be -1 */
182 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} notes;
183 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
184 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
185 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* html_tag -- structure for quick HTML tag search (inspired from discount) */
186 190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct html_tag {
@@ -203,11 +207,10 @@
203 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const struct html_tag block_tags[] = {
204 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "html", 4 },
205 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pre", 3 },
206 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "script", 6 },
207 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
209 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
210 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/***************************
211 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* STATIC HELPER FUNCTIONS *
212 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
***************************/
213 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -270,18 +273,33 @@
270 273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct link_ref *lrb = (void *)b;
271 274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return blob_compare(&lra->id, &lrb->id);
272 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
273 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
274 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* cmp_footnote_sort -- comparison function for footnotes qsort.
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- * Unused footnotes (when index == 0) sort last */
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int cmp_footnote_sort(const void *a, const void *b){
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const struct footnote *fna = (void *)a, *fnb = (void *)b;
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( fna->index >= 0 && fnb->index >= 0 );
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fna->index == fnb->index ) return 0;
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fna->index == 0 ) return 1;
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fnb->index == 0 ) return -1;
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return ( fna->index < fnb->index ? -1 : 1 );
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * Unreferenced footnotes (when nUsed == 0) sort last and
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * are sorted in the order of definition in the source */
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int cmp_footnote_sort(const void *fna, const void *fnb){
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const struct footnote *a = fna, *b = fnb;
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, j;
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( a->nUsed >= 0 );
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( b->nUsed >= 0 );
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( a->defno >= 0 );
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( b->defno >= 0 );
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( a->nUsed ){
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( a->iMark > 0 );
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !b->nUsed ) return -1;
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( b->iMark > 0 );
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = a->iMark;
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j = b->iMark;
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( b->nUsed ) return 1;
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = a->defno;
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j = b->defno;
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i < j ) return -1;
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i > j ) return 1;
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
283 301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
284 302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
285 303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* cmp_html_tag -- comparison function for bsearch() (stolen from discount) */
286 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int cmp_html_tag(const void *a, const void *b){
287 305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const struct html_tag *hta = a;
@@ -1052,16 +1070,16 @@
1052 1070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr->notes.nLbled,
1053 1071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sizeof (struct footnote),
1054 1072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cmp_link_ref);
1055 1073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !fn ) goto cleanup;
1056 1074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fn->index == 0 ){ /* the first reference to the footnote */
1058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( fn->nUsed == 0 );
1059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fn->index = ++(rndr->notes.nMarks);
1075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fn->nUsed == 0 ){ /* the first reference to the footnote */
1076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( fn->iMark == 0 );
1077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn->iMark = ++(rndr->notes.nMarks);
1060 1078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1061 1079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn->nUsed++;
1062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( fn->index > 0 );
1080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( fn->iMark > 0 );
1063 1081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( fn->nUsed > 0 );
1064 1082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cleanup:
1065 1083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
release_work_buffer( rndr, id );
1066 1084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return fn;
1067 1085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1071,16 +1089,17 @@
1071 1089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static inline const struct footnote* add_inline_footnote(
1072 1090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct render *rndr,
1073 1091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *text,
1074 1092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t size
1075 1093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct footnote fn = { empty_blob, empty_blob, 0, 0 };
1094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote fn = { empty_blob, empty_blob, 0, 0, 0, 0, 0 };
1077 1095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while(size && (*text==' ' || *text=='\t')){ text++; size--; }
1078 1096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!size) return 0;
1079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fn.index = ++(rndr->notes.nMarks);
1080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fn.nUsed = 1;
1081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( fn.index > 0 );
1097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn.iMark = ++(rndr->notes.nMarks);
1098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn.nUsed = 1;
1099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn.index = COUNT_FOOTNOTES(&rndr->notes.all);
1100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( fn.iMark > 0 );
1082 1101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&fn.text, text, size);
1083 1102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&rndr->notes.all, (char *)&fn, sizeof fn);
1084 1103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (struct footnote*)( blob_buffer(&rndr->notes.all)
1085 1104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+( blob_size(&rndr->notes.all)-sizeof fn ));
1086 1105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1120,11 +1139,11 @@
1120 1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1121 1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( size<4 || data[1]!='^' || !rndr->make.footnote_ref ) return 0;
1122 1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end = matching_bracket_offset(data, data+size);
1123 1142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !end ) return 0;
1124 1143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn = add_inline_footnote(rndr, data+2, end-2);
1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(fn) rndr->make.footnote_ref(ob,0,fn->index,1,rndr->make.opaque);
1144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(fn) rndr->make.footnote_ref(ob,0,fn->iMark,1,rndr->make.opaque);
1126 1145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return end+1;
1127 1146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1128 1147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1129 1148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* char_link -- '[': parsing a link or an image */
1130 1149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static size_t char_link(
@@ -1225,12 +1244,12 @@
1225 1244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1226 1245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1227 1246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bFootnote ){
1228 1247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn = get_footnote(rndr, id_data, id_size);
1229 1248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !fn ) {
1230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr->notes.missing.index--;
1231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fn = &rndr->notes.missing;
1249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr->notes.misref.nUsed++;
1250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn = &rndr->notes.misref;
1232 1251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1233 1252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( get_link_ref(rndr, link, title, id_data, id_size)<0 ){
1234 1253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto char_link_cleanup;
1235 1254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1236 1255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -1240,12 +1259,12 @@
1240 1259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1241 1260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!is_img && size>3 && data[1]=='^'){
1242 1261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* free-standing footnote reference */
1243 1262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn = get_footnote(rndr, data+2, txt_e-2);
1244 1263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !fn ) {
1245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr->notes.missing.index--;
1246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fn = &rndr->notes.missing;
1264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr->notes.misref.nUsed++;
1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn = &rndr->notes.misref;
1247 1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1248 1267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
release_work_buffer(rndr, content);
1249 1268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content = 0;
1250 1269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( get_link_ref(rndr, link, title, data+1, txt_e-1)<0 ){
1251 1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto char_link_cleanup;
@@ -1265,11 +1284,11 @@
1265 1284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( is_img ){
1266 1285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ) ob->nUsed--;
1267 1286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1268 1287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if(fn){
1269 1288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(rndr->make.footnote_ref){
1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ret = rndr->make.footnote_ref(ob, content, fn->index, fn->nUsed,
1289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ret = rndr->make.footnote_ref(ob, content, fn->iMark, fn->nUsed,
1271 1290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr->make.opaque);
1272 1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1273 1292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1274 1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = rndr->make.link(ob, link, title, content, rndr->make.opaque);
1275 1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -2359,11 +2378,11 @@
2359 2378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t end, /* offset of the end of the text */
2360 2379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t *last, /* last character of the link */
2361 2380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob * footnotes
2362 2381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
2363 2382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t i, id_offset, id_end;
2364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct footnote fn = { empty_blob, empty_blob, 0, 0 };
2383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote fn = { empty_blob, empty_blob, 0, 0, 0, 0, 0 };
2365 2384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2366 2385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* failfast if data is too short */
2367 2386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( beg+5>=end ) return 0;
2368 2387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = beg;
2369 2388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -2438,11 +2457,14 @@
2438 2457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&fn.id);
2439 2458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
2440 2459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2441 2460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* a valid note has been found */
2442 2461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( last ) *last = i;
2443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( footnotes ) blob_append(footnotes, (char *)&fn, sizeof fn);
2462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( footnotes ){
2463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn.defno = COUNT_FOOTNOTES( footnotes );
2464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(footnotes, (char *)&fn, sizeof fn);
2465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2444 2466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
2445 2467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2446 2468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2447 2469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**********************
2448 2470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* EXPORTED FUNCTIONS *
@@ -2466,14 +2488,14 @@
2466 2488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.nBlobCache = 0;
2467 2489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.iDepth = 0;
2468 2490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.refs = empty_blob;
2469 2491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.notes.all = empty_blob;
2470 2492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.notes.nMarks = 0;
2471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr.notes.missing.id = empty_blob;
2472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr.notes.missing.text = empty_blob;
2473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr.notes.missing.index = 0;
2474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr.notes.missing.nUsed = 0;
2493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.notes.misref.id = empty_blob;
2494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.notes.misref.text = empty_blob;
2495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.notes.misref.nUsed = 0;
2496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.notes.misref.iMark = -1;
2475 2497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2476 2498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<256; i++) rndr.active_char[i] = 0;
2477 2499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (rndr.make.emphasis
2478 2500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| rndr.make.double_emphasis
2479 2501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| rndr.make.triple_emphasis)
@@ -2527,36 +2549,84 @@
2527 2549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cmp_link_ref_sort);
2528 2550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2529 2551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.notes.nLbled = COUNT_FOOTNOTES(&rndr.notes.all);
2530 2552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* sorting the footnotes array by id */
2531 2553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rndr.notes.nLbled ){
2532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- qsort(blob_buffer(&rndr.notes.all), rndr.notes.nLbled,
2533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sizeof(struct footnote), cmp_link_ref_sort);
2554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn = CAST_AS_FOOTNOTES(&rndr.notes.all);
2555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ qsort(fn, rndr.notes.nLbled, sizeof(struct footnote),
2556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cmp_link_ref_sort);
2557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<rndr.notes.nLbled; i++){
2558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn[i].index = i;
2559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* FIXME: handle footnotes with duplicated labels */
2534 2561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2535 2562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2536 2563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* second pass: actual rendering */
2537 2564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rndr.make.prolog ) rndr.make.prolog(ob, rndr.make.opaque);
2538 2565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
parse_block(ob, &rndr, blob_buffer(&text), blob_size(&text));
2539 2566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fn = (struct footnote*)blob_buffer(&rndr.notes.all);
2541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(rndr.notes.nMarks && rndr.make.footnote_item && rndr.make.footnotes){
2542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob * one_item = new_work_buffer(&rndr);
2543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob * all_items = new_work_buffer(&rndr);
2544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- qsort( fn, COUNT_FOOTNOTES(&rndr.notes.all), sizeof(struct footnote),
2545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cmp_footnote_sort /* sort footnotes by index */ );
2546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_reset( all_items );
2547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<rndr.notes.nMarks; i++){
2548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( fn[i].index == i+1 );
2549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
2550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_reset( one_item );
2551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- parse_inline( one_item, &rndr, blob_buffer(&fn[i].text),
2552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_size(&fn[i].text));
2553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr.make.footnote_item( all_items, one_item, i+1, fn[i].nUsed, rndr.make.opaque);
2554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
2555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rndr.make.footnotes(ob, all_items, rndr.make.opaque );
2556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- release_work_buffer( &rndr, one_item );
2557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- release_work_buffer( &rndr, all_items );
2567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (blob_size(&rndr.notes.all) || rndr.notes.misref.nUsed) ){
2568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Footnotes must be parsed for the correct discovery of (back)links */
2570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *notes = new_work_buffer( &rndr );
2571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *tmp = new_work_buffer( &rndr );
2572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const struct Blob *origin = &rndr.notes.all;
2573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nMarks = -1;
2574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* inline notes may get appended to rndr.notes.all while rendering */
2576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while(1){
2577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote *aNotes;
2578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int N = COUNT_FOOTNOTES(origin);
2579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* make a shallow copy of `origin` */
2581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_truncate(notes,0);
2582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(notes, blob_buffer(origin), blob_size(origin));
2583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aNotes = CAST_AS_FOOTNOTES(notes);
2584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ qsort(aNotes, N, sizeof(struct footnote), cmp_footnote_sort);
2585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nMarks == rndr.notes.nMarks ) break;
2587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nMarks = rndr.notes.nMarks;
2588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<N; i++){
2590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int j = aNotes[i].index;
2591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote *x = CAST_AS_FOOTNOTES(origin) + j;
2592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( 0<=j && j<N );
2593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( x->bRndred || !x->nUsed ) continue;
2594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( x->iMark > 0 );
2595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( blob_size(&x->text) );
2596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_truncate(tmp,0);
2597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* `origin` may be altered and extended through this call */
2599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parse_inline(tmp, &rndr, blob_buffer(&x->text), blob_size(&x->text));
2600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_truncate(&x->text,0);
2602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&x->text, blob_buffer(tmp), blob_size(tmp));
2603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x->bRndred = 1;
2604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ release_work_buffer(&rndr,tmp);
2607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* footnotes rendering */
2609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rndr.make.footnote_item && rndr.make.footnotes ){
2610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *all_items = new_work_buffer(&rndr);
2611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<COUNT_FOOTNOTES(notes); i++){
2612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const struct footnote* x = CAST_AS_FOOTNOTES(notes) + i;
2613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( x->bRndred ){
2614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.make.footnote_item(all_items, &x->text, x->iMark,
2615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x->nUsed, rndr.make.opaque);
2616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rndr.notes.misref.nUsed ){
2619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.make.footnote_item(all_items, 0, -1,
2620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.notes.misref.nUsed, rndr.make.opaque);
2621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TODO: handle unreferenced (defined but not used) footnotes */
2623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rndr.make.footnotes(ob, all_items, rndr.make.opaque);
2625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ release_work_buffer(&rndr, all_items);
2626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ release_work_buffer(&rndr, notes);
2558 2628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2559 2629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rndr.make.epilog ) rndr.make.epilog(ob, rndr.make.opaque);
2560 2630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2561 2631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* clean-up */
2562 2632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rndr.iDepth==0 );
@@ -2567,10 +2637,11 @@
2567 2637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&lr[i].id);
2568 2638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&lr[i].link);
2569 2639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&lr[i].title);
2570 2640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2571 2641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&rndr.refs);
2642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn = CAST_AS_FOOTNOTES(&rndr.notes.all);
2572 2643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end = COUNT_FOOTNOTES(&rndr.notes.all);
2573 2644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<end; i++){
2574 2645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(blob_size(&fn[i].id)) blob_reset(&fn[i].id);
2575 2646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&fn[i].text);
2576 2647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2577 2648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!