[sword-svn] r1891 - in trunk: . include src/modules/filters
scribe at crosswire.org
scribe at crosswire.org
Tue Jan 31 14:02:13 MST 2006
Author: scribe
Date: 2006-01-31 14:00:41 -0700 (Tue, 31 Jan 2006)
New Revision: 1891
Added:
trunk/include/osisvariants.h
trunk/src/modules/filters/osisvariants.cpp
Modified:
trunk/ChangeLog
trunk/src/modules/filters/Makefile.am
Log:
Added support for osis variants
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-01-29 04:14:04 UTC (rev 1890)
+++ trunk/ChangeLog 2006-01-31 21:00:41 UTC (rev 1891)
@@ -1,6 +1,9 @@
API ChangeLog (see the ChangeLog in each 'apps' directory for
app specific changes
+31-Jan-2005 Troy A. Griffitts <scribe at crosswire.org>
+ Added support for OSIS variants
+
28-Nov-2005 Troy A. Griffitts <scribe at crosswire.org>
Fixed ICUStringMgr toUpper method
Added: trunk/include/osisvariants.h
===================================================================
--- trunk/include/osisvariants.h 2006-01-29 04:14:04 UTC (rev 1890)
+++ trunk/include/osisvariants.h 2006-01-31 21:00:41 UTC (rev 1891)
@@ -0,0 +1,54 @@
+/******************************************************************************
+ *
+ * $Id: osisvariants.h 1688 2005-01-01 04:42:26Z scribe $
+ *
+ * Copyright 2001 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.
+ *
+ */
+
+#ifndef OSISVARIANTS_H
+#define OSISVARIANTS_H
+
+#include <swoptfilter.h>
+#include <swmodule.h>
+
+SWORD_NAMESPACE_START
+
+/** This Filter shows/hides textual variants
+ */
+class SWDLLEXPORT OSISVariants : public SWOptionFilter {
+ char option;
+
+ static const char primary[];
+ static const char secondary[];
+ static const char all[];
+
+ static const char optName[];
+ static const char optTip[];
+ StringList options;
+
+public:
+ OSISVariants();
+ virtual ~OSISVariants();
+ virtual char processText(SWBuf &text, const SWKey *key = 0, const SWModule *module = 0);
+ virtual const char *getOptionName() { return optName; }
+ virtual const char *getOptionTip() { return optTip; }
+ virtual void setOptionValue(const char *ival);
+ virtual const char *getOptionValue();
+ virtual StringList getOptionValues() { return options; }
+};
+
+SWORD_NAMESPACE_END
+#endif
Modified: trunk/src/modules/filters/Makefile.am
===================================================================
--- trunk/src/modules/filters/Makefile.am 2006-01-29 04:14:04 UTC (rev 1890)
+++ trunk/src/modules/filters/Makefile.am 2006-01-31 21:00:41 UTC (rev 1891)
@@ -46,6 +46,7 @@
OSISFIL += $(filtersdir)/osislemma.cpp
OSISFIL += $(filtersdir)/osisredletterwords.cpp
OSISFIL += $(filtersdir)/osisscripref.cpp
+OSISFIL += $(filtersdir)/osisvariants.cpp
OSISFIL += $(filtersdir)/osiswordjs.cpp
OSISFIL += $(filtersdir)/osismorphsegmentation.cpp
Added: trunk/src/modules/filters/osisvariants.cpp
===================================================================
--- trunk/src/modules/filters/osisvariants.cpp 2006-01-29 04:14:04 UTC (rev 1890)
+++ trunk/src/modules/filters/osisvariants.cpp 2006-01-31 21:00:41 UTC (rev 1891)
@@ -0,0 +1,119 @@
+/******************************************************************************
+ *
+ * osisvariants - SWFilter descendant to hide or show textual variants
+ * in an OSIS module.
+ */
+
+
+#include <stdlib.h>
+#include <osisvariants.h>
+#include <utilstr.h>
+#include <utilxml.h>
+
+SWORD_NAMESPACE_START
+
+const char OSISVariants::primary[] = "Primary Reading";
+const char OSISVariants::secondary[] = "Secondary Reading";
+const char OSISVariants::all[] = "All Readings";
+
+const char OSISVariants::optName[] = "Textual Variants";
+const char OSISVariants::optTip[] = "Switch between Textual Variants modes";
+
+
+OSISVariants::OSISVariants() {
+ option = false;
+ options.push_back(primary);
+ options.push_back(secondary);
+ options.push_back(all);
+}
+
+
+OSISVariants::~OSISVariants() {
+}
+
+void OSISVariants::setOptionValue(const char *ival)
+{
+ if (!stricmp(ival, primary)) option = 0;
+ else if (!stricmp(ival, secondary)) option = 1;
+ else option = 2;
+}
+
+const char *OSISVariants::getOptionValue()
+{
+ if (option == 0) {
+ return primary;
+ }
+ else if (option == 1) {
+ return secondary;
+ }
+ else {
+ return all;
+ }
+}
+
+char OSISVariants::processText(SWBuf &text, const SWKey *key, const SWModule *module)
+{
+ if (option == 0 || option == 1) { //we want primary or variant only
+ bool intoken = false;
+ bool hide = false;
+ bool invar = false;
+
+ SWBuf token;
+ SWBuf orig = text;
+ const char *from = orig.c_str();
+
+ //we use a fixed comparision string to make sure the loop is as fast as the original two blocks with almost the same code
+ const char* variantCompareString = (option == 0) ? "div type=\"variant\" class=\"1\"" : "div type=\"variant\" class=\"2\"";
+
+ for (text = ""; *from; from++) {
+ if (*from == '<') {
+ intoken = true;
+ token = "";
+ continue;
+ }
+ else if (*from == '>') { // process tokens
+ intoken = false;
+
+ if (!strncmp(token.c_str(), "seg ", 4)) { //only one of the variants
+ invar = true;
+ hide = true;
+ continue;
+ }
+ if (!strncmp(token.c_str(), "div type=\"variant\"", 18)) {
+ invar = true;
+ continue;
+ }
+ if (!strncmp(token.c_str(), "/div", 4)) {
+ hide = false;
+ if (invar) {
+ invar = false;
+ continue;
+ }
+ }
+ if (!hide) {
+ text += '<';
+ text.append(token);
+ text += '>';
+ }
+
+ continue;
+ }
+ if (intoken) {
+ token += *from;
+ }
+ else if (!hide) {
+ text += *from;
+ }
+ }
+
+ }
+
+ return 0;
+}
+
+
+
+
+
+
+SWORD_NAMESPACE_END
More information about the sword-cvs
mailing list