| | @@ -1,7 +1,7 @@ |
| 1 | 1 | /* |
| 2 | | -** Copyright (c) 2007 D. Richard Hipp |
| 2 | +** Copyright (c) 2007, 2009 D. Richard Hipp |
| 3 | 3 | ** |
| 4 | 4 | ** This program is free software; you can redistribute it and/or |
| 5 | 5 | ** modify it under the terms of the GNU General Public |
| 6 | 6 | ** License version 2 as published by the Free Software Foundation. |
| 7 | 7 | ** |
| | @@ -156,56 +156,57 @@ |
| 156 | 156 | ** in aAllowedMarkup[]. |
| 157 | 157 | */ |
| 158 | 158 | #define MARKUP_INVALID 0 |
| 159 | 159 | #define MARKUP_A 1 |
| 160 | 160 | #define MARKUP_ADDRESS 2 |
| 161 | | -#define MARKUP_B 3 |
| 162 | | -#define MARKUP_BIG 4 |
| 163 | | -#define MARKUP_BLOCKQUOTE 5 |
| 164 | | -#define MARKUP_BR 6 |
| 165 | | -#define MARKUP_CENTER 7 |
| 166 | | -#define MARKUP_CITE 8 |
| 167 | | -#define MARKUP_CODE 9 |
| 168 | | -#define MARKUP_DD 10 |
| 169 | | -#define MARKUP_DFN 11 |
| 170 | | -#define MARKUP_DIV 12 |
| 171 | | -#define MARKUP_DL 13 |
| 172 | | -#define MARKUP_DT 14 |
| 173 | | -#define MARKUP_EM 15 |
| 174 | | -#define MARKUP_FONT 16 |
| 175 | | -#define MARKUP_H1 17 |
| 176 | | -#define MARKUP_H2 18 |
| 177 | | -#define MARKUP_H3 19 |
| 178 | | -#define MARKUP_H4 20 |
| 179 | | -#define MARKUP_H5 21 |
| 180 | | -#define MARKUP_H6 22 |
| 181 | | -#define MARKUP_HR 23 |
| 182 | | -#define MARKUP_I 24 |
| 183 | | -#define MARKUP_IMG 25 |
| 184 | | -#define MARKUP_KBD 26 |
| 185 | | -#define MARKUP_LI 27 |
| 186 | | -#define MARKUP_NOBR 28 |
| 187 | | -#define MARKUP_NOWIKI 29 |
| 188 | | -#define MARKUP_OL 30 |
| 189 | | -#define MARKUP_P 31 |
| 190 | | -#define MARKUP_PRE 32 |
| 191 | | -#define MARKUP_S 33 |
| 192 | | -#define MARKUP_SAMP 34 |
| 193 | | -#define MARKUP_SMALL 35 |
| 194 | | -#define MARKUP_STRIKE 36 |
| 195 | | -#define MARKUP_STRONG 37 |
| 196 | | -#define MARKUP_SUB 38 |
| 197 | | -#define MARKUP_SUP 39 |
| 198 | | -#define MARKUP_TABLE 40 |
| 199 | | -#define MARKUP_TD 41 |
| 200 | | -#define MARKUP_TH 42 |
| 201 | | -#define MARKUP_TR 43 |
| 202 | | -#define MARKUP_TT 44 |
| 203 | | -#define MARKUP_U 45 |
| 204 | | -#define MARKUP_UL 46 |
| 205 | | -#define MARKUP_VAR 47 |
| 206 | | -#define MARKUP_VERBATIM 48 |
| 161 | +#define MARKUP_ANNOTATION 3 |
| 162 | +#define MARKUP_B 4 |
| 163 | +#define MARKUP_BIG 5 |
| 164 | +#define MARKUP_BLOCKQUOTE 6 |
| 165 | +#define MARKUP_BR 7 |
| 166 | +#define MARKUP_CENTER 8 |
| 167 | +#define MARKUP_CITE 9 |
| 168 | +#define MARKUP_CODE 10 |
| 169 | +#define MARKUP_DD 11 |
| 170 | +#define MARKUP_DFN 12 |
| 171 | +#define MARKUP_DIV 13 |
| 172 | +#define MARKUP_DL 14 |
| 173 | +#define MARKUP_DT 15 |
| 174 | +#define MARKUP_EM 16 |
| 175 | +#define MARKUP_FONT 17 |
| 176 | +#define MARKUP_H1 18 |
| 177 | +#define MARKUP_H2 19 |
| 178 | +#define MARKUP_H3 20 |
| 179 | +#define MARKUP_H4 21 |
| 180 | +#define MARKUP_H5 22 |
| 181 | +#define MARKUP_H6 23 |
| 182 | +#define MARKUP_HR 24 |
| 183 | +#define MARKUP_I 25 |
| 184 | +#define MARKUP_IMG 26 |
| 185 | +#define MARKUP_KBD 27 |
| 186 | +#define MARKUP_LI 28 |
| 187 | +#define MARKUP_NOBR 29 |
| 188 | +#define MARKUP_NOWIKI 30 |
| 189 | +#define MARKUP_OL 31 |
| 190 | +#define MARKUP_P 32 |
| 191 | +#define MARKUP_PRE 33 |
| 192 | +#define MARKUP_S 34 |
| 193 | +#define MARKUP_SAMP 35 |
| 194 | +#define MARKUP_SMALL 36 |
| 195 | +#define MARKUP_STRIKE 37 |
| 196 | +#define MARKUP_STRONG 38 |
| 197 | +#define MARKUP_SUB 39 |
| 198 | +#define MARKUP_SUP 40 |
| 199 | +#define MARKUP_TABLE 41 |
| 200 | +#define MARKUP_TD 42 |
| 201 | +#define MARKUP_TH 43 |
| 202 | +#define MARKUP_TR 44 |
| 203 | +#define MARKUP_TT 45 |
| 204 | +#define MARKUP_U 46 |
| 205 | +#define MARKUP_UL 47 |
| 206 | +#define MARKUP_VAR 48 |
| 207 | +#define MARKUP_VERBATIM 49 |
| 207 | 208 | |
| 208 | 209 | /* |
| 209 | 210 | ** The various markup is divided into the following types: |
| 210 | 211 | */ |
| 211 | 212 | #define MUTYPE_SINGLE 0x0001 /* <img>, <br>, or <hr> */ |
| | @@ -214,11 +215,11 @@ |
| 214 | 215 | #define MUTYPE_LIST 0x0010 /* Lists. <ol>, <ul>, or <dl> */ |
| 215 | 216 | #define MUTYPE_LI 0x0020 /* List items. <li>, <dd>, <dt> */ |
| 216 | 217 | #define MUTYPE_TABLE 0x0040 /* <table> */ |
| 217 | 218 | #define MUTYPE_TR 0x0080 /* <tr> */ |
| 218 | 219 | #define MUTYPE_TD 0x0100 /* <td> or <th> */ |
| 219 | | -#define MUTYPE_SPECIAL 0x0200 /* <nowiki> or <verbatim> */ |
| 220 | +#define MUTYPE_SPECIAL 0x0200 /* <annotation>, <nowiki> or <verbatim> */ |
| 220 | 221 | #define MUTYPE_HYPERLINK 0x0400 /* <a> */ |
| 221 | 222 | |
| 222 | 223 | /* |
| 223 | 224 | ** These markup types must have an end tag. |
| 224 | 225 | */ |
| | @@ -237,10 +238,11 @@ |
| 237 | 238 | } aMarkup[] = { |
| 238 | 239 | { 0, MARKUP_INVALID, 0, 0 }, |
| 239 | 240 | { "a", MARKUP_A, MUTYPE_HYPERLINK, |
| 240 | 241 | AMSK_HREF|AMSK_NAME }, |
| 241 | 242 | { "address", MARKUP_ADDRESS, MUTYPE_BLOCK, 0 }, |
| 243 | + { "annotation", MARKUP_ANNOTATION, MUTYPE_BLOCK, 0 }, |
| 242 | 244 | { "b", MARKUP_B, MUTYPE_FONT, 0 }, |
| 243 | 245 | { "big", MARKUP_BIG, MUTYPE_FONT, 0 }, |
| 244 | 246 | { "blockquote", MARKUP_BLOCKQUOTE, MUTYPE_BLOCK, 0 }, |
| 245 | 247 | { "br", MARKUP_BR, MUTYPE_SINGLE, AMSK_CLEAR }, |
| 246 | 248 | { "center", MARKUP_CENTER, MUTYPE_BLOCK, 0 }, |
| | @@ -1140,10 +1142,16 @@ |
| 1140 | 1142 | } |
| 1141 | 1143 | case TOKEN_MARKUP: { |
| 1142 | 1144 | const char *zId; |
| 1143 | 1145 | int iDiv; |
| 1144 | 1146 | parseMarkup(&markup, z); |
| 1147 | + |
| 1148 | + /* Annotation markup turns into HTML comment */ |
| 1149 | + if( markup.iCode==MARKUP_ANNOTATION && markup.endTag ){ |
| 1150 | + blob_append(p->pOut, "-->", 3); |
| 1151 | + break; |
| 1152 | + } |
| 1145 | 1153 | |
| 1146 | 1154 | /* Markup of the form </div id=ID> where there is a matching |
| 1147 | 1155 | ** ID somewhere on the stack. Exit the verbatim if were are in |
| 1148 | 1156 | ** it. Pop the stack up to the matching <div>. Discard the |
| 1149 | 1157 | ** </div> |
| | @@ -1166,11 +1174,11 @@ |
| 1166 | 1174 | assert( p->nStack==iDiv+1 ); |
| 1167 | 1175 | p->nStack--; |
| 1168 | 1176 | }else |
| 1169 | 1177 | |
| 1170 | 1178 | /* If within <verbatim id=ID> ignore everything other than |
| 1171 | | - ** </verbatim id=ID> and the </dev id=ID2> above. |
| 1179 | + ** </verbatim id=ID> and the </div id=ID2> above. |
| 1172 | 1180 | */ |
| 1173 | 1181 | if( p->inVerbatim ){ |
| 1174 | 1182 | if( endVerbatim(p, &markup) ){ |
| 1175 | 1183 | p->inVerbatim = 0; |
| 1176 | 1184 | p->state = p->preVerbState; |
| | @@ -1239,10 +1247,17 @@ |
| 1239 | 1247 | p->preVerbState = p->state; |
| 1240 | 1248 | p->state &= ~ALLOW_WIKI; |
| 1241 | 1249 | blob_append(p->pOut, "<pre class='verbatim'>",-1); |
| 1242 | 1250 | p->wantAutoParagraph = 0; |
| 1243 | 1251 | }else |
| 1252 | + |
| 1253 | + /* Annotation markup starts an HTML comment */ |
| 1254 | + if( markup.iCode==MARKUP_ANNOTATION ){ |
| 1255 | + p->wantAutoParagraph = 0; |
| 1256 | + blob_append(p->pOut, "<!-- ", 5); |
| 1257 | + }else |
| 1258 | + |
| 1244 | 1259 | if( markup.iType==MUTYPE_LI ){ |
| 1245 | 1260 | if( backupToType(p, MUTYPE_LIST)==0 ){ |
| 1246 | 1261 | pushStack(p, MARKUP_UL); |
| 1247 | 1262 | blob_append(p->pOut, "<ul>", 4); |
| 1248 | 1263 | } |
| 1249 | 1264 | |