[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