Fossil SCM

Avoid unnecessary quoting of ASCII characters 34 and 39 in the markdown formatter.

drh 2018-09-21 13:57 trunk
Commit 7950dc2297431d373d157a9bcadba1ddecde033f8083ac5970a17b239eca2eac
1 file changed +39 -9
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -48,21 +48,25 @@
4848
/* BLOB_APPEND_BLOB -- append blob contents to another */
4949
#define BLOB_APPEND_BLOB(dest, src) \
5050
blob_append((dest), blob_buffer(src), blob_size(src))
5151
5252
53
-/* HTML escape */
54
-
55
-static void html_escape(struct Blob *ob, const char *data, size_t size){
53
+/* HTML escapes
54
+**
55
+** html_escape() converts < to &lt;, > to &gt;, and & to &amp;.
56
+** html_quote() goes further and converts " into &quot; and ' in &#39;.
57
+*/
58
+static void html_quote(struct Blob *ob, const char *data, size_t size){
5659
size_t beg = 0, i = 0;
5760
while( i<size ){
5861
beg = i;
5962
while( i<size
6063
&& data[i]!='<'
6164
&& data[i]!='>'
6265
&& data[i]!='"'
6366
&& data[i]!='&'
67
+ && data[i]!='\''
6468
){
6569
i++;
6670
}
6771
blob_append(ob, data+beg, i-beg);
6872
while( i<size ){
@@ -80,10 +84,36 @@
8084
break;
8185
}
8286
i++;
8387
}
8488
}
89
+}
90
+static void html_escape(struct Blob *ob, const char *data, size_t size){
91
+ size_t beg = 0, i = 0;
92
+ while( i<size ){
93
+ beg = i;
94
+ while( i<size
95
+ && data[i]!='<'
96
+ && data[i]!='>'
97
+ && data[i]!='&'
98
+ ){
99
+ i++;
100
+ }
101
+ blob_append(ob, data+beg, i-beg);
102
+ while( i<size ){
103
+ if( data[i]=='<' ){
104
+ BLOB_APPEND_LITERAL(ob, "&lt;");
105
+ }else if( data[i]=='>' ){
106
+ BLOB_APPEND_LITERAL(ob, "&gt;");
107
+ }else if( data[i]=='&' ){
108
+ BLOB_APPEND_LITERAL(ob, "&amp;");
109
+ }else{
110
+ break;
111
+ }
112
+ i++;
113
+ }
114
+ }
85115
}
86116
87117
88118
/* HTML block tags */
89119
@@ -283,11 +313,11 @@
283313
void *opaque
284314
){
285315
if( !link || blob_size(link)<=0 ) return 0;
286316
BLOB_APPEND_LITERAL(ob, "<a href=\"");
287317
if( type==MKDA_IMPLICIT_EMAIL ) BLOB_APPEND_LITERAL(ob, "mailto:");
288
- html_escape(ob, blob_buffer(link), blob_size(link));
318
+ html_quote(ob, blob_buffer(link), blob_size(link));
289319
BLOB_APPEND_LITERAL(ob, "\">");
290320
if( type==MKDA_EXPLICIT_EMAIL && blob_size(link)>7 ){
291321
/* remove "mailto:" from displayed text */
292322
html_escape(ob, blob_buffer(link)+7, blob_size(link)-7);
293323
}else{
@@ -336,16 +366,16 @@
336366
struct Blob *title,
337367
struct Blob *alt,
338368
void *opaque
339369
){
340370
BLOB_APPEND_LITERAL(ob, "<img src=\"");
341
- html_escape(ob, blob_buffer(link), blob_size(link));
371
+ html_quote(ob, blob_buffer(link), blob_size(link));
342372
BLOB_APPEND_LITERAL(ob, "\" alt=\"");
343
- html_escape(ob, blob_buffer(alt), blob_size(alt));
373
+ html_quote(ob, blob_buffer(alt), blob_size(alt));
344374
if( title && blob_size(title)>0 ){
345375
BLOB_APPEND_LITERAL(ob, "\" title=\"");
346
- html_escape(ob, blob_buffer(title), blob_size(title));
376
+ html_quote(ob, blob_buffer(title), blob_size(title));
347377
}
348378
BLOB_APPEND_LITERAL(ob, "\" />");
349379
return 1;
350380
}
351381
@@ -366,14 +396,14 @@
366396
if( zLink && zLink[0]=='/' && g.zTop ){
367397
/* For any hyperlink that begins with "/", make it refer to the root
368398
** of the Fossil repository */
369399
blob_append(ob, g.zTop, -1);
370400
}
371
- html_escape(ob, blob_buffer(link), blob_size(link));
401
+ html_quote(ob, blob_buffer(link), blob_size(link));
372402
if( title && blob_size(title)>0 ){
373403
BLOB_APPEND_LITERAL(ob, "\" title=\"");
374
- html_escape(ob, blob_buffer(title), blob_size(title));
404
+ html_quote(ob, blob_buffer(title), blob_size(title));
375405
}
376406
BLOB_APPEND_LITERAL(ob, "\">");
377407
BLOB_APPEND_BLOB(ob, content);
378408
BLOB_APPEND_LITERAL(ob, "</a>");
379409
return 1;
380410
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -48,21 +48,25 @@
48 /* BLOB_APPEND_BLOB -- append blob contents to another */
49 #define BLOB_APPEND_BLOB(dest, src) \
50 blob_append((dest), blob_buffer(src), blob_size(src))
51
52
53 /* HTML escape */
54
55 static void html_escape(struct Blob *ob, const char *data, size_t size){
 
 
 
56 size_t beg = 0, i = 0;
57 while( i<size ){
58 beg = i;
59 while( i<size
60 && data[i]!='<'
61 && data[i]!='>'
62 && data[i]!='"'
63 && data[i]!='&'
 
64 ){
65 i++;
66 }
67 blob_append(ob, data+beg, i-beg);
68 while( i<size ){
@@ -80,10 +84,36 @@
80 break;
81 }
82 i++;
83 }
84 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85 }
86
87
88 /* HTML block tags */
89
@@ -283,11 +313,11 @@
283 void *opaque
284 ){
285 if( !link || blob_size(link)<=0 ) return 0;
286 BLOB_APPEND_LITERAL(ob, "<a href=\"");
287 if( type==MKDA_IMPLICIT_EMAIL ) BLOB_APPEND_LITERAL(ob, "mailto:");
288 html_escape(ob, blob_buffer(link), blob_size(link));
289 BLOB_APPEND_LITERAL(ob, "\">");
290 if( type==MKDA_EXPLICIT_EMAIL && blob_size(link)>7 ){
291 /* remove "mailto:" from displayed text */
292 html_escape(ob, blob_buffer(link)+7, blob_size(link)-7);
293 }else{
@@ -336,16 +366,16 @@
336 struct Blob *title,
337 struct Blob *alt,
338 void *opaque
339 ){
340 BLOB_APPEND_LITERAL(ob, "<img src=\"");
341 html_escape(ob, blob_buffer(link), blob_size(link));
342 BLOB_APPEND_LITERAL(ob, "\" alt=\"");
343 html_escape(ob, blob_buffer(alt), blob_size(alt));
344 if( title && blob_size(title)>0 ){
345 BLOB_APPEND_LITERAL(ob, "\" title=\"");
346 html_escape(ob, blob_buffer(title), blob_size(title));
347 }
348 BLOB_APPEND_LITERAL(ob, "\" />");
349 return 1;
350 }
351
@@ -366,14 +396,14 @@
366 if( zLink && zLink[0]=='/' && g.zTop ){
367 /* For any hyperlink that begins with "/", make it refer to the root
368 ** of the Fossil repository */
369 blob_append(ob, g.zTop, -1);
370 }
371 html_escape(ob, blob_buffer(link), blob_size(link));
372 if( title && blob_size(title)>0 ){
373 BLOB_APPEND_LITERAL(ob, "\" title=\"");
374 html_escape(ob, blob_buffer(title), blob_size(title));
375 }
376 BLOB_APPEND_LITERAL(ob, "\">");
377 BLOB_APPEND_BLOB(ob, content);
378 BLOB_APPEND_LITERAL(ob, "</a>");
379 return 1;
380
--- src/markdown_html.c
+++ src/markdown_html.c
@@ -48,21 +48,25 @@
48 /* BLOB_APPEND_BLOB -- append blob contents to another */
49 #define BLOB_APPEND_BLOB(dest, src) \
50 blob_append((dest), blob_buffer(src), blob_size(src))
51
52
53 /* HTML escapes
54 **
55 ** html_escape() converts < to &lt;, > to &gt;, and & to &amp;.
56 ** html_quote() goes further and converts " into &quot; and ' in &#39;.
57 */
58 static void html_quote(struct Blob *ob, const char *data, size_t size){
59 size_t beg = 0, i = 0;
60 while( i<size ){
61 beg = i;
62 while( i<size
63 && data[i]!='<'
64 && data[i]!='>'
65 && data[i]!='"'
66 && data[i]!='&'
67 && data[i]!='\''
68 ){
69 i++;
70 }
71 blob_append(ob, data+beg, i-beg);
72 while( i<size ){
@@ -80,10 +84,36 @@
84 break;
85 }
86 i++;
87 }
88 }
89 }
90 static void html_escape(struct Blob *ob, const char *data, size_t size){
91 size_t beg = 0, i = 0;
92 while( i<size ){
93 beg = i;
94 while( i<size
95 && data[i]!='<'
96 && data[i]!='>'
97 && data[i]!='&'
98 ){
99 i++;
100 }
101 blob_append(ob, data+beg, i-beg);
102 while( i<size ){
103 if( data[i]=='<' ){
104 BLOB_APPEND_LITERAL(ob, "&lt;");
105 }else if( data[i]=='>' ){
106 BLOB_APPEND_LITERAL(ob, "&gt;");
107 }else if( data[i]=='&' ){
108 BLOB_APPEND_LITERAL(ob, "&amp;");
109 }else{
110 break;
111 }
112 i++;
113 }
114 }
115 }
116
117
118 /* HTML block tags */
119
@@ -283,11 +313,11 @@
313 void *opaque
314 ){
315 if( !link || blob_size(link)<=0 ) return 0;
316 BLOB_APPEND_LITERAL(ob, "<a href=\"");
317 if( type==MKDA_IMPLICIT_EMAIL ) BLOB_APPEND_LITERAL(ob, "mailto:");
318 html_quote(ob, blob_buffer(link), blob_size(link));
319 BLOB_APPEND_LITERAL(ob, "\">");
320 if( type==MKDA_EXPLICIT_EMAIL && blob_size(link)>7 ){
321 /* remove "mailto:" from displayed text */
322 html_escape(ob, blob_buffer(link)+7, blob_size(link)-7);
323 }else{
@@ -336,16 +366,16 @@
366 struct Blob *title,
367 struct Blob *alt,
368 void *opaque
369 ){
370 BLOB_APPEND_LITERAL(ob, "<img src=\"");
371 html_quote(ob, blob_buffer(link), blob_size(link));
372 BLOB_APPEND_LITERAL(ob, "\" alt=\"");
373 html_quote(ob, blob_buffer(alt), blob_size(alt));
374 if( title && blob_size(title)>0 ){
375 BLOB_APPEND_LITERAL(ob, "\" title=\"");
376 html_quote(ob, blob_buffer(title), blob_size(title));
377 }
378 BLOB_APPEND_LITERAL(ob, "\" />");
379 return 1;
380 }
381
@@ -366,14 +396,14 @@
396 if( zLink && zLink[0]=='/' && g.zTop ){
397 /* For any hyperlink that begins with "/", make it refer to the root
398 ** of the Fossil repository */
399 blob_append(ob, g.zTop, -1);
400 }
401 html_quote(ob, blob_buffer(link), blob_size(link));
402 if( title && blob_size(title)>0 ){
403 BLOB_APPEND_LITERAL(ob, "\" title=\"");
404 html_quote(ob, blob_buffer(title), blob_size(title));
405 }
406 BLOB_APPEND_LITERAL(ob, "\">");
407 BLOB_APPEND_BLOB(ob, content);
408 BLOB_APPEND_LITERAL(ob, "</a>");
409 return 1;
410

Keyboard Shortcuts

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