summaryrefslogtreecommitdiff
path: root/src/modules/filters/osisglosses.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/filters/osisglosses.cpp')
-rw-r--r--src/modules/filters/osisglosses.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/modules/filters/osisglosses.cpp b/src/modules/filters/osisglosses.cpp
new file mode 100644
index 0000000..d232acc
--- /dev/null
+++ b/src/modules/filters/osisglosses.cpp
@@ -0,0 +1,99 @@
+/******************************************************************************
+ *
+ * osisglosses.cpp - SWFilter descendant to hide or show glosses
+ * in an OSIS module
+ *
+ * $Id: osisglosses.cpp 2980 2013-09-14 21:51:47Z scribe $
+ *
+ * Copyright 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 <osisglosses.h>
+#include <utilxml.h>
+
+
+SWORD_NAMESPACE_START
+
+namespace {
+
+ static const char oName[] = "Glosses";
+ static const char oTip[] = "Toggles Glosses On and Off if they exist";
+
+ static const StringList *oValues() {
+ static const SWBuf choices[3] = {"Off", "On", ""};
+ static const StringList oVals(&choices[0], &choices[2]);
+ return &oVals;
+ }
+}
+
+
+OSISGlosses::OSISGlosses() : SWOptionFilter(oName, oTip, oValues()) {
+}
+
+
+OSISGlosses::~OSISGlosses() {
+}
+
+
+char OSISGlosses::processText(SWBuf &text, const SWKey *key, const SWModule *module) {
+ SWBuf token;
+ bool intoken = false;
+
+ const SWBuf orig = text;
+ const char * from = orig.c_str();
+
+ if (!option) {
+ for (text = ""; *from; ++from) {
+ if (*from == '<') {
+ intoken = true;
+ token = "";
+ continue;
+ }
+ if (*from == '>') { // process tokens
+ intoken = false;
+ if (token.startsWith("w ")) { // Word
+ XMLTag wtag(token);
+ const char *l = wtag.getAttribute("gloss");
+ if (l) {
+ wtag.setAttribute("gloss", 0);
+ token = wtag;
+ token.trim();
+ // drop <>
+ token << 1;
+ token--;
+ }
+ }
+
+ // keep token in text
+ text.append('<');
+ text.append(token);
+ text.append('>');
+
+ continue;
+ }
+ if (intoken) {
+ token += *from;
+ }
+ else {
+ text.append(*from);
+ }
+ }
+ }
+ return 0;
+}
+
+SWORD_NAMESPACE_END