Fossil SCM

Some elements moved to correct order in wiki AllowedMarkup array. Removed hardcoded link in resolveHyperlink and also made it handle outside links, such as http, ftp, mailto, etc... When looking for valid HTML codes, I changed isalpha to isalnum so that H1, H2, etc... would be recognized. Better code for setting inital checkout db entry.

jnc 2007-09-24 01:38 trunk
Commit 55dc2abc60a4692e7b029f3dcbafb986286623ad
2 files changed +1 -1 +22 -13
+1 -1
--- src/db.c
+++ src/db.c
@@ -887,14 +887,14 @@
887887
db_init_database("./_FOSSIL_", zLocalSchema, (char*)0);
888888
db_open_local();
889889
db_lset("repository", blob_str(&path));
890890
vid = db_int(0, "SELECT pid FROM plink y"
891891
" WHERE NOT EXISTS(SELECT 1 FROM plink x WHERE x.cid=y.pid)");
892
- db_lset_int("checkout", vid);
893892
if( vid==0 ){
894893
db_lset_int("checkout", 1);
895894
}else{
895
+ db_lset_int("checkout", vid);
896896
g.argv = azNewArgv;
897897
g.argc = 3;
898898
update_cmd();
899899
}
900900
}
901901
--- src/db.c
+++ src/db.c
@@ -887,14 +887,14 @@
887 db_init_database("./_FOSSIL_", zLocalSchema, (char*)0);
888 db_open_local();
889 db_lset("repository", blob_str(&path));
890 vid = db_int(0, "SELECT pid FROM plink y"
891 " WHERE NOT EXISTS(SELECT 1 FROM plink x WHERE x.cid=y.pid)");
892 db_lset_int("checkout", vid);
893 if( vid==0 ){
894 db_lset_int("checkout", 1);
895 }else{
 
896 g.argv = azNewArgv;
897 g.argc = 3;
898 update_cmd();
899 }
900 }
901
--- src/db.c
+++ src/db.c
@@ -887,14 +887,14 @@
887 db_init_database("./_FOSSIL_", zLocalSchema, (char*)0);
888 db_open_local();
889 db_lset("repository", blob_str(&path));
890 vid = db_int(0, "SELECT pid FROM plink y"
891 " WHERE NOT EXISTS(SELECT 1 FROM plink x WHERE x.cid=y.pid)");
 
892 if( vid==0 ){
893 db_lset_int("checkout", 1);
894 }else{
895 db_lset_int("checkout", vid);
896 g.argv = azNewArgv;
897 g.argc = 3;
898 update_cmd();
899 }
900 }
901
+22 -13
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -126,13 +126,13 @@
126126
** in aAllowedMarkup[].
127127
*/
128128
#define MARKUP_INVALID 255
129129
#define MARKUP_A 0
130130
#define MARKUP_ADDRESS 1
131
-#define MARKUP_BIG 2
132
-#define MARKUP_BLOCKQUOTE 3
133
-#define MARKUP_B 4
131
+#define MARKUP_B 2
132
+#define MARKUP_BIG 3
133
+#define MARKUP_BLOCKQUOTE 4
134134
#define MARKUP_BR 5
135135
#define MARKUP_CENTER 6
136136
#define MARKUP_CITE 7
137137
#define MARKUP_CODE 8
138138
#define MARKUP_DD 9
@@ -155,24 +155,24 @@
155155
#define MARKUP_NOBR 26
156156
#define MARKUP_NOWIKI 27
157157
#define MARKUP_OL 28
158158
#define MARKUP_P 29
159159
#define MARKUP_PRE 30
160
-#define MARKUP_SAMP 31
161
-#define MARKUP_SMALL 32
162
-#define MARKUP_S 33
160
+#define MARKUP_S 31
161
+#define MARKUP_SAMP 32
162
+#define MARKUP_SMALL 33
163163
#define MARKUP_STRIKE 34
164164
#define MARKUP_STRONG 35
165165
#define MARKUP_SUB 36
166166
#define MARKUP_SUP 37
167167
#define MARKUP_TABLE 38
168168
#define MARKUP_TD 39
169169
#define MARKUP_TH 40
170170
#define MARKUP_TR 41
171171
#define MARKUP_TT 42
172
-#define MARKUP_UL 43
173
-#define MARKUP_U 44
172
+#define MARKUP_U 43
173
+#define MARKUP_UL 44
174174
#define MARKUP_VAR 45
175175
#define MARKUP_VERBATIM 46
176176
177177
/*
178178
** The various markup is divided into the following types:
@@ -197,13 +197,13 @@
197197
short int iType; /* The MUTYPE_* code */
198198
int allowedAttr; /* Allowed attributes on this markup */
199199
} aMarkup[] = {
200200
{ "a", MARKUP_A, MUTYPE_HYPERLINK, ATTR_HREF },
201201
{ "address", MARKUP_ADDRESS, MUTYPE_BLOCK, 0 },
202
+ { "b", MARKUP_B, MUTYPE_FONT, 0 },
202203
{ "big", MARKUP_BIG, MUTYPE_FONT, 0 },
203204
{ "blockquote", MARKUP_BLOCKQUOTE, MUTYPE_BLOCK, 0 },
204
- { "b", MARKUP_B, MUTYPE_FONT, 0 },
205205
{ "br", MARKUP_BR, MUTYPE_SINGLE, ATTR_CLEAR },
206206
{ "center", MARKUP_CENTER, MUTYPE_BLOCK, 0 },
207207
{ "cite", MARKUP_CITE, MUTYPE_FONT, 0 },
208208
{ "code", MARKUP_CODE, MUTYPE_FONT, 0 },
209209
{ "dd", MARKUP_DD, MUTYPE_LI, 0 },
@@ -232,13 +232,13 @@
232232
{ "nowiki", MARKUP_NOWIKI, MUTYPE_SPECIAL, 0 },
233233
{ "ol", MARKUP_OL, MUTYPE_LIST,
234234
ATTR_START|ATTR_TYPE|ATTR_COMPACT },
235235
{ "p", MARKUP_P, MUTYPE_BLOCK, ATTR_ALIGN },
236236
{ "pre", MARKUP_PRE, MUTYPE_BLOCK, 0 },
237
+ { "s", MARKUP_S, MUTYPE_FONT, 0 },
237238
{ "samp", MARKUP_SAMP, MUTYPE_FONT, 0 },
238239
{ "small", MARKUP_SMALL, MUTYPE_FONT, 0 },
239
- { "s", MARKUP_S, MUTYPE_FONT, 0 },
240240
{ "strike", MARKUP_STRIKE, MUTYPE_FONT, 0 },
241241
{ "strong", MARKUP_STRONG, MUTYPE_FONT, 0 },
242242
{ "sub", MARKUP_SUB, MUTYPE_FONT, 0 },
243243
{ "sup", MARKUP_SUP, MUTYPE_FONT, 0 },
244244
{ "table", MARKUP_TABLE, MUTYPE_TABLE,
@@ -251,13 +251,13 @@
251251
ATTR_ALIGN|ATTR_BGCOLOR|ATTR_COLSPAN|
252252
ATTR_ROWSPAN|ATTR_VALIGN },
253253
{ "tr", MARKUP_TR, MUTYPE_TR,
254254
ATTR_ALIGN|ATTR_BGCOLOR||ATTR_VALIGN },
255255
{ "tt", MARKUP_TT, MUTYPE_FONT, 0 },
256
+ { "u", MARKUP_U, MUTYPE_FONT, 0 },
256257
{ "ul", MARKUP_UL, MUTYPE_LIST,
257258
ATTR_TYPE|ATTR_COMPACT },
258
- { "u", MARKUP_U, MUTYPE_FONT, 0 },
259259
{ "var", MARKUP_VAR, MUTYPE_FONT, 0 },
260260
{ "verbatim", MARKUP_VERBATIM, MUTYPE_SPECIAL, ATTR_ID },
261261
};
262262
263263
/*
@@ -313,11 +313,11 @@
313313
static int markupLength(const char *z){
314314
int n = 1;
315315
int inparen = 0;
316316
if( z[n]=='/' ){ n++; }
317317
if( !isalpha(z[n]) ) return 0;
318
- while( isalpha(z[n]) ){ n++; }
318
+ while( isalnum(z[n]) ){ n++; }
319319
if( z[n]!='>' && !isspace(z[n]) ) return 0;
320320
while( z[n] && (z[n]!='>' || inparen) ){
321321
if( z[n]=='"' ){
322322
inparen = !inparen;
323323
}
@@ -716,11 +716,20 @@
716716
/*
717717
** Resolve a hyperlink. The argument is the content of the [...]
718718
** in the wiki. Append the URL to the output of the Renderer.
719719
*/
720720
static void resolveHyperlink(const char *zTarget, Renderer *p){
721
- blob_appendf(p->pOut, "http://www.fossil-scm.org/test-%T", zTarget);
721
+ if( strncmp(zTarget, "http:", 5)==0
722
+ || strncmp(zTarget, "https:", 6)==0
723
+ || strncmp(zTarget, "ftp:", 4)==0
724
+ || strncmp(zTarget, "mailto:", 7)==0
725
+ || strncmp(zTarget, "gopher:", 7)==0
726
+ ){
727
+ blob_appendf(p->pOut, zTarget);
728
+ }else{
729
+ blob_appendf(p->pOut, "%s/wiki/%T", g.zBaseURL, zTarget);
730
+ }
722731
}
723732
724733
/*
725734
** Check to see if the given parsed markup is the correct
726735
** </verbatim> tag.
727736
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -126,13 +126,13 @@
126 ** in aAllowedMarkup[].
127 */
128 #define MARKUP_INVALID 255
129 #define MARKUP_A 0
130 #define MARKUP_ADDRESS 1
131 #define MARKUP_BIG 2
132 #define MARKUP_BLOCKQUOTE 3
133 #define MARKUP_B 4
134 #define MARKUP_BR 5
135 #define MARKUP_CENTER 6
136 #define MARKUP_CITE 7
137 #define MARKUP_CODE 8
138 #define MARKUP_DD 9
@@ -155,24 +155,24 @@
155 #define MARKUP_NOBR 26
156 #define MARKUP_NOWIKI 27
157 #define MARKUP_OL 28
158 #define MARKUP_P 29
159 #define MARKUP_PRE 30
160 #define MARKUP_SAMP 31
161 #define MARKUP_SMALL 32
162 #define MARKUP_S 33
163 #define MARKUP_STRIKE 34
164 #define MARKUP_STRONG 35
165 #define MARKUP_SUB 36
166 #define MARKUP_SUP 37
167 #define MARKUP_TABLE 38
168 #define MARKUP_TD 39
169 #define MARKUP_TH 40
170 #define MARKUP_TR 41
171 #define MARKUP_TT 42
172 #define MARKUP_UL 43
173 #define MARKUP_U 44
174 #define MARKUP_VAR 45
175 #define MARKUP_VERBATIM 46
176
177 /*
178 ** The various markup is divided into the following types:
@@ -197,13 +197,13 @@
197 short int iType; /* The MUTYPE_* code */
198 int allowedAttr; /* Allowed attributes on this markup */
199 } aMarkup[] = {
200 { "a", MARKUP_A, MUTYPE_HYPERLINK, ATTR_HREF },
201 { "address", MARKUP_ADDRESS, MUTYPE_BLOCK, 0 },
 
202 { "big", MARKUP_BIG, MUTYPE_FONT, 0 },
203 { "blockquote", MARKUP_BLOCKQUOTE, MUTYPE_BLOCK, 0 },
204 { "b", MARKUP_B, MUTYPE_FONT, 0 },
205 { "br", MARKUP_BR, MUTYPE_SINGLE, ATTR_CLEAR },
206 { "center", MARKUP_CENTER, MUTYPE_BLOCK, 0 },
207 { "cite", MARKUP_CITE, MUTYPE_FONT, 0 },
208 { "code", MARKUP_CODE, MUTYPE_FONT, 0 },
209 { "dd", MARKUP_DD, MUTYPE_LI, 0 },
@@ -232,13 +232,13 @@
232 { "nowiki", MARKUP_NOWIKI, MUTYPE_SPECIAL, 0 },
233 { "ol", MARKUP_OL, MUTYPE_LIST,
234 ATTR_START|ATTR_TYPE|ATTR_COMPACT },
235 { "p", MARKUP_P, MUTYPE_BLOCK, ATTR_ALIGN },
236 { "pre", MARKUP_PRE, MUTYPE_BLOCK, 0 },
 
237 { "samp", MARKUP_SAMP, MUTYPE_FONT, 0 },
238 { "small", MARKUP_SMALL, MUTYPE_FONT, 0 },
239 { "s", MARKUP_S, MUTYPE_FONT, 0 },
240 { "strike", MARKUP_STRIKE, MUTYPE_FONT, 0 },
241 { "strong", MARKUP_STRONG, MUTYPE_FONT, 0 },
242 { "sub", MARKUP_SUB, MUTYPE_FONT, 0 },
243 { "sup", MARKUP_SUP, MUTYPE_FONT, 0 },
244 { "table", MARKUP_TABLE, MUTYPE_TABLE,
@@ -251,13 +251,13 @@
251 ATTR_ALIGN|ATTR_BGCOLOR|ATTR_COLSPAN|
252 ATTR_ROWSPAN|ATTR_VALIGN },
253 { "tr", MARKUP_TR, MUTYPE_TR,
254 ATTR_ALIGN|ATTR_BGCOLOR||ATTR_VALIGN },
255 { "tt", MARKUP_TT, MUTYPE_FONT, 0 },
 
256 { "ul", MARKUP_UL, MUTYPE_LIST,
257 ATTR_TYPE|ATTR_COMPACT },
258 { "u", MARKUP_U, MUTYPE_FONT, 0 },
259 { "var", MARKUP_VAR, MUTYPE_FONT, 0 },
260 { "verbatim", MARKUP_VERBATIM, MUTYPE_SPECIAL, ATTR_ID },
261 };
262
263 /*
@@ -313,11 +313,11 @@
313 static int markupLength(const char *z){
314 int n = 1;
315 int inparen = 0;
316 if( z[n]=='/' ){ n++; }
317 if( !isalpha(z[n]) ) return 0;
318 while( isalpha(z[n]) ){ n++; }
319 if( z[n]!='>' && !isspace(z[n]) ) return 0;
320 while( z[n] && (z[n]!='>' || inparen) ){
321 if( z[n]=='"' ){
322 inparen = !inparen;
323 }
@@ -716,11 +716,20 @@
716 /*
717 ** Resolve a hyperlink. The argument is the content of the [...]
718 ** in the wiki. Append the URL to the output of the Renderer.
719 */
720 static void resolveHyperlink(const char *zTarget, Renderer *p){
721 blob_appendf(p->pOut, "http://www.fossil-scm.org/test-%T", zTarget);
 
 
 
 
 
 
 
 
 
722 }
723
724 /*
725 ** Check to see if the given parsed markup is the correct
726 ** </verbatim> tag.
727
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -126,13 +126,13 @@
126 ** in aAllowedMarkup[].
127 */
128 #define MARKUP_INVALID 255
129 #define MARKUP_A 0
130 #define MARKUP_ADDRESS 1
131 #define MARKUP_B 2
132 #define MARKUP_BIG 3
133 #define MARKUP_BLOCKQUOTE 4
134 #define MARKUP_BR 5
135 #define MARKUP_CENTER 6
136 #define MARKUP_CITE 7
137 #define MARKUP_CODE 8
138 #define MARKUP_DD 9
@@ -155,24 +155,24 @@
155 #define MARKUP_NOBR 26
156 #define MARKUP_NOWIKI 27
157 #define MARKUP_OL 28
158 #define MARKUP_P 29
159 #define MARKUP_PRE 30
160 #define MARKUP_S 31
161 #define MARKUP_SAMP 32
162 #define MARKUP_SMALL 33
163 #define MARKUP_STRIKE 34
164 #define MARKUP_STRONG 35
165 #define MARKUP_SUB 36
166 #define MARKUP_SUP 37
167 #define MARKUP_TABLE 38
168 #define MARKUP_TD 39
169 #define MARKUP_TH 40
170 #define MARKUP_TR 41
171 #define MARKUP_TT 42
172 #define MARKUP_U 43
173 #define MARKUP_UL 44
174 #define MARKUP_VAR 45
175 #define MARKUP_VERBATIM 46
176
177 /*
178 ** The various markup is divided into the following types:
@@ -197,13 +197,13 @@
197 short int iType; /* The MUTYPE_* code */
198 int allowedAttr; /* Allowed attributes on this markup */
199 } aMarkup[] = {
200 { "a", MARKUP_A, MUTYPE_HYPERLINK, ATTR_HREF },
201 { "address", MARKUP_ADDRESS, MUTYPE_BLOCK, 0 },
202 { "b", MARKUP_B, MUTYPE_FONT, 0 },
203 { "big", MARKUP_BIG, MUTYPE_FONT, 0 },
204 { "blockquote", MARKUP_BLOCKQUOTE, MUTYPE_BLOCK, 0 },
 
205 { "br", MARKUP_BR, MUTYPE_SINGLE, ATTR_CLEAR },
206 { "center", MARKUP_CENTER, MUTYPE_BLOCK, 0 },
207 { "cite", MARKUP_CITE, MUTYPE_FONT, 0 },
208 { "code", MARKUP_CODE, MUTYPE_FONT, 0 },
209 { "dd", MARKUP_DD, MUTYPE_LI, 0 },
@@ -232,13 +232,13 @@
232 { "nowiki", MARKUP_NOWIKI, MUTYPE_SPECIAL, 0 },
233 { "ol", MARKUP_OL, MUTYPE_LIST,
234 ATTR_START|ATTR_TYPE|ATTR_COMPACT },
235 { "p", MARKUP_P, MUTYPE_BLOCK, ATTR_ALIGN },
236 { "pre", MARKUP_PRE, MUTYPE_BLOCK, 0 },
237 { "s", MARKUP_S, MUTYPE_FONT, 0 },
238 { "samp", MARKUP_SAMP, MUTYPE_FONT, 0 },
239 { "small", MARKUP_SMALL, MUTYPE_FONT, 0 },
 
240 { "strike", MARKUP_STRIKE, MUTYPE_FONT, 0 },
241 { "strong", MARKUP_STRONG, MUTYPE_FONT, 0 },
242 { "sub", MARKUP_SUB, MUTYPE_FONT, 0 },
243 { "sup", MARKUP_SUP, MUTYPE_FONT, 0 },
244 { "table", MARKUP_TABLE, MUTYPE_TABLE,
@@ -251,13 +251,13 @@
251 ATTR_ALIGN|ATTR_BGCOLOR|ATTR_COLSPAN|
252 ATTR_ROWSPAN|ATTR_VALIGN },
253 { "tr", MARKUP_TR, MUTYPE_TR,
254 ATTR_ALIGN|ATTR_BGCOLOR||ATTR_VALIGN },
255 { "tt", MARKUP_TT, MUTYPE_FONT, 0 },
256 { "u", MARKUP_U, MUTYPE_FONT, 0 },
257 { "ul", MARKUP_UL, MUTYPE_LIST,
258 ATTR_TYPE|ATTR_COMPACT },
 
259 { "var", MARKUP_VAR, MUTYPE_FONT, 0 },
260 { "verbatim", MARKUP_VERBATIM, MUTYPE_SPECIAL, ATTR_ID },
261 };
262
263 /*
@@ -313,11 +313,11 @@
313 static int markupLength(const char *z){
314 int n = 1;
315 int inparen = 0;
316 if( z[n]=='/' ){ n++; }
317 if( !isalpha(z[n]) ) return 0;
318 while( isalnum(z[n]) ){ n++; }
319 if( z[n]!='>' && !isspace(z[n]) ) return 0;
320 while( z[n] && (z[n]!='>' || inparen) ){
321 if( z[n]=='"' ){
322 inparen = !inparen;
323 }
@@ -716,11 +716,20 @@
716 /*
717 ** Resolve a hyperlink. The argument is the content of the [...]
718 ** in the wiki. Append the URL to the output of the Renderer.
719 */
720 static void resolveHyperlink(const char *zTarget, Renderer *p){
721 if( strncmp(zTarget, "http:", 5)==0
722 || strncmp(zTarget, "https:", 6)==0
723 || strncmp(zTarget, "ftp:", 4)==0
724 || strncmp(zTarget, "mailto:", 7)==0
725 || strncmp(zTarget, "gopher:", 7)==0
726 ){
727 blob_appendf(p->pOut, zTarget);
728 }else{
729 blob_appendf(p->pOut, "%s/wiki/%T", g.zBaseURL, zTarget);
730 }
731 }
732
733 /*
734 ** Check to see if the given parsed markup is the correct
735 ** </verbatim> tag.
736

Keyboard Shortcuts

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