00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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>");
00031 addTokenSubstitute("Fi", "</i>");
00032 addTokenSubstitute("FB", "<n>");
00033 addTokenSubstitute("Fb", "</n>");
00034 addTokenSubstitute("FR", "<font color=\"#FF0000\">");
00035 addTokenSubstitute("Fr", "</font>");
00036 addTokenSubstitute("FU", "<u>");
00037 addTokenSubstitute("Fu", "</u>");
00038 addTokenSubstitute("FO", "<cite>");
00039 addTokenSubstitute("Fo", "</cite>");
00040 addTokenSubstitute("FS", "<sup>");
00041 addTokenSubstitute("Fs", "</sup>");
00042 addTokenSubstitute("FV", "<sub>");
00043 addTokenSubstitute("Fv", "</sub>");
00044 addTokenSubstitute("TT", "<big>");
00045 addTokenSubstitute("Tt", "</big>");
00046 addTokenSubstitute("PP", "<cite>");
00047 addTokenSubstitute("Pp", "</cite>");
00048 addTokenSubstitute("Fn", "</font>");
00049 addTokenSubstitute("CL", "<br />");
00050 addTokenSubstitute("CM", "<!P><br />");
00051 addTokenSubstitute("CG", "");
00052 addTokenSubstitute("CT", "");
00053 addTokenSubstitute("JR", "<div align=\"right\">");
00054 addTokenSubstitute("JC", "<div align=\"center\">");
00055 addTokenSubstitute("JL", "</div>");
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)) {
00065 pushString(buf, " <small><em><<a href=\"#");
00066 for (tok = token+1; *tok; tok++)
00067
00068 *(*buf)++ = *tok;
00069 *(*buf)++ = '\"';
00070 *(*buf)++ = '>';
00071 for (tok = token + 2; *tok; tok++)
00072
00073 *(*buf)++ = *tok;
00074 pushString(buf, "</a>></em></small>");
00075 }
00076
00077 else if (!strncmp(token, "WTG", 3) || !strncmp(token, "WTH", 3)) {
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)) {
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)) {
00140 *(*buf)++ = (char)atoi(&token[2]);
00141 }
00142
00143 else {
00144 return false;
00145 }
00146 }
00147 return true;
00148 }