@@ -1066,18 +1066,17 @@
1066 1066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *data,
1067 1067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t offset,
1068 1068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t size
1069 1069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1070 1070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int is_img = (offset && data[-1] == '!');
1071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const int is_inline = (offset && data[-1]=='^');
1072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const int is_note = !is_img && (is_inline || (size>1 && data[1]=='^'));
1073 1071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t i = 1, txt_e;
1074 1072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob *content = 0;
1075 1073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob *link = 0;
1076 1074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob *title = 0;
1077 1075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const struct footnote *fn = 0;
1078 1076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int level, ret;
1077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* ? FIXME: assert( size>0 ); */
1079 1078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1080 1079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* checking whether the correct renderer exists */
1081 1080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){
1082 1081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
1083 1082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1139,23 +1138,33 @@
1139 1138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1140 1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* explicit id - between brackets */
1141 1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
id_data = data+i+1;
1142 1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
id_size = id_end-(i+1);
1143 1142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1144 1144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( get_link_ref(rndr, link, title, id_data, id_size)<0 ){
1145 1145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto char_link_cleanup;
1146 1146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1147 1148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = id_end+1;
1148 1149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1149 1150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* shortcut reference style link */
1150 1151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( is_note ){
1152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( is_inline ){
1153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- //fn = put_footnote(rndr, data+1, txt_e-1);
1154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
1155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fn = get_footnote(rndr, data+1, txt_e-1);
1156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( offset && data[-1]=='^' ){
1153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* free-standing inline note */
1155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct footnote note = {empty_blob,empty_blob,0,0};
1156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ note.index = ++(rndr->iNotesCount);
1157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ note.nUsed = 1;
1158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(¬e.text,data+1,txt_e-1);
1159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&rndr->notes, (char *)¬e, sizeof note);
1160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn = (struct footnote*)(blob_buffer(&rndr->notes)
1161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ + blob_size(&rndr->notes) - sizeof(note));
1162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if(!is_img && size>2 && data[1]=='^'){
1163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* free-standing reference */
1165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn = get_footnote(rndr, data+1, txt_e-1);
1157 1166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !fn ) goto char_link_cleanup;
1158 1167 { 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 ){
1159 1168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto char_link_cleanup;
1160 1169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1161 1170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -1164,18 +1173,20 @@
1164 1173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1165 1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1166 1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* building content: img alt is escaped, link content is parsed */
1167 1176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( txt_e>1 ){
1168 1177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( is_img ) blob_append(content, data+1, txt_e-1);
1169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if(is_inline) parse_inline(content, rndr, data+1, txt_e-1);
1178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if(!fn) parse_inline(content, rndr, data+1, txt_e-1);
1170 1179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1171 1180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1172 1181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* calling the relevant rendering function */
1173 1182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( is_img ){
1174 1183 { 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--;
1175 1184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = rndr->make.image(ob, link, title, content, rndr->make.opaque);
1176 1185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if(fn){
1186 { 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--;
1187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* ? FIXME: the above line looks like a hack */
1177 1188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(rndr->make.footnote_ref){
1178 1189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = rndr->make.footnote_ref(ob,fn->index,fn->nUsed,rndr->make.opaque);
1179 1190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1180 1191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1181 1192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = rndr->make.link(ob, link, title, content, rndr->make.opaque);
@@ -2160,12 +2171,14 @@
2160 2171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2161 2172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2162 2173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i += beg;
2163 2174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2164 2175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* id part: anything but a newline between brackets */
2165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( data[i]!='[' || data[i+1]=='^' ) return 0;
2176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( data[i]!='[' ) return 0;
2166 2177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
2178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=end || data[i]=='^' ) return 0; /* see is_footnote() */
2179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2167 2180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
id_offset = i;
2168 2181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<end && data[i]!='\n' && data[i]!='\r' && data[i]!=']' ){ i++; }
2169 2182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=end || data[i]!=']' ) return 0;
2170 2183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
id_end = i;
2171 2184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -2190,10 +2203,11 @@
2190 2203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& data[i]!='\n'
2191 2204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& data[i]!='\r'
2192 2205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
2193 2206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i += 1;
2194 2207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* ? FIXME: if( data[i-1]=='>' && data[link_offset-1]!='<' ) */
2195 2209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( data[i-1]=='>' ) link_end = i-1; else link_end = i;
2196 2210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2197 2211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* optional spacer: (space | tab)* (newline | '\'' | '"' | '(' ) */
2198 2212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<end && (data[i]==' ' || data[i]=='\t') ){ i++; }
2199 2213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<end
@@ -2253,66 +2267,100 @@
2253 2267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2254 2268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*********************
2255 2269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* FOOTNOTE PARSING *
2256 2270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*********************/
2257 2271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* is_footnote -- returns whether a line is a footnote or not */
2272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* is_footnote -- check if data holds a definition of a labeled footnote.
2273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * If so then append the corresponding element to `footnotes` array */
2259 2274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int is_footnote(
2260 2275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *data, /* input text */
2261 2276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t beg, /* offset of the beginning of the line */
2262 2277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t end, /* offset of the end of the text */
2263 2278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
size_t *last, /* last character of the link */
2264 2279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Blob * footnotes
2265 2280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
2266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t i = 0;
2267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t id_offset, id_end;
2268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t note_offset, note_end;
2269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t line_end;
2281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t i, id_offset, id_end;
2270 2282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct footnote fn = { empty_blob, empty_blob, 0, 0 };
2283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* failfast if data is too short */
2285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( beg+5>=end ) return 0;
2286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = beg;
2271 2287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2272 2288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* footnote definition must start at the begining of a line */
2273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( beg+4>=end ) return 0;
2274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i += beg;
2289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( data[i]!='[' ) return 0;
2290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
2291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( data[i]!='^' ) return 0;
2292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ id_offset = i++;
2275 2293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2276 2294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* id part: anything but a newline between brackets */
2277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( data[i]!='[' || data[i+1]!='^' ) return 0;
2278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i++;
2279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- id_offset = i;
2280 2295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<end && data[i]!=']' && data[i]!='\n' && data[i]!='\r' ){ i++; }
2281 2296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=end || data[i]!=']' ) return 0;
2282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- id_end = i;
2297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ id_end = i++;
2283 2298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* spacer: colon (space | tab)* newline? (space | tab)* */
2285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i++;
2299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* spacer: colon (space | tab)* */
2286 2300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=end || data[i]!=':' ) return 0;
2287 2301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
2288 2302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<end && (data[i]==' ' || data[i]=='\t') ){ i++; }
2289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<end && (data[i]=='\n' || data[i]=='\r') ){
2303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* passthrough truncated footnote definition
2305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * FIXME: maybe omit it? */
2306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=end ) return 0;
2307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2308 { 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;
2309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* footnote's text may start on the same line */
2311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( data[i]!='\n' && data[i]!='\r' ){
2312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const size_t j = i;
2313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do i++; while( i<end && data[i]!='\n' && data[i]!='\r' );
2314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&fn.text, data+j, i-j);
2315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<end ){
2316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(&fn.text, data[i]);
2317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
2318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<end && data[i]=='\r' && data[i-1] == '\n' ){
2319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(&fn.text, data[i]);
2320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
2321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2290 2324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
2291 2325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<end && data[i]=='\r' && data[i-1] == '\n' ) i++;
2292 2326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( i<end && (data[i]==' ' || data[i]=='\t') ){ i++; }
2294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i>=end ) return 0;
2295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
2296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* note is a single line of text (FIXME: support multiline notes) */
2297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- note_offset = i;
2298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( i<end && data[i]!='\r' && data[i]!='\n' ){ i++; }
2299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- note_end = i;
2300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
2301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* computing end-of-line */
2302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- line_end = 0;
2303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i >=end || data[i]=='\r' || data[ i ]=='\n' ) line_end = i;
2304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i+1<end && data[i]=='\n' && data[i+1]=='\r' ) line_end = i+1;
2305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
2306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !line_end ) return 0; /* garbage after the link */
2307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
2308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* a valid note has been found, filling-in note's text */
2309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( last ) *last = line_end;
2310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !footnotes ) return 1;
2311 { 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;
2312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(&fn.text, data+note_offset, note_end-note_offset);
2313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(footnotes, (char *)&fn, sizeof fn);
2327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<end ){
2328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* compute the indentation from the 2nd line */
2330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t indent = i;
2331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *spaces = data+i;
2332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i<end && data[i]==' ' ){ i++; }
2333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=end ) goto footnote_finish;
2334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ indent = i - indent;
2335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i -= indent;
2336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( indent<2 ) goto footnote_finish;
2337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* process the 2nd and the following lines */
2339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i+indent<end && memcmp(data+i,spaces,indent)==0 ){
2340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t j;
2341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i += indent;
2342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j = i;
2343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i<end && data[i]!='\n' && data[i]!='\r' ) i++;
2344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&fn.text, data+j, i-j);
2345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=end ) break;
2346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(&fn.text, data[i]);
2347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
2348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<end && data[i]=='\r' && data[i-1] == '\n' ){
2349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(&fn.text, data[i]);
2350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
2351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ footnote_finish:
2355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !blob_size(&fn.text) ){
2356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&fn.id);
2357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
2358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* a valid note has been found */
2360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( last ) *last = i;
2361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( footnotes ) blob_append(footnotes, (char *)&fn, sizeof fn);
2314 2362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
2315 2363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2316 2364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2317 2365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**********************
2318 2366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* EXPORTED FUNCTIONS *
@@ -2434,13 +2482,13 @@
2434 2482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&lr[i].title);
2435 2483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2436 2484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&rndr.refs);
2437 2485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end = COUNT_FOOTNOTES(&rndr.notes);
2438 2486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<end; i++){
2439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_reset(&fn[i].id);
2487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(blob_size(&fn[i].id)) blob_reset(&fn[i].id);
2440 2488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&fn[i].text);
2441 2489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2442 2490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&rndr.notes);
2443 2491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<rndr.nBlobCache; i++){
2444 2492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(rndr.aBlobCache[i]);
2445 2493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2446 2494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2447 2495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!