[sword-devel] forget the patch
Terry Biggs
sword-devel@crosswire.org
09 Jan 2003 15:54:01 -0500
--=-oYeu79JKqieiEM92DZGx
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
Sorry Troy I just can't get the dif right so here is the whole file
--
Terry Biggs <tbiggs@infinet.com>
http://gnomesword.sf.net
--=-oYeu79JKqieiEM92DZGx
Content-Disposition: attachment; filename=gbfhtmlhref.cpp
Content-Type: text/x-c++; name=gbfhtmlhref.cpp; charset=UTF-8
Content-Transfer-Encoding: 7bit
/***************************************************************************
gbfhtmlhref.cpp - GBF to HTML filter with hrefs
for strongs and morph tags
-------------------
begin : 2001-09-03
copyright : 2001 by CrossWire Bible Society
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <stdlib.h>
#include <string.h>
#include <gbfhtmlhref.h>
#include <ctype.h>
#include <string>
using std::string;
SWORD_NAMESPACE_START
GBFHTMLHREF::GBFHTMLHREF() {
setTokenStart("<");
setTokenEnd(">");
setTokenCaseSensitive(true);
addTokenSubstitute("Rf", ")</small></font>");
addTokenSubstitute("Rx", "</a>");
addTokenSubstitute("FI", "<i>"); // italics begin
addTokenSubstitute("Fi", "</i>");
addTokenSubstitute("FB", "<n>"); // bold begin
addTokenSubstitute("Fb", "</n>");
addTokenSubstitute("FR", "<font color=\"#FF0000\">"); // words of Jesus begin
addTokenSubstitute("Fr", "</font>");
addTokenSubstitute("FU", "<u>"); // underline begin
addTokenSubstitute("Fu", "</u>");
addTokenSubstitute("FO", "<cite>"); // Old Testament quote begin
addTokenSubstitute("Fo", "</cite>");
addTokenSubstitute("FS", "<sup>"); // Superscript begin// Subscript begin
addTokenSubstitute("Fs", "</sup>");
addTokenSubstitute("FV", "<sub>"); // Subscript begin
addTokenSubstitute("Fv", "</sub>");
addTokenSubstitute("TT", "<big>"); // Book title begin
addTokenSubstitute("Tt", "</big>");
addTokenSubstitute("PP", "<cite>"); // poetry begin
addTokenSubstitute("Pp", "</cite>");
addTokenSubstitute("Fn", "</font>"); // font end
addTokenSubstitute("CL", "<br />"); // new line
addTokenSubstitute("CM", "<!P><br />"); // paragraph <!P> is a non showing comment that can be changed in the front end to <P> if desired
addTokenSubstitute("CG", ""); // ???
addTokenSubstitute("CT", ""); // ???
addTokenSubstitute("JR", "<div align=\"right\">"); // right align begin
addTokenSubstitute("JC", "<div align=\"center\">"); // center align begin
addTokenSubstitute("JL", "</div>"); // align end
}
bool GBFHTMLHREF::handleToken(char **buf, const char *token, DualStringMap &userData) {
const char *tok;
char val[128];
char *valto;
char *num;
if (!substituteToken(buf, token)) {
// deal with OSIS note tags. Just hide till OSISRTF
if (!strncmp(token, "note ", 5)) {
// let's stop text from going to output
userData["suspendTextPassThru"] = "true";
}
else if (!strncmp(token, "/note", 5)) {
userData["suspendTextPassThru"] = "false";
}
else if (!strncmp(token, "w", 1)) {
// OSIS Word (temporary until OSISRTF is done)
valto = val;
num = strstr(token, "lemma=\"x-Strongs:");
if (num) {
for (num+=17; ((*num) && (*num != '\"')); num++)
*valto++ = *num;
*valto = 0;
if (atoi((!isdigit(*val))?val+1:val) < 5627) {
pushString(buf, " <small><em><<a href=\"type=Strongs value=");
for (tok = val; *tok; tok++)
*(*buf)++ = *tok;
*(*buf)++ = '\"';
*(*buf)++ = '>';
for (tok = (!isdigit(*val))?val+1:val; *tok; tok++)
*(*buf)++ = *tok;
pushString(buf, "</a>></em></small> ");
//cout << buf;
}
/* forget these for now
else {
// verb morph
sprintf(wordstr, "%03d", word-1);
module->getEntryAttributes()["Word"][wordstr]["Morph"] = val;
}
*/
}
valto = val;
num = strstr(token, "morph=\"x-Robinson:");
if (num) {
for (num+=18; ((*num) && (*num != '\"')); num++)
*valto++ = *num;
*valto = 0;
pushString(buf, " <small><em>(<a href=\"type=morph class=Robinson value=");
for (tok = val; *tok; tok++)
// normal robinsons tense
*(*buf)++ = *tok;
*(*buf)++ = '\"';
*(*buf)++ = '>';
for (tok = val; *tok; tok++)
//if(*tok != '\"')
*(*buf)++ = *tok;
pushString(buf, "</a>)</em></small> ");
}
}
else if (!strncmp(token, "WG", 2) || !strncmp(token, "WH", 2)) { // strong's numbers
pushString(buf, " <small><em><<a href=\"type=Strongs value=");
for (tok = token+1; *tok; tok++)
//if(token[i] != '\"')
*(*buf)++ = *tok;
*(*buf)++ = '\"';
*(*buf)++ = '>';
for (tok = token + 2; *tok; tok++)
//if(token[i] != '\"')
*(*buf)++ = *tok;
pushString(buf, "</a>></em></small>");
}
else if (!strncmp(token, "WTG", 3) || !strncmp(token, "WTH", 3)) { // strong's numbers tense
pushString(buf, " <small><em><<a href=\"type=Strongs value=");
for (tok = token + 2; *tok; tok++)
if(*tok != '\"')
*(*buf)++ = *tok;
*(*buf)++ = '\"';
*(*buf)++ = '>';
for (tok = token + 3; *tok; tok++)
if(*tok != '\"')
*(*buf)++ = *tok;
pushString(buf, "</a>)</em></small>");
}
else if (!strncmp(token, "WT", 2) && strncmp(token, "WTH", 3) && strncmp(token, "WTG", 3)) { // morph tags
pushString(buf, " <small><em>(<a href=\"type=morph class=none value=");
for (tok = token + 2; *tok; tok++)
if(*tok != '\"')
*(*buf)++ = *tok;
*(*buf)++ = '\"';
*(*buf)++ = '>';
for (tok = token + 2; *tok; tok++)
if(*tok != '\"')
*(*buf)++ = *tok;
pushString(buf, "</a>)</em></small>");
}
else if (!strncmp(token, "RX", 2)) {
pushString(buf, "<a href=\"");
for (tok = token + 3; *tok; tok++) {
if(*tok != '<' && *tok+1 != 'R' && *tok+2 != 'x') {
*(*buf)++ = *tok;
}
else {
break;
}
}
*(*buf)++ = '\"';
*(*buf)++ = '>';
}
else if (!strncmp(token, "RB", 2)) {
pushString(buf, "<i>");
userData["hasFootnotePreTag"] = "true";
}
else if (!strncmp(token, "RF", 2)) {
if(userData["hasFootnotePreTag"] == "true") {
userData["hasFootnotePreTag"] = "false";
pushString(buf, "</i> ");
}
pushString(buf, "<font color=\"#800000\"><small> (");
}
else if (!strncmp(token, "FN", 2)) {
pushString(buf, "<font face=\"");
for (tok = token + 2; *tok; tok++)
if(*tok != '\"')
*(*buf)++ = *tok;
*(*buf)++ = '\"';
*(*buf)++ = '>';
}
else if (!strncmp(token, "CA", 2)) { // ASCII value
*(*buf)++ = (char)atoi(&token[2]);
}
else {
return false;
}
}
return true;
}
SWORD_NAMESPACE_END
--=-oYeu79JKqieiEM92DZGx--