@@ -83,11 +83,11 @@
83 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob *content, void *opaque);
84 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*raw_html_tag)(struct Blob *ob, struct Blob *tag, void *opaque);
85 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*triple_emphasis)(struct Blob *ob, struct Blob *text,
86 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char c, void *opaque);
87 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*footnote_ref)(struct Blob *ob, const struct Blob *span,
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int index, int locus, void *opaque);
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const struct Blob *upc, int index, int locus, void *opaque);
89 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* low level callbacks - NULL copies input directly into the output */
91 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*entity)(struct Blob *ob, struct Blob *entity, void *opaque);
92 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*normal_text)(struct Blob *ob, struct Blob *text, void *opaque);
93 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -145,18 +145,19 @@
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 147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct footnote {
148 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 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!
+ struct Blob upc; /* user-provided classes .ASCII-alnum.or-hypen: */
150 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bRndred; /* indicates if `text` holds a rendered content */
151 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
152 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int defno; /* serial number of definition, set during the first pass */
153 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int index; /* set to the index within array after ordering by id */
154 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iMark; /* user-visible numeric marker, assigned upon the first use*/
155 156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nUsed; /* counts references to this note, increments upon each use*/
156 157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define FOOTNOTE_INITIALIZER {empty_blob,empty_blob,empty_blob, 0,0,0,0,0}
158 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* char_trigger -- function pointer to render active chars */
160 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* returns the number of chars taken care of */
161 162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* data is the pointer of the beginning of the span */
162 163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* offset is the number of valid chars before data */
@@ -1100,27 +1101,99 @@
1100 1101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( fn->nUsed > 0 );
1101 1102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cleanup:
1102 1103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
release_work_buffer( rndr, id );
1103 1104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return fn;
1104 1105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Counts characters in the blank prefix within at most nHalfLines.
1108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A sequence of spaces and tabs counts as odd halfline,
1109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a newline counts as even halfline
1110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static inline size_t count_whitespaces(
1112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *data, size_t size, int nHalfLines
1113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
1114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *p = data;
1115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * const end = data+size;
1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( nHalfLines > 0 ){
1117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( p!=end && (*p==' ' || *p=='\t' ) ){ p++; }
1118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==end || --nHalfLines == 0 ) break;
1119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *p=='\n' || *p=='\r' ){
1120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p++;
1121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==end ) break;
1122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *p=='\n' && p[-1]=='\r' ){
1123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p++;
1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nHalfLines--;
1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (size_t)(p-data);
1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check if the data starts with a classlist token of the special form.
1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If so then return the length of that token, otherwise return 0.
1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The token must start with a dot and must end with a colon;
1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in between of these it must be a dot-separated list of words;
1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** each word may contain only alphanumeric characters and hyphens.
1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t is_footnote_classlist(const char * const data, size_t size){
1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *p;
1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char * const end = data+size;
1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( data==end || *data != '.' ) return 0;
1142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(p=data+1; p!=end; p++){
1143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fossil_isalnum(*p) || *p=='-' ) continue;
1144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *p==':' ){
1145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p[-1]!='.' ? (size_t)(p-data)+1 : 0;
1146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *p=='.' ){
1148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p[-1]!='.' ) continue;
1149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else break;
1150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
1152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
1154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1105 1155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1106 1156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Adds unlabeled footnote to the rndr.
1107 1157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* If text is blank then returns 0,
1108 1158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* otherwise returns the address of the added footnote. */
1109 1159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static inline const struct footnote* add_inline_footnote(
1110 1160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct render *rndr,
1111 1161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *text,
1112 1162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t size
1113 1163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct footnote fn = { empty_blob, empty_blob, 0, 0, 0, 0, 0 };
1115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while(size && (*text==' ' || *text=='\t')){ text++; size--; }
1164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote fn = FOOTNOTE_INITIALIZER;
1165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zUPC = 0;
1166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t nUPC = 0, n = count_whitespaces(text, size, 3);
1167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n >= size ) return 0;
1168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ text += n;
1169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size -= n;
1170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = is_footnote_classlist(text, size);
1171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n && n < size ){
1172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nUPC = n;
1173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zUPC = text;
1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ text += nUPC;
1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size -= nUPC;
1176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = count_whitespaces(text, size, 3);
1177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* naked classlist is treated as plain text */
1178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n >= size || text[n]=='\n' || text[n]=='\r' ){
1179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size += nUPC;
1180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nUPC = 0;
1181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ text = zUPC;
1182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zUPC = 0;
1183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ text += n;
1185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size -= n;
1186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1116 1188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!size) return 0;
1117 1189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn.iMark = ++(rndr->notes.nMarks);
1118 1190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn.nUsed = 1;
1119 1191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn.index = COUNT_FOOTNOTES(&rndr->notes.all);
1120 1192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( fn.iMark > 0 );
1121 1193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&fn.text, text, size);
1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(nUPC) blob_append(&fn.upc, zUPC, nUPC);
1122 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&rndr->notes.all, (char *)&fn, sizeof fn);
1123 1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (struct footnote*)( blob_buffer(&rndr->notes.all)
1124 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+( blob_size(&rndr->notes.all)-sizeof fn ));
1125 1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1126 1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -1164,11 +1237,11 @@
1164 1237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1165 1238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( size<4 || data[1]!='^' || !rndr->make.footnote_ref ) return 0;
1166 1239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end = matching_bracket_offset(data, data+size);
1167 1240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !end ) return 0;
1168 1241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn = add_inline_footnote(rndr, data+2, end-2);
1169 { 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);
1242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(fn) rndr->make.footnote_ref(ob,0,&fn->upc,fn->iMark,1,rndr->make.opaque);
1170 1243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return end+1;
1171 1244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1172 1245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1173 1246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* char_link -- '[': parsing a link or an image */
1174 1247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static size_t char_link(
@@ -1296,11 +1369,11 @@
1296 1369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( is_img ){
1297 1370 { 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--;
1298 1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1299 1372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if(fn){
1300 1373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(rndr->make.footnote_ref){
1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ret = rndr->make.footnote_ref(ob, content, fn->iMark, fn->nUsed,
1374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ret = rndr->make.footnote_ref(ob, content, &fn->upc, fn->iMark, fn->nUsed,
1302 1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr->make.opaque);
1303 1376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1304 1377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1305 1378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = rndr->make.link(ob, link, title, content, rndr->make.opaque);
1306 1379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -2389,12 +2462,12 @@
2389 2462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t beg, /* offset of the beginning of the line */
2390 2463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t end, /* offset of the end of the text */
2391 2464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t *last, /* last character of the link */
2392 2465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob * footnotes
2393 2466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
2394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t i, id_offset, id_end;
2395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct footnote fn = { empty_blob, empty_blob, 0, 0, 0, 0, 0 };
2467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t i, id_offset, id_end, upc_offset = 0, upc_size = 0;
2468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote fn = FOOTNOTE_INITIALIZER;
2396 2469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2397 2470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* failfast if data is too short */
2398 2471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( beg+5>=end ) return 0;
2399 2472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = beg;
2400 2473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -2418,10 +2491,23 @@
2418 2491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=end ) return 0;
2419 2492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2420 2493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( build_ref_id(&fn.id, data+id_offset, id_end-id_offset)<0 ) return 0;
2421 2494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2422 2495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* footnote's text may start on the same line */
2496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upc_offset = 0;
2497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( data[i]!='\n' && data[i]!='\r' ){
2498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upc_offset = i; /* prevent a retry on the second line */
2499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upc_size = is_footnote_classlist(data+i,end-i);
2500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( upc_size ){
2501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i += upc_size;
2502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i<end && (data[i]==' ' || data[i]=='\t') ){ i++; }
2503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=end ){
2504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upc_size = 0; /* naked classlist is treated as plain text */
2505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = upc_offset;
2506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2423 2509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( data[i]!='\n' && data[i]!='\r' ){
2424 2510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const size_t j = i;
2425 2511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do i++; while( i<end && data[i]!='\n' && data[i]!='\r' );
2426 2512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&fn.text, data+j, i-j);
2427 2513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<end ){
@@ -2450,10 +2536,25 @@
2450 2536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* process the 2nd and the following lines */
2451 2537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i+indent<end && memcmp(data+i,spaces,indent)==0 ){
2452 2538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t j;
2453 2539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i += indent;
2454 2540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = i;
2541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !upc_offset ){
2542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* a classlist must be provided no later than at the 2nd line */
2543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upc_offset = i + count_whitespaces(data+i, end-i, 1);
2544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upc_size = is_footnote_classlist(data+upc_offset, end-upc_offset);
2545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( upc_size ){
2546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = upc_offset + upc_size;
2547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i<end && (data[i]==' ' || data[i]=='\t') ){ i++; }
2548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=end ){
2549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upc_size = 0; /* naked classlist is treated as plain text */
2550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = j;
2551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j = i;
2553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2455 2556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<end && data[i]!='\n' && data[i]!='\r' ) i++;
2456 2557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(&fn.text, data+j, i-j);
2457 2558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=end ) break;
2458 2559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(&fn.text, data[i]);
2459 2560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
@@ -2470,10 +2571,15 @@
2470 2571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2471 2572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* a valid note has been found */
2472 2573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( last ) *last = i;
2473 2574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( footnotes ){
2474 2575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn.defno = COUNT_FOOTNOTES( footnotes );
2576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( upc_size ){
2577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( upc_offset );
2578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( upc_offset+upc_size < end );
2579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&fn.upc, data+upc_offset, upc_size);
2580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2475 2581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(footnotes, (char *)&fn, sizeof fn);
2476 2582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2477 2583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
2478 2584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2479 2585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -2680,10 +2786,11 @@
2680 2786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( ++j < COUNT_FOOTNOTES(notes) ){
2681 2787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const struct footnote* x = CAST_AS_FOOTNOTES(notes) + j;
2682 2788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !x->nUsed );
2683 2789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !x->bRndred );
2684 2790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (&x->id) + 1 == &x->text ); /* see html_footnote_item() */
2791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (&x->upc)- 1 == &x->text );
2685 2792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.make.footnote_item(all_items,&x->text,0,0,rndr.make.opaque);
2686 2793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2687 2794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rndr.make.footnotes(ob, all_items, rndr.make.opaque);
2688 2795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
release_work_buffer(&rndr, all_items);
2689 2796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -2704,12 +2811,13 @@
2704 2811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&rndr.refs);
2705 2812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fn = CAST_AS_FOOTNOTES( allNotes );
2706 2813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end = COUNT_FOOTNOTES( allNotes );
2707 2814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<end; i++){
2708 2815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(blob_size(&fn[i].id)) blob_reset(&fn[i].id);
2816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(blob_size(&fn[i].upc)) blob_reset(&fn[i].upc);
2709 2817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&fn[i].text);
2710 2818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2711 2819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&rndr.notes.all);
2712 2820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<rndr.nBlobCache; i++){
2713 2821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(rndr.aBlobCache[i]);
2714 2822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2715 2823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2716 2824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!