#include <thmlhtmlhref.h>
Inheritance diagram for ThMLHTMLHREF:


Public Methods | |
| ThMLHTMLHREF () | |
Protected Methods | |
| virtual bool | handleToken (char **buf, const char *token, DualStringMap &userData) |
| This function is called for every token encountered in the input text. More... | |
Definition at line 26 of file thmlhtmlhref.h.
|
||||||||||||||||
|
This function is called for every token encountered in the input text.
Reimplemented from SWBasicFilter. Definition at line 137 of file thmlhtmlhref.cpp. References SWModule::getConfigEntry(), and SWBasicFilter::pushString().
00137 {
00138 const char *tok;
00139 if (!substituteToken(buf, token)) {
00140 // manually process if it wasn't a simple substitution
00141 if (!strncmp(token, "sync ", 5)) {
00142 pushString(buf, "<a href=\"");
00143 for (tok = token + 5; *(tok+1); tok++)
00144 if(*tok != '\"')
00145 *(*buf)++ = *tok;
00146 *(*buf)++ = '\"';
00147 *(*buf)++ = '>';
00148
00149 //scan for value and add it to the buffer
00150 for (tok = token + 5; *tok; tok++) {
00151 if (!strncmp(tok, "value=\"", 7)) {
00152 tok += 7;
00153 for (;*tok != '\"'; tok++)
00154 *(*buf)++ = *tok;
00155 break;
00156 }
00157 }
00158 pushString(buf, "</a>");
00159 }
00160
00161 else if (!strncmp(token, "scripture ", 10)) {
00162 userData["inscriptRef"] = "true";
00163 pushString(buf, "<i>");
00164 }
00165
00166 else if (!strncmp(token, "scripRef p", 10) || !strncmp(token, "scripRef v", 10)) {
00167 userData["inscriptRef"] = "true";
00168 pushString(buf, "<a href=\"");
00169 for (const char *tok = token + 9; *(tok+1); tok++)
00170 if(*tok != '\"')
00171 *(*buf)++ = *tok;
00172 *(*buf)++ = '\"';
00173 *(*buf)++ = '>';
00174 }
00175
00176 // we're starting a scripRef like "<scripRef>John 3:16</scripRef>"
00177 else if (!strcmp(token, "scripRef")) {
00178 userData["inscriptRef"] = "false";
00179 // let's stop text from going to output
00180 userData["suspendTextPassThru"] = "true";
00181 }
00182
00183 // we've ended a scripRef
00184 else if (!strcmp(token, "/scripRef")) {
00185 if (userData["inscriptRef"] == "true") { // like "<scripRef passage="John 3:16">John 3:16</scripRef>"
00186 userData["inscriptRef"] = "false";
00187 pushString(buf, "</a>");
00188 }
00189
00190 else { // like "<scripRef>John 3:16</scripRef>"
00191 pushString(buf, "<a href=\"passage=");
00192 //char *strbuf = (char *)userData["lastTextNode"].c_str();
00193 pushString(buf, userData["lastTextNode"].c_str());
00194 *(*buf)++ = '\"';
00195 *(*buf)++ = '>';
00196 pushString(buf, userData["lastTextNode"].c_str());
00197 // let's let text resume to output again
00198 userData["suspendTextPassThru"] = "false";
00199 pushString(buf, "</a>");
00200 }
00201 }
00202
00203 else if (!strncmp(token, "div class=\"sechead\"", 19)) {
00204 userData["SecHead"] = "true";
00205 pushString(buf, "<br /><b><i>");
00206 }
00207 else if (!strncmp(token, "div class=\"title\"", 19)) {
00208 userData["SecHead"] = "true";
00209 pushString(buf, "<br /><b><i>");
00210 }
00211 else if (!strncmp(token, "/div", 4)) {
00212 if (userData["SecHead"] == "true") {
00213 pushString(buf, "</i></b><br />");
00214 userData["SecHead"] = "false";
00215 }
00216 }
00217
00218 else if (!strncmp(token, "sync type=\"Strongs\" value=\"T", 28)) {
00219 pushString(buf, "<a href=\"");
00220 for (tok = token + 5; *(tok+1); tok++)
00221 if(*tok != '\"')
00222 *(*buf)++ = *tok;
00223 *(*buf)++ = '\"';
00224 *(*buf)++ = '>';
00225 for (tok = token + 29; *(tok+2); tok++)
00226 if(*tok != '\"')
00227 *(*buf)++ = *tok;
00228 pushString(buf, "</a>");
00229 }
00230 else if (!strncmp(token, "img ", 4)) {
00231 const char *src = strstr(token, "src");
00232 if (!src) // assert we have a src attribute
00233 return false;
00234
00235 *(*buf)++ = '<';
00236 for (const char *c = token; *c; c++) {
00237 if (c == src) {
00238 for (;((*c) && (*c != '"')); c++)
00239 *(*buf)++ = *c;
00240
00241 if (!*c) { c--; continue; }
00242
00243 *(*buf)++ = '"';
00244 if (*(c+1) == '/') {
00245 pushString(buf, "file:");
00246 pushString(buf, module->getConfigEntry("AbsoluteDataPath"));
00247 if (*((*buf)-1) == '/')
00248 c++; // skip '/'
00249 }
00250 continue;
00251 }
00252 *(*buf)++ = *c;
00253 }
00254 *(*buf)++ = '>';
00255 }
00256 else if (!strncmp(token, "note", 4)) {
00257 pushString(buf, " <small><font color=\"#800000\">(");
00258 }
00259 else {
00260 *(*buf)++ = '<';
00261 for (const char *tok = token; *tok; tok++)
00262 *(*buf)++ = *tok;
00263 *(*buf)++ = '>';
00264 //return false; // we still didn't handle token
00265 }
00266 }
00267 return true;
00268 }
|
1.2.15