Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

gbfhtmlhref.cpp

00001 /***************************************************************************
00002                           gbfhtmlhref.cpp  -   GBF to HTML filter with hrefs 
00003                                 for strongs and morph tags
00004                              -------------------
00005     begin                    : 2001-09-03
00006     copyright            : 2001 by CrossWire Bible Society
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #include <stdlib.h>
00019 #include <string.h>
00020 #include <gbfhtmlhref.h>
00021 
00022 GBFHTMLHREF::GBFHTMLHREF() {
00023         setTokenStart("<");
00024         setTokenEnd(">");
00025         
00026         setTokenCaseSensitive(true);
00027 
00028         addTokenSubstitute("Rf", ")</small></font>");
00029         addTokenSubstitute("Rx", "</a>");
00030         addTokenSubstitute("FI", "<i>"); // italics begin
00031         addTokenSubstitute("Fi", "</i>");
00032         addTokenSubstitute("FB", "<n>"); // bold begin
00033         addTokenSubstitute("Fb", "</n>");
00034         addTokenSubstitute("FR", "<font color=\"#FF0000\">"); // words of Jesus begin
00035         addTokenSubstitute("Fr", "</font>");
00036         addTokenSubstitute("FU", "<u>"); // underline begin
00037         addTokenSubstitute("Fu", "</u>");
00038         addTokenSubstitute("FO", "<cite>"); //  Old Testament quote begin
00039         addTokenSubstitute("Fo", "</cite>");
00040         addTokenSubstitute("FS", "<sup>"); // Superscript begin// Subscript begin
00041         addTokenSubstitute("Fs", "</sup>");
00042         addTokenSubstitute("FV", "<sub>"); // Subscript begin
00043         addTokenSubstitute("Fv", "</sub>");
00044         addTokenSubstitute("TT", "<big>"); // Book title begin
00045         addTokenSubstitute("Tt", "</big>");
00046         addTokenSubstitute("PP", "<cite>"); //  poetry  begin
00047         addTokenSubstitute("Pp", "</cite>");
00048         addTokenSubstitute("Fn", "</font>"); //  font  end
00049         addTokenSubstitute("CL", "<br />"); //  new line
00050         addTokenSubstitute("CM", "<!P><br />"); //  paragraph <!P> is a non showing comment that can be changed in the front end to <P> if desired
00051         addTokenSubstitute("CG", ""); //  ???
00052         addTokenSubstitute("CT", ""); // ???
00053         addTokenSubstitute("JR", "<div align=\"right\">"); // right align begin
00054         addTokenSubstitute("JC", "<div align=\"center\">"); // center align begin
00055         addTokenSubstitute("JL", "</div>"); // align end
00056         
00057 }
00058 
00059 
00060 bool GBFHTMLHREF::handleToken(char **buf, const char *token, DualStringMap &userData) {
00061         const char *tok;
00062 
00063         if (!substituteToken(buf, token)) {
00064                 if (!strncmp(token, "WG", 2) || !strncmp(token, "WH", 2)) { // strong's numbers
00065                         pushString(buf, " <small><em>&lt;<a href=\"#");
00066                         for (tok = token+1; *tok; tok++)
00067                                 //if(token[i] != '\"')
00068                                         *(*buf)++ = *tok;
00069                         *(*buf)++ = '\"';
00070                         *(*buf)++ = '>';
00071                         for (tok = token + 2; *tok; tok++)
00072                                 //if(token[i] != '\"')
00073                                         *(*buf)++ = *tok;
00074                         pushString(buf, "</a>&gt;</em></small>");
00075                 }
00076 
00077                 else if (!strncmp(token, "WTG", 3) || !strncmp(token, "WTH", 3)) { // strong's numbers tense
00078                         pushString(buf, " <small><em>(<A HREF=\"#");
00079                         for (tok = token + 2; *tok; tok++)
00080                                 if(*tok != '\"')
00081                                         *(*buf)++ = *tok;
00082                         *(*buf)++ = '\"';
00083                         *(*buf)++ = '>';
00084                         for (tok = token + 3; *tok; tok++)
00085                                 if(*tok != '\"')
00086                                         *(*buf)++ = *tok;
00087                         pushString(buf, "</a>)</em></small>");
00088                 }
00089 
00090                 else if (!strncmp(token, "WT", 2) && strncmp(token, "WTH", 3) && strncmp(token, "WTG", 3)) { // morph tags
00091                         pushString(buf, " <small><em>(<a href=\"M");
00092                         for (tok = token + 2; *tok; tok++)
00093                                 if(*tok != '\"')
00094                                         *(*buf)++ = *tok;
00095                         *(*buf)++ = '\"';
00096                         *(*buf)++ = '>';
00097                         for (tok = token + 2; *tok; tok++)                              
00098                                 if(*tok != '\"')                        
00099                                         *(*buf)++ = *tok;               
00100                         pushString(buf, "</a>)</em></small>");
00101                 }
00102 
00103                 else if (!strncmp(token, "RX", 2)) {
00104                         pushString(buf, "<a href=\"");
00105                         for (tok = token + 3; *tok; tok++) {
00106                           if(*tok != '<' && *tok+1 != 'R' && *tok+2 != 'x') {
00107                             *(*buf)++ = *tok;
00108                           }
00109                           else {
00110                             break;
00111                           }
00112                         }
00113                         *(*buf)++ = '\"';
00114                         *(*buf)++ = '>';
00115                 }
00116 
00117                 else if (!strncmp(token, "RB", 2)) {
00118                         pushString(buf, "<i>");
00119                         userData["hasFootnotePreTag"] = "true";
00120                 }
00121 
00122                 else if (!strncmp(token, "RF", 2)) {
00123                         if(userData["hasFootnotePreTag"] == "true") {
00124                                 userData["hasFootnotePreTag"] = "false";
00125                                 pushString(buf, "</i> ");
00126                         }
00127                         pushString(buf, "<font color=\"#800000\"><small> (");
00128                 }
00129 
00130                 else if (!strncmp(token, "FN", 2)) {
00131                         pushString(buf, "<font face=\"");
00132                         for (tok = token + 2; *tok; tok++)                              
00133                                 if(*tok != '\"')                        
00134                                         *(*buf)++ = *tok;
00135                         *(*buf)++ = '\"';
00136                         *(*buf)++ = '>';
00137                 }
00138 
00139                 else if (!strncmp(token, "CA", 2)) {    // ASCII value
00140                         *(*buf)++ = (char)atoi(&token[2]);
00141                 }
00142                 
00143                 else {
00144                         return false;
00145                 }
00146         }
00147         return true;
00148 }

Generated on Thu Jun 20 22:12:59 2002 for The Sword Project by doxygen1.2.15