summaryrefslogtreecommitdiff
path: root/src/modules/filters/teirtf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/filters/teirtf.cpp')
-rw-r--r--src/modules/filters/teirtf.cpp416
1 files changed, 208 insertions, 208 deletions
diff --git a/src/modules/filters/teirtf.cpp b/src/modules/filters/teirtf.cpp
index 8e135b5..979e4a6 100644
--- a/src/modules/filters/teirtf.cpp
+++ b/src/modules/filters/teirtf.cpp
@@ -1,208 +1,208 @@
-/***************************************************************************
- * teirtf.cpp - TEI to RTF filter
- * -------------------
- * begin : 2006-07-03
- * copyright : 2006 by CrossWire Bible Society
- *
- * Copyright 2009 CrossWire Bible Society (http://www.crosswire.org)
- * CrossWire Bible Society
- * P. O. Box 2528
- * Tempe, AZ 85280-2528
- *
- * 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 version 2.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- */
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <teirtf.h>
-#include <utilxml.h>
-#include <swmodule.h>
-#include <versekey.h>
-
-SWORD_NAMESPACE_START
-
-
-TEIRTF::MyUserData::MyUserData(const SWModule *module, const SWKey *key) : BasicFilterUserData(module, key) {
- BiblicalText = false;
- inOsisRef = false;
- if (module) {
- version = module->Name();
- BiblicalText = (!strcmp(module->Type(), "Biblical Texts"));
- }
-}
-
-
-TEIRTF::TEIRTF() {
- setTokenStart("<");
- setTokenEnd(">");
-
- setEscapeStart("&");
- setEscapeEnd(";");
-
- setEscapeStringCaseSensitive(true);
-
- addEscapeStringSubstitute("amp", "&");
- addEscapeStringSubstitute("apos", "'");
- addEscapeStringSubstitute("lt", "<");
- addEscapeStringSubstitute("gt", ">");
- addEscapeStringSubstitute("quot", "\"");
-
- setTokenCaseSensitive(true);
-}
-
-
-bool TEIRTF::handleToken(SWBuf &buf, const char *token, BasicFilterUserData *userData) {
- // manually process if it wasn't a simple substitution
- if (!substituteToken(buf, token)) {
- MyUserData *u = (MyUserData *)userData;
- XMLTag tag(token);
-
- // <p> paragraph tag
- if (!strcmp(tag.getName(), "p")) {
- if (!tag.isEndTag()) { // non-empty start tag
- buf += "{\\sb100\\fi200\\par}";
- }
- }
-
- // <hi>
- else if (!strcmp(tag.getName(), "hi") || !strcmp(tag.getName(), "emph")) {
- SWBuf rend = tag.getAttribute("rend");
- if ((!tag.isEndTag()) && (!tag.isEmpty())) {
- if (rend == "ital" || rend == "italic")
- buf += "{\\i1 ";
- else if (rend == "bold")
- buf += "{\\b1 ";
- else if (rend == "sup")
- buf += "{\\super ";
-
- }
- else if (tag.isEndTag()) {
- buf += "}";
- }
- }
-
- // <entryFree>
- else if (!strcmp(tag.getName(), "entryFree")) {
- SWBuf n = tag.getAttribute("n");
- if ((!tag.isEndTag()) && (!tag.isEmpty())) {
- if (n != "") {
- buf += "{\\b1 ";
- buf += n;
- buf += ". }"; }
- }
- }
-
- // <sense>
- else if (!strcmp(tag.getName(), "sense")) {
- SWBuf n = tag.getAttribute("n");
- if ((!tag.isEndTag()) && (!tag.isEmpty())) {
- if (n != "") {
- buf += "{\\sb100\\par\\b1 ";
- buf += n;
- buf += ". }";
- }
- }
- }
-
- // <div>
- else if (!strcmp(tag.getName(), "div")) {
-
- if ((!tag.isEndTag()) && (!tag.isEmpty())) {
- buf.append("{\\pard\\sa300}");
- }
- else if (tag.isEndTag()) {
- }
- }
-
- // <pos>, <gen>, <case>, <gram>, <number>, <mood>
- else if (!strcmp(tag.getName(), "pos") || !strcmp(tag.getName(), "gen") || !strcmp(tag.getName(), "case") || !strcmp(tag.getName(), "gram") || !strcmp(tag.getName(), "number") || !strcmp(tag.getName(), "mood")) {
- if ((!tag.isEndTag()) && (!tag.isEmpty())) {
- buf += "{\\i1 ";
- }
- else if (tag.isEndTag()) {
- buf += "}";
- }
- }
-
- // <tr>
- else if (!strcmp(tag.getName(), "tr")) {
- if ((!tag.isEndTag()) && (!tag.isEmpty())) {
- buf += "{\\i1 ";
- }
- else if (tag.isEndTag()) {
- buf += "}";
- }
- }
-
- // <etym>
- else if (!strcmp(tag.getName(), "etym")) {
- if ((!tag.isEndTag()) && (!tag.isEmpty())) {
- buf += "[";
- }
- else if (tag.isEndTag()) {
- buf += "]";
- }
- }
-
- // <note> tag
- else if (!strcmp(tag.getName(), "note")) {
- if (!tag.isEndTag()) {
- if (!tag.isEmpty()) {
- SWBuf type = tag.getAttribute("type");
-
- SWBuf footnoteNumber = tag.getAttribute("swordFootnote");
- VerseKey *vkey = 0;
- // see if we have a VerseKey * or descendant
- SWTRY {
- vkey = SWDYNAMIC_CAST(VerseKey, u->key);
- }
- SWCATCH ( ... ) { }
- if (vkey) {
- buf.appendFormatted("{\\super <a href=\"\">*%s</a>} ", footnoteNumber.c_str());
- }
- u->suspendTextPassThru = true;
- }
- }
- if (tag.isEndTag()) {
- u->suspendTextPassThru = false;
- }
- }
-
- // <lb/> tag
- else if (!strcmp(tag.getName(), "lb")) {
- buf += "{\\par}";
- userData->supressAdjacentWhitespace = true;
- }
-
- // <ref> tag
- else if (!strcmp(tag.getName(), "ref")) {
- if (!tag.isEndTag() && tag.getAttribute("osisRef")) {
- buf += "{<a href=\"\">";
- u->inOsisRef = true;
- }
- else if (tag.isEndTag() && u->inOsisRef) {
- buf += "</a>}";
- u->inOsisRef = false;
- }
- }
-
-
- else {
- return false; // we still didn't handle token
- }
-
- }
- return true;
-}
-
-
-SWORD_NAMESPACE_END
-
+/***************************************************************************
+ *
+ * teirtf.cpp - TEI to RTF filter
+ *
+ * $Id: teirtf.cpp 2833 2013-06-29 06:40:28Z chrislit $
+ *
+ * Copyright 2006-2013 CrossWire Bible Society (http://www.crosswire.org)
+ * CrossWire Bible Society
+ * P. O. Box 2528
+ * Tempe, AZ 85280-2528
+ *
+ * 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 version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#include <stdlib.h>
+#include <ctype.h>
+#include <teirtf.h>
+#include <utilxml.h>
+#include <swmodule.h>
+#include <versekey.h>
+
+SWORD_NAMESPACE_START
+
+
+TEIRTF::MyUserData::MyUserData(const SWModule *module, const SWKey *key) : BasicFilterUserData(module, key) {
+ BiblicalText = false;
+ inOsisRef = false;
+ if (module) {
+ version = module->getName();
+ BiblicalText = (!strcmp(module->getType(), "Biblical Texts"));
+ }
+}
+
+
+TEIRTF::TEIRTF() {
+ setTokenStart("<");
+ setTokenEnd(">");
+
+ setEscapeStart("&");
+ setEscapeEnd(";");
+
+ setEscapeStringCaseSensitive(true);
+
+ addEscapeStringSubstitute("amp", "&");
+ addEscapeStringSubstitute("apos", "'");
+ addEscapeStringSubstitute("lt", "<");
+ addEscapeStringSubstitute("gt", ">");
+ addEscapeStringSubstitute("quot", "\"");
+
+ setTokenCaseSensitive(true);
+}
+
+
+bool TEIRTF::handleToken(SWBuf &buf, const char *token, BasicFilterUserData *userData) {
+ // manually process if it wasn't a simple substitution
+ if (!substituteToken(buf, token)) {
+ MyUserData *u = (MyUserData *)userData;
+ XMLTag tag(token);
+
+ // <p> paragraph tag
+ if (!strcmp(tag.getName(), "p")) {
+ if (!tag.isEndTag()) { // non-empty start tag
+ buf += "{\\sb100\\fi200\\par}";
+ }
+ }
+
+ // <hi>
+ else if (!strcmp(tag.getName(), "hi") || !strcmp(tag.getName(), "emph")) {
+ SWBuf rend = tag.getAttribute("rend");
+ if ((!tag.isEndTag()) && (!tag.isEmpty())) {
+ if (rend == "ital" || rend == "italic")
+ buf += "{\\i1 ";
+ else if (rend == "bold")
+ buf += "{\\b1 ";
+ else if (rend == "sup")
+ buf += "{\\super ";
+
+ }
+ else if (tag.isEndTag()) {
+ buf += "}";
+ }
+ }
+
+ // <entryFree>
+ else if (!strcmp(tag.getName(), "entryFree")) {
+ SWBuf n = tag.getAttribute("n");
+ if ((!tag.isEndTag()) && (!tag.isEmpty())) {
+ if (n != "") {
+ buf += "{\\b1 ";
+ buf += n;
+ buf += ". }"; }
+ }
+ }
+
+ // <sense>
+ else if (!strcmp(tag.getName(), "sense")) {
+ SWBuf n = tag.getAttribute("n");
+ if ((!tag.isEndTag()) && (!tag.isEmpty())) {
+ if (n != "") {
+ buf += "{\\sb100\\par\\b1 ";
+ buf += n;
+ buf += ". }";
+ }
+ }
+ }
+
+ // <div>
+ else if (!strcmp(tag.getName(), "div")) {
+
+ if ((!tag.isEndTag()) && (!tag.isEmpty())) {
+ buf.append("{\\pard\\sa300}");
+ }
+ else if (tag.isEndTag()) {
+ }
+ }
+
+ // <pos>, <gen>, <case>, <gram>, <number>, <mood>
+ else if (!strcmp(tag.getName(), "pos") || !strcmp(tag.getName(), "gen") || !strcmp(tag.getName(), "case") || !strcmp(tag.getName(), "gram") || !strcmp(tag.getName(), "number") || !strcmp(tag.getName(), "mood")) {
+ if ((!tag.isEndTag()) && (!tag.isEmpty())) {
+ buf += "{\\i1 ";
+ }
+ else if (tag.isEndTag()) {
+ buf += "}";
+ }
+ }
+
+ // <tr>
+ else if (!strcmp(tag.getName(), "tr")) {
+ if ((!tag.isEndTag()) && (!tag.isEmpty())) {
+ buf += "{\\i1 ";
+ }
+ else if (tag.isEndTag()) {
+ buf += "}";
+ }
+ }
+
+ // <etym>
+ else if (!strcmp(tag.getName(), "etym")) {
+ if ((!tag.isEndTag()) && (!tag.isEmpty())) {
+ buf += "[";
+ }
+ else if (tag.isEndTag()) {
+ buf += "]";
+ }
+ }
+
+ // <note> tag
+ else if (!strcmp(tag.getName(), "note")) {
+ if (!tag.isEndTag()) {
+ if (!tag.isEmpty()) {
+ SWBuf type = tag.getAttribute("type");
+
+ SWBuf footnoteNumber = tag.getAttribute("swordFootnote");
+ VerseKey *vkey = 0;
+ // see if we have a VerseKey * or descendant
+ SWTRY {
+ vkey = SWDYNAMIC_CAST(VerseKey, u->key);
+ }
+ SWCATCH ( ... ) { }
+ if (vkey) {
+ buf.appendFormatted("{\\super <a href=\"\">*%s</a>} ", footnoteNumber.c_str());
+ }
+ u->suspendTextPassThru = true;
+ }
+ }
+ if (tag.isEndTag()) {
+ u->suspendTextPassThru = false;
+ }
+ }
+
+ // <lb/> tag
+ else if (!strcmp(tag.getName(), "lb")) {
+ buf += "{\\par}";
+ userData->supressAdjacentWhitespace = true;
+ }
+
+ // <ref> tag
+ else if (!strcmp(tag.getName(), "ref")) {
+ if (!tag.isEndTag() && tag.getAttribute("osisRef")) {
+ buf += "{<a href=\"\">";
+ u->inOsisRef = true;
+ }
+ else if (tag.isEndTag() && u->inOsisRef) {
+ buf += "</a>}";
+ u->inOsisRef = false;
+ }
+ }
+
+
+ else {
+ return false; // we still didn't handle token
+ }
+
+ }
+ return true;
+}
+
+
+SWORD_NAMESPACE_END
+